diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index 3a82c7407beaedabb6d306bed77b1fdb6a8f0738..063b6fc04cbbdc08c2258c1de97000659c43ca71 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -36,6 +36,7 @@ $(derivedFvPatches)/regionCoupled/regionCoupledWallFvPatch.C
 
 
 wallDist = fvMesh/wallDist
+$(wallDist)/patchDist.C
 $(wallDist)/wallPointYPlus/wallPointYPlus.C
 $(wallDist)/nearWallDistNoSearch.C
 $(wallDist)/nearWallDist.C
diff --git a/src/finiteVolume/fvMesh/wallDist/patchDist.C b/src/finiteVolume/fvMesh/wallDist/patchDist.C
new file mode 100644
index 0000000000000000000000000000000000000000..846cc901c2cc61628d2bcbaf8c2a40632016c57b
--- /dev/null
+++ b/src/finiteVolume/fvMesh/wallDist/patchDist.C
@@ -0,0 +1,92 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "patchDist.H"
+#include "patchWave.H"
+#include "fvMesh.H"
+#include "emptyFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::patchDist::patchDist
+(
+    const fvMesh& mesh,
+    const labelHashSet& patchIDs,
+    const bool correctWalls
+)
+:
+    volScalarField
+    (
+        IOobject
+        (
+            "y",
+            mesh.time().timeName(),
+            mesh
+        ),
+        mesh,
+        dimensionedScalar("y", dimLength, GREAT)
+    ),
+    cellDistFuncs(mesh),
+    patchIDs_(patchIDs),
+    correctWalls_(correctWalls),
+    nUnset_(0)
+{
+    patchDist::correct();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::patchDist::~patchDist()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::patchDist::correct()
+{
+    // Calculate distance starting from patch faces
+    patchWave wave(cellDistFuncs::mesh(), patchIDs_, correctWalls_);
+
+    // Transfer cell values from wave into *this
+    transfer(wave.distance());
+
+    // Transfer values on patches into boundaryField of *this
+    forAll(boundaryField(), patchI)
+    {
+        if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI]))
+        {
+            scalarField& waveFld = wave.patchDistance()[patchI];
+
+            boundaryField()[patchI].transfer(waveFld);
+        }
+    }
+
+    // Transfer number of unset values
+    nUnset_ = wave.nUnset();
+}
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fvMesh/wallDist/patchDist.H b/src/finiteVolume/fvMesh/wallDist/patchDist.H
new file mode 100644
index 0000000000000000000000000000000000000000..1cb596a538fbc4e18024dde7c7500db4d316dfbf
--- /dev/null
+++ b/src/finiteVolume/fvMesh/wallDist/patchDist.H
@@ -0,0 +1,152 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::patchDist
+
+Description
+    Calculation of distance to nearest patch for all cells and boundary.
+    Uses meshWave to do actual calculation.
+
+    Distance correction:
+
+    if correctWalls = true:
+    For each cell with face on wall calculate the true nearest point
+    (by triangle decomposition) on that face and do the same for that face's
+    pointNeighbours. This will find the true nearest distance in almost all
+    cases. Only very skewed cells or cells close to another wall might be
+    missed.
+
+    For each cell with only one point on wall the same is done except now it
+    takes the pointFaces() of the wall point to look for the nearest point.
+
+Note
+
+    correct() : for now does complete recalculation. (which usually is
+    ok since mesh is smoothed). However for topology change where geometry
+    in most of domain does not change you could think of starting from the
+    old cell values. Tried but not done since:
+    - meshWave would have to be called with old cellInfo.
+      This is List\<wallInfo\> of nCells.
+    - cannot construct from distance (y_) only since we don't know a value
+      for origin_. (origin_ = GREAT already used to denote illegal value.)
+    - so we would have to store a List\<wallInfo\> which unfortunately does
+      not get resized/mapped automatically upon mesh changes.
+
+SourceFiles
+    patchDist.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef patchDist_H
+#define patchDist_H
+
+#include "volFields.H"
+#include "cellDistFuncs.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class fvMesh;
+
+/*---------------------------------------------------------------------------*\
+                          Class patchDist Declaration
+\*---------------------------------------------------------------------------*/
+
+class patchDist
+:
+    public volScalarField,
+    public cellDistFuncs
+{
+
+
+private:
+
+    // Private Member Data
+
+        //- Set of patch IDs
+        labelHashSet patchIDs_;
+
+        //- Do accurate distance calculation for near-wall cells.
+        bool correctWalls_;
+
+        //- Number of unset cells and faces.
+        label nUnset_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        patchDist(const patchDist&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const patchDist&);
+
+
+public:
+
+    // Constructors
+
+        //- Construct from mesh and flag whether or not to correct wall.
+        //  Calculate for all cells. correctWalls : correct wall (face&point)
+        //  cells for correct distance, searching neighbours.
+        patchDist
+        (
+            const fvMesh& mesh,
+            const labelHashSet& patchIDs,
+            const bool correctWalls = true
+        );
+
+
+    //- Destructor
+    virtual ~patchDist();
+
+
+    // Member Functions
+
+        const volScalarField& y() const
+        {
+            return *this;
+        }
+
+        label nUnset() const
+        {
+            return nUnset_;
+        }
+
+        //- Correct for mesh geom/topo changes
+        virtual void correct();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fvMesh/wallDist/wallDist.C b/src/finiteVolume/fvMesh/wallDist/wallDist.C
index 405fba9c82afdb8180e1e43cebf4e306c261a0e7..2f857de2fce73a51aff1dc128a795ba4f7e6c470 100644
--- a/src/finiteVolume/fvMesh/wallDist/wallDist.C
+++ b/src/finiteVolume/fvMesh/wallDist/wallDist.C
@@ -24,34 +24,19 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "wallDist.H"
-#include "patchWave.H"
 #include "fvMesh.H"
 #include "wallPolyPatch.H"
-#include "fvPatchField.H"
-#include "Field.H"
-#include "emptyFvPatchFields.H"
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-Foam::wallDist::wallDist(const fvMesh& mesh, const bool correctWalls)
+Foam::wallDist::wallDist
+(
+    const fvMesh& mesh,
+    const bool correctWalls
+)
 :
-    volScalarField
-    (
-        IOobject
-        (
-            "y",
-            mesh.time().timeName(),
-            mesh
-        ),
-        mesh,
-        dimensionedScalar("y", dimLength, GREAT)
-    ),
-    cellDistFuncs(mesh),
-    correctWalls_(correctWalls),
-    nUnset_(0)
-{
-    wallDist::correct();
-}
+    patchDist(mesh, getPatchIDs<wallPolyPatch>(), correctWalls)
+{}
 
 
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
@@ -60,33 +45,4 @@ Foam::wallDist::~wallDist()
 {}
 
 
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::wallDist::correct()
-{
-    // Get patchids of walls
-    labelHashSet wallPatchIDs(getPatchIDs<wallPolyPatch>());
-
-    // Calculate distance starting from wallPatch faces.
-    patchWave wave(cellDistFuncs::mesh(), wallPatchIDs, correctWalls_);
-
-    // Transfer cell values from wave into *this
-    transfer(wave.distance());
-
-    // Transfer values on patches into boundaryField of *this
-    forAll(boundaryField(), patchI)
-    {
-        if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI]))
-        {
-            scalarField& waveFld = wave.patchDistance()[patchI];
-
-            boundaryField()[patchI].transfer(waveFld);
-        }
-    }
-
-    // Transfer number of unset values
-    nUnset_ = wave.nUnset();
-}
-
-
 // ************************************************************************* //
diff --git a/src/finiteVolume/fvMesh/wallDist/wallDist.H b/src/finiteVolume/fvMesh/wallDist/wallDist.H
index d5182918f70c2e1c5be5f85122c92146276fc75d..195c04dbc3cc2c9c30030d2348ce13339e94e593 100644
--- a/src/finiteVolume/fvMesh/wallDist/wallDist.H
+++ b/src/finiteVolume/fvMesh/wallDist/wallDist.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,33 +25,7 @@ Class
     Foam::wallDist
 
 Description
-    Calculation of distance to nearest wall for all cells and boundary.
-    Uses meshWave to do actual calculation.
-
-    Distance correction:
-
-    if correctWalls = true:
-    For each cell with face on wall calculate the true nearest point
-    (by triangle decomposition) on that face and do that same for that face's
-    pointNeighbours. This will find the true nearest distance in almost all
-    cases. Only very skewed cells or cells close to another wall might be
-    missed.
-
-    For each cell with only point on wall the same is done except now it takes
-    the pointFaces() of the wall point to look for the nearest point.
-
-Note
-
-    correct() : for now does complete recalculation. (which usually is
-    ok since mesh is smoothed). However for topology change where geometry
-    in most of domain does not change you could think of starting from the
-    old cell values. Tried but not done since:
-    - meshWave would have to be called with old cellInfo.
-      This is List\<wallInfo\> of nCells.
-    - cannot construct from distance (y_) only since we don't know a value
-      for origin_. (origin_ = GREAT already used to denote illegal value.)
-    - so we would have to store a List\<wallInfo\> which unfortunately does
-      not get resized/mapped automatically upon mesh changes.
+    Specialisation of patchDist for wall distance calculation
 
 SourceFiles
     wallDist.C
@@ -61,9 +35,7 @@ SourceFiles
 #ifndef wallDist_H
 #define wallDist_H
 
-#include "volFields.H"
-#include "cellDistFuncs.H"
-
+#include "patchDist.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -73,27 +45,16 @@ namespace Foam
 class fvMesh;
 
 /*---------------------------------------------------------------------------*\
-                           Class wallDist Declaration
+                          Class wallDist Declaration
 \*---------------------------------------------------------------------------*/
 
 class wallDist
 :
-    public volScalarField,
-    public cellDistFuncs
+    public patchDist
 {
 
-
 private:
 
-    // Private Member Data
-
-        //- Do accurate distance calculation for near-wall cells.
-        bool correctWalls_;
-
-        //- Number of unset cells and faces.
-        label nUnset_;
-
-
     // Private Member Functions
 
         //- Disallow default bitwise copy construct
@@ -110,27 +71,15 @@ public:
         //- Construct from mesh and flag whether or not to correct wall.
         //  Calculate for all cells. correctWalls : correct wall (face&point)
         //  cells for correct distance, searching neighbours.
-        wallDist(const fvMesh& mesh, bool correctWalls = true);
+        wallDist
+        (
+            const fvMesh& mesh,
+            const bool correctWalls = true
+        );
 
 
     //- Destructor
     virtual ~wallDist();
-
-
-    // Member Functions
-
-        const volScalarField& y() const
-        {
-            return *this;
-        }
-
-        label nUnset() const
-        {
-            return nUnset_;
-        }
-
-        //- Correct for mesh geom/topo changes
-        virtual void correct();
 };