diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
index 66cfac6fb52f38bc4cd66314db92b31e6f704979..fca90949cacbc26c2bb37be540fc6d6b1744420a 100644
--- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
+++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C
@@ -56,13 +56,36 @@ void Foam::distanceSurface::createGeometry() const
             scalarField(mesh().nCells(), GREAT),
             nearest
         );
-        forAll(cellDistance, cellI)
+
+        if (signed_)
         {
-            cellDistance[cellI] = Foam::mag
-            (
-                nearest[cellI].hitPoint()
-              - mesh().cellCentres()[cellI]
-            );
+            vectorField normal;
+            surfPtr_().getNormal(nearest, normal);
+
+            forAll(cellDistance, cellI)
+            {
+                vector d(mesh().cellCentres()[cellI]-nearest[cellI].hitPoint());
+
+                if ((d&normal[cellI]) > 0)
+                {
+                    cellDistance[cellI] = Foam::mag(d);
+                }
+                else
+                {
+                    cellDistance[cellI] = -Foam::mag(d);
+                }
+            }
+        }
+        else
+        {
+            forAll(cellDistance, cellI)
+            {
+                cellDistance[cellI] = Foam::mag
+                (
+                    nearest[cellI].hitPoint()
+                  - mesh().cellCentres()[cellI]
+                );
+            }
         }
     }
 
@@ -166,6 +189,7 @@ Foam::distanceSurface::distanceSurface
         )
     ),
     distance_(readScalar(dict.lookup("distance"))),
+    signed_(readBool(dict.lookup("signed"))),
     regularise_(dict.lookupOrDefault("regularise", true)),
     zoneName_(word::null),
     facesPtr_(NULL),
diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
index bb7290c5d8415e668e8cd698df11ce766798daea..82fba8a83f3ff696122ffb23102d4838cb6f6c4d 100644
--- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
+++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H
@@ -62,6 +62,9 @@ class distanceSurface
         //- distance value
         const scalar distance_;
 
+        //- signed distance
+        const bool signed_;
+
         //- Whether to coarsen
         const Switch regularise_;