diff --git a/include/GenericHbbBoundary.hpp b/include/GenericHbbBoundary.hpp
index a81ec7437af92ccd810ece7a61aadcc334fc3605..cf9e954ab824fdd29404ecb3c05f7b983a1a5159 100644
--- a/include/GenericHbbBoundary.hpp
+++ b/include/GenericHbbBoundary.hpp
@@ -69,22 +69,22 @@ public:
   using Stencil      = Stencil_T;
   using IndexVectors = BoundaryIndexVectors< HbbLink >;
 
-  GenericHbbBoundary(const std::shared_ptr< StructuredBlockForest >& blocks)
+  GenericHbbBoundary(StructuredBlockForest& blocks)
   {
     auto createIdxVector = [](IBlock* const, StructuredBlockStorage* const) { return new IndexVectors(); };
-    indexVectorsId_      = blocks->addStructuredBlockData< IndexVectors >(createIdxVector);
+    indexVectorsId_      = blocks.addStructuredBlockData< IndexVectors >(createIdxVector);
   }
 
   template< typename FlagField_T >
-  void fillFromFlagField(const shared_ptr< StructuredBlockForest >& blocks, ConstBlockDataID flagFieldID,
+  void fillFromFlagField(StructuredBlockForest& blocks, ConstBlockDataID flagFieldID,
                          FlagUID boundaryFlagUID, FlagUID domainFlagUID)
   {
-    for (auto blockIt = blocks->begin(); blockIt != blocks->end(); ++blockIt)
-      fillFromFlagField< FlagField_T >(&*blockIt, flagFieldID, boundaryFlagUID, domainFlagUID);
+    for (auto & block: blocks)
+      fillFromFlagField< FlagField_T >(block, flagFieldID, boundaryFlagUID, domainFlagUID);
   }
 
   template< typename FlagField_T >
-  void fillFromFlagField(IBlock* block, ConstBlockDataID flagFieldID, FlagUID boundaryFlagUID, FlagUID domainFlagUID);
+  void fillFromFlagField(IBlock& block, ConstBlockDataID flagFieldID, FlagUID boundaryFlagUID, FlagUID domainFlagUID);
 
 protected:
   BlockDataID indexVectorsId_;
@@ -92,12 +92,12 @@ protected:
 
 template< typename Stencil_T >
 template< typename FlagField_T >
-void GenericHbbBoundary< Stencil_T >::fillFromFlagField(IBlock* block, ConstBlockDataID flagFieldID,
+void GenericHbbBoundary< Stencil_T >::fillFromFlagField(IBlock& block, ConstBlockDataID flagFieldID,
                                                                 FlagUID boundaryFlagUID, FlagUID domainFlagUID)
 {
-  auto* indexVectors   = block->getData< IndexVectors >(indexVectorsId_);
+  auto* indexVectors   = block.getData< IndexVectors >(indexVectorsId_);
   auto& indexVectorAll = indexVectors->vector();
-  auto* flagField      = block->getData< FlagField_T >(flagFieldID);
+  auto* flagField      = block.getData< FlagField_T >(flagFieldID);
 
   if (!(flagField->flagExists(boundaryFlagUID) && flagField->flagExists(domainFlagUID))) return;
 
diff --git a/src/sfg_walberla/api.py b/src/sfg_walberla/api.py
index f5d391a9728ff4a57c7cab5e6a8999bcef0a2c3e..b9f78ada79600cbeafe857990c0ed437e1acc28e 100644
--- a/src/sfg_walberla/api.py
+++ b/src/sfg_walberla/api.py
@@ -24,7 +24,7 @@ class Vector2(SrcVector):
     def extract_component(self, coordinate: int) -> AugExpr:
         if coordinate > 1:
             raise ValueError(f"Cannot extract component {coordinate} from Vector2")
-        
+
         return AugExpr(self._value_type).bind("{}[{}]", self, coordinate)
 
 
@@ -66,9 +66,19 @@ class StructuredBlockForest:
     @staticmethod
     def shared_ptr_ref(name, const: bool = False):
         const_str = "const " if const else ""
-        dtype = PsCustomType(f"std::shared_ptr< {const_str}walberla::StructuredBlockForest >", const=True)
+        dtype = PsCustomType(
+            f"std::shared_ptr< {const_str}walberla::StructuredBlockForest >", const=True
+        )
         return AugExpr(Ref(dtype)).var(name)
 
+    @staticmethod
+    def ref_type(const: bool = False):
+        return Ref(PsCustomType("walberla::StructuredBlockForest", const=const))
+
+    @staticmethod
+    def ref(name, const: bool = False):
+        return AugExpr(StructuredBlockForest.ref_type(const)).var(name)
+
 
 class GhostLayerFieldPtr(SrcField):
 
diff --git a/src/sfg_walberla/boundaries/hbb.py b/src/sfg_walberla/boundaries/hbb.py
index 97db11db6c82e07111d6e93d6848aa15d5632b0d..49d0830ee3fb6361fe91371e256eda29bcae8c26 100644
--- a/src/sfg_walberla/boundaries/hbb.py
+++ b/src/sfg_walberla/boundaries/hbb.py
@@ -66,7 +66,7 @@ class BoundaryIndexVectorsPtr(SrcField):
 
 class HbbBoundaryProperties(SweepClassProperties):
     def _constructor(self, sfg: SfgComposer) -> SfgClassComposer.ConstructorBuilder:
-        sbfs = StructuredBlockForest.shared_ptr_ref("blocks")
+        sbfs = StructuredBlockForest.ref("blocks")
         return sfg.constructor(sbfs).init("GenericHbbBoundary")(sbfs)
 
 
diff --git a/src/sfg_walberla/sweep.py b/src/sfg_walberla/sweep.py
index 59f7b387074921c572e8b6b161aa92a3c25e7a7d..89e4114f99cd5bbc3ad7411e342cba20f337ee82 100644
--- a/src/sfg_walberla/sweep.py
+++ b/src/sfg_walberla/sweep.py
@@ -21,7 +21,7 @@ from pystencils.types import PsType, constify, deconstify, PsCustomType
 
 from pystencilssfg import SfgComposer
 from pystencilssfg.lang import VarLike, asvar, SfgVar, AugExpr, Ref, SrcVector
-from .api import GhostLayerFieldPtr, IBlockPtr, BlockDataID, Vector2, Vector3
+from .api import StructuredBlockForest, GhostLayerFieldPtr, IBlockPtr, BlockDataID, Vector2, Vector3
 
 
 class SweepClassProperties:
@@ -31,6 +31,7 @@ class SweepClassProperties:
         dtype: PsType
         getter: bool
         setter: bool
+        initializer: AugExpr | None = None
 
         def __post_init__(self):
             if self.dtype.const and self.setter:
@@ -103,10 +104,21 @@ class SweepClassProperties:
         ctor = self._constructor(sfg)
 
         for p in self.properties:
-            ctor.add_param(p.var)
+            if p.initializer is None:
+                ctor.add_param(p.var)
+            else:
+                for var in p.initializer.depends:
+                    if var not in ctor.parameters:
+                        if deconstify(var.dtype) == StructuredBlockForest.ref_type():
+                            ctor.add_param(var, 0)
+                        else:
+                            ctor.add_param(var)
 
         for p in self._properties.values():
-            ctor.init(p.member_var)(p.var)
+            if p.initializer is not None:
+                ctor.init(p.member_var)(p.initializer)
+            else:
+                ctor.init(p.member_var)(p.var)
 
         methods = chain.from_iterable(p.make_methods(sfg) for p in self.properties)
         pub = sfg.public(ctor, *(methods))