diff --git a/apps/gpu/ChannelFlow/ChannelFlow.cpp b/apps/gpu/ChannelFlow/ChannelFlow.cpp
index c716729f88d2e9d07b7647749f09127e8acf252e..45a42e4a2be8c8fb7f0af06ea17de5e2761500ee 100644
--- a/apps/gpu/ChannelFlow/ChannelFlow.cpp
+++ b/apps/gpu/ChannelFlow/ChannelFlow.cpp
@@ -60,7 +60,7 @@
 
 //////////////////////////////////////////////////////////////////////////
 
-#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
+#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
 #include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
 #include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
@@ -95,7 +95,7 @@ int main(int argc, char *argv[])
         vf::parallel::Communicator &communicator = *vf::parallel::MPICommunicator::getInstance();
         const int numberOfProcesses = communicator.getNumberOfProcesses();
         const auto processID = communicator.getProcessID();
-        SPtr<Parameter> para = std::make_shared<Parameter>(numberOfProcesses, processId);
+        SPtr<Parameter> para = std::make_shared<Parameter>(numberOfProcesses, processID);
         std::vector<uint> devices(10);
         std::iota(devices.begin(), devices.end(), 0);
         para->setDevices(devices);
@@ -106,7 +106,7 @@ int main(int argc, char *argv[])
         // setup logger
         //////////////////////////////////////////////////////////////////////////
         vf::logging::Logger::changeLogPath("output/vflog_process" +
-                                           std::to_string(processId) + ".txt");
+                                           std::to_string(processID) + ".txt");
         vf::logging::Logger::initializeLogger();
 
         //////////////////////////////////////////////////////////////////////////
@@ -150,13 +150,15 @@ int main(int argc, char *argv[])
 
         real overlap = (real)8.0 * dx;
 
+        auto gridBuilder = std::make_shared<MultipleGridBuilder>();
+
         if (numberOfProcesses > 1) {
 
             //////////////////////////////////////////////////////////////////////////
             // add coarse grids
             //////////////////////////////////////////////////////////////////////////
 
-            real subdomainMinX = channelWidth * processId;
+            real subdomainMinX = channelWidth * processID;
             real subdomainMinXoverlap = subdomainMinX;
             real subdomainMaxX = subdomainMinX + channelWidth;
             real subdomainMaxXoverlap = subdomainMaxX;
@@ -167,8 +169,6 @@ int main(int argc, char *argv[])
             if (processID != numberOfProcesses - 1)
                 subdomainMaxXoverlap += overlap;
 
-            auto gridBuilder = std::make_shared<MultipleGridBuilder>();
-
             gridBuilder->addCoarseGrid(subdomainMinXoverlap, yGridMin, zGridMin, subdomainMaxXoverlap, yGridMax,
                                        zGridMax, dx);
 
@@ -190,13 +190,13 @@ int main(int argc, char *argv[])
             //////////////////////////////////////////////////////////////////////////
 
             if (processID != 0) {
-                gridBuilder->findCommunicationIndices(CommunicationDirections::MX, LBM);
-                gridBuilder->setCommunicationProcess(CommunicationDirections::MX, processId - 1);
+                gridBuilder->findCommunicationIndices(CommunicationDirections::MX);
+                gridBuilder->setCommunicationProcess(CommunicationDirections::MX, processID - 1);
             }
 
             if (processID != numberOfProcesses - 1) {
-                gridBuilder->findCommunicationIndices(CommunicationDirections::PX, LBM);
-                gridBuilder->setCommunicationProcess(CommunicationDirections::PX, processId + 1);
+                gridBuilder->findCommunicationIndices(CommunicationDirections::PX);
+                gridBuilder->setCommunicationProcess(CommunicationDirections::PX, processID + 1);
             }
 
             //////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/RotatingGrid/RotatingGrid.cpp b/apps/gpu/RotatingGrid/RotatingGrid.cpp
index 0bbc36d79d5a230e5571c0fc20df586c7e3c8cf2..43df5652b9c7190a19313697824aaedf06509761 100644
--- a/apps/gpu/RotatingGrid/RotatingGrid.cpp
+++ b/apps/gpu/RotatingGrid/RotatingGrid.cpp
@@ -49,6 +49,7 @@
 //////////////////////////////////////////////////////////////////////////
 
 #include "GridGenerator/geometries/Cuboid/Cuboid.h"
+#include "GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h"
 #include "GridGenerator/grid/BoundaryConditions/Side.h"
 #include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h"
 #include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h"
@@ -79,7 +80,7 @@ int main()
         std::string simulationName("RotatingGrid");
 
         const real L = 1.0;
-        const real Re = 1000.0;
+        const real Re = 2000.0;
         const real velocity = 1.0;
         const real velocityLB = 0.05; // LB units
         const uint nx = 64;
@@ -94,9 +95,6 @@ int main()
         const real dx = L / real(nx);
         const real dt  = velocityLB / velocity * dx;
 
-        const real vxLB = velocityLB / sqrt(2.0); // LB units
-        const real vyLB = velocityLB / sqrt(2.0); // LB units
-
         const real viscosityLB = nx * velocityLB / Re; // LB units
 
         //////////////////////////////////////////////////////////////////////////
@@ -104,9 +102,9 @@ int main()
         //////////////////////////////////////////////////////////////////////////
         auto gridBuilder = std::make_shared<MultipleGridBuilder>();
 
-        gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L, 0.5 * L, 0.5 * L, 0.5 * L, dx);
+        gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -1.5 * L, 0.5 * L, 0.5 * L, 1.5 * L, dx);
 
-        gridBuilder->addGridWithSameDeltaAsPreviousGrid(std::make_shared<Cuboid>(-0.25, -0.25, -0.25, 0.25, 0.25, 0.25));
+        gridBuilder->addGridWithSameDeltaAsPreviousGrid(std::make_shared<VerticalCylinder>(0.0, 0.0, 0.0, 0.25 * L, 0.5 * L));
         GridScalingFactory scalingFactory = GridScalingFactory();
         scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible);
 
@@ -127,7 +125,7 @@ int main()
         para->setVelocityLB(velocityLB);
         para->setViscosityLB(viscosityLB);
 
-        para->setVelocityRatio(velocity / velocityLB);
+        para->setVelocityRatio(1.0); // velocity / velocityLB);
         para->setDensityRatio(1.0);
 
         para->setTimestepOut(timeStepOut);
@@ -139,18 +137,20 @@ int main()
         // set boundary conditions
         //////////////////////////////////////////////////////////////////////////
 
-        gridBuilder->setNoSlipBoundaryCondition(SideType::PX);
-        gridBuilder->setNoSlipBoundaryCondition(SideType::MX);
-        gridBuilder->setNoSlipBoundaryCondition(SideType::PY);
-        gridBuilder->setNoSlipBoundaryCondition(SideType::MY);
-        gridBuilder->setNoSlipBoundaryCondition(SideType::MZ);
-        gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vxLB, vyLB, 0.0);
+        gridBuilder->setSlipBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0);
+        gridBuilder->setSlipBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0);
+        gridBuilder->setSlipBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0);
+        gridBuilder->setSlipBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0);
 
-        BoundaryConditionFactory bcFactory;
+        gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, velocityLB);
+        gridBuilder->setPressureBoundaryCondition(SideType::PZ, 0.0);
 
-        bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack);
-        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocitySimpleBounceBackCompressible);
+        BoundaryConditionFactory bcFactory;
 
+        bcFactory.setSlipBoundaryCondition(BoundaryConditionFactory::SlipBC::SlipCompressible);
+        // bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack);
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+        bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
         //////////////////////////////////////////////////////////////////////////
         // set copy mesh to simulation
         //////////////////////////////////////////////////////////////////////////
@@ -179,8 +179,6 @@ int main()
         VF_LOG_INFO("Re                     = {}", Re);
         VF_LOG_INFO("lb_velocity [dx/dt]    = {}", velocityLB);
         VF_LOG_INFO("lb_viscosity [dx^2/dt] = {}", viscosityLB);
-        VF_LOG_INFO("lb_vx [dx/dt] (lb_velocity/sqrt(2)) = {}", vxLB);
-        VF_LOG_INFO("lb_vy [dx/dt] (lb_velocity/sqrt(2)) = {}", vyLB);
         printf("\n");
         VF_LOG_INFO("simulation parameter:");
         VF_LOG_INFO("--------------");