diff --git a/CMake/cmake_config_files/MULE.config.cmake b/CMake/cmake_config_files/MULE.config.cmake
index e5b9987ffdf655babfbffebe3c799fb7c8d1db7f..245bc60ccfb807a4852638668993065e47391890 100644
--- a/CMake/cmake_config_files/MULE.config.cmake
+++ b/CMake/cmake_config_files/MULE.config.cmake
@@ -1,7 +1,4 @@
 SET(CMAKE_CUDA_ARCHITECTURES "75")
 
-# set(GPU_APP "apps/gpu/LBM/")
-# list(APPEND USER_APPS 
-#     "${GPU_APP}ActuatorLine"
-#     "${GPU_APP}BoundaryLayer"
-# )
\ No newline at end of file
+list(APPEND USER_APPS "apps/gpu/LBM/ActuatorLine")
+list(APPEND USER_APPS "apps/gpu/LBM/BoundaryLayer")
\ No newline at end of file
diff --git a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
index bbb560b5b93eeed852a1eac86ed03d4d9ff7c116..045e69c1792e50f1876ed0e7320078073ffba11c 100644
--- a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
+++ b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
@@ -51,6 +51,7 @@
 #include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
 #include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h"
 #include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h"
+#include "VirtualFluids_GPU/Factories/GridScalingFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -68,7 +69,7 @@ LbmOrGks lbmOrGks = LBM;
 
 const real reference_diameter = 126.0; // diameter in m
 
-const real L_x = 10*reference_diameter;
+const real L_x = 16*reference_diameter;
 const real L_y = 6*reference_diameter;
 const real L_z = 6*reference_diameter;
 
@@ -78,14 +79,14 @@ const real velocity  = 9.0;
 
 const real mach = 0.1;
 
-const uint nodes_per_diameter = 32;
+const uint nodes_per_diameter = 16;
 
 std::string path(".");
 
 std::string simulationName("ActuatorLine");
 
 const float tOut = 100;
-const float tEnd = 280; // total time of simulation in s
+const float tEnd = 300; // total time of simulation in s
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -103,27 +104,33 @@ void multipleLevel(const std::string& configPath)
     auto gridFactory = GridFactory::make();
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
 
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    vf::basics::ConfigurationFile config;
+    config.load(configPath);
+    
+    SPtr<Parameter> para = std::make_shared<Parameter>(communicator.getNummberOfProcess(), communicator.getPID(), &config);
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
+    GridScalingFactory scalingFactory  = GridScalingFactory();
+
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	const real dx = reference_diameter/real(nodes_per_diameter);
 
+    real turbPos[3] = {3*reference_diameter, 3*reference_diameter, 3*reference_diameter};
+
 	gridBuilder->addCoarseGrid(0.0, 0.0, 0.0,
 							   L_x,  L_y,  L_z, dx);
 
+    // gridBuilder->setNumberOfLayers(4,0);
+    // gridBuilder->addGrid( new Cuboid(   turbPos[0]-1.5*reference_diameter,  turbPos[1]-1.5*reference_diameter,  turbPos[2]-1.5*reference_diameter, 
+    //                                     turbPos[0]+10.0*reference_diameter, turbPos[1]+1.5*reference_diameter,  turbPos[2]+1.5*reference_diameter) , 1 );
+    // para->setMaxLevel(2);
+    // scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible);
+
 	gridBuilder->setPeriodicBoundaryCondition(false, false, false);
 
 	gridBuilder->buildGrids(lbmOrGks, false); // buildGrids() has to be called before setting the BCs!!!!
 
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-    vf::basics::ConfigurationFile config;
-    config.load(configPath);
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////^
-    SPtr<Parameter> para = std::make_shared<Parameter>(communicator.getNummberOfProcess(), communicator.getPID(), &config);
-    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     const real dt = dx * mach / (sqrt(3) * velocity);
 
@@ -163,8 +170,8 @@ void multipleLevel(const std::string& configPath)
 
     para->setIsBodyForce( true );
 
-
     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
     gridBuilder->setVelocityBoundaryCondition(SideType::MX,  velocityLB,  0.0, 0.0);
 
     gridBuilder->setVelocityBoundaryCondition(SideType::MY,  velocityLB,  0.0, 0.0);
@@ -174,14 +181,13 @@ void multipleLevel(const std::string& configPath)
     gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
 
     bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
-    bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflectivePressureCorrection);
+    bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
 
     SPtr<TurbulenceModelFactory> tmFactory = std::make_shared<TurbulenceModelFactory>(para);
     tmFactory->readConfigFile(config);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    real turbPos[3] = {3*reference_diameter, 3*reference_diameter, 3*reference_diameter};
     real epsilon = 5.f; // width of gaussian smearing
     real density = 1.225f;
     int level = 0;
@@ -189,11 +195,12 @@ void multipleLevel(const std::string& configPath)
     uint nBladeNodes = 32;
     real omega = 1.0f;
 
-    SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, epsilon, level, dt, dx, false);
+    SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, epsilon, level, dt, dx, true);
     std::vector<real> bladeRadii;
     real dr = reference_diameter/nBladeNodes;
     for(uint node=0; node<nBladeNodes; node++){bladeRadii.emplace_back(dr*(node+1));}
     actuator_farm->addTurbine(turbPos[0], turbPos[1], turbPos[2], reference_diameter, omega, 0, 0, bladeRadii);
+    actuator_farm->setUseCalcForcesEllipticWing(true);
     para->addActuator( actuator_farm );
 
 
@@ -218,7 +225,7 @@ void multipleLevel(const std::string& configPath)
 
     auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory, tmFactory);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory, tmFactory, &scalingFactory);
     sim.run();
 }
 
diff --git a/gpu.cmake b/gpu.cmake
index 575c3f0f1e08a3912dada6c334837ad6dece42ad..4d7cc9a87ece3d71ce48edc76cc5a5b972b598ce 100644
--- a/gpu.cmake
+++ b/gpu.cmake
@@ -29,7 +29,7 @@ IF (BUILD_VF_GPU)
     # add_subdirectory(apps/gpu/LBM/DrivenCavityMultiGPU)
     # add_subdirectory(apps/gpu/LBM/SphereGPU)
     # add_subdirectory(apps/gpu/LBM/TGV_3D_MultiGPU)
-    add_subdirectory(apps/gpu/LBM/BoundaryLayer)
+    # add_subdirectory(apps/gpu/LBM/BoundaryLayer)
 ELSE()
     MESSAGE( STATUS "exclude Virtual Fluids GPU." )
 ENDIF()
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
index f635c34b1f32bc10f6615e826bd315c010cabbdf..d14e6ad4f98a889e68d09375c2b9ed3a582b9ef3 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
@@ -218,7 +218,7 @@ __global__ void applyBodyForces(real* gridCoordsX, real* gridCoordsY, real* grid
                 rotateFromBladeToGlobal(bladeForcesX[node], bladeForcesY[node], bladeForcesZ[node], 
                                         forceX_RF, forceY_RF, forceZ_RF, 
                                         localAzimuth, yaw);
-
+                                        
                 gridForceX_RF += forceX_RF*eta;
                 gridForceY_RF += forceY_RF*eta;
                 gridForceZ_RF += forceZ_RF*eta;
@@ -246,6 +246,7 @@ __global__ void applyBodyForces(real* gridCoordsX, real* gridCoordsY, real* grid
             gridForceZ_RF += forceZ_RF*eta;
         }
     }
+
     gridForcesX[gridIndex] += gridForceX_RF;
     gridForcesY[gridIndex] += gridForceY_RF;
     gridForcesZ[gridIndex] += gridForceZ_RF;
@@ -341,7 +342,6 @@ void ActuatorFarm::calcForcesEllipticWing()
     real Cl = c1o1;
     real Cd = c0o1;
     real c0 = c1o1;
-
     real c, Cn, Ct;
     for(uint turbine=0; turbine<this->numberOfTurbines; turbine++)
     {
@@ -361,7 +361,6 @@ void ActuatorFarm::calcForcesEllipticWing()
                 c = c0 * sqrt( c1o1- tmp*tmp );
                 Cn = Cl*cos(phi)+Cd*sin(phi);
                 Ct = Cl*sin(phi)-Cd*cos(phi);
-            
                 this->bladeForcesXH[node] = -c1o2*u_rel_sq*c*this->density*Cn;
                 this->bladeForcesYH[node] = -c1o2*u_rel_sq*c*this->density*Ct;
                 this->bladeForcesZH[node] = c0o1;
@@ -372,7 +371,8 @@ void ActuatorFarm::calcForcesEllipticWing()
 
 void ActuatorFarm::calcBladeForces()
 {
-    // this->calcForcesEllipticWing();
+    if(this->useCalcForcesEllipticWing) 
+        this->calcForcesEllipticWing();
 }
 
 void ActuatorFarm::getTaggedFluidNodes(Parameter *para, GridProvider* gridProvider)
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
index 12b552d239af5ff9399bec8afd8171477afd3099..acdd47096db8c2494c22b345a2eacdea2b38131c 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
@@ -137,6 +137,8 @@ public:
     void setTurbineBladeVelocities(uint turbine, real* _bladeVelocitiesX, real* _bladeVelocitiesY, real* _bladeVelocitiesZ);
     void setTurbineBladeForces(uint turbine, real* _bladeForcesX, real* _bladeForcesY, real* _bladeForcesZ);
 
+    void setUseCalcForcesEllipticWing(bool _useCalcForcesEllipticWing){ this->useCalcForcesEllipticWing = _useCalcForcesEllipticWing; }
+
     virtual void calcBladeForces();
 
 private:
@@ -179,6 +181,7 @@ private:
     std::vector<real> preInitPosX, preInitPosY, preInitPosZ, preInitDiameters, preInitOmegas, preInitAzimuths, preInitYaws;
     std::vector<std::vector<real>> preInitBladeRadii;
     const bool useHostArrays;
+    bool useCalcForcesEllipticWing = false;
     const real density;
     real deltaT, deltaX;
     const uint numberOfBladeNodes, numberOfBlades;