diff --git a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
index d8652b668566d1d2482cdaa16f3a20cb49a4239c..5db17e07f965803f27621c5df6f05ea0e2be998c 100644
--- a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
+++ b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.C
@@ -28,6 +28,8 @@ License
 #include "weightedPosition.H"
 #include "vectorTensorTransform.H"
 #include "coupledPolyPatch.H"
+#include "polyMesh.H"
+#include "syncTools.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -150,4 +152,54 @@ void Foam::weightedPosition::operator()
 }
 
 
+void Foam::weightedPosition::syncPoints
+(
+    const polyMesh& mesh,
+    List<weightedPosition>& fld
+)
+{
+    if (fld.size() != mesh.nPoints())
+    {
+        FatalErrorInFunction << "Size of field " << fld.size()
+            << " does not correspond to the number of points in the mesh "
+            << mesh.nPoints() << exit(FatalError);
+    }
+
+    syncTools::syncPointList
+    (
+        mesh,
+        fld,
+        weightedPosition::plusEqOp,     // combine op
+        pTraits<weightedPosition>::zero,// null value (not used)
+        pTraits<weightedPosition>::zero // transform class
+    );
+}
+
+
+void Foam::weightedPosition::syncPoints
+(
+    const polyMesh& mesh,
+    const labelUList& meshPoints,
+    List<weightedPosition>& fld
+)
+{
+    if (fld.size() != meshPoints.size())
+    {
+        FatalErrorInFunction << "Size of field " << fld.size()
+            << " does not correspond to the number of points supplied "
+            << meshPoints.size() << exit(FatalError);
+    }
+
+    syncTools::syncPointList
+    (
+        mesh,
+        meshPoints,
+        fld,
+        weightedPosition::plusEqOp,     // combine op
+        pTraits<weightedPosition>::zero,// null value (not used)
+        pTraits<weightedPosition>::zero // transform class
+    );
+}
+
+
 // ************************************************************************* //
diff --git a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
index 8b05ca7ef75ccd80113a3395f2f590e2f0c38e94..0594b1f9a3dd3230a374429481448866f6e035e9 100644
--- a/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
+++ b/src/mesh/snappyHexMesh/meshRefinement/weightedPosition.H
@@ -79,6 +79,7 @@ namespace Foam
 class weightedPosition;
 class vectorTensorTransform;
 class coupledPolyPatch;
+class polyMesh;
 
 //- pTraits
 template<>
@@ -160,6 +161,22 @@ public:
                 const coupledPolyPatch& cpp,
                 Container<weightedPosition>& map
             ) const;
+
+
+        //- Synchronisation for mesh point positions
+        static void syncPoints
+        (
+            const polyMesh& mesh,
+            List<weightedPosition>&
+        );
+
+        //- Synchronisation for patch point positions
+        static void syncPoints
+        (
+            const polyMesh& mesh,
+            const labelUList& meshPoints,
+            List<weightedPosition>&
+        );
 };
 
 
diff --git a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
index e8cbe2c1e74c4eb5fa015559a2af08aef7084c4e..05d9025fd496107ae4ecdfd256f971b44507a686 100644
--- a/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
+++ b/src/mesh/snappyHexMesh/snappyHexMeshDriver/snappySnapDriver.C
@@ -255,15 +255,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothInternalDisplacement
         }
     }
 
-    // Sum
-    syncTools::syncPointList
-    (
-        mesh,
-        sumLocation,
-        weightedPosition::plusEqOp,     // combine op
-        pTraits<weightedPosition>::zero,// null value (not used)
-        pTraits<weightedPosition>::zero // transform class
-    );
+    // Add coupled contributions
+    weightedPosition::syncPoints(mesh, sumLocation);
 
     tmp<pointField> tdisplacement(new pointField(mesh.nPoints(), Zero));
     pointField& displacement = tdisplacement.ref();
@@ -384,15 +377,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothPatchDisplacement
             }
         }
 
-        syncTools::syncPointList
-        (
-            mesh,
-            pp.meshPoints(),
-            avgBoundary,
-            weightedPosition::plusEqOp,     // combine op
-            pTraits<weightedPosition>::zero,// null value (not used)
-            pTraits<weightedPosition>::zero // transform class
-        );
+        // Add coupled contributions
+        weightedPosition::syncPoints(mesh, pp.meshPoints(), avgBoundary);
 
         // Normalise
         forAll(avgBoundary, i)
@@ -464,15 +450,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::smoothPatchDisplacement
             }
         }
 
-        syncTools::syncPointList
-        (
-            mesh,
-            globalSum,
-            weightedPosition::plusEqOp,     // combine op
-            pTraits<weightedPosition>::zero,// null value (not used)
-            pTraits<weightedPosition>::zero // transform class
-        );
-
+        // Add coupled contributions
+        weightedPosition::syncPoints(mesh, globalSum);
 
         avgInternal.setSize(meshPoints.size());
 
@@ -1010,15 +989,8 @@ Foam::tmp<Foam::pointField> Foam::snappySnapDriver::avgCellCentres
         }
     }
 
-    syncTools::syncPointList
-    (
-        mesh,
-        pp.meshPoints(),
-        avgBoundary,
-        weightedPosition::plusEqOp,     // combine op
-        pTraits<weightedPosition>::zero,// null value (not used)
-        pTraits<weightedPosition>::zero // transform class
-    );
+    // Add coupled contributions
+    weightedPosition::syncPoints(mesh, pp.meshPoints(), avgBoundary);
 
     tmp<pointField> tavgBoundary(new pointField(avgBoundary.size()));
     weightedPosition::getPoints(avgBoundary, tavgBoundary.ref());