diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C
index 65561dfcb72d211de01cd88e77691fcd3b2da01e..cb4f795bc662fa13e9cc8a80dc0f873b9baf3f98 100644
--- a/src/surfMesh/MeshedSurface/MeshedSurface.C
+++ b/src/surfMesh/MeshedSurface/MeshedSurface.C
@@ -29,7 +29,6 @@ License
 #include "IFstream.H"
 #include "OFstream.H"
 #include "Time.H"
-#include "SortableList.H"
 #include "ListOps.H"
 #include "polyBoundaryMesh.H"
 #include "polyMesh.H"
@@ -42,38 +41,14 @@ License
 template<class Face>
 Foam::wordHashSet Foam::MeshedSurface<Face>::readTypes()
 {
-    wordHashSet known(2*fileExtensionConstructorTablePtr_->size());
-
-    forAllIter
-    (
-        typename fileExtensionConstructorTable::iterator,
-        *fileExtensionConstructorTablePtr_,
-        iter
-    )
-    {
-        known.insert(iter.key());
-    }
-
-    return known;
+    return wordHashSet(*fileExtensionConstructorTablePtr_);
 }
 
 
 template<class Face>
 Foam::wordHashSet Foam::MeshedSurface<Face>::writeTypes()
 {
-    wordHashSet supported(2*writefileExtensionMemberFunctionTablePtr_->size());
-
-    forAllIter
-    (
-        typename writefileExtensionMemberFunctionTable::iterator,
-        *writefileExtensionMemberFunctionTablePtr_,
-        iter
-    )
-    {
-        supported.insert(iter.key());
-    }
-
-    return supported;
+    return wordHashSet(*writefileExtensionMemberFunctionTablePtr_);
 }
 
 
@@ -91,11 +66,16 @@ bool Foam::MeshedSurface<Face>::canReadType
     {
         return true;
     }
-
-    wordHashSet available = readTypes();
-    available += SiblingType::readTypes();
-
-    return checkSupport(available, ext, verbose, "reading");
+    else
+    {
+        return checkSupport
+        (
+            readTypes() | SiblingType::readTypes(),
+            ext,
+            verbose,
+            "reading"
+        );
+    }
 }
 
 
@@ -141,8 +121,9 @@ void Foam::MeshedSurface<Face>::write
 {
     if (debug)
     {
-        Info<< "MeshedSurface::write(const fileName&, const MeshedSurface&) : "
-               "writing MeshedSurface to " << fName
+        Info<< "MeshedSurface::write"
+            "(const fileName&, const MeshedSurface&) : "
+            "writing to " << fName
             << endl;
     }
 
diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C
index 07d2110f2d61ec7eab6c4e1228b3435da6d448a5..b37bc840205871c3356c2c5da7bc511f9b75e57f 100644
--- a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C
+++ b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C
@@ -69,7 +69,7 @@ Foam::MeshedSurface<Face>::New
         (
             "MeshedSurface<Face>::New"
             "(const fileName&, const word&) : "
-            "constructing UnsortedMeshedSurface"
+            "constructing MeshedSurface"
         )   << "Unknown file extension " << ext << nl << nl
             << "Valid types are :" << nl
             << supported
diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
index 2804d867dbdb03fce3745ed4de96c74ce6c550f3..a4273ec54038f40da13e1f49eb0f2e4df4e9617e 100644
--- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
+++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
@@ -29,11 +29,8 @@ License
 #include "IFstream.H"
 #include "OFstream.H"
 #include "Time.H"
-#include "boundBox.H"
 #include "polyBoundaryMesh.H"
 #include "polyMesh.H"
-#include "primitivePatch.H"
-#include "SortableList.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -42,38 +39,14 @@ License
 template<class Face>
 Foam::wordHashSet Foam::UnsortedMeshedSurface<Face>::readTypes()
 {
-    wordHashSet supported(2*fileExtensionConstructorTablePtr_->size());
-
-    forAllIter
-    (
-        typename fileExtensionConstructorTable::iterator,
-        *fileExtensionConstructorTablePtr_,
-        iter
-    )
-    {
-        supported.insert(iter.key());
-    }
-
-    return supported;
+    return wordHashSet(*fileExtensionConstructorTablePtr_);
 }
 
 
 template<class Face>
 Foam::wordHashSet Foam::UnsortedMeshedSurface<Face>::writeTypes()
 {
-    wordHashSet supported(2*writefileExtensionMemberFunctionTablePtr_->size());
-
-    forAllIter
-    (
-        typename writefileExtensionMemberFunctionTable::iterator,
-        *writefileExtensionMemberFunctionTablePtr_,
-        iter
-    )
-    {
-        supported.insert(iter.key());
-    }
-
-    return supported;
+    return wordHashSet(*writefileExtensionMemberFunctionTablePtr_);
 }
 
 
@@ -89,11 +62,16 @@ bool Foam::UnsortedMeshedSurface<Face>::canReadType
     {
         return true;
     }
-
-    wordHashSet available = readTypes();
-    available += SiblingType::readTypes();;
-
-    return checkSupport(available, ext, verbose, "reading");
+    else
+    {
+        return checkSupport
+        (
+            readTypes() | SiblingType::readTypes(),
+            ext,
+            verbose,
+            "reading"
+        );
+    }
 }
 
 
@@ -139,8 +117,9 @@ void Foam::UnsortedMeshedSurface<Face>::write
 {
     if (debug)
     {
-        Info<< "UnsortedMeshedSurface::write(const fileName&, const UnsortedMeshedSurface&) : "
-               "writing UnsortedMeshedSurface to " << fName
+        Info<< "UnsortedMeshedSurface::write"
+            "(const fileName&, const UnsortedMeshedSurface&) : "
+            "writing to " << fName
             << endl;
     }
 
diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H
index 779a85ba7a649f65ae8bd79252d16b037b4e472b..b95dfd7e20b3186da0de004f57cb97bfb675dd7d 100644
--- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.H
@@ -107,37 +107,37 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface
-        //  The output is always sorted by regions.
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  The output is always sorted by regions.
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is always sorted by regions.
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is always sorted by regions.
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C
index 852622a8dccaa3af03a354488acd18ee245a90ed..6e2ea87e9195a031839069dabd5655a924d285d3 100644
--- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormatRunTime.C
@@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     AC3DsurfaceFormat,
     face,
     write,
@@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     AC3DsurfaceFormat,
     triFace,
     write,
@@ -76,7 +76,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     AC3DsurfaceFormat,
     face,
     write,
@@ -85,7 +85,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     AC3DsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H
index 1e22ffec4d8a152866e541c4bcc98cdb9abb6617..fefe168db813d0dea72f2ed7d2a19d2bf15e57d1 100644
--- a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.H
@@ -95,37 +95,37 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by regions
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by regions
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C
index a090693ff504514ad6b3551bc815475b59c91b2c..1675ee289a94aed7e095b8d7dcb7a39d3dd56d00 100644
--- a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormatRunTime.C
@@ -55,7 +55,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     GTSsurfaceFormat,
     face,
     write,
@@ -64,7 +64,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     GTSsurfaceFormat,
     triFace,
     write,
@@ -72,10 +72,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     gts
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     GTSsurfaceFormat,
     face,
     write,
@@ -84,7 +83,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     GTSsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H
index e5c9d92b60ee0187c4279a0ac190fe489ee90068..6545592730d7264754a738eca7f386b3a89a87c3 100644
--- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.H
@@ -109,37 +109,37 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by regions
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by regions
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C
index f7ec7482944df45d158286bbe29c0228444d2b4a..64bc69760fa51ee255cc483051fe560f233d7bee 100644
--- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormatRunTime.C
@@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     OBJsurfaceFormat,
     face,
     write,
@@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     OBJsurfaceFormat,
     triFace,
     write,
@@ -73,10 +73,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     obj
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     OBJsurfaceFormat,
     face,
     write,
@@ -85,7 +84,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     OBJsurfaceFormat,
     triFace,
     write,
@@ -93,6 +92,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
     obj
 );
 
+
 }
 }
 
diff --git a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H
index 6b8e8ac69594151c0a12fbdabcf2e2c31a73aa71..242bacbd207483879b7f68c3b9457ca3e0866745 100644
--- a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormat.H
@@ -91,37 +91,37 @@ public:
 
     // Member Functions
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by region.
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by region.
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by region.
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by region.
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C
index 16ab5a06dce2055423245b83a09b70a8cf782eea..86cb25aa3203984448e326d4abc3c4516bf1f5b4 100644
--- a/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/smesh/SMESHsurfaceFormatRunTime.C
@@ -38,7 +38,7 @@ namespace fileFormats
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     SMESHsurfaceFormat,
     face,
     write,
@@ -47,7 +47,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     SMESHsurfaceFormat,
     triFace,
     write,
@@ -55,10 +55,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     smesh
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     SMESHsurfaceFormat,
     face,
     write,
@@ -67,7 +66,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     SMESHsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H
index 1afb83496b4acacccc8d7e24f625ec3f7038b305..6a47537881a4a69677db0a8b2fbbb1de7979c72f 100644
--- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.H
@@ -119,19 +119,19 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface
-        //  The output is sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             const fileName&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  The output is sorted by regions
         static void write
         (
             const fileName&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
         //- Write to Ostream as one large file - not really useful
diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C
index 7f34860feab670ceaa6dcb7f7819abbf4dd1ce26..5cf59da6c8aab69cc43d5f6cafb4d581e0be96af 100644
--- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormatRunTime.C
@@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STARCDsurfaceFormat,
     face,
     write,
@@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STARCDsurfaceFormat,
     triFace,
     write,
@@ -76,7 +76,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STARCDsurfaceFormat,
     face,
     write,
@@ -85,7 +85,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STARCDsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
index cce059b27afaa68c860af3a4245c13ecf5ad57b5..5367e130a65aa36666233a830410a4fb3936add5 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
@@ -25,6 +25,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "STLsurfaceFormat.H"
+#include "ListOps.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -289,35 +290,70 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read
     // read in the values
     STLsurfaceFormatCore reader(fName);
 
-    // generate the faces:
-    List<Face>&  faceLst = this->storedFaces();
-    faceLst.setSize(reader.regions().size());
-
-    // transfer
+    // transfer points
     this->storedPoints().transfer(reader.points());
-    this->storedRegions().transfer(reader.regions());
 
-    label ptI = 0;
-    forAll(faceLst, faceI)
+    // get the original region information
+    List<word>  names(xferMove(reader.names()));
+    List<label> unsortedRegions(xferMove(reader.regions()));
+
+    // and determine the sorted order:
+    // avoid SortableList since we discard the main list anyhow
+    List<label> faceMap;
+    sortedOrder(unsortedRegions, faceMap);
+
+    // generate the sorted faces and sorted regions:
+    List<Face> faceLst(faceMap.size());
+
+    DynamicList<label> dynPatchSizes;
+    label prevRegion = -1;
+    label regionSize = 0;
+
+    forAll(faceMap, faceI)
     {
-        triFace fTri;
+        const label startPt = 3*faceMap[faceI];
+        const label regionI = unsortedRegions[faceMap[faceI]];
 
-        fTri[0] = ptI++;
-        fTri[1] = ptI++;
-        fTri[2] = ptI++;
+        faceLst[faceI] = triFace(startPt, startPt+1, startPt+2);
 
-        faceLst[faceI] = fTri;
+        if (prevRegion != regionI)
+        {
+            if (regionSize)
+            {
+                dynPatchSizes.append(regionSize);
+            }
+            prevRegion = regionI;
+            regionSize = 0;
+        }
+        regionSize++;
     }
 
-    if (reader.binary())
+    if (regionSize)
     {
-        this->setPatches(reader.maxRegionId());
+        dynPatchSizes.append(regionSize);
     }
-    else
+
+    // transfer:
+    this->storedFaces().transfer(faceLst);
+    unsortedRegions.clear();
+    faceMap.clear();
+
+    label start = 0;
+    surfGroupList newPatches(dynPatchSizes.size());
+    forAll(newPatches, patchI)
     {
-        this->setPatches(reader.groupToPatch());
+        newPatches[patchI] = surfGroup
+        (
+            names[patchI],
+            dynPatchSizes[patchI],
+            start,
+            patchI
+        );
+
+        start += dynPatchSizes[patchI];
     }
 
+    this->addPatches(newPatches);
     this->stitchFaces(SMALL);
     return true;
 }
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H
index da5f9e904761ddbc71b49df58e57dbab49287d68..8d3f7c662d56b8a43f182fe35a1cf4f937ebab29 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.H
@@ -28,6 +28,10 @@ Class
 Description
     Provide a means of reading/writing STL files (ASCII and binary).
 
+Note
+    For efficiency, the regions are sorted before creating the faces.
+    The class is thus derived from MeshedSurface.
+
 SourceFiles
     STLsurfaceFormat.C
     STLsurfaceFormatASCII.L
@@ -49,13 +53,13 @@ namespace fileFormats
 {
 
 /*---------------------------------------------------------------------------*\
-                       Class STLsurfaceFormat Declaration
+                     Class STLsurfaceFormat Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class Face>
 class STLsurfaceFormat
 :
-    public UnsortedMeshedSurface<Face>
+    public MeshedSurface<Face>
 {
     // Private Member Functions
 
@@ -106,14 +110,13 @@ public:
 
     // Selectors
 
-        //- Read file and return keyedSurface
         //- Read file and return surface
-        static autoPtr<UnsortedMeshedSurface<Face> > New
+        static autoPtr<MeshedSurface<Face> > New
         (
             const fileName& fName
         )
         {
-            return autoPtr<UnsortedMeshedSurface<Face> >
+            return autoPtr<MeshedSurface<Face> >
             (
                 new STLsurfaceFormat<Face>(fName)
             );
@@ -128,33 +131,33 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface (as ASCII) sorted by region
+        //- Write MeshedSurface (as ASCII)
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface (as ASCII)
+        //- Write MeshedSurface
         static void write
         (
-            Ostream&,
+            const fileName&,
             const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  ASCII output is sorted by region; binary output is unsorted
+        //- Write UnsortedMeshedSurface (as ASCII) sorted by region
         static void write
         (
-            const fileName&,
+            Ostream&,
             const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  ASCII output is sorted by region; binary output is unsorted
         static void write
         (
             const fileName&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
         //- Write object (only ASCII output)
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L
index 0d38a882a5c317a1c3313941ea2f5010a5b29e4a..e01b96fbb85162286583c337f0facce39d6775bf 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L
@@ -72,14 +72,14 @@ class STLASCIILexer
 {
     // Private data
 
-        short groupID_;      // current region
-        short maxGroupID_;   // max region
+        label groupID_;      // current region
         label lineNo_;
         word  startError_;
 
         DynamicList<point> points_;
         DynamicList<label> facets_;
-        HashTable<label> groupToPatch_;
+        DynamicList<word>  names_;
+        HashTable<label>   nameIndex_;
 
 public:
 
@@ -110,11 +110,10 @@ public:
         }
 
         //- region names
-        HashTable<label>& groupToPatch()
+        DynamicList<word>& names()
         {
-            return groupToPatch_;
+            return names_;
         }
-
 };
 
 
@@ -122,7 +121,6 @@ STLASCIILexer::STLASCIILexer(istream* is, const label approxNpoints)
 :
     yyFlexLexer(is),
     groupID_(-1),
-    maxGroupID_(-1),
     lineNo_(1),
     points_(approxNpoints),
     facets_(approxNpoints)
@@ -237,37 +235,35 @@ endsolid              {space}("endsolid"|"ENDSOLID")({some_space}{word})*
     }
 
 <readSolidName>{string} {
-        word group(Foam::string::validate<word>(YYText()));
-
-        HashTable<label>::const_iterator findGroup =
-            groupToPatch_.find(group);
+        word name(Foam::string::validate<word>(YYText()));
 
-        if (findGroup != groupToPatch_.end())
+        HashTable<label>::const_iterator fnd = nameIndex_.find(name);
+        if (fnd != nameIndex_.end())
         {
-            groupID_ = findGroup();
+            groupID_ = fnd();
         }
         else
         {
-            groupID_ = ++maxGroupID_;
-            groupToPatch_.insert(group, groupID_);
+            groupID_ = names_.size();
+            names_.append(name);
+            nameIndex_.insert(name, groupID_);
         }
         BEGIN(INITIAL);
     }
 
 <readSolidName>{space}\n {
-        word group("solid");
+        word name("solid");
 
-        HashTable<label>::const_iterator findGroup =
-            groupToPatch_.find(group);
-
-        if (findGroup != groupToPatch_.end())
+        HashTable<label>::const_iterator fnd = nameIndex_.find(name);
+        if (fnd != nameIndex_.end())
         {
-            groupID_ = findGroup();
+            groupID_ = fnd();
         }
         else
         {
-            groupID_ = ++maxGroupID_;
-            groupToPatch_.insert(group, groupID_);
+            groupID_ = names_.size();
+            names_.append(name);
+            nameIndex_.insert(name, groupID_);
         }
 
         lineNo_++;
@@ -394,7 +390,8 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readASCII
     // transfer to normal lists
     points_.transfer(lexer.points());
     regions_.transfer(lexer.facets());
-    groupToPatch_.transfer(lexer.groupToPatch());
+    names_.transfer(lexer.names());
+
     return true;
 }
 
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C
index f05748b2f6b23b4a20afd537eec136bf285e599b..7aa29789e2ec8d10517437de0dbba2cf8c901a84 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.C
@@ -26,6 +26,7 @@ License
 
 #include "STLsurfaceFormatCore.H"
 #include "OSspecific.H"
+#include "Map.H"
 
 #undef DEBUG_STLBINARY
 
@@ -143,6 +144,9 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY
     points_.setSize(3*nTris);
     regions_.setSize(nTris);
 
+    Map<label> regionToPatch;
+    DynamicList<word> dynNames;
+
     label ptI = 0;
     forAll(regions_, faceI)
     {
@@ -155,20 +159,31 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY
         points_[ptI++] = stlTri.c();
 
         // interprete colour as a region
-        regions_[faceI] = stlTri.region();
-        if (maxRegionId_ < stlTri.region())
+        const label stlRegion = stlTri.region();
+
+        Map<label>::const_iterator fnd = regionToPatch.find(stlRegion);
+        label regionI;
+        if (fnd != regionToPatch.end())
+        {
+            regionI = fnd();
+        }
+        else
         {
-            maxRegionId_ = stlTri.region();
+            regionI = dynNames.size();
+            dynNames.append(word("patch") + ::Foam::name(regionI));
+            regionToPatch.insert(stlRegion, regionI);
         }
 
+        regions_[faceI] = regionI;
+
 #ifdef DEBUG_STLBINARY
-        if (prevRegion != stlTri.region())
+        if (prevRegion != regionI)
         {
             if (prevRegion != -1)
             {
                 Info<< "endsolid region" << prevRegion << nl;
             }
-            prevRegion = stlTri.region();
+            prevRegion = regionI;
 
             Info<< "solid region" << prevRegion << nl;
         }
@@ -183,6 +198,8 @@ bool Foam::fileFormats::STLsurfaceFormatCore::readBINARY
 #endif
     }
 
+    names_.transfer(dynNames);
+
     return true;
 }
 
@@ -197,8 +214,7 @@ Foam::fileFormats::STLsurfaceFormatCore::STLsurfaceFormatCore
     binary_(false),
     points_(0),
     regions_(0),
-    maxRegionId_(0),
-    groupToPatch_(0)
+    names_(0)
 {
     off_t fileSize = Foam::size(fName);
 
@@ -228,14 +244,17 @@ void Foam::fileFormats::STLsurfaceFormatCore::writeHeaderBINARY
     unsigned int nTris
 )
 {
-    // Write the STL header, avoid possible trailing junk
-    string header("STL binary file", headerSize);
-    for (label i = header.size(); i < headerSize; ++i)
+    // STL header with extra information about nTris
+    char header[headerSize];
+    sprintf(header, "STL binary file %u facets", nTris);
+
+    // avoid trailing junk
+    for (size_t i = strlen(header); i < headerSize; ++i)
     {
         header[i] = 0;
     }
-    os.write(header.c_str(), headerSize);
 
+    os.write(header, headerSize);
     os.write(reinterpret_cast<char*>(&nTris), sizeof(unsigned int));
 
 }
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H
index 6fcc49455373135af7b98589e2d112102979eae0..399aa0ecb78e8e56c7b7a4b759e1c5ecdd7a4449 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatCore.H
@@ -67,9 +67,8 @@ class STLsurfaceFormatCore
         //- The regions associated with the faces
         List<label> regions_;
 
-        label maxRegionId_;
-
-        HashTable<label> groupToPatch_;
+        //- The solid names, in the order of their first appearance
+        List<word> names_;
 
     // Private Member Functions
 
@@ -93,7 +92,7 @@ public:
     // Static Data
 
         //- The number of bytes in the STL binary header
-        static const int headerSize = 80;
+        static const unsigned int headerSize = 80;
 
     // Static Member Functions
 
@@ -128,7 +127,7 @@ public:
         {
             points_.clear();
             regions_.clear();
-            groupToPatch_.clear();
+            names_.clear();
         }
 
         //- Return full access to the faces
@@ -143,16 +142,10 @@ public:
             return regions_;
         }
 
-        //- The max regionId when reading binary files
-        label maxRegionId() const
-        {
-            return maxRegionId_;
-        }
-
-        //- The group/patch information when reading ASCII files
-        const HashTable<label>& groupToPatch() const
+        //- The list of solid names in the order of their first appearance
+        List<word>& names()
         {
-            return groupToPatch_;
+            return names_;
         }
 
 };
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C
index 6c8f0744bd90ddb866ecc2a691686715ac03cab6..39ef3de94b1f17cb7873a8b8683d13126a4bec59 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatRunTime.C
@@ -38,7 +38,7 @@ namespace fileFormats
 
 addNamedTemplatedToRunTimeSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     face,
     fileExtension,
@@ -46,7 +46,7 @@ addNamedTemplatedToRunTimeSelectionTable
 );
 addNamedTemplatedToRunTimeSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     triFace,
     fileExtension,
@@ -55,7 +55,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToRunTimeSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     face,
     fileExtension,
@@ -63,7 +63,7 @@ addNamedTemplatedToRunTimeSelectionTable
 );
 addNamedTemplatedToRunTimeSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     triFace,
     fileExtension,
@@ -73,7 +73,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     face,
     write,
@@ -82,7 +82,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     triFace,
     write,
@@ -92,7 +92,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     face,
     write,
@@ -101,7 +101,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     STLsurfaceFormat,
     triFace,
     write,
@@ -109,10 +109,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     stlb
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STLsurfaceFormat,
     face,
     write,
@@ -121,7 +120,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STLsurfaceFormat,
     triFace,
     write,
@@ -131,7 +130,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STLsurfaceFormat,
     face,
     write,
@@ -140,7 +139,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     STLsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
index 49d1d8fda170fda482a33859fe793258f700e271..cb8193eee86c2bdb4cd3e1ece477b28b37b15a55 100644
--- a/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
+++ b/src/surfMesh/surfaceFormats/surfaceFormatsCore.C
@@ -165,6 +165,7 @@ Foam::fileFormats::surfaceFormatsCore::findMeshName
     return findMeshName(d, meshSubDir);
 }
 
+
 // Returns patch info.
 // Sets faceMap to the indexing according to patch numbers.
 // Patch numbers start at 0.
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
index 25c83c82f500d49c17e9ea6fecbe6f73fdb0f39b..7c552a81c8840d189dc03faa17a00f602bbb7841 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
@@ -156,12 +156,11 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
         word rawName(lineStream);
         word groupName("patch" + rawName(1, rawName.size()-1));
 
-        HashTable<label>::const_iterator findGroup =
-            groupToPatch.find(groupName);
+        HashTable<label>::const_iterator fnd = groupToPatch.find(groupName);
 
-        if (findGroup != groupToPatch.end())
+        if (fnd != groupToPatch.end())
         {
-            groupID = findGroup();
+            groupID = fnd();
         }
         else
         {
@@ -187,7 +186,6 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
     this->storedPoints().transfer(pointLst);
     this->storedRegions().transfer(regionLst);
 
-    label ptI = 0;
     forAll(faceLst, faceI)
     {
         const label startPt = 3 * faceI;
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H
index 03f098e40355fe6021350ba9da27ec2f3a5aeff2..ac5e473bf309ccbbe7d7dad963a1d5e6a5100d57 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.H
@@ -103,37 +103,37 @@ public:
         //- Read from file
         virtual bool read(const fileName&);
 
-        //- Write UnsortedMeshedSurface
-        //  By default, the output is not sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  By default, the output is not sorted by regions
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  By default, the output is not sorted by regions
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  By default, the output is not sorted by regions
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C
index 558109bc0dda0578087dc36cc537a668d9c22ce3..43e0cdf4925393eae8f8a856209d45692dafcc0c 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatRunTime.C
@@ -56,7 +56,7 @@ addNamedTemplatedToRunTimeSelectionTable
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     TRIsurfaceFormat,
     face,
     write,
@@ -65,7 +65,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     TRIsurfaceFormat,
     triFace,
     write,
@@ -73,10 +73,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     tri
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     TRIsurfaceFormat,
     face,
     write,
@@ -85,7 +84,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     TRIsurfaceFormat,
     triFace,
     write,
diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H
index a5942359645fea0a52095f5dbb71c97714db30b1..f1f5bf8224c58d72b26c8624beaf561f143170be 100644
--- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H
+++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.H
@@ -88,37 +88,37 @@ public:
 
         // Write
 
-        //- Write UnsortedMeshedSurface
-        //  By default, the output is not sorted by regions.
+        //- Write MeshedSurface
         static void write
         (
             Ostream&,
-            const UnsortedMeshedSurface<Face>&
+            const MeshedSurface<Face>&
         );
 
-        //- Write UnsortedMeshedSurface
-        //  By default, the output is not sorted by regions.
+        //- Write MeshedSurface
         static void write
         (
             const fileName& fName,
-            const UnsortedMeshedSurface<Face>& surf
+            const MeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
         }
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  By default, the output is not sorted by regions.
         static void write
         (
             Ostream&,
-            const MeshedSurface<Face>&
+            const UnsortedMeshedSurface<Face>&
         );
 
-        //- Write MeshedSurface
+        //- Write UnsortedMeshedSurface
+        //  By default, the output is not sorted by regions.
         static void write
         (
             const fileName& fName,
-            const MeshedSurface<Face>& surf
+            const UnsortedMeshedSurface<Face>& surf
         )
         {
             write(OFstream(fName)(), surf);
diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C
index 8bcfea2355f4855560a147741f8e9e4c26148218..7d461a0cd31c8cb47448f26b8409a0a939d38813 100644
--- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C
+++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormatRunTime.C
@@ -38,7 +38,7 @@ namespace fileFormats
 
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     VTKsurfaceFormat,
     face,
     write,
@@ -47,7 +47,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    UnsortedMeshedSurface,
+    MeshedSurface,
     VTKsurfaceFormat,
     triFace,
     write,
@@ -55,10 +55,9 @@ addNamedTemplatedToMemberFunctionSelectionTable
     vtk
 );
 
-
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     VTKsurfaceFormat,
     face,
     write,
@@ -67,7 +66,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
 );
 addNamedTemplatedToMemberFunctionSelectionTable
 (
-    MeshedSurface,
+    UnsortedMeshedSurface,
     VTKsurfaceFormat,
     triFace,
     write,
@@ -75,6 +74,7 @@ addNamedTemplatedToMemberFunctionSelectionTable
     vtk
 );
 
+
 }
 }