diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index 440576fe6a309c569b4809cb4eb18f85e5c228a6..d4f3885127ecd9f8cfe33fd55a88d62fad375ddf 100644
--- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -1259,7 +1259,7 @@ void coarseToFine(Parameter* para, int level)
 
 
 
-
+/*
 
 void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, std::vector<std::shared_ptr<PorousMedia>> pm, int level, int max_level, unsigned int t, std::vector < SPtr< Kernel>> kernels)
 {
@@ -2842,7 +2842,7 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa
 		 //////////////////////////////////////////////////////////////////////////////////
 		 ////Calculation of cp
 		 //////////////////////////////////////////////////////////////////////////////////
-		 //if (/*(para->getParD(level)->numberOfPointsCpTop > 0)*/ (level == 5) && (t > para->getTStartOut()))
+		 //if ((para->getParD(level)->numberOfPointsCpTop > 0) (level == 5) && (t > para->getTStartOut()))
 		 //{
 			// ////////////////////////////////////////////////////////////////////////////////
 			// //Level 7
@@ -3256,5 +3256,5 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa
    }
 }
 
-
+*/
 
diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
index 1cbd11ad65f719d2ee45f2e6ef6cc76b5be0e5e0..5d404e612c9e5ce9211245ac776f517278be4532 100644
--- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
+++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.h
@@ -10,6 +10,32 @@
 
 class Kernel;
 
-extern "C" void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, std::vector<std::shared_ptr<PorousMedia>> pm, int level, int max_level, unsigned int t, std::vector < SPtr< Kernel>> kernels);
+extern "C" void updateGrid27(Parameter* para, 
+                             Communicator* comm, 
+                             CudaMemoryManager* cudaManager, 
+                             std::vector<std::shared_ptr<PorousMedia>>& pm, 
+                             int level,
+                             unsigned int t, 
+                             std::vector < SPtr< Kernel>>& kernels);
+
+extern "C" void collision(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level, unsigned int t, std::vector < SPtr< Kernel>>& kernels);
+
+extern "C" void collisionPorousMedia(Parameter* para, std::vector<std::shared_ptr<PorousMedia>>& pm, int level);
+
+extern "C" void collisionAdvectionDiffusion(Parameter* para, int level);
+
+extern "C" void exchangeMultiGPU(Parameter* para, Communicator* comm, CudaMemoryManager* cudaManager, int level);
+
+extern "C" void postCollisionBC(Parameter* para, int level, unsigned int t);
+
+extern "C" void swapBetweenEvenAndOddTimestep(Parameter* para, int level);
+
+extern "C" void calcMacroscopicQuantities(Parameter* para, int level);
+
+extern "C" void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t);
+
+extern "C" void fineToCoarse(Parameter* para, int level);
+
+extern "C" void coarseToFine(Parameter* para, int level);
 
 #endif
diff --git a/src/VirtualFluids_GPU/LBM/LB.h b/src/VirtualFluids_GPU/LBM/LB.h
index e19395c8abc92ab722fba0ec0bc831fce932ae2a..4ce6b1ff2d97f56d649e4c755a559360e808a111 100644
--- a/src/VirtualFluids_GPU/LBM/LB.h
+++ b/src/VirtualFluids_GPU/LBM/LB.h
@@ -166,7 +166,7 @@ typedef struct QforBC{
    real* qread;
    real* q27[27];
    real* q19[19];
-   int kQ;
+   int kQ=0;
    int kArray;
    real *Vx, *Vy, *Vz, *deltaVz, *RhoBC;
 }QforBoundaryConditions;
@@ -175,7 +175,7 @@ typedef struct QforBC{
 typedef struct TempforBC{
    int* k;
    real* temp;
-   int kTemp;
+   int kTemp=0;
 }TempforBoundaryConditions;
 
 //BCTempVel
@@ -184,7 +184,7 @@ typedef struct TempVelforBC{
    real* temp;
    real* tempPulse;
    real* velo;
-   int kTemp;
+   int kTemp=0;
 }TempVelforBoundaryConditions;
 
 //BCTempPress
@@ -192,7 +192,7 @@ typedef struct TempPressforBC{
    int* k;
    real* temp;
    real* velo;
-   int kTemp;
+   int kTemp=0;
 }TempPressforBoundaryConditions;
 
 //measurePoints
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp
index dd8b0fe5883fac6bd22698aff113a3d0d5b0bf3e..04a36ef726b0079cd229a0515d91d77498d66133 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -434,6 +434,10 @@ void Simulation::run()
 	////////////////////////////////////////////////////////////////////////////////
 	for(t=para->getTStart();t<=para->getTEnd();t++)
 	{
+        updateGrid27(para.get(), comm, cudaManager.get(), pm, 0, t, kernels);
+
+        /*
+
 		getLastCudaError("before starting a kernel we get an execution failed");
 		if (para->getMaxLevel()>=1)
         {
@@ -1192,7 +1196,7 @@ void Simulation::run()
 
 		  //////////////////////////////////////////////////////////////////////////////////
 		  ////calculate the new forcing
-		  //if (((t%10) == 0) && (t >= 10)/*((t%para->getTStartOut()) == 0) && (t >= para->getTStartOut())*/)
+		  //if (((t%10) == 0) && (t >= 10)((t%para->getTStartOut()) == 0) && (t >= para->getTStartOut()))
 		  //{
 			 // forceCalculator->calcPIDControllerForForce(para);
 			 // forceCalculator->printForcing(para);
@@ -1950,7 +1954,7 @@ void Simulation::run()
 	  }
 	  //////////////////////////////////////////////////////////////////////////////////
 
-
+      */
 
 
 	  ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.h b/src/VirtualFluids_GPU/Parameter/Parameter.h
index 0cf62b35d24fe3797f84ec703202d5f7c6e5545f..1768868320f4cee7f7d73cd3416ceb71674ff090 100644
--- a/src/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/VirtualFluids_GPU/Parameter/Parameter.h
@@ -159,7 +159,7 @@ struct ParameterStruct{
 
 	//BC's////////////////////
 	QforBoundaryConditions  QWall,   Qinflow,      Qoutflow,      QSlip;
-	unsigned int            kQ,      kInflowQ,     kOutflowQ,     kSlipQ;
+	unsigned int            kQ=0,      kInflowQ=0,     kOutflowQ=0,     kSlipQ=0;
 	unsigned int            kQread,  kInflowQread, kOutflowQread, kSlipQread;
 
 	QforBoundaryConditions  QpressX0,QpressX1,QpressY0,QpressY1,QpressZ0,QpressZ1;
@@ -171,7 +171,7 @@ struct ParameterStruct{
 	QforBoundaryConditions  QOutflowNormalX, QOutflowNormalY, QOutflowNormalZ;
 	QforBoundaryConditions  QInlet, QOutlet, QPeriodic;
 	unsigned int            kInletQread, kOutletQread;
-	unsigned int            kPressQ, kPressQread;
+	unsigned int            kPressQ=0, kPressQread;
 	//testRoundoffError
 	Distributions27         kDistTestRE;
 
diff --git a/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp b/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
index 866770733534061ccf5010f7ceb29c5b5b6cd101..c67827ffebd3a3172750e005fbd4eb8ff1a5af1d 100644
--- a/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
+++ b/targets/apps/LBM/gridGeneratorTest/gridGeneratorTest.cpp
@@ -184,10 +184,10 @@ void multipleLevel(const std::string& configPath)
         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         {
             real dx = 1.0 / 16.0;
-            real vx = 0.0125;
+            real vx = 0.05;
 
             real D = 1.0;
-            real Re = 1140000;
+            real Re = 11400;
 
             para->setOutputPath( "F:/Work/Computations/out/Sphere/" );
             para->setOutputPrefix( "Sphere" );
@@ -206,7 +206,7 @@ void multipleLevel(const std::string& configPath)
 
             para->setUseWale(false);
 
-            para->setMainKernel(kernelMapper->getEnum("CumulantK20Comp"));
+            para->setMainKernel(kernelMapper->getEnum("CumulantK15Comp"));
 
             //////////////////////////////////////////////////////////////////////////
 
@@ -218,18 +218,18 @@ void multipleLevel(const std::string& configPath)
 
             Object* sphere = new Sphere( 0, 0, 0, 0.5*D );
 
-            gridBuilder->addCoarseGrid(-2.0*D, -5.5*D, -5.5*D,
-                                        9.0*D,  5.5*D,  5.5*D, dx);  // DrivAer
+            gridBuilder->addCoarseGrid(-2.0*D, -2.5*D, -2.5*D,
+                                        9.0*D,  2.5*D,  2.5*D, dx);  // DrivAer
 
             //gridBuilder->setNumberOfLayers(10,8);
             //gridBuilder->addGrid(SphereSTL, 2);
             
             gridBuilder->setNumberOfLayers(4,8);
-            gridBuilder->addGrid(sphereRef_1_STL, 3);
-            gridBuilder->addGrid(sphereRef_2_STL, 4);
+            gridBuilder->addGrid(sphereRef_1_STL, 1);
+            //gridBuilder->addGrid(sphereRef_2_STL, 4);
 
-            gridBuilder->setNumberOfLayers(10,8);
-            gridBuilder->addGrid(sphere, 5);
+            //gridBuilder->setNumberOfLayers(10,8);
+            //gridBuilder->addGrid(sphere, 5);