diff --git a/3rdParty/fftw/fftw-3.3.7/CMakeLists.txt b/3rdParty/fftw/fftw-3.3.7/CMakeLists.txt
index 9c96a036311921bfde609aeaca5b8bcb0f2ffafa..e2155c440bacff38adb3419224dac051611c2771 100644
--- a/3rdParty/fftw/fftw-3.3.7/CMakeLists.txt
+++ b/3rdParty/fftw/fftw-3.3.7/CMakeLists.txt
@@ -11,7 +11,7 @@ if (POLICY CMP0042)
 endif ()
 
 option (BUILD_SHARED_LIBS "Build shared libraries" ON)
-option (BUILD_TESTS "Build tests" ON)
+option (BUILD_TESTS "Build tests" OFF)
 
 option (ENABLE_OPENMP "Use OpenMP for multithreading" OFF)
 option (ENABLE_THREADS "Use pthread for multithreading" OFF)
@@ -335,6 +335,8 @@ if (OPENMP_FOUND)
   target_compile_options (${fftw3_lib}_omp PRIVATE ${OpenMP_C_FLAGS})
 endif ()
 
+groupTarget(${fftw3_lib} ${thirdPartyFolder})
+
 foreach(subtarget ${subtargets})
   set_target_properties (${subtarget} PROPERTIES SOVERSION 3.5.7 VERSION 3)
   install (TARGETS ${subtarget}
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
index 434b5c3e805fbbf44f3e57e40c9167adb91e9eab..579a434422d80e36bf0f9eb34625c9e0372cb259 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
@@ -34,7 +34,7 @@ public:
 
 protected:
 	void setNumberOfNodes(const int numberOfNodes, const int level) const;
-	void setInitalNodeValues(const int numberOfNodes, const int level) const;
+    virtual void setInitalNodeValues(const int numberOfNodes, const int level) const;
 
 	void setPressSizePerLevel(int level, int sizePerLevel) const;
 	void setVelocitySizePerLevel(int level, int sizePerLevel) const;
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp
index ad55ee63be8b17c6c5bf7f494b0b6f0f24f0e7b8..279043afc6c0de6758ba231d87d84fed25632412 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -70,7 +70,7 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std
     this->dataWriter = dataWriter;
    this->gridProvider = gridProvider;
    gridProvider->initalGridInformations();
-   comm = SPtr<Communicator>(Communicator::getInstanz());
+   comm = Communicator::getInstanz();
    this->para = para;
 
    para->setMyID(comm->getPID());
@@ -390,7 +390,7 @@ void Simulation::run()
 		getLastCudaError("before starting a kernel we get an execution failed");
 		if (para->getMaxLevel()>=1)
          {
-            updateGrid27(para.get(), comm.get(), pm, 1, para->getMaxLevel(), t);
+            updateGrid27(para.get(), comm, pm, 1, para->getMaxLevel(), t);
          }
          ////////////////////////////////////////////////////////////////////////////////
          // Collision and Propagation
@@ -1081,21 +1081,21 @@ void Simulation::run()
 			//////////////////////////////////////////////////////////////////////////
 			//3D domain decomposition
 			//output << "start exchange Post X (level 0) \n";
-			exchangePostCollDataXGPU27(para.get(), comm.get(), 0);
+			exchangePostCollDataXGPU27(para.get(), comm, 0);
 			//output << "end exchange Post X (level 0) \n";
 			//output << "start exchange Post Y (level 0) \n";
-			exchangePostCollDataYGPU27(para.get(), comm.get(), 0);
+			exchangePostCollDataYGPU27(para.get(), comm, 0);
 			//output << "end exchange Post Y (level 0) \n";
 			//output << "start exchange Post Z (level 0) \n";
-			exchangePostCollDataZGPU27(para.get(), comm.get(), 0);
+			exchangePostCollDataZGPU27(para.get(), comm, 0);
 			//output << "end exchange Post Z (level 0) \n";
 			////////////////////////////////////////////////////////////////////////
 			//3D domain decomposition convection diffusion
 			if (para->getDiffOn()==true)
 			{
-				exchangePostCollDataADXGPU27(para.get(), comm.get(), 0);
-				exchangePostCollDataADYGPU27(para.get(), comm.get(), 0);
-				exchangePostCollDataADZGPU27(para.get(), comm.get(), 0);
+				exchangePostCollDataADXGPU27(para.get(), comm, 0);
+				exchangePostCollDataADYGPU27(para.get(), comm, 0);
+				exchangePostCollDataADZGPU27(para.get(), comm, 0);
 			}
 		}
 		////////////////////////////////////////////////////////////////////////////////
@@ -1474,6 +1474,7 @@ void Simulation::run()
           ////////////////////////////////////////////////////////////////////////////////
           if (para->getParD(0)->evenOrOdd==true)  para->getParD(0)->evenOrOdd=false;
           else                                    para->getParD(0)->evenOrOdd=true;
+
           ////////////////////////////////////////////////////////////////////////////////
 
 
@@ -1804,24 +1805,24 @@ void Simulation::run()
 			 if (para->getNumprocs() > 1)
 			 {
 				 ////1D domain decomposition
-				 //exchangePreCollDataGPU27(para, comm.get(), 0);
+				 //exchangePreCollDataGPU27(para, comm, 0);
 				 //3D domain decomposition
 				 //output << "start exchange Pre X (level 0) \n";
-				 exchangePreCollDataXGPU27(para.get(), comm.get(), 0);
+				 exchangePreCollDataXGPU27(para.get(), comm, 0);
 				 //output << "end exchange Pre X (level 0) \n";
 				 //output << "start exchange Pre Y (level 0) \n";
-				 exchangePreCollDataYGPU27(para.get(), comm.get(), 0);
+				 exchangePreCollDataYGPU27(para.get(), comm, 0);
 				 //output << "end exchange Pre Y (level 0) \n";
 				 //output << "start exchange Pre Z (level 0) \n";
-				 exchangePreCollDataZGPU27(para.get(), comm.get(), 0);
+				 exchangePreCollDataZGPU27(para.get(), comm, 0);
 				 //output << "end exchange Pre Z (level 0) \n";
 				 //////////////////////////////////////////////////////////////////////////
 				 //3D domain decomposition convection diffusion
 				 if (para->getDiffOn()==true)
 				 {
-					 exchangePreCollDataADXGPU27(para.get(), comm.get(), 0);
-					 exchangePreCollDataADYGPU27(para.get(), comm.get(), 0);
-					 exchangePreCollDataADZGPU27(para.get(), comm.get(), 0);
+					 exchangePreCollDataADXGPU27(para.get(), comm, 0);
+					 exchangePreCollDataADYGPU27(para.get(), comm, 0);
+					 exchangePreCollDataADZGPU27(para.get(), comm, 0);
 				 }
 			 }
 		    //////////////////////////////////////////////////////////////////////////
@@ -2215,7 +2216,7 @@ void Simulation::run()
 	  ////////////////////////////////////////////////////////////////////////////////
       // File IO
       ////////////////////////////////////////////////////////////////////////////////
-      //comm.get()->startTimer();
+      //comm->startTimer();
       if(para->getTOut()>0 && t%para->getTOut()==0 && t>para->getTStartOut())
       {
 		  //////////////////////////////////////////////////////////////////////////////////
@@ -2258,24 +2259,24 @@ void Simulation::run()
 		 if (para->getNumprocs() > 1)
 		 {
 			 ////1D domain decomposition
-			 //exchangePreCollDataGPU27(para, comm.get(), 0);
+			 //exchangePreCollDataGPU27(para, comm, 0);
 			 //3D domain decomposition
 			 //output << "(print) start exchange Pre X (level 0) \n";
-			 exchangePreCollDataXGPU27(para.get(), comm.get(), 0);
+			 exchangePreCollDataXGPU27(para.get(), comm, 0);
 			 //output << "(print) end exchange Pre X (level 0) \n";
 			 //output << "(print) start exchange Pre Y (level 0) \n";
-			 exchangePreCollDataYGPU27(para.get(), comm.get(), 0);
+			 exchangePreCollDataYGPU27(para.get(), comm, 0);
 			 //output << "(print) end exchange Pre Y (level 0) \n";
 			 //output << "(print) start exchange Pre Z (level 0) \n";
-			 exchangePreCollDataZGPU27(para.get(), comm.get(), 0);
+			 exchangePreCollDataZGPU27(para.get(), comm, 0);
 			 //output << "(print) end exchange Pre Z (level 0) \n";
 			 //////////////////////////////////////////////////////////////////////////
 			 //3D domain decomposition convection diffusion
 			 if (para->getDiffOn()==true)
 			 {
-				 exchangePreCollDataADXGPU27(para.get(), comm.get(), 0);
-				 exchangePreCollDataADYGPU27(para.get(), comm.get(), 0);
-				 exchangePreCollDataADZGPU27(para.get(), comm.get(), 0);
+				 exchangePreCollDataADXGPU27(para.get(), comm, 0);
+				 exchangePreCollDataADYGPU27(para.get(), comm, 0);
+				 exchangePreCollDataADZGPU27(para.get(), comm, 0);
 			 }
 		 }
 		 //////////////////////////////////////////////////////////////////////////
@@ -2628,8 +2629,8 @@ void Simulation::run()
 	  //para->cudaFreeVeloBC(lev);
 	  //para->cudaFreeWallBC(lev);
 	  //para->cudaFreeVeloBC(lev); 
-	  para->cudaFreeInlet(lev);
-	  para->cudaFreeOutlet(lev);
+	  //para->cudaFreeInlet(lev);
+	  //para->cudaFreeOutlet(lev);
 	  //para->cudaFreeGeomBC(lev);
 	  //para->cudaFreePress(lev);
    }
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.h b/src/VirtualFluids_GPU/LBM/Simulation.h
index be8e809d9072631808c8311e5b8a057b4cae3546..54080f018f6248707dc88cc3f32cb83e39b5cf9c 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/VirtualFluids_GPU/LBM/Simulation.h
@@ -45,7 +45,7 @@ protected:
 
 	LogWriter output;
 
-    SPtr<Communicator> comm;
+    Communicator* comm;
     SPtr<Parameter> para;
     SPtr<GridProvider> gridProvider;
     SPtr<DataWriter> dataWriter;
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index b85d1632b514074a2747f66839c6247ad233e5d0..e43ec64f9188463950c91d274431639cd75265b2 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -40,8 +40,8 @@ std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath)
 {
     if (para->getNumprocs() == 1)
         return Gridpath + "/";
-    else
-        return Gridpath + "/" + StringUtil::toString(para->getMyID()) + "/";
+    
+    return Gridpath + "/" + StringUtil::toString(para->getMyID()) + "/";
 }
 
 void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input> &input)
diff --git a/targets/tests/TestingHULC/Tests/OrderOfAccuracy/OrderOfAccuracy.cpp b/targets/tests/TestingHULC/Tests/OrderOfAccuracy/OrderOfAccuracy.cpp
index 02fa93b22bad77366aca3497968bc3042e065cc2..1ea96dd2812d2991487bb255acdefe00e5463b0a 100644
--- a/targets/tests/TestingHULC/Tests/OrderOfAccuracy/OrderOfAccuracy.cpp
+++ b/targets/tests/TestingHULC/Tests/OrderOfAccuracy/OrderOfAccuracy.cpp
@@ -13,5 +13,5 @@ TEST_P(OrderOfAccuracy, Test) {
 
 bool OrderOfAccuracy::test(double a, double b)
 {
-	return a>b;
+	return a > b;
 }
diff --git a/targets/tests/TestingHULC/Utilities/TestCondition/TestConditionImp.cpp b/targets/tests/TestingHULC/Utilities/TestCondition/TestConditionImp.cpp
index b862ac9d5056e7057a52833234610bafc9e38adb..4d901dd6979ae5fccef498160b6fa00f7254827b 100644
--- a/targets/tests/TestingHULC/Utilities/TestCondition/TestConditionImp.cpp
+++ b/targets/tests/TestingHULC/Utilities/TestCondition/TestConditionImp.cpp
@@ -57,6 +57,7 @@ void TestConditionImp::initParameter(real viscosity, std::string aGridPath, std:
 
 	para->setTEnd(endTime);
 	para->setTOut(timeStepLength);
+    para->setTStartOut(1);
 
 	para->setViscosity(viscosity);
 	para->setVelocity(0.096);
@@ -88,7 +89,26 @@ void TestConditionImp::initParameter(real viscosity, std::string aGridPath, std:
 	para->setbackBcValues(gridPath + "backBoundaryValues.dat");
 	para->setnumberNodes(gridPath + "numberNodes.dat");
 	para->setLBMvsSI(gridPath + "LBMvsSI.dat");
-
+    para->setscaleCFC(gridPath + "scaleCFC.dat");
+    para->setscaleCFF(gridPath + "scaleCFF.dat");
+    para->setscaleFCC(gridPath + "scaleFCC.dat");
+    para->setscaleFCF(gridPath + "scaleFCF.dat");
+    para->setscaleOffsetCF(gridPath + "offsetVecCF.dat");
+    para->setscaleOffsetFC(gridPath + "offsetVecFC.dat");
+    para->setCalcParticles(false);
+    para->setDiffOn(false);
+    para->setDoCheckPoint(false);
+    para->setDoRestart(false);
+    para->setGeometryValues(false);
+    para->setCalc2ndOrderMoments(false);
+    para->setCalc3rdOrderMoments(false);
+    para->setCalcHighOrderMoments(false);
+    para->setReadGeo(false);
+    para->setCalcMedian(false);
+    para->setConcFile(false);
+    para->setUseMeasurePoints(false);
+    para->setUseWale(false);
+    para->setSimulatePorousMedia(false);
 	para->setForcing(0.0, 0.0, 0.0);
 
 	std::vector<int> dist;
@@ -97,6 +117,8 @@ void TestConditionImp::initParameter(real viscosity, std::string aGridPath, std:
 	para->setDistX(dist);
 	para->setDistY(dist);
 	para->setDistZ(dist);
+
+    para->setNeedInterface(std::vector<bool>{true, true, true, true, true, true});
 }
 
 void TestConditionImp::initInitialConditions(std::shared_ptr<InitialCondition> initialCondition)
diff --git a/targets/tests/TestingHULC/Utilities/TestConditionFactory/TestConditionFactory.h b/targets/tests/TestingHULC/Utilities/TestConditionFactory/TestConditionFactory.h
index 354fe948e7ebed9a2e235ae802ba05c85e75c41d..2bb18bf5beed31dd0f975bef72c9d0c97b5f0424 100644
--- a/targets/tests/TestingHULC/Utilities/TestConditionFactory/TestConditionFactory.h
+++ b/targets/tests/TestingHULC/Utilities/TestConditionFactory/TestConditionFactory.h
@@ -10,6 +10,6 @@ class TestParameter;
 class TestConditionFactory
 {
 public:
-	virtual std::vector<std::shared_ptr<TestCondition>> makeTestConditions() = 0;
+	virtual std::vector<std::shared_ptr<TestCondition> > makeTestConditions() = 0;
 };
 #endif
diff --git a/targets/tests/TestingHULC/Utilities/TestParameter/ShearWaveTestParameter/ShearWaveTestParameter.cpp b/targets/tests/TestingHULC/Utilities/TestParameter/ShearWaveTestParameter/ShearWaveTestParameter.cpp
index 8d0da14f57b57be8345f143dfaa94648fa527b9a..dcfb109d26ed7381913579946634256de2a40fc5 100644
--- a/targets/tests/TestingHULC/Utilities/TestParameter/ShearWaveTestParameter/ShearWaveTestParameter.cpp
+++ b/targets/tests/TestingHULC/Utilities/TestParameter/ShearWaveTestParameter/ShearWaveTestParameter.cpp
@@ -18,7 +18,7 @@ ShearWaveTestParameter::ShearWaveTestParameter(real u0, real v0, real viscosity,
 	:TestParameterImp(viscosity, lx, numberOfTimeSteps, basisTimeStepLength, startStepCalculation, ySliceForCalculation, gridPath, writeFiles, startStepFileWriter), u0(u0), v0(v0)
 {
 	std::ostringstream oss;
-	oss << filePath + "\\ShearWave\\grid" << lx;
+	oss << filePath + "/ShearWave/grid" << lx;
 	this->filePath = oss.str();
 
 	initialCondition = std::shared_ptr<InitialConditionShearWave>(new InitialConditionShearWave((double)lx, (double)lz, (double)l0, u0, v0, rho0));
diff --git a/targets/tests/TestingHULC/Utilities/TestParameter/TaylorGreenTestParameter/TaylorGreenTestParameter.cpp b/targets/tests/TestingHULC/Utilities/TestParameter/TaylorGreenTestParameter/TaylorGreenTestParameter.cpp
index ddb95439fbddd190a6d66e9e36b4f9ee73672169..0d75f12409abcb36cd0a9c43fc26f46ebc580315 100644
--- a/targets/tests/TestingHULC/Utilities/TestParameter/TaylorGreenTestParameter/TaylorGreenTestParameter.cpp
+++ b/targets/tests/TestingHULC/Utilities/TestParameter/TaylorGreenTestParameter/TaylorGreenTestParameter.cpp
@@ -18,7 +18,7 @@ TaylorGreenTestParameter::TaylorGreenTestParameter(real u0, real amplitude, real
 	:TestParameterImp(viscosity, lx, numberOfTimeSteps, basisTimeStepLength, startStepCalculation, ySliceForCalculation, gridPath, writeFiles, startStepFileWriter), u0(u0), amplitude(amplitude)
 {
 	std::ostringstream oss;
-	oss << filePath + "\\TaylorGreenVortex\\grid" << lx;
+	oss << filePath + "/TaylorGreenVortex/grid" << lx;
 	this->filePath = oss.str();
 
 	initialCondition = std::shared_ptr<InitialConditionTaylorGreen>(new InitialConditionTaylorGreen((double)lx, (double)lz, (double)l0, u0, amplitude, rho0));
diff --git a/targets/tests/TestingHULC/config.txt b/targets/tests/TestingHULC/config.txt
index 86fd37d76b62c0344fc7c2bf1515f04dc478fdf6..e919556ba4e693f343dbf8e28f86572b3c9cfe4a 100644
--- a/targets/tests/TestingHULC/config.txt
+++ b/targets/tests/TestingHULC/config.txt
@@ -40,19 +40,19 @@ ShearWave512=false
 ##################################################
 #				Grid Information				 #
 ##################################################
-GridPath32="C:\Users\Timon\Documents\studienarbeitIRMB\grids\gridUni32x4x48"
-GridPath64="C:\Users\Timon\Documents\studienarbeitIRMB\grids\gridUni64x4x96"
-GridPath128="C:\Users\Timon\Documents\studienarbeitIRMB\grids\gridUni128x4x192"
-GridPath256="C:\Users\Timon\Documents\studienarbeitIRMB\grids\gridUni256x4x384"
-GridPath512="C:\Users\Timon\Documents\studienarbeitIRMB\grids\gridUni512x4x768"
+GridPath32="D:/GRIDGENERATION/numeric_testing/grids/gridUni32x4x48"
+GridPath64="D:/GRIDGENERATION/numeric_testing/grids/gridUni64x4x96"
+GridPath128="D:/GRIDGENERATION/numeric_testing/grids/gridUni128x4x192"
+GridPath256="D:/GRIDGENERATION/numeric_testing/grids/gridUni256x4x384"
+GridPath512="D:/GRIDGENERATION/numeric_testing/grids/gridUni512x4x768"
 
 ##################################################
 # 			File Writing Information			 #
 ##################################################
 WriteFiles=true
-PathForFileWriting="C:\Users\Timon\Documents\studienarbeitIRMB\Output"
+PathForFileWriting="D:/GRIDGENERATION/numeric_testing/output"
 StartStepFileWriter=0
 
-PathLogFile="C:\Users\Timon\Documents\studienarbeitIRMB\logFiles"
+PathLogFile="D:/GRIDGENERATION/numeric_testing/logFiles"
 	
 
diff --git a/targets/tests/TestingHULC/main.cpp b/targets/tests/TestingHULC/main.cpp
index ada84ac2b1cd3624677a1891ea4c167183ff60df..5d5bbd34579c866bcdf17644e24b275e8383c5c9 100644
--- a/targets/tests/TestingHULC/main.cpp
+++ b/targets/tests/TestingHULC/main.cpp
@@ -39,7 +39,7 @@ static void testHULC(const std::string &configFile)
 
 	std::vector< std::shared_ptr< EvaluationParameter > > evaPara = configReader->makeEvaluationParameter();
 	std::shared_ptr<TestInformation> testInfo = configReader->makeTestInformation();
-	std::vector<std::shared_ptr<TestParameter>> testPara = configReader->makeTestParameter();
+	std::vector<std::shared_ptr<TestParameter> > testPara = configReader->makeTestParameter();
 
 	std::shared_ptr<TestConditionFactory> factory = TestConditionFactoryImp::getNewInstance(testPara);
 	std::vector<std::shared_ptr<TestCondition>> testConditions = factory->makeTestConditions();
@@ -81,8 +81,9 @@ int main(int argc, char **argv)
 		testHULC(argv[1]);
 
 	::testing::InitGoogleTest(&argc, argv);
+    MPI_Finalize();
+
 	return RUN_ALL_TESTS();
-	MPI_Finalize();
 }
 
 INSTANTIATE_TEST_CASE_P(TaylorGreenVortexNu, OrderOfAccuracy, ValuesIn(nuTGV));