diff --git a/apps/showcases/FreeSurface/BubblyPoiseuille.cpp b/apps/showcases/FreeSurface/BubblyPoiseuille.cpp
index 00ae3e9f495e5ca7f465dcfff85100288eac5842..f3726c24553e51590e1d6abbec03141b440f1614 100644
--- a/apps/showcases/FreeSurface/BubblyPoiseuille.cpp
+++ b/apps/showcases/FreeSurface/BubblyPoiseuille.cpp
@@ -286,8 +286,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
 
       bubbleModel = std::static_pointer_cast< bubble_model::BubbleModelBase >(bubbleModelDerived);
diff --git a/apps/showcases/FreeSurface/CapillaryWave.cpp b/apps/showcases/FreeSurface/CapillaryWave.cpp
index d36003bc023db76f5b65c256c02857040452d278..2a6ebb2770b678da71b154878d86ec64316559e9 100644
--- a/apps/showcases/FreeSurface/CapillaryWave.cpp
+++ b/apps/showcases/FreeSurface/CapillaryWave.cpp
@@ -356,8 +356,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), uint_c(0)),
                                         real_c(1));
diff --git a/apps/showcases/FreeSurface/DamBreakCylindrical.cpp b/apps/showcases/FreeSurface/DamBreakCylindrical.cpp
index 129cda8de97d38b1c4d0b48614d0a09ced8f70ea..d082b5fcca40148d7e79caeceec2d396cd41c686 100644
--- a/apps/showcases/FreeSurface/DamBreakCylindrical.cpp
+++ b/apps/showcases/FreeSurface/DamBreakCylindrical.cpp
@@ -465,8 +465,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(
          Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), domainSize[2] - uint_c(1)), real_c(1));
diff --git a/apps/showcases/FreeSurface/DamBreakRectangular.cpp b/apps/showcases/FreeSurface/DamBreakRectangular.cpp
index e3a4a5e4e0ac257caedac82631069b64e6142e0d..6c7109b16c100adc40806444f64c5aa014f761b3 100644
--- a/apps/showcases/FreeSurface/DamBreakRectangular.cpp
+++ b/apps/showcases/FreeSurface/DamBreakRectangular.cpp
@@ -454,8 +454,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), uint_c(0)),
                                         real_c(1));
diff --git a/apps/showcases/FreeSurface/DropImpact.cpp b/apps/showcases/FreeSurface/DropImpact.cpp
index 143885a05538da4452ff2cff491e9a010fc39de2..e5df0d56d0e818316c74745b1aac3245097f08e7 100644
--- a/apps/showcases/FreeSurface/DropImpact.cpp
+++ b/apps/showcases/FreeSurface/DropImpact.cpp
@@ -279,8 +279,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(
          Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), domainSize[2] - uint_c(1)), real_c(1));
diff --git a/apps/showcases/FreeSurface/DropWetting.cpp b/apps/showcases/FreeSurface/DropWetting.cpp
index 20445deadacfbdda832dac862bf997006dd82066..c2aca47f5942fc980af0be4faebcbecdaa32b101 100644
--- a/apps/showcases/FreeSurface/DropWetting.cpp
+++ b/apps/showcases/FreeSurface/DropWetting.cpp
@@ -316,8 +316,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(
          Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), domainSize[2] - uint_c(1)), real_c(1));
diff --git a/apps/showcases/FreeSurface/GravityWave.cpp b/apps/showcases/FreeSurface/GravityWave.cpp
index 6faca3c70eb392845872bfb2b4e701519db7326d..10b52e2669eb0d4ba769a2480e869fe5d37a7f7a 100644
--- a/apps/showcases/FreeSurface/GravityWave.cpp
+++ b/apps/showcases/FreeSurface/GravityWave.cpp
@@ -446,8 +446,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), uint_c(0)),
                                         real_c(1));
diff --git a/apps/showcases/FreeSurface/GravityWaveCodegen.cpp b/apps/showcases/FreeSurface/GravityWaveCodegen.cpp
index a6b41aea0bc98dfd558dabe42f12a50675263df3..1658f9290a5de95efcf7a39070b5e81c7c4f9ed8 100644
--- a/apps/showcases/FreeSurface/GravityWaveCodegen.cpp
+++ b/apps/showcases/FreeSurface/GravityWaveCodegen.cpp
@@ -447,8 +447,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), uint_c(0)),
                                         real_c(1));
diff --git a/apps/showcases/FreeSurface/MovingDrop.cpp b/apps/showcases/FreeSurface/MovingDrop.cpp
index 478ee193c7ba3c70bb6f9eb8e3b91ae9ce2b307e..9ddba4ae88c660257606bf0bc57968d07dc8055e 100644
--- a/apps/showcases/FreeSurface/MovingDrop.cpp
+++ b/apps/showcases/FreeSurface/MovingDrop.cpp
@@ -243,8 +243,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
       bubbleModelDerived->setAtmosphere(
          Cell(domainSize[0] - uint_c(1), domainSize[1] - uint_c(1), domainSize[2] - uint_c(1)), real_c(1));
diff --git a/apps/showcases/FreeSurface/RisingBubble.cpp b/apps/showcases/FreeSurface/RisingBubble.cpp
index 3dabdf5da79d90ede7a87400c858f8230b9ebe47..1dbe5566dc76a45ef3e908826f733cfb6d7ef078 100644
--- a/apps/showcases/FreeSurface/RisingBubble.cpp
+++ b/apps/showcases/FreeSurface/RisingBubble.cpp
@@ -324,8 +324,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
 
       bubbleModel = std::static_pointer_cast< bubble_model::BubbleModelBase >(bubbleModelDerived);
diff --git a/apps/showcases/FreeSurface/TaylorBubble.cpp b/apps/showcases/FreeSurface/TaylorBubble.cpp
index 3ec4eea3d58f64688d26d6a4d58c439eaeb962f9..16dc2087c53ac05f011dfed53563be324c042489 100644
--- a/apps/showcases/FreeSurface/TaylorBubble.cpp
+++ b/apps/showcases/FreeSurface/TaylorBubble.cpp
@@ -354,8 +354,8 @@ int main(int argc, char** argv)
    std::shared_ptr< bubble_model::BubbleModelBase > bubbleModel = nullptr;
    if (enableBubbleModel)
    {
-      const std::shared_ptr< bubble_model::BubbleModel< CommunicationStencil_T > > bubbleModelDerived =
-         std::make_shared< bubble_model::BubbleModel< CommunicationStencil_T > >(blockForest, enableBubbleSplits);
+      const std::shared_ptr< bubble_model::BubbleModel< LatticeModelStencil_T > > bubbleModelDerived =
+         std::make_shared< bubble_model::BubbleModel< LatticeModelStencil_T > >(blockForest, enableBubbleSplits);
       bubbleModelDerived->initFromFillLevelField(fillFieldID);
 
       bubbleModel = std::static_pointer_cast< bubble_model::BubbleModelBase >(bubbleModelDerived);
diff --git a/apps/showcases/FreeSurface/TaylorBubble.prm b/apps/showcases/FreeSurface/TaylorBubble.prm
index a2b289aeeb75b6a9e2c57819602b595c755da687..ee3d8c9f56179798028ebe4e074988a36515549d 100644
--- a/apps/showcases/FreeSurface/TaylorBubble.prm
+++ b/apps/showcases/FreeSurface/TaylorBubble.prm
@@ -8,7 +8,7 @@ BlockForestParameters
 
 DomainParameters
 {
-   tubeDiameter      32;
+   tubeDiameter      16;
    bubbleDiameter    0.75;             // value multiplied with tubeDiameter
    bubbleHeight      3;                // value multiplied with tubeDiameter
    bubbleBottomEnd   < 0.5, 0.5, 1 >;  // initial cylindrical bubble's bottom end center (values multiplied with tubeDiameter)
diff --git a/src/lbm/free_surface/bubble_model/BubbleModel.h b/src/lbm/free_surface/bubble_model/BubbleModel.h
index a22d540eaac0904f62d7652c0f2c5e91c66a900c..a71a47fb398003d153879183805a26887e2736bd 100644
--- a/src/lbm/free_surface/bubble_model/BubbleModel.h
+++ b/src/lbm/free_surface/bubble_model/BubbleModel.h
@@ -209,7 +209,7 @@ class BubbleModel : public BubbleModelBase
    MergeInformation mergeInformation_;
 
    // communication scheme for the bubble field
-   blockforest::communication::UniformBufferedScheme< Stencil_T > bubbleFieldCommunication_;
+   blockforest::communication::UniformBufferedScheme< StencilForSplit_T > bubbleFieldCommunication_;
 
    // store split information, i.e., hints for splitting; store only hints since merges have to be processed first
    struct SplitHint