diff --git a/boundaries/__init__.py b/boundaries/__init__.py
index 925579cb7c5f3c38f37a8581f318f3c1e7226b99..a07c43c5223e4a6b9ae09375b398afb9825e04a1 100644
--- a/boundaries/__init__.py
+++ b/boundaries/__init__.py
@@ -1,2 +1,2 @@
-from lbmpy.boundaries.boundaryconditions import NoSlip, NoSlipFullWay, UBB, FixedDensity
+from lbmpy.boundaries.boundaryconditions import NoSlip, NoSlipFullWay, UBB, FixedDensity, NeumannByCopy
 from lbmpy.boundaries.boundaryhandling import BoundaryHandling
\ No newline at end of file
diff --git a/boundaries/boundaryconditions.py b/boundaries/boundaryconditions.py
index 245f988c2c32c479e0ad4b40c61116e6f6987c82..2849747e3332c92c9381992c40817bdf295553d9 100644
--- a/boundaries/boundaryconditions.py
+++ b/boundaries/boundaryconditions.py
@@ -161,3 +161,15 @@ class FixedDensity(Boundary):
                     for eq in symmetricEq.subexpressions]
         return subExprs + [sp.Eq(pdfField[neighbor](inverseDir), 2 * eq_component - pdfField(directionSymbol))]
 
+
+class NeumannByCopy(Boundary):
+    def __call__(self, pdfField, directionSymbol, lbMethod, **kwargs):
+        neighbor = offsetFromDir(directionSymbol, lbMethod.dim)
+        return [sp.Eq(pdfField[neighbor](directionSymbol), pdfField(directionSymbol))]
+
+    def __hash__(self):
+        # All boundaries of these class behave equal -> should also be equal
+        return hash("NeumannByCopy")
+
+    def __eq__(self, other):
+        return type(other) == NeumannByCopy