diff --git a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
index 51aef7ae3d119361afc11f5d30f240f9af51f432..c3f9361f4e57dca38e50304cce7511f975a75cf1 100644
--- a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
+++ b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
@@ -268,6 +268,9 @@ public:
 
             //- Return access to the underlying mesh
             inline const fvMesh& mesh() const;
+
+            //- Return the boundBox of this processor
+            inline const treeBoundBox& procBounds() const;
 };
 
 
diff --git a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
index a857ede28525dbf08c2b102a9aaeaa3a19ac0f90..e1da2fe389d2312cdd4b85f14251f47654e08d8b 100644
--- a/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
+++ b/src/mesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
@@ -30,4 +30,10 @@ const Foam::fvMesh& Foam::backgroundMeshDecomposition::mesh() const
     return mesh_;
 }
 
+
+const Foam::treeBoundBox& Foam::backgroundMeshDecomposition::procBounds() const
+{
+    return allBackgroundMeshBounds_[Pstream::myProcNo()];
+}
+
 // ************************************************************************* //
diff --git a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
index 8a83f44a416d63feb11cb1c503e7219d2e89dba7..eda9ebab173bae34ed66702a48e0a124c2500b29 100644
--- a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
+++ b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
@@ -945,6 +945,9 @@ public:
             //- Return the conformationSurfaces object
             inline const conformationSurfaces& geometryToConformTo() const;
 
+            //- Return the backgroundMeshDecomposition
+            inline const backgroundMeshDecomposition& decomposition() const;
+
             //- Return the cellSizeControlSurfaces object
             inline const cellSizeControlSurfaces& cellSizeControl() const;
 
diff --git a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
index 140c1d7070d3050ec7e5cefb961a7736feb5fb4d..73603ff184ad1ca31089a2ab6132b589c89531b8 100644
--- a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
+++ b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
@@ -469,6 +469,13 @@ Foam::conformalVoronoiMesh::geometryToConformTo() const
 }
 
 
+inline const Foam::backgroundMeshDecomposition&
+Foam::conformalVoronoiMesh::decomposition() const
+{
+    return decomposition_();
+}
+
+
 inline const Foam::cellSizeControlSurfaces&
 Foam::conformalVoronoiMesh::cellSizeControl() const
 {
diff --git a/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H b/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
index 2eae6636996122cf4f96aff668a90df80ae59142..36c129fba156293dbba0c096357ff18352fbbfd9 100644
--- a/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
+++ b/src/mesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
@@ -37,6 +37,7 @@ SourceFiles
 
 #include "point.H"
 #include "conformalVoronoiMesh.H"
+#include "backgroundMeshDecomposition.H"
 #include "dictionary.H"
 #include "Random.H"
 #include "Switch.H"
diff --git a/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C b/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
index d5892bd554e1766501f377005707f0a8a382baf1..92c369743aeeffd9ec2d502fd6c9856505c7d9d5 100644
--- a/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
+++ b/src/mesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
@@ -58,7 +58,18 @@ uniformGrid::uniformGrid
 
 std::list<Vb::Point> uniformGrid::initialPoints() const
 {
-    const boundBox& bb = cvMesh_.geometryToConformTo().globalBounds();
+    boundBox bb;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        bb = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        bb = cvMesh_.geometryToConformTo().globalBounds();
+    }
 
     scalar x0 = bb.min().x();
     scalar xR = bb.max().x() - x0;
@@ -82,8 +93,6 @@ std::list<Vb::Point> uniformGrid::initialPoints() const
 
     std::list<Vb::Point> initialPoints;
 
-    List<bool> isSurfacePoint(nk, false);
-
     for (label i = 0; i < ni; i++)
     {
         for (label j = 0; j < nj; j++)
@@ -112,14 +121,34 @@ std::list<Vb::Point> uniformGrid::initialPoints() const
                     p.z() += pert*(rndGen.scalar01() - 0.5);
                 }
 
+                if
+                (
+                    Pstream::parRun()
+                 && !cvMesh_.decomposition().positionOnThisProcessor(p)
+                )
+                {
+                    // Skip this point if, in parallel, this position is not on
+                    // this processor.
+                    continue;
+                }
+
                 points[pI++] = p;
             }
 
+            points.setSize(pI);
+
             Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
             (
                 points,
                 minimumSurfaceDistanceCoeffSqr_
-               *sqr(cvMesh_.cellSizeControl().cellSize(points, isSurfacePoint))
+               *sqr
+                (
+                    cvMesh_.cellSizeControl().cellSize
+                    (
+                        points,
+                        List<bool>(pI, false)
+                    )
+                )
             );
 
             forAll(insidePoints, i)