diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C
index df9434deec81aaf97b11142f6f0317402091f830..ee915cfa5efbf33e4cb93dbd9de0e997bbfb210b 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/duplicatePoints.C
@@ -155,17 +155,35 @@ void Foam::duplicatePoints::setRefinement
             zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)];
         }
 
-        meshMod.modifyFace
-        (
-            newFace,                    // modified face
-            faceI,                      // label of face being modified
-            mesh_.faceOwner()[faceI],   // owner
-            -1,                         // neighbour
-            false,                      // face flip
-            patches.whichPatch(faceI),  // patch for face
-            zoneID,                     // zone for face
-            zoneFlip                    // face flip in zone
-        );
+
+        if (mesh_.isInternalFace(faceI))
+        {
+            meshMod.modifyFace
+            (
+                newFace,                    // modified face
+                faceI,                      // label of face being modified
+                mesh_.faceOwner()[faceI],   // owner
+                mesh_.faceNeighbour()[faceI],   // neighbour
+                false,                      // face flip
+                -1,                         // patch for face
+                zoneID,                     // zone for face
+                zoneFlip                    // face flip in zone
+            );
+        }
+        else
+        {
+            meshMod.modifyFace
+            (
+                newFace,                    // modified face
+                faceI,                      // label of face being modified
+                mesh_.faceOwner()[faceI],   // owner
+                -1,                         // neighbour
+                false,                      // face flip
+                patches.whichPatch(faceI),  // patch for face
+                zoneID,                     // zone for face
+                zoneFlip                    // face flip in zone
+            );
+        }
     }
 
 
diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C
index 9470a8d861174574fc03118e7f3c741f8c9a4b6b..0a233e97af5d1e953c0638ec4b77fdadcb23f491 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C
@@ -43,15 +43,22 @@ class minEqOpFace
 {
 public:
 
-    void operator()( face& x, const face& y ) const
+    void operator()(face& x, const face& y) const
     {
-        forAll(x, i)
+        if (x.size() > 0)
         {
-            x[i] = min(x[i], y[i]);
+            label j = 0;
+            forAll(x, i)
+            {
+                x[i] = min(x[i], y[j]);
+
+                j = y.rcIndex(j);
+            }
         }
     };
 };
 
+
 // Dummy transform for faces. Used in synchronisation
 void transformList
 (
@@ -120,7 +127,7 @@ void Foam::localPointRegion::countPointRegions
 
     forAllConstIter(Map<label>, candidateFace, iter)
     {
-        label faceI = iter();
+        label faceI = iter.key();
 
         if (!mesh.isInternalFace(faceI))
         {
@@ -174,6 +181,29 @@ void Foam::localPointRegion::countPointRegions
         }
     }
     minPointRegion.clear();
+
+    // Add internal faces that use any duplicated point. Can only have one
+    // region!
+    forAllConstIter(Map<label>, candidateFace, iter)
+    {
+        label faceI = iter.key();
+
+        if (mesh.isInternalFace(faceI))
+        {
+            const face& f = mesh.faces()[faceI];
+
+            forAll(f, fp)
+            {
+                if (meshPointMap_.found(f[fp]))
+                {
+                    label meshFaceMapI = meshFaceMap_.size();
+                    meshFaceMap_.insert(faceI, meshFaceMapI);
+                }
+            }
+        }
+    }
+
+
     // Transfer to member data
     pointRegions.shrink();
     pointRegions_.setSize(pointRegions.size());
@@ -285,7 +315,7 @@ void Foam::localPointRegion::calcPointRegions
     faceList minRegion(mesh.nFaces());
     forAllConstIter(Map<label>, candidateFace, iter)
     {
-        label faceI = iter();
+        label faceI = iter.key();
         const face& f = mesh.faces()[faceI];
 
         if (mesh.isInternalFace(faceI))