diff --git a/src/lbm/free_surface/dynamics/functionality/AdvectMass.h b/src/lbm/free_surface/dynamics/functionality/AdvectMass.h
index 9ec9e655c41c877c55f3db764c363a947ea5943f..971529a1b78400cab191209a111686f0f1abf01f 100644
--- a/src/lbm/free_surface/dynamics/functionality/AdvectMass.h
+++ b/src/lbm/free_surface/dynamics/functionality/AdvectMass.h
@@ -178,7 +178,19 @@ real_t advectMass(const FlagField_T* flagField, const ConstScalarIt_T& fillSrc,
       }
 
       // PDF pointing from neighbor to current cell
-      const real_t neighborPdf = pdfFieldIt.neighbor(*dir, dir.toInvIdx());
+      real_t neighborPdf = real_c(0);
+      if (!isFreeSlip) { neighborPdf = pdfFieldIt.neighbor(*dir, dir.toInvIdx()); }
+      else
+      {
+         // get PDF reflected at free slip boundary condition
+         stencil::Direction neighborPdfDir = *dir;
+
+         if (freeSlipDir[0] != cell_idx_c(0)) { neighborPdfDir = stencil::mirrorX[neighborPdfDir]; }
+         if (freeSlipDir[1] != cell_idx_c(0)) { neighborPdfDir = stencil::mirrorY[neighborPdfDir]; }
+         if (freeSlipDir[2] != cell_idx_c(0)) { neighborPdfDir = stencil::mirrorZ[neighborPdfDir]; }
+         neighborPdf = pdfFieldIt.neighbor(freeSlipDir[0], freeSlipDir[1], freeSlipDir[2],
+                                           LatticeModel_T::Stencil::idx[neighborPdfDir]);
+      }
 
       // PDF pointing to neighbor
       const real_t localPdf = pdfFieldIt.getF(dir.toIdx());