diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h
index 213127e64c5e7bfe2b3d4c9d1154c11d374f9552..4b54277ddd405eb619191895065af9bb3b780063 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h
@@ -6,6 +6,8 @@
 #include "Kernel/Utilities/KernelGroup.h"
 #include "PreProcessor/PreProcessorType.h"
 
+#include <helper_cuda.h>
+
 class Kernel
 {
 public:
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 3722743ee56adbf9555c1423e8a28fc5cbc1e60a..7f95a01edbf982e2b0fd0ab49ce8d5e634f5517f 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -7,13 +7,12 @@
 //////////////////////////////////////////////////////////////////////////
 #include "Parameter.h"
 
-//#include <cuda_runtime.h>
-//#include <helper_cuda.h>
-//
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 
+#include <curand_kernel.h>
+
 
 #include "Core/Input/ConfigData/ConfigData.h"
 #include "Core/StringUtilities/StringUtil.h"
@@ -26,19 +25,11 @@
 #include <basics/config/ConfigurationFile.h>
 
 
-SPtr<Parameter> Parameter::make()
-{
-    return SPtr<Parameter>(new Parameter());
-}
-
 SPtr<Parameter> Parameter::make(SPtr<ConfigData> configData, vf::gpu::Communicator* comm)
 {
 	return SPtr<Parameter>(new Parameter(configData, comm));
 }
 
-Parameter::Parameter()
-{
-}
 
 Parameter::Parameter(const vf::gpu::Communicator& comm)
 {
@@ -46,36 +37,537 @@ Parameter::Parameter(const vf::gpu::Communicator& comm)
     ic.myid = comm.getPID();
 }
 
+
 Parameter::Parameter(const vf::basics::ConfigurationFile& configData,
                      const vf::gpu::Communicator& comm) :
                      Parameter(comm)
 
 {
     if (configData.contains("NumberOfDevices"))
-        ic.maxdev = configData.getValue<int>("NumberOfDevices");
+        this->setMaxDev(configData.getValue<int>("NumberOfDevices"));
     else
-        ic.maxdev = 1;
+        this->setMaxDev(1);
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("Devices"))
-        ic.devices = configData.getVector<uint>("Devices");
+        this->setDevices(configData.getVector<uint>("Devices"));
 	else
-        ic.devices = std::vector<uint>{(uint)0};
+        this->setDevices(std::vector<uint>{(uint)0});
     //////////////////////////////////////////////////////////////////////////
 	if (configData.contains("Path"))
-		ic.oPath = configData.getValue<std::string>("Path");
+		this->setOutputPath(configData.getValue<std::string>("Path"));
 	else
-		ic.oPath = "C:/Output/"; //TODO: Shouldnt we throw an exception here?
+		this->setOutputPath("C:/Output/"); //TODO: Shouldnt we throw an exception here?
     //////////////////////////////////////////////////////////////////////////
 	if (configData.contains("Prefix"))
-		ic.oPrefix = configData.getValue<std::string>("Prefix");
+		this->setOutputPrefix(configData.getValue<std::string>("Prefix"));
 	else
-		ic.oPrefix = "MyFile";
+		this->setOutputPrefix("MyFile");
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("WriteGrid"))
-		ic.printFiles = configData.getValue<bool>("WriteGrid");
+		this->setPrintFiles(configData.getValue<bool>("WriteGrid"));
 	else
-		ic.printFiles = false;
+		this->setPrintFiles(false);
     //////////////////////////////////////////////////////////////////////////
+	// if (configData->isGeometryValuesInConfigFile())
+	// 	this->setGeometryValues(configData->getGeometryValues());
+	// else
+	// 	this->setGeometryValues(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalc2ndOrderMomentsInConfigFile())
+	// 	this->setCalc2ndOrderMoments(configData->getCalc2ndOrderMoments());
+	// else
+	// 	this->setCalc2ndOrderMoments(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalc3rdOrderMomentsInConfigFile())
+	// 	this->setCalc3rdOrderMoments(configData->getCalc3rdOrderMoments());
+	// else
+	// 	this->setCalc3rdOrderMoments(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalcHighOrderMomentsInConfigFile())
+	// 	this->setCalcHighOrderMoments(configData->getCalcHighOrderMoments());
+	// else
+	// 	this->setCalcHighOrderMoments(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalcMedianInConfigFile())
+	// 	this->setCalcMedian(configData->getCalcMedian());
+	// else
+	// 	this->setCalcMedian(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalcDragLiftInConfigFile())
+	// 	this->setCalcDragLift(configData->getCalcDragLift());
+	// else
+	// 	this->setCalcDragLift(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalcCpInConfigFile())
+	// 	this->setCalcCp(configData->getCalcCp());
+	// else
+	// 	this->setCalcCp(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isWriteVeloASCIIfilesInConfigFile())
+	// 	this->setWriteVeloASCIIfiles(configData->getWriteVeloASCIIfiles());
+	// else
+	// 	this->setWriteVeloASCIIfiles(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isCalcPlaneConcInConfigFile())
+	// 	this->setCalcPlaneConc(configData->getCalcPlaneConc());
+	// else
+	// 	this->setCalcPlaneConc(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isConcFileInConfigFile())
+	// 	this->setConcFile(configData->getConcFile());
+	// else
+	// 	this->setConcFile(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isStreetVelocityFileInConfigFile())
+	// 	this->setStreetVelocityFile(configData->getStreetVelocityFile());
+	// else
+	// 	this->setStreetVelocityFile(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isUseMeasurePointsInConfigFile())
+	// 	this->setUseMeasurePoints(configData->getUseMeasurePoints());
+	// else
+	// 	this->setUseMeasurePoints(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isUseWaleInConfigFile())
+	// 	this->setUseWale(configData->getUseWale());
+	// else
+	// 	this->setUseWale(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isUseInitNeqInConfigFile())
+	// 	this->setUseInitNeq(configData->getUseInitNeq());
+	// else
+	// 	this->setUseInitNeq(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isSimulatePorousMediaInConfigFile())
+	// 	this->setSimulatePorousMedia(configData->getSimulatePorousMedia());
+	// else
+	// 	this->setSimulatePorousMedia(false);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isD3QxxInConfigFile())
+	// 	this->setD3Qxx(configData->getD3Qxx());
+	// else
+	// 	this->setD3Qxx((int)27);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isTEndInConfigFile())
+	// 	this->setTEnd(configData->getTEnd());
+	// else
+	// 	this->setTEnd((uint)10);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isTOutInConfigFile())
+	// 	this->setTOut(configData->getTOut());
+	// else
+	// 	this->setTOut((uint)1);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isTStartOutInConfigFile())
+	// 	this->setTStartOut(configData->getTStartOut());
+	// else
+	// 	this->setTStartOut((uint)0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isTimeCalcMedStartInConfigFile())
+	// 	this->setTimeCalcMedStart(configData->getTimeCalcMedStart());
+	// else
+	// 	this->setTimeCalcMedStart((int)0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isTimeCalcMedEndInConfigFile())
+	// 	this->setTimeCalcMedEnd(configData->getTimeCalcMedEnd());
+	// else
+	// 	this->setTimeCalcMedEnd((int)10);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isPressInIDInConfigFile())
+	// 	this->setPressInID(configData->getPressInID());
+	// else
+	// 	this->setPressInID((uint)0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isPressOutIDInConfigFile())
+	// 	this->setPressOutID(configData->getPressOutID());
+	// else
+	// 	this->setPressOutID((uint)0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isPressInZInConfigFile())
+	// 	this->setPressInZ(configData->getPressInZ());
+	// else
+	// 	this->setPressInZ((uint)1);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isPressOutZInConfigFile())
+	// 	this->setPressOutZ(configData->getPressOutZ());
+	// else
+	// 	this->setPressOutZ((uint)2);
+	// //////////////////////////////////////////////////////////////////////////
+	// //second component
+	// if (configData->isDiffOnInConfigFile())
+	// 	this->setDiffOn(configData->getDiffOn());
+	// else
+	// 	this->setDiffOn(false);
+
+	// if (configData->isDiffModInConfigFile())
+	// 	this->setDiffMod(configData->getDiffMod());
+	// else
+	// 	this->setDiffMod((int)27);
+
+	// if (configData->isDiffusivityInConfigFile())
+	// 	this->setDiffusivity(configData->getDiffusivity());
+	// else
+	// 	this->setDiffusivity((real)0.001);
+
+	// if (configData->isTemperatureInitInConfigFile())
+	// 	this->setTemperatureInit(configData->getTemperatureInit());
+	// else
+	// 	this->setTemperatureInit((real)0.0);
+
+	// if (configData->isTemperatureBCInConfigFile())
+	// 	this->setTemperatureBC(configData->getTemperatureBC());
+	// else
+	// 	this->setTemperatureBC((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isViscosityInConfigFile())
+	// 	this->setViscosity(configData->getViscosity());
+	// else
+	// 	this->setViscosity((real)0.001);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isVelocityInConfigFile())
+	// 	this->setVelocity(configData->getVelocity());
+	// else
+	// 	this->setVelocity((real)0.01);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isViscosityRatioInConfigFile())
+	// 	this->setViscosityRatio(configData->getViscosityRatio());
+	// else
+	// 	this->setViscosityRatio((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isVelocityRatioInConfigFile())
+	// 	this->setVelocityRatio(configData->getVelocityRatio());
+	// else
+	// 	this->setVelocityRatio((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isDensityRatioInConfigFile())
+	// 	this->setDensityRatio(configData->getDensityRatio());
+	// else
+	// 	this->setDensityRatio((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isPressRatioInConfigFile())
+	// 	this->setPressRatio(configData->getPressRatio());
+	// else
+	// 	this->setPressRatio((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isRealXInConfigFile())
+	// 	this->setRealX(configData->getRealX());
+	// else
+	// 	this->setRealX((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isRealYInConfigFile())
+	// 	this->setRealY(configData->getRealY());
+	// else
+	// 	this->setRealY((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isFactorPressBCInConfigFile())
+	// 	this->setFactorPressBC(configData->getFactorPressBC());
+	// else
+	// 	this->setFactorPressBC((real)1.0);
+	// //////////////////////////////////////////////////////////////////////////
+	// //read Geometry (STL)
+	// if (configData->isReadGeoInConfigFile())
+	// 	this->setReadGeo(configData->getReadGeo());
+	// else
+	// 	this->setReadGeo(false);
+
+	// if (configData->isGeometryFileCInConfigFile())
+	// 	this->setGeometryFileC(configData->getGeometryFileC());
+	// else if (this->getReadGeo())
+	// {
+	// 	std::cout << "GeometryFileC has to be defined!" << std::endl;
+	// 	exit(1);
+	// }
+	// else
+	// 	this->setGeometryFileC("");
+
+	// if (configData->isGeometryFileMInConfigFile())
+	// 	this->setGeometryFileM(configData->getGeometryFileM());
+	// else if (this->getReadGeo())
+	// {
+	// 	std::cout << "GeometryFileM has to be defined!" << std::endl;
+	// 	exit(1);
+	// }
+	// else
+	// 	this->setGeometryFileM("");
+
+	// if (configData->isGeometryFileFInConfigFile())
+	// 	this->setGeometryFileF(configData->getGeometryFileF());
+	// else if (this->getReadGeo())
+	// {
+	// 	std::cout << "GeometryFileF has to be defined!" << std::endl;
+	// 	exit(1);
+	// }
+	// else
+	// 	this->setGeometryFileF("");
+	// //////////////////////////////////////////////////////////////////////////
+	// if (configData->isClockCycleForMPInConfigFile())
+	// 	this->setclockCycleForMP(configData->getClockCycleForMP());
+	// else
+	// 	this->setclockCycleForMP((real)1.0);
+
+	// if (configData->isTimestepForMPInConfigFile())
+	// 	this->settimestepForMP(configData->getTimestepForMP());
+	// else
+	// 	this->settimestepForMP((uint)10);
+	// //////////////////////////////////////////////////////////////////////////
+	// std::string gridPath = "";
+	// if (configData->isGridPathInConfigFile())
+	// 	gridPath = configData->getGridPath();
+	// else
+	// {
+	// 	std::cout << "GridPath has to be defined!" << std::endl;
+	// 	exit(1);
+	// }
+
+	// if (this->getNumprocs() == 1)
+	// 	gridPath += "/";
+	// else
+	// 	gridPath += "/" + StringUtil::toString(this->getMyID()) + "/";
+	// //////////////////////////////////////////////////////////////////////////
+	// this->setFName(this->getOutputPath() + "/" + this->getOutputPrefix());
+	// //////////////////////////////////////////////////////////////////////////
+	// this->setgeoVec(				gridPath + "geoVec.dat");
+	// this->setcoordX(				gridPath + "coordX.dat");
+	// this->setcoordY(				gridPath + "coordY.dat");
+	// this->setcoordZ(				gridPath + "coordZ.dat");
+	// this->setneighborX(				gridPath + "neighborX.dat");
+	// this->setneighborY(				gridPath + "neighborY.dat");
+	// this->setneighborZ(				gridPath + "neighborZ.dat");
+	// this->setneighborWSB(			gridPath + "neighborWSB.dat");
+	// this->setscaleCFC(				gridPath + "scaleCFC.dat");
+	// this->setscaleCFF(				gridPath + "scaleCFF.dat");
+	// this->setscaleFCC(				gridPath + "scaleFCC.dat");
+	// this->setscaleFCF(				gridPath + "scaleFCF.dat");
+	// this->setscaleOffsetCF(			gridPath + "offsetVecCF.dat");
+	// this->setscaleOffsetFC(			gridPath + "offsetVecFC.dat");
+	// this->setgeomBoundaryBcQs(		gridPath + "geomBoundaryQs.dat");
+	// this->setgeomBoundaryBcValues(	gridPath + "geomBoundaryValues.dat");
+	// this->setinletBcQs(				gridPath + "inletBoundaryQs.dat");
+	// this->setinletBcValues(			gridPath + "inletBoundaryValues.dat");
+	// this->setoutletBcQs(			gridPath + "outletBoundaryQs.dat");
+	// this->setoutletBcValues(		gridPath + "outletBoundaryValues.dat");
+	// this->settopBcQs(				gridPath + "topBoundaryQs.dat");
+	// this->settopBcValues(			gridPath + "topBoundaryValues.dat");
+	// this->setbottomBcQs(			gridPath + "bottomBoundaryQs.dat");
+	// this->setbottomBcValues(		gridPath + "bottomBoundaryValues.dat");
+	// this->setfrontBcQs(				gridPath + "frontBoundaryQs.dat");
+	// this->setfrontBcValues(			gridPath + "frontBoundaryValues.dat");
+	// this->setbackBcQs(				gridPath + "backBoundaryQs.dat");
+	// this->setbackBcValues(			gridPath + "backBoundaryValues.dat");
+	// this->setnumberNodes(			gridPath + "numberNodes.dat");
+	// this->setLBMvsSI(				gridPath + "LBMvsSI.dat");
+	// this->setmeasurePoints(			gridPath + "measurePoints.dat");
+	// this->setpropellerValues(		gridPath + "propellerValues.dat");
+	// this->setcpTop(					gridPath + "cpTop.dat");
+	// this->setcpBottom(				gridPath + "cpBottom.dat");
+	// this->setcpBottom2(				gridPath + "cpBottom2.dat");
+	// this->setConcentration(			gridPath + "conc.dat");
+	// this->setStreetVelocity(		gridPath + "streetVector.dat");
+	// //////////////////////////////////////////////////////////////////////////
+	// //Normals - Geometry
+	// this->setgeomBoundaryNormalX(gridPath + "geomBoundaryNormalX.dat");
+	// this->setgeomBoundaryNormalY(gridPath + "geomBoundaryNormalY.dat");
+	// this->setgeomBoundaryNormalZ(gridPath + "geomBoundaryNormalZ.dat");
+	// //Normals - Inlet
+	// this->setInflowBoundaryNormalX(gridPath + "inletBoundaryNormalX.dat");
+	// this->setInflowBoundaryNormalY(gridPath + "inletBoundaryNormalY.dat");
+	// this->setInflowBoundaryNormalZ(gridPath + "inletBoundaryNormalZ.dat");
+	// //Normals - Outlet
+	// this->setOutflowBoundaryNormalX(gridPath + "outletBoundaryNormalX.dat");
+	// this->setOutflowBoundaryNormalY(gridPath + "outletBoundaryNormalY.dat");
+	// this->setOutflowBoundaryNormalZ(gridPath + "outletBoundaryNormalZ.dat");
+	// //////////////////////////////////////////////////////////////////////////
+	// //Forcing
+	// real forcingX = 0.0;
+	// real forcingY = 0.0;
+	// real forcingZ = 0.0;
+
+	// if (configData->isForcingXInConfigFile())
+	// 	forcingX = configData->getForcingX();
+	// if (configData->isForcingYInConfigFile())
+	// 	forcingY = configData->getForcingY();
+	// if (configData->isForcingZInConfigFile())
+	// 	forcingZ = configData->getForcingZ();
+
+	// this->setForcing(forcingX, forcingY, forcingZ);
+	// //////////////////////////////////////////////////////////////////////////
+	// //quadricLimiters
+	// real quadricLimiterP = (real)0.01;
+	// real quadricLimiterM = (real)0.01;
+	// real quadricLimiterD = (real)0.01;
+
+	// if (configData->isQuadricLimiterPInConfigFile())
+	// 	quadricLimiterP = configData->getQuadricLimiterP();
+	// if (configData->isQuadricLimiterMInConfigFile())
+	// 	quadricLimiterM = configData->getQuadricLimiterM();
+	// if (configData->isQuadricLimiterDInConfigFile())
+	// 	quadricLimiterD = configData->getQuadricLimiterD();
+
+	// this->setQuadricLimiters(quadricLimiterP, quadricLimiterM, quadricLimiterD);
+	// //////////////////////////////////////////////////////////////////////////
+	// //Particles
+	// if (configData->isCalcParticlesInConfigFile())
+	// 	this->setCalcParticles(configData->getCalcParticles());
+	// else
+	// 	this->setCalcParticles(false);
+
+	// if (configData->isParticleBasicLevelInConfigFile())
+	// 	this->setParticleBasicLevel(configData->getParticleBasicLevel());
+	// else
+	// 	this->setParticleBasicLevel((int)0);
+
+	// if (configData->isParticleInitLevelInConfigFile())
+	// 	this->setParticleInitLevel(configData->getParticleInitLevel());
+	// else
+	// 	this->setParticleInitLevel((int)0);
+
+	// if (configData->isNumberOfParticlesInConfigFile())
+	// 	this->setNumberOfParticles(configData->getNumberOfParticles());
+	// else
+	// 	this->setNumberOfParticles((int)0);
+
+	// if (configData->isStartXHotWallInConfigFile())
+	// 	this->setStartXHotWall(configData->getStartXHotWall());
+	// else
+	// 	this->setStartXHotWall((real)0);
+
+	// if (configData->isEndXHotWallInConfigFile())
+	// 	this->setEndXHotWall(configData->getEndXHotWall());
+	// else
+	// 	this->setEndXHotWall((real)0);
+	// //////////////////////////////////////////////////////////////////////////
+	// //for Multi GPU
+	// if (this->getNumprocs() > 1)
+	// {
+	// 	//////////////////////////////////////////////////////////////////////////
+	// 	//3D domain decomposition
+	// 	std::vector<std::string> sendProcNeighborsX, sendProcNeighborsY, sendProcNeighborsZ;
+	// 	std::vector<std::string> recvProcNeighborsX, recvProcNeighborsY, recvProcNeighborsZ;
+	// 	for (int i = 0; i < this->getNumprocs(); i++)
+	// 	{
+	// 		sendProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xs.dat");
+	// 		sendProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Ys.dat");
+	// 		sendProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zs.dat");
+	// 		recvProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xr.dat");
+	// 		recvProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Yr.dat");
+	// 		recvProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zr.dat");
+	// 	}
+	// 	this->setPossNeighborFilesX(sendProcNeighborsX, "send");
+	// 	this->setPossNeighborFilesY(sendProcNeighborsY, "send");
+	// 	this->setPossNeighborFilesZ(sendProcNeighborsZ, "send");
+	// 	this->setPossNeighborFilesX(recvProcNeighborsX, "recv");
+	// 	this->setPossNeighborFilesY(recvProcNeighborsY, "recv");
+	// 	this->setPossNeighborFilesZ(recvProcNeighborsZ, "recv");
+	// }
+	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// //Restart
+	// if (configData->isTimeDoCheckPointInConfigFile())
+	// 	this->setTimeDoCheckPoint(configData->getTimeDoCheckPoint());
+	// else
+	// 	this->setTimeDoCheckPoint((uint)0);
+
+	// if (configData->isTimeDoRestartInConfigFile())
+	// 	this->setTimeDoRestart(configData->getTimeDoRestart());
+	// else
+	// 	this->setTimeDoRestart((uint)0);
+
+	// if (configData->isDoCheckPointInConfigFile())
+	// 	this->setDoCheckPoint(configData->getDoCheckPoint());
+	// else
+	// 	this->setDoCheckPoint(false);
+
+	// if (configData->isDoRestartInConfigFile())
+	// 	this->setDoRestart(configData->getDoRestart());
+	// else
+	// 	this->setDoRestart(false);
+	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// if (configData->isMaxLevelInConfigFile())
+	// 	this->setMaxLevel(configData->getMaxLevel());
+	// else
+	// 	this->setMaxLevel((int)1);
+
+	// if (configData->isGridXInConfigFile())
+	// 	this->setGridX(configData->getGridX());
+	// else
+	// 	this->setGridX(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isGridYInConfigFile())
+	// 	this->setGridY(configData->getGridY());
+	// else
+	// 	this->setGridY(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isGridZInConfigFile())
+	// 	this->setGridZ(configData->getGridZ());
+	// else
+	// 	this->setGridZ(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isDistXInConfigFile())
+	// 	this->setDistX(configData->getDistX());
+	// else
+	// 	this->setDistX(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isDistYInConfigFile())
+	// 	this->setDistY(configData->getDistY());
+	// else
+	// 	this->setDistY(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isDistZInConfigFile())
+	// 	this->setDistZ(configData->getDistZ());
+	// else
+	// 	this->setDistZ(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	// if (configData->isNeedInterfaceInConfigFile())
+	// 	this->setNeedInterface(configData->getNeedInterface());
+	// else
+	// 	this->setNeedInterface(std::vector<bool>(6, true));
+
+	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// // Kernel
+	// if (configData->isMainKernelInConfigFile())
+	// 	this->setMainKernel(configData->getMainKernel());
+	// else
+	// 	this->setMainKernel("CumulantK15Comp");
+
+	// if (configData->isMultiKernelOnInConfigFile())
+	// 	this->setMultiKernelOn(configData->getMultiKernelOn());
+	// else
+	// 	this->setMultiKernelOn(false);
+
+	// if (configData->isMultiKernelLevelInConfigFile())
+	// 	this->setMultiKernelLevel(configData->getMultiKernelLevel());
+	// else if (this->getMultiKernelOn())
+	// {
+	// 	std::vector<int> tmp;
+	// 	for (int i = 0; i < this->getMaxLevel()+1; i++)
+	// 	{
+	// 		tmp.push_back(i);
+	// 	}
+	// 	this->setMultiKernelLevel(tmp);
+	// } 
+	// else
+	// 	this->setMultiKernelLevel(std::vector<int>(0));
+
+	// if (configData->isMultiKernelNameInConfigFile()) {
+    //     std::vector<std::string> kernels;
+	// 	for (std::size_t i = 0; i < configData->getMultiKernelName().size(); i++) {
+	// 		kernels.push_back(configData->getMultiKernelName().at(i));
+	// 	}
+	// 	this->setMultiKernel(kernels);
+	// }
+	// else if (this->getMultiKernelOn())
+	// {
+    //     std::vector<std::string> tmp;
+	// 	for (int i = 0; i < this->getMaxLevel()+1; i++)
+	// 	{
+	// 		tmp.push_back("CumulantK15Comp");
+	// 	}
+	// 	this->setMultiKernel(tmp);
+	// }
+	// else {
+    //     std::vector<std::string> tmp;
+	// 	this->setMultiKernel(tmp);
+	// }		
+	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 }
 
@@ -611,16 +1103,7 @@ Parameter::Parameter(SPtr<ConfigData> configData, vf::gpu::Communicator* comm)
 	}		
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 }
-Parameter::~Parameter()
-{
-}
-Parameter* Parameter::instanz = 0;
-Parameter* Parameter::getInstanz()
-{
-	if( instanz == 0 )
-		instanz = new Parameter();
-	return instanz;
-}
+
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //init-method
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index e3ddb717c3e82769d2094c6103d7f16260133594..e9aef2b1c14a172f6a8d28c489d6ad70c6439085 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -13,19 +13,15 @@
 #include "LBM/LB.h"
 #include "LBM/D3Q27.h"
 #include "Calculation/PorousMedia.h"
-//#include "Output/LogWriter.hpp"
 
-#include <cuda_runtime.h>
-#include <helper_cuda.h>
-//random numbers
-#include <curand.h>
-#include <curand_kernel.h>
 #include "PointerDefinitions.h"
 
 #include "VirtualFluids_GPU_export.h"
 
 class ConfigData;
 
+struct curandStateXORWOW;
+typedef struct curandStateXORWOW curandState;
 namespace vf
 {
 namespace gpu
@@ -298,15 +294,10 @@ class VIRTUALFLUIDS_GPU_EXPORT Parameter
 public:
     Parameter(const vf::gpu::Communicator& comm);
     Parameter(const vf::basics::ConfigurationFile& configData, const vf::gpu::Communicator& comm);
-	////////////////////////////////////////////////////////////////////////////
-	////really ugly...should be in private...
-	//Parameter();
-	////////////////////////////////////////////////////////////////////////////
-    static SPtr<Parameter> make();
-	static SPtr<Parameter> make(SPtr<ConfigData> configData, vf::gpu::Communicator* comm);
+	Parameter(SPtr<ConfigData> configData, vf::gpu::Communicator* comm);
 
+	static SPtr<Parameter> make(SPtr<ConfigData> configData, vf::gpu::Communicator* comm);
 
-	static Parameter* getInstanz();
 	ParameterStruct* getParH(int level);
 	ParameterStruct* getParD(int level);
 	void initParameter();
@@ -734,12 +725,10 @@ public:
 
 	std::string getADKernel();
 
-	~Parameter();
-
-    public:
-        //Forcing///////////////
-        real *forcingH, *forcingD;
-        double hostForcing[3];
+public:
+	//Forcing///////////////
+	real *forcingH, *forcingD;
+	double hostForcing[3];
 
     //////////////////////////////////////////////////////////////////////////
     // limiters
@@ -753,7 +742,6 @@ public:
 
 protected:
 private:
-	static Parameter* instanz;
 	bool compOn;
 	bool diffOn;
 	bool isF3;
@@ -810,9 +798,6 @@ private:
 	std::vector<ParameterStruct*> parD;
 	//LogWriter output;
 
-	Parameter();
-	Parameter(SPtr<ConfigData> configData, vf::gpu::Communicator* comm);
-	Parameter(const Parameter&);
 	void initInterfaceParameter(int level);
 	real TrafoXtoWorld(int CoordX, int level);
 	real TrafoYtoWorld(int CoordY, int level);