diff --git a/applications/utilities/postProcessing/sampling/sample/sampleDict b/applications/utilities/postProcessing/sampling/sample/sampleDict
index d0ce98158c4ff9610270135a3ee9888cc4670c5e..9a77a6641738e71c7cb209a4b9548ffbc9ed5018 100644
--- a/applications/utilities/postProcessing/sampling/sample/sampleDict
+++ b/applications/utilities/postProcessing/sampling/sample/sampleDict
@@ -188,8 +188,25 @@ surfaces
         // cell, can be arbitrarily far away.
         type            patchInternalField;
         patches         ( ".*Wall.*" );
-        distance        0.0001;
         interpolate     true;
+
+
+        // Optional: specify how to obtain sampling points from the patch
+        //           face centres (default is 'normal')
+        //
+        //  //- Specify distance to offset in normal direction
+        offsetMode  normal;
+        distance    0.1;
+        //
+        //  //- Specify single uniform offset
+        //  offsetMode  uniform;
+        //  offset      (0 0 0.0001);
+        //
+        //  //- Specify offset per patch face
+        //  offsetMode  nonuniform;
+        //  offsets     ((0 0 0.0001) (0 0 0.0002));
+
+
         // Optional: whether to leave as faces (=default) or triangulate
         // triangulate     false;
     }
diff --git a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H
index 34c7fa54792055d48b3ab1619549e2dc7b851fcd..8ee8022f6c85c3d0ab63c49ec3ee0b652c273cfd 100644
--- a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H
+++ b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H
@@ -112,6 +112,10 @@ public:
             NORMAL              // use face normal + distance
         };
 
+        static const NamedEnum<sampleMode, 4> sampleModeNames_;
+
+        static const NamedEnum<offsetMode, 3> offsetModeNames_;
+
 
     //- Helper class for finding nearest
     // Nearest:
@@ -146,10 +150,6 @@ private:
 
     // Private data
 
-        static const NamedEnum<sampleMode, 4> sampleModeNames_;
-
-        static const NamedEnum<offsetMode, 3> offsetModeNames_;
-
         //- Patch to sample
         const polyPatch& patch_;
 
diff --git a/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C b/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C
index b9618f866a617ec42ebc0b808fd020a48975b5e8..4f16bbed599c089df6ba2f46789ed59f5d8e7888 100644
--- a/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C
+++ b/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C
@@ -58,24 +58,80 @@ Foam::sampledPatchInternalField::sampledPatchInternalField
     sampledPatch(name, mesh, dict),
     mappers_(patchIDs().size())
 {
-    const scalar distance = readScalar(dict.lookup("distance"));
-
-    forAll(patchIDs(), i)
+    mappedPatchBase::offsetMode mode = mappedPatchBase::NORMAL;
+    if (dict.found("offsetMode"))
     {
-        label patchI = patchIDs()[i];
-        mappers_.set
+        mode = mappedPatchBase::offsetModeNames_.read
         (
-            i,
-            new mappedPatchBase
-            (
-                mesh.boundaryMesh()[patchI],
-                mesh.name(),                        // sampleRegion
-                mappedPatchBase::NEARESTCELL, // sampleMode
-                word::null,                         // samplePatch
-                -distance                           // sample inside my domain
-            )
+            dict.lookup("offsetMode")
         );
     }
+
+    switch (mode)
+    {
+        case mappedPatchBase::NORMAL:
+        {
+            const scalar distance = readScalar(dict.lookup("distance"));
+            forAll(patchIDs(), i)
+            {
+                mappers_.set
+                (
+                    i,
+                    new mappedPatchBase
+                    (
+                        mesh.boundaryMesh()[patchIDs()[i]],
+                        mesh.name(),                        // sampleRegion
+                        mappedPatchBase::NEARESTCELL,       // sampleMode
+                        word::null,                         // samplePatch
+                        -distance                  // sample inside my domain
+                    )
+                );
+            }
+        }
+        break;
+
+        case mappedPatchBase::UNIFORM:
+        {
+            const point offset(dict.lookup("offset"));
+            forAll(patchIDs(), i)
+            {
+                mappers_.set
+                (
+                    i,
+                    new mappedPatchBase
+                    (
+                        mesh.boundaryMesh()[patchIDs()[i]],
+                        mesh.name(),                        // sampleRegion
+                        mappedPatchBase::NEARESTCELL,       // sampleMode
+                        word::null,                         // samplePatch
+                        offset                  // sample inside my domain
+                    )
+                );
+            }
+        }
+        break;
+
+        case mappedPatchBase::NONUNIFORM:
+        {
+            const pointField offsets(dict.lookup("offsets"));
+            forAll(patchIDs(), i)
+            {
+                mappers_.set
+                (
+                    i,
+                    new mappedPatchBase
+                    (
+                        mesh.boundaryMesh()[patchIDs()[i]],
+                        mesh.name(),                        // sampleRegion
+                        mappedPatchBase::NEARESTCELL,       // sampleMode
+                        word::null,                         // samplePatch
+                        offsets                  // sample inside my domain
+                    )
+                );
+            }
+        }
+        break;
+    }
 }