diff --git a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
index c49dc5db317eadcb12fd9e269b39338bc9c3d7c9..0bab423114b329e6ecc55258318fe93627e90e15 100644
--- a/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
+++ b/applications/utilities/mesh/conversion/ansysToFoam/ansysToFoam.L
@@ -569,21 +569,31 @@ int main(int argc, char *argv[])
         << "as type patch. Please reset after mesh conversion as necessary."
         << endl;
 
-    wordList patchTypes(patchFaces.size(), polyPatch::typeName);
-    wordList patchPhysicalTypes(patchFaces.size());
+    PtrList<dictionary> patchDicts;
 
     preservePatchTypes
     (
         runTime,
         runTime.constant(),
-        polyMesh::defaultRegion,
+        polyMesh::meshSubDir,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
+    // Add information to dictionary
+    forAll(patchNames, patchI)
+    {
+        if (!patchDicts.set(patchI))
+        {
+            patchDicts.set(patchI, new dictionary());
+        }
+        // Add but not overwrite
+        patchDicts[patchI].add("type", polyPatch::typeName, false);
+    }
+
+
     polyMesh pShapeMesh
     (
         IOobject
@@ -596,10 +606,9 @@ int main(int argc, char *argv[])
         cellShapes,
         patchFaces,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
 
diff --git a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
index 2de1b840e9109fa0188157b5ced5e5198b89d57e..ff0f80df53bf3fa3a73233cd654ffc34c7b1aa84 100644
--- a/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
+++ b/applications/utilities/mesh/conversion/cfx4ToFoam/cfx4ToFoam.C
@@ -578,7 +578,6 @@ int main(int argc, char *argv[])
     wordList patchTypes(npatch);
     word defaultFacesName = "defaultFaces";
     word defaultFacesType = wallPolyPatch::typeName;
-    wordList patchPhysicalTypes(npatch);
 
     label nCreatedPatches = 0;
 
@@ -707,18 +706,30 @@ int main(int argc, char *argv[])
     patchTypes.setSize(nCreatedPatches);
     patchNames.setSize(nCreatedPatches);
 
+    PtrList<dictionary> patchDicts;
+
     preservePatchTypes
     (
         runTime,
         runTime.constant(),
-        polyMesh::defaultRegion,
+        polyMesh::meshSubDir,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
+    // Add information to dictionary
+    forAll(patchNames, patchI)
+    {
+        if (!patchDicts.set(patchI))
+        {
+            patchDicts.set(patchI, new dictionary());
+        }
+        // Add but not overwrite
+        patchDicts[patchI].add("type", patchTypes[patchI], false);
+    }
+
     polyMesh pShapeMesh
     (
         IOobject
@@ -731,10 +742,9 @@ int main(int argc, char *argv[])
         cellShapes,
         boundary,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
     // Set the precision of the points data to 10
diff --git a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
index 619374396ffc78da2130b8789eff6ffece805cb3..51d3cd97ea4bd2ddf14d5d365ffeec8bf4ba4bd0 100644
--- a/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L
@@ -45,7 +45,6 @@ Description
 #include "emptyPolyPatch.H"
 #include "wallPolyPatch.H"
 #include "symmetryPolyPatch.H"
-#include "preservePatchTypes.H"
 #include "cellShape.H"
 #include "faceSet.H"
 #include "cellSet.H"
@@ -1542,17 +1541,6 @@ int main(int argc, char *argv[])
     }
     repatcher.repatch();
 
-    preservePatchTypes
-    (
-        runTime,
-        runTime.constant(),
-        polyMesh::defaultRegion,
-        patchNames,
-        patchTypes,
-        defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
-    );
 
     // Set the precision of the points data to 10
     IOstream::defaultPrecision(10);
diff --git a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
index c1d2b44e829805db413afbaec3e6fde7b775791c..bdb3a38c842177ae61e790c4d8e2f1526bd8ba22 100644
--- a/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
+++ b/applications/utilities/mesh/conversion/gambitToFoam/gambitToFoam.L
@@ -818,24 +818,32 @@ int main(int argc, char *argv[])
     // Scale points
     points *= scaleFactor;
 
-    wordList patchTypes(boundary.size(), polyPatch::typeName);
+    PtrList<dictionary> patchDicts(boundary.size());
     word defaultFacesName = "defaultFaces";
     word defaultFacesType = emptyPolyPatch::typeName;
-    wordList patchPhysicalTypes(boundary.size());
 
     preservePatchTypes
     (
         runTime,
         runTime.constant(),
-        polyMesh::defaultRegion,
+        polyMesh::meshSubDir,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
-    // Mesh will auto-write on construction
+    // Add information to dictionary
+    forAll(patchNames, patchI)
+    {
+        if (!patchDicts.set(patchI))
+        {
+            patchDicts.set(patchI, new dictionary());
+        }
+        // Add but not overwrite
+        patchDicts[patchI].add("type", polyPatch::typeName, false);
+    }
+
     polyMesh pShapeMesh
     (
         IOobject
@@ -848,10 +856,9 @@ int main(int argc, char *argv[])
         cells,
         boundary,
         patchNames,
-        patchTypes,
+        patchDicts,
         defaultFacesName,
-        defaultFacesType,
-        patchPhysicalTypes
+        defaultFacesType
     );
 
     // Set the precision of the points data to 10
diff --git a/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H b/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H
index d4356c2cdcc1fd12ecffd32f9f780130acc3f938..04b36020ea210bf0e3a5d88e8ea8e8297d2d36e2 100644
--- a/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H
+++ b/applications/utilities/mesh/conversion/kivaToFoam/readKivaGrid.H
@@ -459,7 +459,6 @@ wordList patchNames(nPatches);
 wordList patchTypes(nPatches);
 word defaultFacesName = "defaultFaces";
 word defaultFacesType = emptyPolyPatch::typeName;
-wordList patchPhysicalTypes(nPatches);
 
 label nAddedPatches = 0;
 
@@ -535,17 +534,27 @@ forAll(boundary, patchi)
     }
 }
 
+PtrList<dictionary> patchDicts;
 preservePatchTypes
 (
     runTime,
     runTime.constant(),
-    polyMesh::defaultRegion,
+    polyMesh::meshSubDir,
     patchNames,
-    patchTypes,
+    patchDicts,
     defaultFacesName,
-    defaultFacesType,
-    patchPhysicalTypes
+    defaultFacesType
 );
+// Add information to dictionary
+forAll(patchNames, patchI)
+{
+    if (!patchDicts.set(patchI))
+    {
+        patchDicts.set(patchI, new dictionary());
+    }
+    // Add but not overwrite
+    patchDicts[patchI].add("type", patchTypes[patchI], false);
+}
 
 // Build the mesh and write it out
 polyMesh pShapeMesh
@@ -560,10 +569,9 @@ polyMesh pShapeMesh
     cellShapes,
     boundary,
     patchNames,
-    patchTypes,
+    patchDicts,
     defaultFacesName,
-    defaultFacesType,
-    patchPhysicalTypes
+    defaultFacesType
 );
 
 Info << "Writing polyMesh" << endl;
diff --git a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
index 40db7f47b57530d20ca0207686be62d15b4853dd..806b4fdfcc2129a8d5471dc3930ba0b22ded73bc 100644
--- a/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
+++ b/applications/utilities/mesh/conversion/plot3dToFoam/plot3dToFoam.C
@@ -43,7 +43,6 @@ Description
 #include "polyMesh.H"
 #include "wallPolyPatch.H"
 #include "symmetryPolyPatch.H"
-#include "preservePatchTypes.H"
 #include "cellShape.H"
 #include "cellModeller.H"
 #include "mergePoints.H"
diff --git a/applications/utilities/mesh/conversion/sammToFoam/readBoundary.C b/applications/utilities/mesh/conversion/sammToFoam/readBoundary.C
index b1ec1b772e50712d398d0617f7b755c64e122f15..53dffd39c6bca64173bc5b5d6f7881e02d9e72ea 100644
--- a/applications/utilities/mesh/conversion/sammToFoam/readBoundary.C
+++ b/applications/utilities/mesh/conversion/sammToFoam/readBoundary.C
@@ -230,17 +230,28 @@ void sammMesh::readBoundary()
 
     patchPhysicalTypes_.setSize(patchTypes_.size());
 
+    PtrList<dictionary> patchDicts;
+
     preservePatchTypes
     (
         runTime_,
         runTime_.constant(),
-        polyMesh::defaultRegion,
+        polyMesh::meshSubDir,
         patchNames_,
-        patchTypes_,
+        patchDicts,
         defaultFacesName_,
-        defaultFacesType_,
-        patchPhysicalTypes_
+        defaultFacesType_
     );
+
+    forAll(patchDicts, patchI)
+    {
+        if (patchDicts.set(patchI))
+        {
+            const dictionary& dict = patchDicts[patchI];
+            dict.readIfPresent("type", patchTypes_[patchI]);
+            dict.readIfPresent("physicalType", patchPhysicalTypes_[patchI]);
+        }
+    }
 }
 
 
diff --git a/applications/utilities/mesh/conversion/star3ToFoam/readBoundary.C b/applications/utilities/mesh/conversion/star3ToFoam/readBoundary.C
index be29c36cd127a36b72361b30d5fbad99c2b0bc17..a96ee6e96bb71a7df1ae627caf201cce00339f51 100644
--- a/applications/utilities/mesh/conversion/star3ToFoam/readBoundary.C
+++ b/applications/utilities/mesh/conversion/star3ToFoam/readBoundary.C
@@ -228,17 +228,28 @@ void starMesh::readBoundary()
 
     patchPhysicalTypes_.setSize(patchTypes_.size());
 
+    PtrList<dictionary> patchDicts;
+
     preservePatchTypes
     (
         runTime_,
         runTime_.constant(),
-        polyMesh::defaultRegion,
+        polyMesh::meshSubDir,
         patchNames_,
-        patchTypes_,
+        patchDicts,
         defaultFacesName_,
-        defaultFacesType_,
-        patchPhysicalTypes_
+        defaultFacesType_
     );
+
+    forAll(patchDicts, patchI)
+    {
+        if (patchDicts.set(patchI))
+        {
+            const dictionary& dict = patchDicts[patchI];
+            dict.readIfPresent("type", patchTypes_[patchI]);
+            dict.readIfPresent("physicalType", patchPhysicalTypes_[patchI]);
+        }
+    }
 }
 
 
diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
index a0baebaae710f6e487bd78766da9a324f9833848..a85a4e417fa809c316f5c71b4418aed304809d0a 100644
--- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
+++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C
@@ -52,7 +52,6 @@ Usage
 
 #include "blockMesh.H"
 #include "attachPolyTopoChanger.H"
-#include "preservePatchTypes.H"
 #include "emptyPolyPatch.H"
 #include "cellSet.H"
 
@@ -219,6 +218,7 @@ int main(int argc, char *argv[])
         xferCopy(blocks.points()),           // could we re-use space?
         blocks.cells(),
         blocks.patches(),
+        blocks.patchNames(),
         blocks.patchDicts(),
         defaultFacesName,
         defaultFacesType
diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C
index 06aeb3291a26a0a9205736697e72f5e236639d5a..6216228961504504dad5cafa7dc61b69d69c5a20 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C
@@ -163,6 +163,7 @@ void Foam::ensightMesh::correct()
         prisms.setSize(nPrisms);
         wedges.setSize(nWedges);
         hexes.setSize(nHexes);
+        hexesWedges.setSize(nHexesWedges);
         polys.setSize(nPolys);
 
         meshCellSets_.nTets = nTets;
diff --git a/src/OpenFOAM/meshes/polyMesh/polyMesh.H b/src/OpenFOAM/meshes/polyMesh/polyMesh.H
index 62df97511ca5b5fbe6cdfc9eb7766cd188c5f306..74fd718da3998ec8586e0ee0bac4fe4a8a3ec23a 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyMesh.H
+++ b/src/OpenFOAM/meshes/polyMesh/polyMesh.H
@@ -280,6 +280,7 @@ public:
             const Xfer<pointField>& points,
             const cellShapeList& shapes,
             const faceListList& boundaryFaces,
+            const wordList& boundaryPatchNames,
             const PtrList<dictionary>& boundaryDicts,
             const word& defaultBoundaryPatchName,
             const word& defaultBoundaryPatchType,
diff --git a/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C b/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C
index 73434502f4532f32eba38527107a1827287e01d2..f7b1052bfe13514b662f24d88dcd489f0831abe7 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C
+++ b/src/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C
@@ -698,6 +698,7 @@ Foam::polyMesh::polyMesh
     const Xfer<pointField>& points,
     const cellShapeList& cellsAsShapes,
     const faceListList& boundaryFaces,
+    const wordList& boundaryPatchNames,
     const PtrList<dictionary>& boundaryDicts,
     const word& defaultBoundaryPatchName,
     const word& defaultBoundaryPatchType,
@@ -832,12 +833,6 @@ Foam::polyMesh::polyMesh
     // Remove all of the old mesh files if they exist
     removeFiles(instance());
 
-    wordList boundaryPatchNames(boundaryDicts.size());
-    forAll(boundaryDicts, patchI)
-    {
-        boundaryDicts[patchI].lookup("name") >> boundaryPatchNames[patchI];
-    }
-
     // Calculate faces and cells
     labelList patchSizes;
     labelList patchStarts;
@@ -858,7 +853,7 @@ Foam::polyMesh::polyMesh
 
     // Warning: Patches can only be added once the face list is
     // completed, as they hold a subList of the face list
-    forAll(boundaryFaces, patchI)
+    forAll(boundaryDicts, patchI)
     {
         dictionary patchDict(boundaryDicts[patchI]);
 
diff --git a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C
index 384e718d078f480984e424f90f4aa2c6122c6b75..c040e777aee36aafc02c6055507e978105844893 100644
--- a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C
+++ b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.C
@@ -25,7 +25,6 @@ License
 
 #include "preservePatchTypes.H"
 #include "polyBoundaryMeshEntries.H"
-#include "dictionary.H"
 
 // * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
 
@@ -35,14 +34,16 @@ void Foam::preservePatchTypes
     const word& meshInstance,
     const fileName& meshDir,
     const wordList& patchNames,
-    wordList& patchTypes,
+    PtrList<dictionary>& patchDicts,
     const word& defaultFacesName,
-    word& defaultFacesType,
-    wordList& patchPhysicalTypes
+    word& defaultFacesType
 )
 {
+    patchDicts.setSize(patchNames.size());
+
     dictionary patchDictionary;
 
+    // Read boundary file as single dictionary
     {
         IOobject patchEntriesHeader
         (
@@ -67,33 +68,25 @@ void Foam::preservePatchTypes
         }
     }
 
-    if (patchDictionary.size())
+    forAll(patchNames, patchi)
     {
-        forAll(patchNames, patchi)
+        if (patchDictionary.found(patchNames[patchi]))
         {
-            if (patchDictionary.found(patchNames[patchi]))
-            {
-                const dictionary& patchDict =
-                    patchDictionary.subDict(patchNames[patchi]);
-
-                patchDict.lookup("type") >> patchTypes[patchi];
+            const dictionary& patchDict =
+                patchDictionary.subDict(patchNames[patchi]);
 
-                patchDict.readIfPresent("geometricType", patchTypes[patchi]);
-                patchDict.readIfPresent
-                (
-                    "physicalType",
-                    patchPhysicalTypes[patchi]
-                );
-            }
+            patchDicts.set(patchi, patchDict.clone());
+            patchDicts[patchi].remove("nFaces");
+            patchDicts[patchi].remove("startFace");
         }
+    }
 
-        if (patchDictionary.found(defaultFacesName))
-        {
-            const dictionary& patchDict =
-                patchDictionary.subDict(defaultFacesName);
+    if (patchDictionary.found(defaultFacesName))
+    {
+        const dictionary& patchDict =
+            patchDictionary.subDict(defaultFacesName);
 
-            patchDict.readIfPresent("geometricType", defaultFacesType);
-        }
+        patchDict.readIfPresent("geometricType", defaultFacesType);
     }
 
     Info<< nl << "Default patch type set to " << defaultFacesType << endl;
diff --git a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.H b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.H
index 5ecf1b34ee98272bd1ee935dda12b65798c20f4a..59375fac795c288e741c1f550bca213237b3d7df 100644
--- a/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.H
+++ b/src/OpenFOAM/meshes/preservePatchTypes/preservePatchTypes.H
@@ -37,6 +37,7 @@ SourceFiles
 
 #include "fileName.H"
 #include "wordList.H"
+#include "dictionary.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -52,10 +53,9 @@ void preservePatchTypes
     const word& meshInstance,
     const fileName& meshDir,
     const wordList& patchNames,
-    wordList& patchTypes,
+    PtrList<dictionary>& patchDicts,
     const word& defaultFacesName,
-    word& defaultFacesType,
-    wordList& patchPhysicalTypes
+    word& defaultFacesType
 );
 
 } // End namespace Foam
diff --git a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C
index d4407a7d6881ebcb0195bcc7574343e5c0aad733..8ced550982428bbe2cf3778dbbe0ce8686b6e8ca 100644
--- a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C
+++ b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.C
@@ -272,10 +272,10 @@ const Foam::point& Foam::plane::refPoint() const
 }
 
 
-// Return coefficcients for plane equation: ax + by + cz + d = 0
-Foam::scalarList Foam::plane::planeCoeffs() const
+// Return coefficients for plane equation: ax + by + cz + d = 0
+Foam::FixedList<Foam::scalar, 4> Foam::plane::planeCoeffs() const
 {
-    scalarList C(4);
+    FixedList<scalar, 4> C(4);
 
     scalar magX = mag(unitVector_.x());
     scalar magY = mag(unitVector_.y());
@@ -291,8 +291,8 @@ Foam::scalarList Foam::plane::planeCoeffs() const
         }
         else
         {
-            C[0] = 0;
-            C[1] = 0;
+            C[0] = unitVector_.x()/unitVector_.z();
+            C[1] = unitVector_.y()/unitVector_.z();
             C[2] = 1;
         }
     }
@@ -300,14 +300,14 @@ Foam::scalarList Foam::plane::planeCoeffs() const
     {
         if (magY > magZ)
         {
-            C[0] = 0;
+            C[0] = unitVector_.x()/unitVector_.y();
             C[1] = 1;
             C[2] = unitVector_.z()/unitVector_.y();
         }
         else
         {
-            C[0] = 0;
-            C[1] = 0;
+            C[0] = unitVector_.x()/unitVector_.z();
+            C[1] = unitVector_.y()/unitVector_.z();
             C[2] = 1;
         }
     }
@@ -422,19 +422,18 @@ Foam::point Foam::plane::planePlaneIntersect
     const plane& plane3
 ) const
 {
-    List<scalarList> pcs(3);
-    pcs[0]= planeCoeffs();
-    pcs[1]= plane2.planeCoeffs();
-    pcs[2]= plane3.planeCoeffs();
+    FixedList<scalar, 4> coeffs1(planeCoeffs());
+    FixedList<scalar, 4> coeffs2(plane2.planeCoeffs());
+    FixedList<scalar, 4> coeffs3(plane3.planeCoeffs());
 
     tensor a
     (
-        pcs[0][0],pcs[0][1],pcs[0][2],
-        pcs[1][0],pcs[1][1],pcs[1][2],
-        pcs[2][0],pcs[2][1],pcs[2][2]
+        coeffs1[0],coeffs1[1],coeffs1[2],
+        coeffs2[0],coeffs2[1],coeffs2[2],
+        coeffs3[0],coeffs3[1],coeffs3[2]
     );
 
-    vector b(pcs[0][3],pcs[1][3],pcs[2][3]);
+    vector b(coeffs1[3],coeffs2[3],coeffs3[3]);
 
     return (inv(a) & (-b));
 }
diff --git a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H
index 44eb20cbc07a2d3178dbbd9b4a2d9b947688375f..89fb6afd282050b2d7ef78f812d6c958e9c91e24 100644
--- a/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H
+++ b/src/OpenFOAM/meshes/primitiveShapes/plane/plane.H
@@ -149,7 +149,7 @@ public:
 
         //- Return coefficients for the
         //  plane equation: ax + by + cz + d = 0
-        scalarList planeCoeffs() const;
+        FixedList<scalar, 4> planeCoeffs() const;
 
         //- Return nearest point in the plane for the given point
         point nearestPoint(const point& p) const;
diff --git a/src/conversion/meshReader/createPolyBoundary.C b/src/conversion/meshReader/createPolyBoundary.C
index 16a7e7a31d3d48284623744011504581f801a87a..16ea5d2a980992493f4d3f8e905d0dbf7621bc67 100644
--- a/src/conversion/meshReader/createPolyBoundary.C
+++ b/src/conversion/meshReader/createPolyBoundary.C
@@ -412,6 +412,8 @@ Foam::meshReader::polyBoundaryPatches(const polyMesh& mesh)
 
     List<polyPatch*> p(nPatches);
 
+    // All patch dictionaries
+    PtrList<dictionary> patchDicts(patchNames_.size());
     // Default boundary patch types
     word defaultFacesType(emptyPolyPatch::typeName);
 
@@ -422,20 +424,37 @@ Foam::meshReader::polyBoundaryPatches(const polyMesh& mesh)
         mesh.instance(),
         mesh.meshDir(),
         patchNames_,
-        patchTypes_,
+        patchDicts,
         "defaultFaces",
-        defaultFacesType,
-        patchPhysicalTypes_
+        defaultFacesType
     );
+    forAll(patchDicts, patchI)
+    {
+        if (!patchDicts.set(patchI))
+        {
+            patchDicts.set(patchI, new dictionary());
+        }
+        dictionary& patchDict = patchDicts[patchI];
+
+        // add but not overwrite type
+        patchDict.add("type", patchTypes_[patchI], false);
+        if (patchPhysicalTypes_.size() && patchPhysicalTypes_[patchI].size())
+        {
+            patchDict.add("startFace", patchPhysicalTypes_[patchI], false);
+        }
+
+        // overwrite sizes and start
+        patchDict.add("nFaces", patchSizes_[patchI], true);
+        patchDict.add("startFace", patchStarts_[patchI], true);
+    }
+
 
     forAll(patchStarts_, patchI)
     {
         p[patchI] = polyPatch::New
         (
-            patchTypes_[patchI],
             patchNames_[patchI],
-            patchSizes_[patchI],
-            patchStarts_[patchI],
+            patchDicts[patchI],
             patchI,
             mesh.boundaryMesh()
         ).ptr();
diff --git a/src/mesh/blockMesh/blockMesh/blockMesh.C b/src/mesh/blockMesh/blockMesh/blockMesh.C
index c0c6041f4c2e2e008f35628e03ec204ff190c052..9a6b97b0876c19b05fd5f5956217e213b9d1bac4 100644
--- a/src/mesh/blockMesh/blockMesh/blockMesh.C
+++ b/src/mesh/blockMesh/blockMesh/blockMesh.C
@@ -89,7 +89,6 @@ Foam::PtrList<Foam::dictionary> Foam::blockMesh::patchDicts() const
         patchTopologies[patchI].write(os);
         IStringStream is(os.str());
         patchDicts.set(patchI, new dictionary(is));
-        patchDicts[patchI].set("name", patchTopologies[patchI].name());
     }
     return patchDicts;
 }
@@ -134,12 +133,12 @@ const Foam::faceListList& Foam::blockMesh::patches() const
 }
 
 
-//Foam::wordList Foam::blockMesh::patchNames() const
-//{
-//    return topology().boundaryMesh().names();
-//}
-//
-//
+Foam::wordList Foam::blockMesh::patchNames() const
+{
+    return topology().boundaryMesh().names();
+}
+
+
 //Foam::wordList Foam::blockMesh::patchTypes() const
 //{
 //    return topology().boundaryMesh().types();
diff --git a/src/mesh/blockMesh/blockMesh/blockMesh.H b/src/mesh/blockMesh/blockMesh/blockMesh.H
index eb43c80d83b0355a2da3a33abdfbc8614d05c646..9b989f535683298cb6a0fcba4c7dff38ebf296f0 100644
--- a/src/mesh/blockMesh/blockMesh/blockMesh.H
+++ b/src/mesh/blockMesh/blockMesh/blockMesh.H
@@ -121,6 +121,7 @@ class blockMesh
         bool readBoundary
         (
             const dictionary& meshDescription,
+            wordList& patchNames,
             faceListList& tmpBlocksPatches,
             PtrList<dictionary>& patchDicts
         );
@@ -185,8 +186,8 @@ public:
             //- Get patch information from the topology mesh
             PtrList<dictionary> patchDicts() const;
 
-//            wordList patchNames() const;
-//
+            wordList patchNames() const;
+
 //            wordList patchTypes() const;
 //
 //            wordList patchPhysicalTypes() const;
diff --git a/src/mesh/blockMesh/blockMesh/blockMeshTopology.C b/src/mesh/blockMesh/blockMesh/blockMeshTopology.C
index d1fe81c2f17deda8dfce6aec97b5541246cbb8f8..b82752c947c75b491eb0ff9c7cfb519395d05cdc 100644
--- a/src/mesh/blockMesh/blockMesh/blockMeshTopology.C
+++ b/src/mesh/blockMesh/blockMesh/blockMeshTopology.C
@@ -189,6 +189,7 @@ bool Foam::blockMesh::readPatches
 bool Foam::blockMesh::readBoundary
 (
     const dictionary& meshDescription,
+    wordList& patchNames,
     faceListList& tmpBlocksPatches,
     PtrList<dictionary>& patchDicts
 )
@@ -201,6 +202,7 @@ bool Foam::blockMesh::readBoundary
         meshDescription.lookup("boundary")
     );
 
+    patchNames.setSize(patchesInfo.size());
     tmpBlocksPatches.setSize(patchesInfo.size());
     patchDicts.setSize(patchesInfo.size());
 
@@ -215,9 +217,9 @@ bool Foam::blockMesh::readBoundary
                 << " valid dictionary." << exit(FatalIOError);
         }
 
-        // Construct dictionary and add name
+        patchNames[patchI] = patchInfo.keyword();
+        // Construct dictionary
         patchDicts.set(patchI, new dictionary(patchInfo.dict()));
-        patchDicts[patchI].set("name", patchInfo.keyword());
         // Read block faces
         patchDicts[patchI].lookup("faces") >> tmpBlocksPatches[patchI];
 
@@ -472,7 +474,8 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
 
         Info<< nl << "Reading physicalType from existing boundary file" << endl;
 
-        wordList patchPhysicalTypes(tmpBlocksPatches.size());
+        PtrList<dictionary> patchDicts(patchNames.size());
+        word defaultFacesType;
 
         preservePatchTypes
         (
@@ -480,31 +483,29 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
             meshDescription.time().constant(),
             polyMesh::meshSubDir,
             patchNames,
-            patchTypes,
+            patchDicts,
             defaultPatchName,
-            defaultPatchType,
-            patchPhysicalTypes
+            defaultPatchType
         );
 
 
-        // Convert into dictionary
-        PtrList<dictionary> patchDicts(patchNames.size());
+        // Add cyclic info (might not be present from older file)
         forAll(patchDicts, patchI)
         {
-            patchDicts.set(patchI, new dictionary());
-            patchDicts[patchI].set("name", patchNames[patchI]);
-            patchDicts[patchI].set("type", patchTypes[patchI]);
-            if (nbrPatchNames[patchI] != word::null)
+            if (!patchDicts.set(patchI))
             {
-                patchDicts[patchI].set("neighbourPatch", nbrPatchNames[patchI]);
+                patchDicts.set(patchI, new dictionary());
             }
-            if (patchPhysicalTypes[patchI] != word::null)
+
+            dictionary& dict = patchDicts[patchI];
+
+            // Add but not override type
+            dict.add("type", patchTypes[patchI], false);
+
+            // Override neighbourpatch name
+            if (nbrPatchNames[patchI] != word::null)
             {
-                patchDicts[patchI].set
-                (
-                    "physicalType",
-                    patchPhysicalTypes[patchI]
-                );
+                dict.set("neighbourPatch", nbrPatchNames[patchI]);
             }
         }
 
@@ -523,6 +524,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
             xferCopy(blockPointField_),   // copy these points, do NOT move
             tmpBlockCells,
             tmpBlocksPatches,
+            patchNames,
             patchDicts,
             defaultPatchName,
             defaultPatchType
@@ -530,12 +532,14 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
     }
     else if (meshDescription.found("boundary"))
     {
+        wordList patchNames;
         faceListList tmpBlocksPatches;
         PtrList<dictionary> patchDicts;
 
         topologyOK = topologyOK && readBoundary
         (
             meshDescription,
+            patchNames,
             tmpBlocksPatches,
             patchDicts
         );
@@ -553,6 +557,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
         cellShapeList tmpBlockCells(blocks.size());
         createCellShapes(tmpBlockCells);
 
+        // Extract 
 
         blockMeshPtr = new polyMesh
         (
@@ -568,6 +573,7 @@ Foam::polyMesh* Foam::blockMesh::createTopology(IOdictionary& meshDescription)
             xferCopy(blockPointField_),   // copy these points, do NOT move
             tmpBlockCells,
             tmpBlocksPatches,
+            patchNames,
             patchDicts,
             defaultPatchName,
             defaultPatchType
diff --git a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C
index 4a276547b1eed0a84b0b187b3bdc23d525a42744..4b923009ffef1f60207b62715c6a8b89cdb98e9c 100644
--- a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C
+++ b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/datToFoam/datToFoam.C
@@ -34,14 +34,7 @@ Description
 #include "Time.H"
 #include "IFstream.H"
 #include "OFstream.H"
-#include "meshTools.H"
-#include "polyMesh.H"
-#include "wallPolyPatch.H"
-#include "symmetryPolyPatch.H"
-#include "preservePatchTypes.H"
-#include "cellShape.H"
-#include "cellModeller.H"
-#include "mergePoints.H"
+#include "pointField.H"
 #include "unitConversion.H"
 
 using namespace Foam;
diff --git a/wmake/wmakeScheduler b/wmake/wmakeScheduler
index be5f4ba58bb3e7e273e20792f697833f79291b1a..bfff68053a9da4e1cd2ea0b4f4f58f908a3b5a33 100755
--- a/wmake/wmakeScheduler
+++ b/wmake/wmakeScheduler
@@ -184,14 +184,14 @@ do
                     # Set colour
                     colour="${colourList[$colourIndex]}"
 
-                    if [ "$host" = "$HOST" ]; then
+                    if [ "$host" = "$HOSTNAME" ]; then
                         eval $* 2>&1 | colourPipe "$colour"
                     else
                         ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe "$colour"
                     fi
                     retval=$?
                 else
-                    if [ "$host" = "$HOST" ]; then
+                    if [ "$host" = "$HOSTNAME" ]; then
                         eval $* 2>&1
                     else
                         ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1