diff --git a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
index 1fb7e963a8490524fa8e06fd2654bf82daca8ae9..0a0c24178a61362ef02134aea959209f1c7983e5 100644
--- a/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
+++ b/src/mesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
@@ -95,7 +95,8 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation
     else
     {
         WarningIn("buildSurfaceConformation(reconformationMode reconfMode)")
-            << "Unknown reconformationMode " << reconfMode << endl;
+            << "Unknown reconformationMode " << reconfMode
+            << " not building conformation" << endl;
 
         return;
     }
@@ -118,9 +119,11 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation
 
     // Initial surface protrusion conformation - nearest surface point
     {
-        Info<< "EDGE DISTANCE COEFFS HARD-CODED." << endl;
-        scalar edgeSearchDistCoeffSqr = sqr(1.1);
-        scalar surfacePtReplaceDistCoeffSqr = sqr(0.5);
+        scalar edgeSearchDistCoeffSqr =
+            cvMeshControls().edgeSearchDistCoeffSqrInitial(reconfMode);
+
+        scalar surfacePtReplaceDistCoeffSqr =
+            cvMeshControls().surfacePtReplaceDistCoeffSqrInitial(reconfMode);
 
         DynamicList<pointIndexHit> surfaceHits;
         DynamicList<label> hitSurfaces;
@@ -203,17 +206,21 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation
 
     label iterationNo = 0;
 
-    label maxIterations = 10;
-
-    Info<< nl << "MAX ITERATIONS HARD CODED TO "<< maxIterations << endl;
+    label maxIterations =
+        cvMeshControls().maxConformationIterations(reconfMode);
 
-    scalar iterationToIntialHitRatioLimit = 0.01;
+    scalar iterationToIntialHitRatioLimit =
+        cvMeshControls().iterationToIntialHitRatioLimit(reconfMode);
 
     label hitLimit = label(iterationToIntialHitRatioLimit*initialTotalHits);
 
-    Info<< "STOPPING ITERATIONS WHEN TOTAL NUMBER OF HITS DROPS BELOW "
-        << iterationToIntialHitRatioLimit << " (HARD CODED) OF INITIAL HITS ("
-        << hitLimit << ")"
+    Info<< nl << "Stopping iterations when: " << nl
+        <<"    total number of hits drops below "
+        << iterationToIntialHitRatioLimit << " of initial hits ("
+        << hitLimit << ")" << nl
+        << " or " << nl
+        << "    maximum number of iterations ("
+        << maxIterations << ") is reached"
         << endl;
 
     // Set totalHits to a large enough positive value to enter the while loop on
@@ -227,9 +234,11 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation
      && iterationNo < maxIterations
     )
     {
-        Info<< "EDGE DISTANCE COEFFS HARD-CODED." << endl;
-        scalar edgeSearchDistCoeffSqr = sqr(1.25);
-        scalar surfacePtReplaceDistCoeffSqr = sqr(0.7);
+        scalar edgeSearchDistCoeffSqr =
+            cvMeshControls().edgeSearchDistCoeffSqrIteration(reconfMode);
+
+        scalar surfacePtReplaceDistCoeffSqr =
+            cvMeshControls().surfacePtReplaceDistCoeffSqrIteration(reconfMode);
 
         DynamicList<pointIndexHit> surfaceHits;
         DynamicList<label> hitSurfaces;
diff --git a/src/mesh/conformalVoronoiMesh/cvControls/cvControls.C b/src/mesh/conformalVoronoiMesh/cvControls/cvControls.C
index 71b8dc5a5d88bfcad5273a70faeefc580cbe7aa8..20ad3929e7cdccec24191fb7bd2741e6196c9de6 100644
--- a/src/mesh/conformalVoronoiMesh/cvControls/cvControls.C
+++ b/src/mesh/conformalVoronoiMesh/cvControls/cvControls.C
@@ -91,6 +91,124 @@ Foam::cvControls::cvControls
         readLabel(surfDict.lookup("surfaceConformationRebuildFrequency"))
     );
 
+    // Controls for coarse surface conformation
+
+    const dictionary& coarseDict
+    (
+        surfDict.subDict("coarseConformationControls")
+    );
+
+    const dictionary& coarseInitialDict
+    (
+        coarseDict.subDict("initial")
+    );
+
+    const dictionary& coarseIterationDict
+    (
+        coarseDict.subDict("iteration")
+    );
+
+    edgeSearchDistCoeffSqr_coarse_initial_ = sqr
+    (
+        readScalar
+        (
+            coarseInitialDict.lookup("edgeSearchDistCoeff")
+        )
+    );
+
+    edgeSearchDistCoeffSqr_coarse_iteration_ = sqr
+    (
+        readScalar
+        (
+            coarseIterationDict.lookup("edgeSearchDistCoeff")
+        )
+    );
+
+    surfacePtReplaceDistCoeffSqr_coarse_initial_ = sqr
+    (
+        readScalar
+        (
+            coarseInitialDict.lookup("surfacePtReplaceDistCoeff")
+        )
+    );
+
+    surfacePtReplaceDistCoeffSqr_coarse_iteration_ = sqr
+    (
+        readScalar
+        (
+            coarseIterationDict.lookup("surfacePtReplaceDistCoeff")
+        )
+    );
+
+    maxConformationIterations_coarse_ = readLabel
+    (
+        coarseDict.lookup("maxIterations")
+    );
+
+    iterationToIntialHitRatioLimit_coarse_ = readScalar
+    (
+        coarseDict.lookup("iterationToIntialHitRatioLimit")
+    );
+
+    // Controls for fine surface conformation
+
+    const dictionary& fineDict
+    (
+        surfDict.subDict("fineConformationControls")
+    );
+
+    const dictionary& fineInitialDict
+    (
+        fineDict.subDict("initial")
+    );
+
+    const dictionary& fineIterationDict
+    (
+        fineDict.subDict("iteration")
+    );
+
+    edgeSearchDistCoeffSqr_fine_initial_ = sqr
+    (
+        readScalar
+        (
+            fineInitialDict.lookup("edgeSearchDistCoeff")
+        )
+    );
+
+    edgeSearchDistCoeffSqr_fine_iteration_ = sqr
+    (
+        readScalar
+        (
+            fineIterationDict.lookup("edgeSearchDistCoeff")
+        )
+    );
+
+    surfacePtReplaceDistCoeffSqr_fine_initial_ = sqr
+    (
+        readScalar
+        (
+            fineInitialDict.lookup("surfacePtReplaceDistCoeff")
+        )
+    );
+
+    surfacePtReplaceDistCoeffSqr_fine_iteration_ = sqr
+    (
+        readScalar
+        (
+            fineIterationDict.lookup("surfacePtReplaceDistCoeff")
+        )
+    );
+
+    maxConformationIterations_fine_ = readLabel
+    (
+        fineDict.lookup("maxIterations")
+    );
+
+    iterationToIntialHitRatioLimit_fine_ = readScalar
+    (
+        fineDict.lookup("iterationToIntialHitRatioLimit")
+    );
+
     // Motion control controls
 
     const dictionary& motionDict(cvMeshDict_.subDict("motionControl"));
@@ -196,6 +314,188 @@ Foam::cvControls::cvControls
 }
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::scalar Foam::cvControls::edgeSearchDistCoeffSqrInitial
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return edgeSearchDistCoeffSqr_coarse_initial_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return edgeSearchDistCoeffSqr_fine_initial_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::edgeSearchDistCoeffSqrInitial"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
+Foam::scalar Foam::cvControls::edgeSearchDistCoeffSqrIteration
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return edgeSearchDistCoeffSqr_coarse_iteration_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return edgeSearchDistCoeffSqr_fine_iteration_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::edgeSearchDistCoeffSqrIteration"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
+Foam::scalar Foam::cvControls::surfacePtReplaceDistCoeffSqrInitial
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return surfacePtReplaceDistCoeffSqr_coarse_initial_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return surfacePtReplaceDistCoeffSqr_fine_initial_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::surfacePtReplaceDistCoeffSqrInitial"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
+Foam::scalar Foam::cvControls::surfacePtReplaceDistCoeffSqrIteration
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return surfacePtReplaceDistCoeffSqr_coarse_iteration_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return surfacePtReplaceDistCoeffSqr_fine_iteration_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::surfacePtReplaceDistCoeffSqrIteration"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
+Foam::label Foam::cvControls::maxConformationIterations
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return maxConformationIterations_coarse_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return maxConformationIterations_fine_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::maxConformationIterations"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
+Foam::scalar Foam::cvControls::iterationToIntialHitRatioLimit
+(
+    int reconfMode
+) const
+{
+    if (reconfMode == conformalVoronoiMesh::rmCoarse)
+    {
+        return iterationToIntialHitRatioLimit_coarse_;
+    }
+
+    else if (reconfMode == conformalVoronoiMesh::rmFine)
+    {
+        return iterationToIntialHitRatioLimit_fine_;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::cvControls::iterationToIntialHitRatioLimit"
+            "("
+                "int reconfMode"
+            ") const"
+        )   << "Unknown reconformationMode " << reconfMode
+            << exit(FatalError);
+    }
+
+    return 0;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::cvControls::~cvControls()
diff --git a/src/mesh/conformalVoronoiMesh/cvControls/cvControls.H b/src/mesh/conformalVoronoiMesh/cvControls/cvControls.H
index 6c893782a705f629f4d5587506fa6af3fdc1b1bb..75ec2e8378538d4d74abcb783460960c89143225 100644
--- a/src/mesh/conformalVoronoiMesh/cvControls/cvControls.H
+++ b/src/mesh/conformalVoronoiMesh/cvControls/cvControls.H
@@ -107,6 +107,80 @@ class cvControls
             label surfaceConformationRebuildFrequency_;
 
 
+            // Controls for coarse surface conformation
+
+                //- Distance to search for feature edges near to
+                //  surface protrusions - fraction of the local target
+                //  cell size. Coarse conformation, initial protrusion
+                //  tests.
+                scalar edgeSearchDistCoeffSqr_coarse_initial_;
+
+                //- Distance to search for feature edges near to
+                //  surface protrusions - fraction of the local target
+                //  cell size. Coarse conformation, iteration
+                //  protrusion tests.
+                scalar edgeSearchDistCoeffSqr_coarse_iteration_;
+
+                //- Proximity to a feature edge where a surface hit is
+                //  not created, only the edge conformation is created
+                //  - fraction of the local target cell size. Coarse
+                //  conformation, initial protrusion tests.
+                scalar surfacePtReplaceDistCoeffSqr_coarse_initial_;
+
+                //- Proximity to a feature edge where a surface hit is
+                //  not created, only the edge conformation is created
+                //  - fraction of the local target cell size. Coarse
+                //  conformation, iteration protrusion tests.
+                scalar surfacePtReplaceDistCoeffSqr_coarse_iteration_;
+
+                //- Maximum allowed number coarse surface conformation
+                //  iterations.
+                label maxConformationIterations_coarse_;
+
+                //- Termination criterion for coarse surface
+                //  conformation iterations.  When the number of
+                //  surface protrusions drops below this ratio of the
+                //  initial number of protrusions.
+                scalar iterationToIntialHitRatioLimit_coarse_;
+
+
+            // Controls for fine surface conformation
+
+                //- Distance to search for feature edges near to
+                //  surface protrusions - fraction of the local target
+                //  cell size. Fine conformation, initial protrusion
+                //  tests.
+                scalar edgeSearchDistCoeffSqr_fine_initial_;
+
+                //- Distance to search for feature edges near to
+                //  surface protrusions - fraction of the local target
+                //  cell size. Fine conformation, iteration protrusion
+                //  tests.
+                scalar edgeSearchDistCoeffSqr_fine_iteration_;
+
+                //- Proximity to a feature edge where a surface hit is
+                //  not created, only the edge conformation is created
+                //  - fraction of the local target cell size. Fine
+                //  conformation, initial protrusion tests.
+                scalar surfacePtReplaceDistCoeffSqr_fine_initial_;
+
+                //- Proximity to a feature edge where a surface hit is
+                //  not created, only the edge conformation is created
+                //  - fraction of the local target cell size. Fine
+                //  conformation, iteration protrusion tests.
+                scalar surfacePtReplaceDistCoeffSqr_fine_iteration_;
+
+                //- Maximum allowed number fine surface conformation
+                //  iterations.
+                label maxConformationIterations_fine_;
+
+                //- Termination criterion for fine surface conformation
+                //  iterations.  When the number of surface protrusions
+                //  drops below this ratio of the initial number of
+                //  protrusions.
+                scalar iterationToIntialHitRatioLimit_fine_;
+
+
     // Motion control controls
 
         //- Switch to control the output of obj files for debug
@@ -255,6 +329,31 @@ public:
             //- Return the surfaceConformationRebuildFrequency
             inline label surfaceConformationRebuildFrequency() const;
 
+            //- Return the edgeSearchDistCoeffSqr for initial
+            //  conformation for the given reconformationMode.
+            scalar edgeSearchDistCoeffSqrInitial(int reconfMode) const;
+
+            //- Return the edgeSearchDistCoeffSqr for conformation
+            //  iterations for the given reconformationMode.
+            scalar edgeSearchDistCoeffSqrIteration(int reconfMode) const;
+
+            //- Return the surfacePtReplaceDistCoeffSqr for initial
+            //  conformation for the given reconformationMode.
+            scalar surfacePtReplaceDistCoeffSqrInitial(int reconfMode) const;
+
+            //- Return the surfacePtReplaceDistCoeffSqr for
+            //  conformation iterations for the given
+            //  reconformationMode.
+            scalar surfacePtReplaceDistCoeffSqrIteration(int reconfMode) const;
+
+            //- Return the maxConformationIterations for the given
+            //  reconformationMode.
+            label maxConformationIterations(int reconfMode) const;
+
+            //- Return the iterationToIntialHitRatioLimit for the
+            //  given reconformationMode.
+            scalar iterationToIntialHitRatioLimit(int reconfMode) const;
+
             //- Return the objOutput Switch
             inline Switch objOutput() const;