diff --git a/src/basics/config/ConfigurationFile.cpp b/src/basics/config/ConfigurationFile.cpp
index eae1a92269723b71c09922b50af7364424a57b61..026d13e15486c46a7056e061ea075a03c9c06f9f 100644
--- a/src/basics/config/ConfigurationFile.cpp
+++ b/src/basics/config/ConfigurationFile.cpp
@@ -65,6 +65,14 @@ bool ConfigurationFile::load(const std::string& file)
 
    return true;
 }
+
+//////////////////////////////////////////////////////////////////////////
+template<>
+bool ConfigurationFile::fromString<bool>(const std::string& str) const
+{
+   return str == "true";
+}
+
 //////////////////////////////////////////////////////////////////////////
 bool ConfigurationFile::contains(const std::string& key) const
 {
diff --git a/src/basics/config/ConfigurationFile.h b/src/basics/config/ConfigurationFile.h
index 4f608faab7404357e325744f6bde596254a2a27a..8988d1065bb7f1ae6c53b48dca2ac023e40bcf9d 100644
--- a/src/basics/config/ConfigurationFile.h
+++ b/src/basics/config/ConfigurationFile.h
@@ -103,17 +103,15 @@ std::vector<T> ConfigurationFile::getVector(const std::string& key) const
 template<class T>
 T ConfigurationFile::fromString(const std::string& str) const
 {
-   //boolean hack
-   if (str == "true")
-      return true;
-   else if (str == "false")
-      return false;
-   //////////////
    std::istringstream stream(str);
    T t;
    stream >> t;
    return t;
 }
+
+template<>
+bool ConfigurationFile::fromString<bool>(const std::string& str) const;
+
 //////////////////////////////////////////////////////////////////////////
 template<class T>
 T ConfigurationFile::getValue(const std::string& key) const
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 9d67bd9b381881fa776da2dbe3e9812a2866b139..8d163c0b6f7df71e3381b40f1356eaf7d75ebe85 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -425,7 +425,7 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
     }
 
     if (configData.contains("MultiKernelName"))
-        this->setMultiKernel(StringUtil::toStringVector(configData.getValue<std::string>("MultiKernelName")));
+        this->setMultiKernel(configData.getVector<std::string>("MultiKernelName"));
     else if (this->getMultiKernelOn()) {
         std::vector<std::string> tmp;
         for (int i = 0; i < this->getMaxLevel() + 1; i++) {
@@ -437,7 +437,6 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 
 void Parameter::initLBMSimulationParameter()
 {
-	factor_gridNZ  = 2;
 	coarse         = 0;
 	fine           = this->maxlevel;
 	parH.resize(this->maxlevel+1);
@@ -2685,7 +2684,7 @@ std::vector< int> Parameter::getMultiKernelLevel()
 {
 	return multiKernelLevel;
 }
-std::vector< std::string> Parameter::getMultiKernel()
+std::vector<std::string> Parameter::getMultiKernel()
 {
 	return multiKernel;
 }
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index 3e8d99490a7516f112bcce9dbac201d2f1fb9bea..e128f47e47b582b2e375378a924e2259f69dc8a0 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -771,7 +771,7 @@ private:
     int diffMod{ 27 };
     int maxlevel{ 0 };
     int coarse, fine;
-    int factor_gridNZ;
+    int factor_gridNZ {2};
     int D3Qxx{ 27 };
     InitCondition ic;
     double memsizeGPU;
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
index 624dcefdd90a33732b3fafc879ef69f8017529cf..b38b5ca2eb80241ea30b2ea7d6da9b288c8c201b 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
@@ -135,6 +135,16 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor)
     EXPECT_THAT(para.getDistY(), testing::ElementsAreArray({500, 501}));
     EXPECT_THAT(para.getDistZ(), testing::ElementsAreArray({600, 601}));
     EXPECT_THAT(para.getNeedInterface(), testing::ElementsAreArray({true, true, true, true, true, true}));
+
+    EXPECT_THAT(para.getMainKernel(), testing::Eq("KernelName"));
+    EXPECT_THAT(para.getMultiKernelOn(), testing::Eq(true));
+    EXPECT_THAT(para.getMultiKernelLevel(), testing::ElementsAreArray({3, 2, 1}));
+
+    std::vector<std::string> kernel {"Kernel1", "Kernel2", "Kernel3"};
+    auto kernel_actual = para.getMultiKernel();
+    for (size_t i = 0; i < kernel.size(); ++i) {
+        EXPECT_THAT(kernel_actual[i], testing::Eq(kernel[i]));
+    }
 }
 
 
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg b/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
index ae13ba02cf8f1fbfd3e6fcd8787ecbe943caed16..edae0daa06537ef30db0ba099096cd32f6831b33 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
+++ b/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
@@ -87,3 +87,8 @@ DistX = 400 401
 DistY = 500 501
 DistZ = 600 601
 NeedInterface = true true true true true true
+
+MainKernelName = KernelName
+MultiKernelOn = true
+MultiKernelLevel = 3 2 1
+MultiKernelName = Kernel1 Kernel2 Kernel3
\ No newline at end of file