diff --git a/apps/showcases/LeesEdwards/LeesEdwards.cpp b/apps/showcases/LeesEdwards/LeesEdwards.cpp
index d93b93eff876d051708b70ecd88747514cc9acd0..77c7462a04f08a59fee99646da1a3b58b51b08ed 100644
--- a/apps/showcases/LeesEdwards/LeesEdwards.cpp
+++ b/apps/showcases/LeesEdwards/LeesEdwards.cpp
@@ -44,8 +44,8 @@ using FlagField_T = FlagField< flag_t >;
 class LeesEdwardsUpdate
 {
  public:
-   LeesEdwardsUpdate(const shared_ptr< StructuredBlockForest >& blocks, BlockDataID fieldID, real_t offset)
-      : blocks_(blocks), fieldID_(fieldID), offset_(offset)
+   LeesEdwardsUpdate(const shared_ptr< StructuredBlockForest >& blocks, BlockDataID fieldID, BlockDataID tmpfieldID, real_t offset)
+      : blocks_(blocks), fieldID_(fieldID), tmpfieldID_(tmpfieldID), offset_(offset)
    {}
 
    void operator()(IBlock* block)
@@ -61,10 +61,12 @@ class LeesEdwardsUpdate
          real_t weight      = fmod(offset_ + real_c(dimension_x), 1.0);
 
          auto pdf_field = block->getData< PdfField_T >(fieldID_);
+         auto pdf_tmp_field = block->getData< PdfField_T >(tmpfieldID_);
 
          CellInterval ci;
          pdf_field->getGhostRegion(stencil::N, ci, 1, true);
 
+         // shift
          for (auto cell = ci.begin(); cell != ci.end(); ++cell)
          {
             cell_idx_t x = cell->x();
@@ -74,8 +76,17 @@ class LeesEdwardsUpdate
 
             for (uint_t q = 0; q < Stencil_T::Q; ++q)
             {
-               pdf_field->get(*cell, q) = (1 - weight) * pdf_field->get(cell_idx_c(ind1), cell->y(), cell->z(), q) +
-                                          weight * pdf_field->get(cell_idx_c(ind2), cell->y(), cell->z(), q);
+               pdf_tmp_field->get(*cell, q) = (1 - weight) * pdf_field->get(cell_idx_c(ind1), cell->y(), cell->z(), q) +
+                                              weight * pdf_field->get(cell_idx_c(ind2), cell->y(), cell->z(), q);
+            }
+         }
+
+         // swap
+         for (auto cell = ci.begin(); cell != ci.end(); ++cell)
+         {
+            for (uint_t q = 0; q < Stencil_T::Q; ++q)
+            {
+               pdf_field->get(*cell, q) = pdf_tmp_field->get(*cell, q);
             }
          }
       }
@@ -86,10 +97,12 @@ class LeesEdwardsUpdate
          real_t weight      = fmod(offset_ + real_c(dimension_x), 1.0);
 
          auto pdf_field = block->getData< PdfField_T >(fieldID_);
+         auto pdf_tmp_field = block->getData< PdfField_T >(tmpfieldID_);
 
          CellInterval ci;
          pdf_field->getGhostRegion(stencil::S, ci, 1, true);
 
+         // shift
          for (auto cell = ci.begin(); cell != ci.end(); ++cell)
          {
             cell_idx_t x = cell->x();
@@ -99,8 +112,17 @@ class LeesEdwardsUpdate
 
             for (uint_t q = 0; q < Stencil_T::Q; ++q)
             {
-               pdf_field->get(*cell, q) = (1 - weight) * pdf_field->get(cell_idx_c(ind1), cell->y(), cell->z(), q) +
-                                          weight * pdf_field->get(cell_idx_c(ind2), cell->y(), cell->z(), q);
+               pdf_tmp_field->get(*cell, q) = (1 - weight) * pdf_field->get(cell_idx_c(ind1), cell->y(), cell->z(), q) +
+                                              weight * pdf_field->get(cell_idx_c(ind2), cell->y(), cell->z(), q);
+            }
+         }
+
+         // swap
+         for (auto cell = ci.begin(); cell != ci.end(); ++cell)
+         {
+            for (uint_t q = 0; q < Stencil_T::Q; ++q)
+            {
+               pdf_tmp_field->get(*cell, q) = pdf_field->get(*cell, q);
             }
          }
       }
@@ -109,6 +131,7 @@ class LeesEdwardsUpdate
  private:
    const shared_ptr< StructuredBlockForest >& blocks_;
    BlockDataID fieldID_;
+   BlockDataID tmpfieldID_;
    real_t offset_;
 };
 
@@ -129,6 +152,7 @@ int main(int argc, char** argv)
 
    // create fields
    BlockDataID pdfFieldID     = field::addToStorage< PdfField_T >(blocks, "PDFs", real_t(1.0), field::fzyx);
+   BlockDataID pdfTmpFieldID  = field::addToStorage< PdfField_T >(blocks, "TmpPDFs", real_t(1.0), field::fzyx);
    BlockDataID velFieldID     = field::addToStorage< VectorField_T >(blocks, "velocity", real_t(0), field::fzyx);
    BlockDataID forceFieldID   = field::addToStorage< VectorField_T >(blocks, "force", real_t(0), field::fzyx);
    BlockDataID densityFieldID = field::addToStorage< ScalarField_T >(blocks, "density", real_t(1.0), field::fzyx);
@@ -150,7 +174,7 @@ int main(int argc, char** argv)
    // add LBM sweep and communication to time loop
    timeloop.add() << Sweep(CollisionSweep, "collision");
    timeloop.add() << BeforeFunction(communication, "communication")
-                  << Sweep(LeesEdwardsUpdate(blocks, pdfFieldID, offset), "Lees Edwards");
+                  << Sweep(LeesEdwardsUpdate(blocks, pdfFieldID, pdfTmpFieldID, offset), "Lees Edwards");
    timeloop.add() << Sweep(StreamSweep, "stream");
 
    // log remaining time