diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
index a1346b4e8eb23ba5edff990649fdda6a7ac9507a..cff924d864ecc74868bcadc56e9fd9225616d9fb 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
@@ -560,7 +560,11 @@ void Foam::autoRefineDriver::zonify
             const_cast<Time&>(mesh.time())++;
         }
 
-        meshRefiner_.zonify(refineParams.keepPoints()[0]);
+        meshRefiner_.zonify
+        (
+            refineParams.keepPoints()[0],
+            refineParams.allowFreeStandingZoneFaces()
+        );
 
         if (debug)
         {
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C
index a181662b2713c42e29b0c551dd54a983a47262d9..7a8a16cfb733f8bc90af0a2415552bcfc5fcd850 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C
@@ -44,6 +44,7 @@ Foam::refinementParameters::refinementParameters
     curvature_(readScalar(dict.lookup("curvature"))),
     nBufferLayers_(readLabel(dict.lookup("nBufferLayers"))),
     keepPoints_(dict.lookup("keepPoints")),
+    allowFreeStandingZoneFaces_(dict.lookup("allowFreeStandingZoneFaces")),
     maxLoadUnbalance_(dict.lookupOrDefault<scalar>("maxLoadUnbalance",0))
 {}
 
@@ -55,6 +56,7 @@ Foam::refinementParameters::refinementParameters(const dictionary& dict)
     minRefineCells_(readLabel(dict.lookup("minRefinementCells"))),
     nBufferLayers_(readLabel(dict.lookup("nCellsBetweenLevels"))),
     keepPoints_(pointField(1, dict.lookup("locationInMesh"))),
+    allowFreeStandingZoneFaces_(dict.lookup("allowFreeStandingZoneFaces")),
     maxLoadUnbalance_(dict.lookupOrDefault<scalar>("maxLoadUnbalance",0))
 {
     scalar featAngle(readScalar(dict.lookup("resolveFeatureAngle")));
diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H
index ae09e3fc0e7e9473ff86805a4bc525d3d0f3c43b..32d677727649e79dc3107e51a0cf331f7c2ebaaf 100644
--- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H
+++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H
@@ -38,6 +38,7 @@ SourceFiles
 
 #include "dictionary.H"
 #include "pointField.H"
+#include "Switch.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -73,6 +74,10 @@ class refinementParameters
         //- Areas to keep
         const pointField keepPoints_;
 
+        //- FaceZone faces allowed which have owner and neighbour in same
+        //  cellZone?
+        Switch allowFreeStandingZoneFaces_;
+
         //- Allowed load unbalance
         scalar maxLoadUnbalance_;
 
@@ -137,6 +142,13 @@ public:
                 return keepPoints_;
             }
 
+            //- Are zone faces allowed only inbetween different cell zones
+            //  or also just free standing?
+            bool allowFreeStandingZoneFaces() const
+            {
+                return allowFreeStandingZoneFaces_;
+            }
+
             //- Allowed load unbalance
             scalar maxLoadUnbalance() const
             {
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
index 5b603ddbac9660d1e92a3eda8968686f7700247a..6347570cacb8d23b45443689b0eeb12b83f2d9b7 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
@@ -704,7 +704,11 @@ public:
             //- Put faces/cells into zones according to surface specification.
             //  Returns null if no zone surfaces present. Region containing
             //  the keepPoint will not be put into a cellZone.
-            autoPtr<mapPolyMesh> zonify(const point& keepPoint);
+            autoPtr<mapPolyMesh> zonify
+            (
+                const point& keepPoint,
+                const bool allowFreeStandingZoneFaces
+            );
 
 
         // Other topo changes
diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
index 307cb743f813550e026b34293703e5fbbe19b413..f7adea091da1250ff2498449e27f5e1c0870e984 100644
--- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
+++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C
@@ -2032,7 +2032,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::dupNonManifoldPoints()
 // Zoning
 Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
 (
-    const point& keepPoint
+    const point& keepPoint,
+    const bool allowFreeStandingZoneFaces
 )
 {
     const wordList& cellZoneNames = surfaces_.cellZoneNames();
@@ -2344,9 +2345,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
     }
 
 
-    //// Make sure namedSurfaceIndex is unset inbetween same cell cell zones.
-    //makeConsistentFaceIndex(cellToZone, namedSurfaceIndex);
-
+    // Make sure namedSurfaceIndex is unset inbetween same cell cell zones.
+    if (!allowFreeStandingZoneFaces)
+    {
+        makeConsistentFaceIndex(cellToZone, namedSurfaceIndex);
+    }
 
     // Topochange container
     polyTopoChange meshMod(mesh_);
@@ -2440,7 +2443,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
                 }
                 else if (ownZone == neiZone)
                 {
-                    // Can only happen for coupled boundaries. Keep master
+                    // Free-standing zone face or coupled boundary. Keep master
                     // face unflipped.
                     flip = !isMasterFace[faceI];
                 }