diff --git a/apps/benchmarks/SchaeferTurek/CMakeLists.txt b/apps/benchmarks/SchaeferTurek/CMakeLists.txt
index 9617c85e89c1137870f5c3a971d557275559142f..67fe8d84c23f811c28f2fb99f07dc3073190e86a 100644
--- a/apps/benchmarks/SchaeferTurek/CMakeLists.txt
+++ b/apps/benchmarks/SchaeferTurek/CMakeLists.txt
@@ -2,3 +2,5 @@
 waLBerla_link_files_to_builddir( "*.dat" )   
                                   
 waLBerla_add_executable( NAME SchaeferTurek DEPENDS blockforest boundary core field lbm postprocessing stencil timeloop vtk )
+
+waLBerla_execute_test( NO_MODULE_LABEL NAME SchaeferTurekTest COMMAND $<TARGET_FILE:SchaeferTurek> Test2D.dat PROCESSES 4 CONFIGURATIONS Release RelWithDbgInfo )
\ No newline at end of file
diff --git a/apps/benchmarks/SchaeferTurek/Test2D.dat b/apps/benchmarks/SchaeferTurek/Test2D.dat
new file mode 100644
index 0000000000000000000000000000000000000000..4e7e93431613d1b748e7ab2e7709cf40fd35de1f
--- /dev/null
+++ b/apps/benchmarks/SchaeferTurek/Test2D.dat
@@ -0,0 +1,274 @@
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                                                      //
+//                                               Schaefer Turek Benchmark                                               //
+//                                                                                                                      //
+// Reference: Schaefer, M. and Turek, S. (1996) 'Benchmark computations of laminar flow around a cylinder (with support //
+//            by F. Durst, E. Krause and R. Rannacher), in E. Hirschel (Ed.): Flow Simulation with High-Performance     //
+//            Computers II. DFG Priority Research Program Results 1993-1995, No. 52 in Notes Numer, Fluid Mech.,        //
+//            pp.547-566, Vieweg, Weisbaden.                                                                            //
+//                                                                                                                      //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+SchaeferTurek
+{
+   // 3 different modes of operation:
+   // -------------------------------
+   // NO sbffile and NO saveToFile -> domain decomposition is created on the fly and simulation is run
+   //    sbffile and NO saveToFile -> domain decomposition is loaded from file and simulation is run
+   //    sbffile and    saveToFile -> domain decomposition is created and saved to file (simulation is NOT run!)
+
+   // sbffile grid.sbf;
+   
+   // blocksPerProcess 4;
+   // saveToFile; // does not require additional arguments
+   
+   outputSetupForest true; // generates: "domain_decomposition.vtk" and "process_distribution.csv"
+
+   //////////////////////////////
+   // GENERAL SIMULATION SPECS //
+   //////////////////////////////
+   
+   memoryPerCell      153; // in bytes
+   processMemoryLimit 2048; // in MiB !
+   
+   yzBlocks 3; // blocks in y- and z-direction [2D: only 1 block in z-direction]
+   // The number of blocks in x-direction is calculated from: H, L, yzBlocks, xCells, and yzCells.
+   
+   xCells  32; // number of cells in x-direction for each block
+   yzCells 32; // number of cells in y- and z-direction for each block [2D: only affects y-direction]
+   
+   H 0.41; // [m]
+   L 2.20; // [m] (2.5 [3D], 2.2 [2D])
+   strictlyObeyL true; // true = outflow will be located exactly at "L", false = outflow might be slightly further away than "L"
+   
+   cylinderxPosition    0.2;  // [m] (0.5 [3D], 0.2 [2D])
+   cylinderyPosition    0.2;  // [m]
+   cylinderRadius       0.05; // [m]
+   circularCrossSection true; // true = obstacle is a true cylinder, false = obstacle is a box
+   
+   kinViscosity   0.001; // [m^2/s]
+   rho            1;     // [kg/m^3]
+   
+   inflowVelocity 0.3; // [m/s] (0.45 [3D], 2.25 [3D], 0.3 [2D], 1.5 [2D])
+   raisingTime    1;   // [s]
+   sinPeriod      0;   // [s] (0 == no sinus term)
+   
+   obstacleBoundary 0; // 0 = staircase, 1 = curved
+   outletType       3; // 0 = pressure, 1 = outlet (2/1), 2 = outlet (4/3)
+   
+   initWithVelocity false; // at the beginning of the simulation everything is set to: ( 4 * inflowVelocity ) / 9 [3D] or ( 2 * inflowVelocity ) / 3 [2D] 
+   
+   evaluateForceComponents false; // might be nice for debugging purposes - but: involves calculation of median and stdDeviation for
+                                  // potentially a lot of cells in parallel -> can severely decrease performance
+   
+   nbrOfEvaluationPointsForCoefficientExtremas 100;
+   
+   evaluatePressure true;
+   pAlpha < 0.15, 0.2, 0.205 >; // points for evaluating
+   pOmega < 0.25, 0.2, 0.205 >; // the pressure difference
+   
+   evaluateStrouhal false;
+   pStrouhal < 0.7, 0.325, 0.205 >; // point used for evaluating the vortex shedding frequency and the Strouhal number
+   
+   ///////////////////////
+   // WHERE TO REFINE ? //
+   ///////////////////////
+   
+   useCylinderForRefinement false;
+   cylinderRefinementLevel  1; // if "useCylinderForRefinement" is true, everything around the cylinder is refined to this level
+   cylinderRefinementBuffer 0.05; // [m] - additional space around the cylinder that is also guaranteed to be at level "cylinderRefinementLevel"
+   
+   AABBRefinementSelection
+   {
+      // coordinates of AABBs are in [m]
+      /*
+      AABB
+      {
+         level 2;
+         AABB [ <0,0,0>, <0.05,0.41,0.41> ];
+      }
+      */
+      /*
+      AABB
+      {
+         level 1;
+         AABB [ <0,0,0>, <0.7,0.41,0.41> ];
+      }
+      */
+      // coordinates of Regions are always in [0,1] -> the entire simulation space is mapped to [ <0,0,0>, <1,1,1> ]
+      /*
+      Region
+      {
+         level 1;
+         region [ <0,0,0>, <1,1,1> ];
+      }
+      */
+   }
+   
+   ////////////////////////////
+   // RUNNING THE SIMULATION //
+   ////////////////////////////
+   
+   outerTimeSteps     1; // total number of time steps = outerTimeSteps * innerTimeSteps
+   innerTimeSteps     1; // For each outer loop, performance data is logged.
+   
+   evaluationCheckFrequency 10;   // 1;
+   evaluationLogToStream    true; // false;
+   evaluationLogToFile      true;
+   evaluationFilename       SchaeferTurek.txt;
+   
+   MassEvaluation
+   {
+      plotFrequency 0;
+      logFrequency  0;
+      filename      Mass.txt;
+   }
+   
+   StabilityChecker
+   {
+      checkFrequency     100;
+      streamOutput       false;
+      vtkOutput          true;
+      vtkBaseFolder      stability_check;
+      vtkBinary          true;
+      vtkLittleEndian    true;
+      vtkMPIIO           true;
+   }
+   
+   remainingTimeLoggerFrequency 3; // in seconds
+   
+   vtkBeforeTimeStep true; // false = at the end of time step
+   
+   logToSqlDB true;
+   sqlFile simulation.sqlite; // database used for logging the performance and accuracy of the simulation
+                              // logging is done every "innerTimeSteps" time steps
+   
+   ///////////////////////////
+   // SRT - TRT - MRT setup //
+   ///////////////////////////
+   
+   omega 1.5;
+   
+   // magicNumber 0.25; // Used to setup TRT and MRT in case if and only if no additional parameters
+                        // except 'omega' are specified here in the input file. [default: 0.1875]
+   
+   // lambda_e 1.98; // If "--trt" is used AND 'lambda_e' and 'lambda_d' are both specified here
+   // lambda_d 1.95; // in the input file then these two parameters are used for setting up TRT.
+                     // Otherwise 'omega' is used to set up TRT.
+   
+   // Setting up TRT to mimic SRT: set lambda_e and lambda_d to the same value
+                  
+   // If "--mrt" is used AND 's1', 's2', 's4', 's9', 's10', and 's16' are all specified here in the input file
+   // then these parameters are used for setting up MRT. Otherwise 'omega' is used to set up MRT.
+   // s1  1.19; // s_e
+   // s2  1.4;  // s_epsilon
+   // s4  1.2;  // s_q
+   // s9  1.99; // s_nu
+   // s10 1.4;  // s_pi
+   // s16 1.98; // s_m
+   
+   // Setting up MRT to mimic SRT: set all parameters to the same value
+   // Setting up MRT to mimic TRT: set s1, s2, s9, and s10 to lambda_e and s4 and s16 to lambda_d
+   
+   relaxationParametersLevel 0;
+   
+   //////////////////
+   // CHECK AT END //
+   //////////////////
+   
+   check false;
+   
+   checkCDRealAreaLowerBound -1E6; // lower bound for the drag coefficient ("real" cylinder area used for evaluation)
+   checkCDRealAreaUpperBound  1E6; // upper bound for the drag coefficient ("real" cylinder area used for evaluation)
+   
+   checkCLRealAreaLowerBound -1E6; // lower bound for the lift coefficient ("real" cylinder area used for evaluation)
+   checkCLRealAreaUpperBound  1E6; // upper bound for the lift coefficient ("real" cylinder area used for evaluation)
+   
+   checkCDDiscreteAreaLowerBound -1E6; // lower bound for the drag coefficient ("discrete" cylinder area used for evaluation)
+   checkCDDiscreteAreaUpperBound  1E6; // upper bound for the drag coefficient ("discrete" cylinder area used for evaluation)
+   
+   checkCLDiscreteAreaLowerBound -1E6; // lower bound for the lift coefficient ("discrete" cylinder area used for evaluation)
+   checkCLDiscreteAreaUpperBound  1E6; // upper bound for the lift coefficient ("discrete" cylinder area used for evaluation)
+   
+   checkPressureDiffLowerBound -1E6; // lower bound for the pressure difference (only checked if "evaluatePressure" is set to true)
+   checkPressureDiffUpperBound  1E6; // upper bound for the pressure difference (only checked if "evaluatePressure" is set to true)
+   
+   checkStrouhalNbrRealDLowerBound -1E6; // lower bound for the Strouhal number (only checked if "evaluateStrouhal" is set to true - "real" cylinder diameter used for evaluation)
+   checkStrouhalNbrRealDUpperBound  1E6; // upper bound for the Strouhal number (only checked if "evaluateStrouhal" is set to true - "real" cylinder diameter used for evaluation)
+   
+   checkStrouhalNbrDiscreteDLowerBound -1E6; // lower bound for the Strouhal number (only checked if "evaluateStrouhal" is set to true - "discrete" cylinder diameter used for evaluation)
+   checkStrouhalNbrDiscreteDUpperBound  1E6; // upper bound for the Strouhal number (only checked if "evaluateStrouhal" is set to true - "discrete" cylinder diameter used for evaluation)
+}
+
+
+
+VTK
+{
+   /*
+   fluid_field
+   {
+      baseFolder vtk;
+   
+      writeFrequency 33; // -> 30 fps
+      ghostLayers     1;
+      
+      AABB_filter_0 {
+         min < 0,   0,    0.20 >;
+         max < 2.5, 0.41, 0.21 >;         
+      }
+      
+    //AABB_filter_0 {
+    //   min < 0.45, 0.15,    0 >;
+    //   max < 0.55, 0.25, 0.41 >;         
+    //}
+      
+      before_functions {
+         PDFGhostLayerSync;
+      }
+      
+      inclusion_filters {
+       //FluidFilter;
+         combine FluidFilter,AABB_filter_0;
+      }
+      
+      writers {
+         VelocityFromPDF;
+       //VelocityMagnitudeFromPDF;
+         DensityFromPDF;
+       //NonEquPart;
+       //PDF;
+      }
+   }
+   */
+   
+   /*
+   flag_field
+   {
+      baseFolder vtk;
+   
+      writeFrequency 1000000000; // = write once at the beginning
+      ghostLayers    0;
+      
+    //AABB_filter_0 {
+    //   min <   0,    0,        0 >;
+    //   max < 300, 1000, 10000000 >;
+    //}
+    //inclusion_filters {
+    //   AABB_filter_0;
+    //}
+      
+      writers {
+         FlagField;
+      }
+   }
+   */
+  
+   /*
+   domain_decomposition
+   {
+      baseFolder vtk;
+      writeFrequency 1000000000; // = write once at the beginning
+      outputDomainDecomposition true;
+   }
+   */
+}
diff --git a/src/field/blockforest/BlockDataHandling.h b/src/field/blockforest/BlockDataHandling.h
index 3b53ab933c670ae5141d3f01e319a41fcd48e4cc..3e73314c69633274a2647fecb2f5a848bfffa638 100644
--- a/src/field/blockforest/BlockDataHandling.h
+++ b/src/field/blockforest/BlockDataHandling.h
@@ -458,18 +458,18 @@ public:
    typedef boost::function< void ( GhostLayerField_T * field, IBlock * const block ) > InitializationFunction_T;
 
    AlwaysInitializeBlockDataHandling( const weak_ptr< StructuredBlockStorage > & blocks,
-                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) >() ) :
+                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = internal::defaultSize ) :
       blocks_( blocks ), nrOfGhostLayers_( uint_t(1) ), initValue_(), layout_( zyxf ), calculateSize_( calculateSize )
    {}
 
    AlwaysInitializeBlockDataHandling( const weak_ptr< StructuredBlockStorage > & blocks, const uint_t nrOfGhostLayers,
-                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) >() ) :
+                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = internal::defaultSize ) :
       blocks_( blocks ), nrOfGhostLayers_( nrOfGhostLayers ), initValue_(), layout_( zyxf ), calculateSize_( calculateSize )
    {}
 
    AlwaysInitializeBlockDataHandling( const weak_ptr< StructuredBlockStorage > & blocks, const uint_t nrOfGhostLayers,
-                                      const Value_T & initValue, const Layout layout = zyxf,
-                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) >() ) :
+                                      const Value_T & initValue, const Layout layout,
+                                      const boost::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = internal::defaultSize ) :
       blocks_( blocks ), nrOfGhostLayers_( nrOfGhostLayers ), initValue_( initValue ), layout_( layout ), calculateSize_( calculateSize )
    {
       static_assert( !boost::is_same< GhostLayerField_T, FlagField< Value_T > >::value,