diff --git a/bin/tools/buildParaViewFunctions b/bin/tools/buildParaViewFunctions
index cf04183f80bdd5ddc849cc897bc14ba186ff3e91..7231ad140e79cab6a0cb4c1c55ee4b0c0bbb34d1 100644
--- a/bin/tools/buildParaViewFunctions
+++ b/bin/tools/buildParaViewFunctions
@@ -140,6 +140,7 @@ buildParaView ()
 {
     # set general options
     addCMakeVariable "BUILD_SHARED_LIBS:BOOL=ON"
+    addCMakeVariable "VTK_USE_RPATH:BOOL=OFF"
     addCMakeVariable "CMAKE_BUILD_TYPE:STRING=Release"
 
     # set paraview environment
diff --git a/src/OpenFOAM/db/Time/TimeIO.C b/src/OpenFOAM/db/Time/TimeIO.C
index fc3ad8857cca9f384296f6ab8ad3588179b248a1..c74b67438989c0d2e577d725f3aa17755a33914d 100644
--- a/src/OpenFOAM/db/Time/TimeIO.C
+++ b/src/OpenFOAM/db/Time/TimeIO.C
@@ -44,6 +44,7 @@ void Foam::Time::readDict()
         );
     }
 
+    scalar oldWriteInterval = writeInterval_;
     if (controlDict_.readIfPresent("writeInterval", writeInterval_))
     {
         if (writeControl_ == wcTimeStep && label(writeInterval_) < 1)
@@ -58,6 +59,22 @@ void Foam::Time::readDict()
         controlDict_.lookup("writeFrequency") >> writeInterval_;
     }
 
+    if (oldWriteInterval != writeInterval_)
+    {
+        switch(writeControl_)
+        {
+            case wcRunTime:
+            case wcAdjustableRunTime:
+                // Recalculate outputTimeIndex_ to be in units of current
+                // writeInterval.
+                outputTimeIndex_ *= oldWriteInterval/writeInterval_;
+            break;
+
+            default:
+            break;
+        }
+    }
+
     if (controlDict_.readIfPresent("purgeWrite", purgeWrite_))
     {
         if (purgeWrite_ < 0)
diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
index 218087f7748435f5638052e36addf1914d20cd8d..7bbe58ff8f9d5575fbb1a341e11e455056d29272 100644
--- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
+++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
@@ -248,7 +248,7 @@ Foam::label Foam::autoRefineDriver::surfaceOnlyRefine
                 refineParams.keepPoints()[0],
                 refineParams.curvature(),
 
-                PtrList<featureEdgeMesh>(0),    // dummy featureMeshes;
+                PtrList<featureEdgeMesh>(),     // dummy featureMeshes;
                 labelList(0),                   // dummy featureLevels;
 
                 false,              // featureRefinement
@@ -389,7 +389,7 @@ Foam::label Foam::autoRefineDriver::shellRefine
                 refineParams.keepPoints()[0],
                 refineParams.curvature(),
 
-                PtrList<featureEdgeMesh>(0),    // dummy featureMeshes;
+                PtrList<featureEdgeMesh>(),    // dummy featureMeshes;
                 labelList(0),                   // dummy featureLevels;
 
                 false,              // featureRefinement
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..bbfe0cf684445793b31441ce4be322eacae9396d 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
 (
@@ -103,6 +110,7 @@ bool Foam::localPointRegion::isDuplicate
 void Foam::localPointRegion::countPointRegions
 (
     const polyMesh& mesh,
+    const boolList& candidatePoint,
     const Map<label>& candidateFace,
     faceList& minRegion
 )
@@ -120,7 +128,7 @@ void Foam::localPointRegion::countPointRegions
 
     forAllConstIter(Map<label>, candidateFace, iter)
     {
-        label faceI = iter();
+        label faceI = iter.key();
 
         if (!mesh.isInternalFace(faceI))
         {
@@ -137,43 +145,75 @@ void Foam::localPointRegion::countPointRegions
             forAll(f, fp)
             {
                 label pointI = f[fp];
-                label region = minRegion[faceI][fp];
 
-                if (minPointRegion[pointI] == -1)
-                {
-                    minPointRegion[pointI] = region;
-                }
-                else if (minPointRegion[pointI] != region)
+                // Even points which were not candidates for splitting might
+                // be on multiple baffles that are being split so check.
+
+                if (candidatePoint[pointI])
                 {
-                    // Multiple regions for this point. Add.
-                    Map<label>::iterator iter = meshPointMap_.find(pointI);
-                    if (iter != meshPointMap_.end())
+                    label region = minRegion[faceI][fp];
+
+                    if (minPointRegion[pointI] == -1)
                     {
-                        labelList& regions = pointRegions[iter()];
-                        if (findIndex(regions, region) == -1)
-                        {
-                            label sz = regions.size();
-                            regions.setSize(sz+1);
-                            regions[sz] = region;
-                        }
+                        minPointRegion[pointI] = region;
                     }
-                    else
+                    else if (minPointRegion[pointI] != region)
                     {
-                        label localPointI = meshPointMap_.size();
-                        meshPointMap_.insert(pointI, localPointI);
-                        labelList regions(2);
-                        regions[0] = minPointRegion[pointI];
-                        regions[1] = region;
-                        pointRegions.append(regions);
+                        // Multiple regions for this point. Add.
+                        Map<label>::iterator iter = meshPointMap_.find(pointI);
+                        if (iter != meshPointMap_.end())
+                        {
+                            labelList& regions = pointRegions[iter()];
+                            if (findIndex(regions, region) == -1)
+                            {
+                                label sz = regions.size();
+                                regions.setSize(sz+1);
+                                regions[sz] = region;
+                            }
+                        }
+                        else
+                        {
+                            label localPointI = meshPointMap_.size();
+                            meshPointMap_.insert(pointI, localPointI);
+                            labelList regions(2);
+                            regions[0] = minPointRegion[pointI];
+                            regions[1] = region;
+                            pointRegions.append(regions);
+                        }
+
+                        label meshFaceMapI = meshFaceMap_.size();
+                        meshFaceMap_.insert(faceI, meshFaceMapI);
                     }
+                }
+            }
+        }
+    }
+    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)
+            {
+                // Note: candidatePoint test not really necessary but
+                // speeds up rejection.
+                if (candidatePoint[f[fp]] && meshPointMap_.found(f[fp]))
+                {
                     label meshFaceMapI = meshFaceMap_.size();
                     meshFaceMap_.insert(faceI, meshFaceMapI);
                 }
             }
         }
     }
-    minPointRegion.clear();
+
+
     // Transfer to member data
     pointRegions.shrink();
     pointRegions_.setSize(pointRegions.size());
@@ -285,7 +325,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))
@@ -391,7 +431,7 @@ void Foam::localPointRegion::calcPointRegions
 
 
     // Count regions per point
-    countPointRegions(mesh, candidateFace, minRegion);
+    countPointRegions(mesh, candidatePoint, candidateFace, minRegion);
     minRegion.clear();
 
 
diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H
index e9c03a37e596fe7330b47f8708428a8a5f48e87f..95d05d3aedf29c775c65c9e68583fe06a86d35ce 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H
@@ -92,6 +92,7 @@ class localPointRegion
         void countPointRegions
         (
             const polyMesh& mesh,
+            const boolList& candidatePoint,
             const Map<label>& candidateFace,
             faceList& minRegion
         );