diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/VirtualFluids_GPU/LBM/LB.h
index 52f932c7b751b0d31e9bf733a4f3b5c439a6755f..1a2a06d299d28a27a4a373c6d6357efe1cfc0f7e 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/LB.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/LB.h
@@ -44,31 +44,42 @@
 #define INTERFACE_T 4
 #define INTERFACE_B 5
 
-//////////////////////////////////////////////////////////////////////////
-// precision                             (change between double and float)
-//
+
 #include "Core/DataTypes.h"
-//////////////////////////////////////////////////////////////////////////
 
 #include <string>
 #include <vector>
 
-// Initial condition
-typedef struct InitCond{
+
+struct InitCondition
+{
    real Re;
-   real factorPressBC;
-   real Diffusivity, Temp, TempBC;
-   real RealX, RealY;
-   int numprocs, myid, maxdev;
-   unsigned int tend, tout, tStartOut, tCalcMedStart, tCalcMedEnd, tDoCheckPoint, tDoRestart;
-   unsigned int PressInID, PressOutID;
-   unsigned int PressInZ, PressOutZ;
-   std::vector<uint> devices;
+   real factorPressBC {1.0};
+   real Diffusivity {0.001};
+   real Temp {0.0};
+   real TempBC {1.0};
+   real RealX {1.0};
+   real RealY {1.0};
+   int numprocs, myid;
+   int maxdev {1};
+   uint tDoCheckPoint {0};
+   uint tDoRestart {0};
+   uint tCalcMedStart {0};
+   uint tCalcMedEnd {10};
+   uint tend {10};
+   uint tout {1};
+   uint tStartOut {0};
+   uint PressInID {0};
+   uint PressOutID {0};
+   uint PressInZ {1};
+   uint PressOutZ {2};
+   std::vector<uint> devices {1, 0}; // one device with ID = 0
    std::vector<int> GridX, GridY, GridZ, DistX, DistY, DistZ;
    std::vector<real> scaleLBMtoSI, translateLBMtoSI;
    std::vector<real> minCoordX, minCoordY, minCoordZ, maxCoordX, maxCoordY, maxCoordZ;
    std::vector<bool> NeedInterface;
-   std::string fname, oPath, oPrefix;
+   std::string fname, oPath;
+   std::string oPrefix {"MyFile"};
    std::string geometryFileC, geometryFileM, geometryFileF;
    std::string kFull, geoFull, geoVec, coordX, coordY, coordZ, neighborX, neighborY, neighborZ, neighborWSB, scaleCFC, scaleCFF, scaleFCC, scaleFCF, scaleOffsetCF, scaleOffsetFC;
    std::string noSlipBcPos, noSlipBcQs, noSlipBcValue;
@@ -89,16 +100,31 @@ typedef struct InitCond{
    std::string cpTop, cpBottom, cpBottom2;
    std::string concentration, streetVelocity;
    std::string geomNormalX, geomNormalY, geomNormalZ, inflowNormalX, inflowNormalY, inflowNormalZ, outflowNormalX, outflowNormalY, outflowNormalZ;
-   unsigned int timeStepForMP;
-   real clockCycleForMP;
-   real vis, vis_ratio;
-   real u0, u0_ratio;
-   real delta_rho, delta_press;
-   bool  printFiles, readGeo, doRestart, doCheckPoint, isGeo, isProp, isCp, calcMedian, GeometryValues, isConc, is2ndOrderMoments, is3rdOrderMoments, isHighOrderMoments, isWale, isMeasurePoints, isInitNeq;
+   uint timeStepForMP {10};
+   real clockCycleForMP {1.0};
+   real vis {0.001};
+   real vis_ratio {1.0};
+   real u0 {0.01};
+   real u0_ratio {1.0};
+   real delta_rho {0.0};
+   real delta_press {1.0};
+   bool printFiles {false};
+   bool doRestart {false};
+   bool doCheckPoint {false};
+   bool readGeo, isGeo, isProp, isCp;
+   bool GeometryValues {false};
+   bool is2ndOrderMoments {false};
+   bool is3rdOrderMoments {false};
+   bool isHighOrderMoments {false};
+   bool calcMedian {false};
+   bool isConc {false};
+   bool isWale {false};
+   bool isMeasurePoints {false};
+   bool isInitNeq {false};
    bool isGeoNormal, isInflowNormal, isOutflowNormal;
-   bool simulatePorousMedia;
-   bool streetVelocityFile;
-} InitCondition;
+   bool simulatePorousMedia {false};
+   bool streetVelocityFile {false};
+};
 
 //Interface Cells
 typedef struct ICellCF{
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 7f95a01edbf982e2b0fd0ab49ce8d5e634f5517f..919204ff73762b400b3b90c067cd6a5eae3d9d8e 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -45,13 +45,9 @@ Parameter::Parameter(const vf::basics::ConfigurationFile& configData,
 {
     if (configData.contains("NumberOfDevices"))
         this->setMaxDev(configData.getValue<int>("NumberOfDevices"));
-    else
-        this->setMaxDev(1);
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("Devices"))
         this->setDevices(configData.getVector<uint>("Devices"));
-	else
-        this->setDevices(std::vector<uint>{(uint)0});
     //////////////////////////////////////////////////////////////////////////
 	if (configData.contains("Path"))
 		this->setOutputPath(configData.getValue<std::string>("Path"));
@@ -60,515 +56,381 @@ Parameter::Parameter(const vf::basics::ConfigurationFile& configData,
     //////////////////////////////////////////////////////////////////////////
 	if (configData.contains("Prefix"))
 		this->setOutputPrefix(configData.getValue<std::string>("Prefix"));
-	else
-		this->setOutputPrefix("MyFile");
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("WriteGrid"))
 		this->setPrintFiles(configData.getValue<bool>("WriteGrid"));
-	else
-		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);
+	if (configData.contains("GeometryValues"))
+		this->setGeometryValues(configData.getValue<bool>("GeometryValues"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calc2ndOrderMoments"))
+		this->setCalc2ndOrderMoments(configData.getValue<bool>("calc2ndOrderMoments"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calc3rdOrderMoments"))
+		this->setCalc3rdOrderMoments(configData.getValue<bool>("calc3rdOrderMoments"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calcHigherOrderMoments"))
+		this->setCalcHighOrderMoments(configData.getValue<bool>("calcHigherOrderMoments"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calcMedian"))
+		this->setCalcMedian(configData.getValue<bool>("calcMedian"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calcCp"))
+		this->calcCp = configData.getValue<bool>("calcCp");
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calcDrafLift"))
+		this->calcDragLift = configData.getValue<bool>("calcDrafLift");
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("writeVeloASCIIfiles"))
+		this->writeVeloASCII = configData.getValue<bool>("writeVeloASCIIfiles");
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("calcPlaneConc"))
+		this->calcPlaneConc = configData.getValue<bool>("calcPlaneConc");
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("UseConcFile"))
+		this->setConcFile(configData.getValue<bool>("UseConcFile"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("UseStreetVelocityFile"))
+		this->setStreetVelocityFile(configData.getValue<bool>("UseStreetVelocityFile"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("UseMeasurePoints"))
+		this->setUseMeasurePoints(configData.getValue<bool>("UseMeasurePoints"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("UseWale"))
+		this->setUseWale(configData.getValue<bool>("UseWale"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("UseInitNeq"))
+		this->setUseInitNeq(configData.getValue<bool>("UseInitNeq"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("SimulatePorousMedia"))
+		this->setSimulatePorousMedia(configData.getValue<bool>("SimulatePorousMedia"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("D3Qxx"))
+		this->setD3Qxx(configData.getValue<int>("D3Qxx"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TimeEnd"))
+		this->setTEnd(configData.getValue<int>("TimeEnd"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TimeOut"))
+		this->setTOut(configData.getValue<int>("TimeOut"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TimeStartOut"))
+		this->setTStartOut(configData.getValue<int>("TimeStartOut"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TimeStartCalcMedian"))
+		this->setTimeCalcMedStart(configData.getValue<int>("TimeStartCalcMedian"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TimeEndCalcMedian"))
+		this->setTimeCalcMedEnd(configData.getValue<int>("TimeEndCalcMedian"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("PressInID"))
+		this->setTOut(configData.getValue<int>("PressInID"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("PressOutID"))
+		this->setTStartOut(configData.getValue<int>("PressOutID"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("PressInZ"))
+		this->setTimeCalcMedStart(configData.getValue<int>("PressInZ"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("PressOutZ"))
+		this->setTimeCalcMedEnd(configData.getValue<int>("PressOutZ"));
+
 	// //////////////////////////////////////////////////////////////////////////
 	// //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.contains("DiffOn"))
+		this->setDiffOn(configData.getValue<bool>("DiffOn"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("DiffMod"))
+		this->setDiffMod(configData.getValue<int>("DiffMod"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Diffusivity"))
+		this->setDiffusivity(configData.getValue<real>("Diffusivity"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Temp"))
+		this->setTemperatureInit(configData.getValue<real>("Temp"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("TempBC"))
+		this->setTemperatureBC(configData.getValue<real>("TempBC"));
+
+
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Viscosity_LB"))
+		this->setViscosity(configData.getValue<real>("Viscosity_LB"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Velocity_LB"))
+		this->setVelocity(configData.getValue<real>("Velocity_LB"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Viscosity_Ratio_World_to_LB"))
+		this->setViscosityRatio(configData.getValue<real>("Viscosity_Ratio_World_to_LB"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("Velocity_Ratio_World_to_LB"))
+		this->setVelocityRatio(configData.getValue<real>("Velocity_Ratio_World_to_LB"));
 	// //////////////////////////////////////////////////////////////////////////
-	// if (configData->isFactorPressBCInConfigFile())
-	// 	this->setFactorPressBC(configData->getFactorPressBC());
-	// else
-	// 	this->setFactorPressBC((real)1.0);
+	if (configData.contains("Density_Ratio_World_to_LB"))
+		this->setDensityRatio(configData.getValue<real>("Density_Ratio_World_to_LB"));
+
+	if (configData.contains("Delta_Press"))
+		this->setPressRatio(configData.getValue<real>("Delta_Press"));
+
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("SliceRealX"))
+		this->setRealX(configData.getValue<real>("SliceRealX"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("SliceRealY"))
+		this->setRealY(configData.getValue<real>("SliceRealY"));
+	//////////////////////////////////////////////////////////////////////////
+	if (configData.contains("FactorPressBC"))
+		this->setFactorPressBC(configData.getValue<real>("FactorPressBC"));
 	// //////////////////////////////////////////////////////////////////////////
 	// //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");
+	if (configData.contains("ReadGeometry"))
+		this->setReadGeo(configData.getValue<bool>("ReadGeometry"));
+
+
+	if (configData.contains("GeometryC"))
+		this->setGeometryFileC(configData.getValue<std::string>("GeometryC"));
+	else if (this->getReadGeo())
+		throw std::runtime_error("readGeo is true, GeometryC has to be set as well!");
+
+	if (configData.contains("GeometryM"))
+		this->setGeometryFileM(configData.getValue<std::string>("GeometryM"));
+	else if (this->getReadGeo())
+		throw std::runtime_error("readGeo is true, GeometryM has to be set as well!");
+
+	if (configData.contains("GeometryF"))
+		this->setGeometryFileF(configData.getValue<std::string>("GeometryF"));
+	else if (this->getReadGeo())
+		throw std::runtime_error("readGeo is true, GeometryF has to be set as well!");
+
+
+	 //////////////////////////////////////////////////////////////////////////
+	if (configData.contains("measureClockCycle"))
+		this->setclockCycleForMP(configData.getValue<real>("measureClockCycle"));
+
+	if (configData.contains("measureTimestep"))
+		this->settimestepForMP(configData.getValue<uint>("measureTimestep"));
+
+	//////////////////////////////////////////////////////////////////////////
+
+	std::string gridPath {""};
+	if (configData.contains("GridPath"))
+		gridPath = configData.getValue<std::string>("GridPath");
+	else
+		throw std::runtime_error("GridPath has to be defined in config file!");
+
+	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));
+	real forcingX = 0.0;
+	real forcingY = 0.0;
+	real forcingZ = 0.0;
 
+	if (configData.contains("ForcingX"))
+		forcingX = configData.getValue<real>("ForcingX");
+	if (configData.contains("ForcingY"))
+		forcingY = configData.getValue<real>("ForcingY");
+	if (configData.contains("ForcingZ"))
+		forcingZ = configData.getValue<real>("ForcingZ");
+
+	this->setForcing(forcingX, forcingY, forcingZ);
+	//////////////////////////////////////////////////////////////////////////
+	//quadricLimiters
+	real quadricLimiterP = (real)0.01;
+	real quadricLimiterM = (real)0.01;
+	real quadricLimiterD = (real)0.01;
+
+	if (configData.contains("QuadricLimiterP"))
+		quadricLimiterP = configData.getValue<real>("QuadricLimiterP");
+	if (configData.contains("QuadricLimiterM"))
+		quadricLimiterM = configData.getValue<real>("QuadricLimiterM");
+	if (configData.contains("QuadricLimiterD"))
+		quadricLimiterD = configData.getValue<real>("QuadricLimiterD");
+
+	this->setQuadricLimiters(quadricLimiterP, quadricLimiterM, quadricLimiterD);
+	//////////////////////////////////////////////////////////////////////////
+	//Particles
+	if (configData.contains("calcParticles"))
+		this->setCalcParticles(configData.getValue<bool>("calcParticles"));
+
+	if (configData.contains("baseLevel"))
+		this->setParticleBasicLevel(configData.getValue<int>("baseLevel"));
+
+	if (configData.contains("initLevel"))
+		this->setParticleInitLevel(configData.getValue<int>("initLevel"));
+
+	if (configData.contains("numberOfParticles"))
+		this->setNumberOfParticles(configData.getValue<int>("numberOfParticles"));
+
+	if (configData.contains("startXHotWall"))
+		this->setEndXHotWall(configData.getValue<real>("startXHotWall"));
+
+	if (configData.contains("endXHotWall"))
+		this->setCalcParticles(configData.getValue<real>("endXHotWall"));
+	//////////////////////////////////////////////////////////////////////////
+	//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.contains("TimeDoCheckPoint"))
+		this->setTimeDoCheckPoint(configData.getValue<uint>("TimeDoCheckPoint"));
+
+	if (configData.contains("TimeDoRestart"))
+		this->setTimeDoRestart(configData.getValue<uint>("TimeDoRestart"));
+
+	if (configData.contains("DoCheckPoint"))
+		this->setDoCheckPoint(configData.getValue<bool>("DoCheckPoint"));
+
+	if (configData.contains("DoRestart"))
+		this->setDoRestart(configData.getValue<bool>("DoRestart"));
 	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	// // 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);
-	// }		
-	// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	if (configData.contains("NOGL"))
+		this->setMaxLevel(configData.getValue<int>("NOGL"));
+	
+	this->setGridX(std::vector<int>(this->getMaxLevel()+1, 32));
+	this->setGridY(std::vector<int>(this->getMaxLevel()+1, 32));
+	this->setGridZ(std::vector<int>(this->getMaxLevel()+1, 32));
+
+	this->setDistX(std::vector<int>(this->getMaxLevel()+1, 32));
+	this->setDistY(std::vector<int>(this->getMaxLevel()+1, 32));
+	this->setDistZ(std::vector<int>(this->getMaxLevel()+1, 32));
 
+	this->setNeedInterface(std::vector<bool>(6, true));
+
+	if (configData.contains("GridX"))
+		this->setGridX(configData.getVector<int>("GridX"));
+	
+	if (configData.contains("GridY"))
+		this->setGridY(configData.getVector<int>("GridY"));
+
+	if (configData.contains("GridZ"))
+		this->setGridZ(configData.getVector<int>("GridZ"));
+
+
+	if (configData.contains("DistX"))
+		this->setDistX(configData.getVector<int>("DistX"));
+
+	if (configData.contains("DistY"))
+		this->setDistY(configData.getVector<int>("DistY"));
+
+	if (configData.contains("DistZ"))
+		this->setDistZ(configData.getVector<int>("DistZ"));
+
+	
+	if (configData.contains("NeedInterface"))
+		this->setNeedInterface(configData.getVector<bool>("NeedInterface"));
+
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	// Kernel
+	if (configData.contains("MainKernelName"))
+		this->setMainKernel(configData.getValue<std::string>("MainKernelName"));
+
+	if (configData.contains("MultiKernelOn"))
+		this->setMultiKernelOn(configData.getValue<bool>("MultiKernelOn"));
+
+	if (configData.contains("MultiKernelLevel"))
+		this->setMultiKernelLevel(configData.getVector<int>("MultiKernelLevel"));
+	else if (this->getMultiKernelOn())
+	{
+		std::vector<int> tmp;
+		for (int i = 0; i < this->getMaxLevel()+1; i++)
+		{
+			tmp.push_back(i);
+		}
+		this->setMultiKernelLevel(tmp);
+	} 
+
+	if (configData.contains("MultiKernelName"))
+		this->setMultiKernel(StringUtil::toStringVector(configData.getValue<std::string>("MultiKernelName")));
+	else if (this->getMultiKernelOn())
+	{
+        std::vector<std::string> tmp;
+		for (int i = 0; i < this->getMaxLevel()+1; i++)
+		{
+			tmp.push_back("CumulantK17Comp");
+		}
+		this->setMultiKernel(tmp);
+	}
 }
 
 Parameter::Parameter(SPtr<ConfigData> configData, vf::gpu::Communicator* comm)
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index e9aef2b1c14a172f6a8d28c489d6ad70c6439085..1626e41ae88a1b748f9ed48ea8db385871020dc6 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -743,16 +743,18 @@ public:
 protected:
 private:
 	bool compOn;
-	bool diffOn;
+	bool diffOn {false};
 	bool isF3;
-	bool calcDragLift, calcCp;
-	bool writeVeloASCII;
-	bool calcPlaneConc;
+	bool calcDragLift {false};
+	bool calcCp {false};
+	bool writeVeloASCII {false};
+	bool calcPlaneConc {false};
     bool isBodyForce;
-	int diffMod;
-	int coarse, fine, maxlevel;
+	int diffMod {27};
+	int maxlevel {0};
+	int coarse, fine;
 	int factor_gridNZ;
-	int D3Qxx;
+	int D3Qxx {27};
 	InitCondition ic;
 	double memsizeGPU;
 	unsigned int limitOfNodesForVTK;
@@ -761,8 +763,8 @@ private:
 
 
 	//Kernel
-    std::string mainKernel;
-	bool multiKernelOn;
+    std::string mainKernel {"CumulantK17Comp"};
+	bool multiKernelOn {false};
 	std::vector<int> multiKernelLevel;
     std::vector<std::string> multiKernel;
 
@@ -770,11 +772,13 @@ private:
 
 	//////////////////////////////////////////////////////////////////////////
 	//particles
-	int particleBasicLevel, particleInitLevel;
-	int numberOfParticles;
-	bool calcParticles;
-	real stickToSolid;
-	real startXHotWall, endXHotWall;
+	int particleBasicLevel {0};
+	int particleInitLevel {0};
+	int numberOfParticles {0};
+	bool calcParticles {false};
+	real stickToSolid {(real) 0.0};
+	real startXHotWall {(real) 0.0};
+	real endXHotWall {(real) 0.0};
 	//////////////////////////////////////////////////////////////////////////
 	//CUDA random number generation
 	curandState* devState;