diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index eab6eff932a547c07df2cb666ee2ed5f909fab21..d0498664252fdf0a72a90de6814e77ce304e269b 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -177,18 +177,7 @@ void writeParts
             }
         }
 
-        labelList pointMap;
-        labelList faceMap;
-
-        triSurface subSurf
-        (
-            surf.subsetMesh
-            (
-                includeMap,
-                pointMap,
-                faceMap
-            )
-        );
+        triSurface subSurf(surf.subsetMesh(includeMap));
 
         fileName subName
         (
@@ -483,17 +472,7 @@ int main(int argc, char *argv[])
                 boolList isIllegalFace(surf.size(), false);
                 UIndirectList<bool>(isIllegalFace, illegalFaces) = true;
 
-                labelList pointMap;
-                labelList faceMap;
-                triSurface subSurf
-                (
-                    surf.subsetMesh
-                    (
-                        isIllegalFace,
-                        pointMap,
-                        faceMap
-                    )
-                );
+                triSurface subSurf(surf.subsetMesh(isIllegalFace));
 
 
                 // Transcribe faces
diff --git a/applications/utilities/surface/surfaceClean/collapseBase.C b/applications/utilities/surface/surfaceClean/collapseBase.C
index 7f2a4ef43c604f61b24d2060b09ede48965cf74c..5d8e40b9c72b03cc36bbb5c294d56547bd47a9fe 100644
--- a/applications/utilities/surface/surfaceClean/collapseBase.C
+++ b/applications/utilities/surface/surfaceClean/collapseBase.C
@@ -64,9 +64,7 @@ using namespace Foam;
 //        }
 //    }
 //
-//    labelList pointMap, faceMap;
-//
-//    triSurface regionSurf(surf.subsetMesh(include, pointMap, faceMap));
+//    triSurface regionSurf(surf.subsetMesh(include));
 //
 //    Pout<< "Region " << regionI << " surface:" << nl;
 //    regionSurf.writeStats(Pout);
diff --git a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C
index 0a91f3df879d19e93cb10f36445cc010c0bf5d61..ad614e66792f12871b8f7d285dc6c7cab7a94768 100644
--- a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C
+++ b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C
@@ -99,18 +99,8 @@ int main(int argc, char *argv[])
         }
 
         // Subset triSurface
-        labelList pointMap;
-        labelList faceMap;
-
-        triSurface subSurf
-        (
-            surf.subsetMesh
-            (
-                includeMap,
-                pointMap,
-                faceMap
-            )
-        );
+
+        triSurface subSurf(surf.subsetMesh(includeMap));
 
         subSurf.write(outFile);
     }
diff --git a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C
index 4dee1ec7b6a13684f7a59a36f48a37a04b50e6dc..1e4eb09bb3fb521ecb9d654f5240019c527574b2 100644
--- a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C
+++ b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C
@@ -198,10 +198,7 @@ int main(int argc, char *argv[])
 
     for (label z = 0; z < nZones; z++)
     {
-
         boolList include(faceZone.size(), false);
-        labelList pointMap;
-        labelList faceMap;
 
         forAll(faceZone, f)
         {
@@ -211,8 +208,7 @@ int main(int argc, char *argv[])
             }
         }
 
-        triSurface zoneSurf = surf.subsetMesh(include, pointMap, faceMap);
-
+        triSurface zoneSurf = surf.subsetMesh(include);
 
         fileName remainingPartFileName =
             outFileBaseName
diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubset.C b/applications/utilities/surface/surfaceSubset/surfaceSubset.C
index c8f3e0363329b16c8a1b1909a9fc5a3c1f6308dc..31295447eef985c5ca9bf396c540c6a5576d390b 100644
--- a/applications/utilities/surface/surfaceSubset/surfaceSubset.C
+++ b/applications/utilities/surface/surfaceSubset/surfaceSubset.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2011, 2015 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2011, 2015-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -379,12 +379,7 @@ int main(int argc, char *argv[])
 
 
     // Create subsetted surface
-    labelList pointMap;
-    labelList faceMap;
-    triSurface surf2
-    (
-        surf1.subsetMesh(facesToSubset, pointMap, faceMap)
-    );
+    triSurface surf2(surf1.subsetMesh(facesToSubset));
 
     Info<< "Subset:" << endl;
     surf2.writeStats(Info);
diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C
index 75f029a5d43465dc0cbcf6cb1ae59463af722334..abe9e2f593088e881d32dfee2a26d1058120afa6 100644
--- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C
+++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C
@@ -2,10 +2,8 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2009-2010, 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2009-2019 OpenCFD Ltd.
      \\/     M anipulation  |
--------------------------------------------------------------------------------
-                            | Copyright (C) 2011 OpenFOAM Foundation
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -91,12 +89,6 @@ Foam::surfZoneIdentifier::surfZoneIdentifier
 {}
 
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::surfZoneIdentifier::~surfZoneIdentifier()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::surfZoneIdentifier::write(Ostream& os) const
@@ -127,11 +119,11 @@ bool Foam::operator!=(const surfZoneIdentifier& a, const surfZoneIdentifier& b)
 }
 
 
-// * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
+// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
 
 Foam::Istream& Foam::operator>>(Istream& is, surfZoneIdentifier& obj)
 {
-    is >> obj.name_ >> obj.geometricType_;
+    is >> obj.name() >> obj.geometricType();
     return is;
 }
 
@@ -139,7 +131,7 @@ Foam::Istream& Foam::operator>>(Istream& is, surfZoneIdentifier& obj)
 Foam::Ostream& Foam::operator<<(Ostream& os, const surfZoneIdentifier& obj)
 {
     // Newlines to separate, since that is what triSurface currently expects
-    os  << nl << obj.name_ << nl << obj.geometricType_;
+    os  << nl << obj.name() << nl << obj.geometricType();
     os.check(FUNCTION_NAME);
     return os;
 }
diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H
index cb5a2593d3cd91e55556d1d93cdd0a247146295e..2f70240d993a7147df2761f846fc13dd9f8f6c26 100644
--- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H
+++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H
@@ -2,10 +2,8 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2009-2010, 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2009-2019 OpenCFD Ltd.
      \\/     M anipulation  |
--------------------------------------------------------------------------------
-                            | Copyright (C) 2011 OpenFOAM Foundation
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -48,14 +46,9 @@ SourceFiles
 namespace Foam
 {
 
+// Forward declarations
 class dictionary;
 
-// Forward declaration of friend functions and operators
-
-class surfZoneIdentifier;
-Istream& operator>>(Istream& is, surfZoneIdentifier& p);
-Ostream& operator<<(Ostream& os, const surfZoneIdentifier& p);
-
 /*---------------------------------------------------------------------------*\
                      Class surfZoneIdentifier Declaration
 \*---------------------------------------------------------------------------*/
@@ -84,7 +77,7 @@ public:
 
     // Constructors
 
-        //- Construct null
+        //- Construct null, with index zero
         surfZoneIdentifier();
 
         //- Construct null with specified index
@@ -115,7 +108,7 @@ public:
 
 
     //- Destructor
-    virtual ~surfZoneIdentifier();
+    virtual ~surfZoneIdentifier() = default;
 
 
     // Member Functions
@@ -159,28 +152,18 @@ public:
 
         //- Write identifier as a dictionary
         void write(Ostream& os) const;
+};
 
 
-    // Ostream Operator
-
-        //- Read name/type.
-        friend Istream& operator>>
-        (
-            Istream& is,
-            surfZoneIdentifier& ob
-        );
-
-        //- Write name/type.
-        friend Ostream& operator<<
-        (
-            Ostream& os,
-            const surfZoneIdentifier& obj
-        );
+// Global Operators
 
-};
+// Ostream Operator
 
+//- Read name/type
+Istream& operator>>(Istream& is, surfZoneIdentifier& obj);
 
-// Global Operators
+//- Write name/type
+Ostream& operator<<(Ostream& os, const surfZoneIdentifier& obj);
 
 //- Compare zone indentifiers for equality
 bool operator==(const surfZoneIdentifier& a, const surfZoneIdentifier& b);
diff --git a/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C b/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C
index ff7a935112e3a02e17f3e52aad7c86a18b192b8e..3818d7dccbba2a0b0dd04ad6bfe0ac27afd00189 100644
--- a/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C
+++ b/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2015-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2015-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -118,9 +118,7 @@ Foam::triSurface Foam::subTriSurfaceMesh::subset
         }
     }
 
-    labelList pointMap;
-    labelList faceMap;
-    return s.subsetMesh(isSelected, pointMap, faceMap);
+    return s.subsetMesh(isSelected);
 }
 
 
diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C
index ffe1ddef5ad458cb7787c902ccf9ef0fe978778e..86bcfc5a14161e321306f6abcf85080de3d88e1e 100644
--- a/src/surfMesh/MeshedSurface/MeshedSurface.C
+++ b/src/surfMesh/MeshedSurface/MeshedSurface.C
@@ -994,9 +994,10 @@ Foam::label Foam::MeshedSurface<Face>::triangulate
 
 
 template<class Face>
+template<class BoolListType>
 Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
 (
-    const labelHashSet& include,
+    const BoolListType& include,
     labelList& pointMap,
     labelList& faceMap
 ) const
@@ -1069,8 +1070,7 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
         zone.size() = newFacei - zone.start();
     }
 
-
-    // construct a sub-surface
+    // Construct a sub-surface
     return MeshedSurface<Face>
     (
         std::move(newPoints),
@@ -1083,7 +1083,7 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
 template<class Face>
 Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
 (
-    const labelHashSet& include
+    const bitSet& include
 ) const
 {
     labelList pointMap, faceMap;
@@ -1091,6 +1091,16 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
 }
 
 
+template<class Face>
+Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh
+(
+    const labelHashSet& include
+) const
+{
+    labelList pointMap, faceMap;
+    return subsetMesh(include, pointMap, faceMap);
+}
+
 
 template<class Face>
 void Foam::MeshedSurface<Face>::swap
diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H
index a01db0639d2392844497d0913dad5f49e292966d..5c0503e416fbd3c8f69afbcb79834fe855d6fd98 100644
--- a/src/surfMesh/MeshedSurface/MeshedSurface.H
+++ b/src/surfMesh/MeshedSurface/MeshedSurface.H
@@ -54,6 +54,7 @@ SourceFiles
 #include "pointField.H"
 #include "face.H"
 #include "labelledTri.H"
+#include "bitSet.H"
 #include "HashSet.H"
 #include "surfZoneList.H"
 #include "surfaceFormatsCore.H"
@@ -464,20 +465,23 @@ public:
         virtual label triangulate(List<label>& faceMap);
 
         //- Return new surface.
-        //  Returns return pointMap, faceMap from subsetMeshMap
+        //
+        //  \param[in] include the faces to select
+        //  \param[out] pointMap from subsetMeshMap
+        //  \param[out] faceMap from subsetMeshMap
+        template<class BoolListType>
         MeshedSurface subsetMesh
         (
-            const labelHashSet& include,
+            const BoolListType& include,
             labelList& pointMap,
             labelList& faceMap
         ) const;
 
-        //- Return new surface.
-        MeshedSurface subsetMesh
-        (
-            const labelHashSet& include
-        ) const;
+        //- Return new surface
+        MeshedSurface subsetMesh(const bitSet& include) const;
 
+        //- Return new surface
+        MeshedSurface subsetMesh(const labelHashSet& include) const;
 
         //- Swap contents
         void swap(MeshedSurface<Face>& surf);
diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
index 1a70d09e11f246e773839ec15d1b7628085f6583..3457665184c6b97897405b4d53b9de8d3cc743d6 100644
--- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
+++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C
@@ -528,10 +528,11 @@ Foam::surfZoneList Foam::UnsortedMeshedSurface<Face>::sortedZones
 
 
 template<class Face>
+template<class BoolListType>
 Foam::UnsortedMeshedSurface<Face>
 Foam::UnsortedMeshedSurface<Face>::subsetMesh
 (
-    const labelHashSet& include,
+    const BoolListType& include,
     labelList& pointMap,
     labelList& faceMap
 ) const
diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H
index 3151cd475d704dca8b32d44186279606abda44e1..f4b1748f34987b5e9c1f57ccfc7076d6f6ef92fd 100644
--- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H
+++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2008-2010, 2016-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2008-2010, 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -332,19 +332,22 @@ public:
         virtual void clear();
 
         //- Return new surface.
-        //  Returns return pointMap, faceMap from subsetMeshMap
+        //  \param[in] include the faces to select
+        //  \param[out] pointMap from subsetMeshMap
+        //  \param[out] faceMap from subsetMeshMap
+        template<class BoolListType>
         UnsortedMeshedSurface subsetMesh
         (
-            const labelHashSet& include,
+            const BoolListType& include,
             labelList& pointMap,
             labelList& faceMap
         ) const;
 
-        //- Return new surface.
-        UnsortedMeshedSurface subsetMesh
-        (
-            const labelHashSet& include
-        ) const;
+        //- Return new surface
+        UnsortedMeshedSurface subsetMesh(const bitSet& include) const;
+
+        //- Return new surface
+        UnsortedMeshedSurface subsetMesh(const labelHashSet& include) const;
 
 
         //- Swap contents - disabled
diff --git a/src/surfMesh/surfZone/surfZone.H b/src/surfMesh/surfZone/surfZone.H
index 152c593e3eb7f62f6357ac1a1fcb786ddf0f4ce0..f5df6c81c35ee4aa6fc3b0b699428082327f521b 100644
--- a/src/surfMesh/surfZone/surfZone.H
+++ b/src/surfMesh/surfZone/surfZone.H
@@ -83,7 +83,7 @@ public:
 
     // Constructors
 
-        //- Construct null
+        //- Construct null with zero start, size
         surfZone();
 
         //- Construct from components
diff --git a/src/surfMesh/triSurface/triSurface.C b/src/surfMesh/triSurface/triSurface.C
index ddd68c2c6641d1c6368ae39b3bb717982524bd3e..f140bd136737348016b7e099e02616fc833d52ac 100644
--- a/src/surfMesh/triSurface/triSurface.C
+++ b/src/surfMesh/triSurface/triSurface.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2011, 2016-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2011, 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -784,7 +784,7 @@ void Foam::triSurface::subsetMeshMap
 
     pointMap.setSize(nPoints());
 
-    bitSet pointHad(nPoints(), false);
+    bitSet pointHad(nPoints());
 
     forAll(include, oldFacei)
     {
@@ -854,6 +854,13 @@ Foam::triSurface Foam::triSurface::subsetMesh
 }
 
 
+Foam::triSurface Foam::triSurface::subsetMesh(const boolList& include) const
+{
+    labelList pointMap, faceMap;
+    return subsetMesh(include, pointMap, faceMap);
+}
+
+
 void Foam::triSurface::swapFaces(List<labelledTri>& faceLst)
 {
     clearOut();   // Topology changes
diff --git a/src/surfMesh/triSurface/triSurface.H b/src/surfMesh/triSurface/triSurface.H
index 46706252a6b53db63cca2847c5f4ee77ed87a55e..664803322f2f60457dfcf506a7e06a6618b8a60d 100644
--- a/src/surfMesh/triSurface/triSurface.H
+++ b/src/surfMesh/triSurface/triSurface.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2011, 2016-2017 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2011, 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -418,10 +418,11 @@ public:
             labelList& faceZone
         ) const;
 
-        //- 'Create' sub mesh, including only faces for which boolList
-        //- entry is true
-        //  Sets: pointMap: from new to old localPoints
-        //        faceMap: new to old faces
+        //- 'Create' sub mesh
+        //
+        //  \param[in] include the faces to select
+        //  \param[out] pointMap from new to old localPoints
+        //  \param[out] faceMap from new to old faces
         void subsetMeshMap
         (
             const boolList& include,
@@ -429,8 +430,11 @@ public:
             labelList& faceMap
         ) const;
 
-        //- Return new surface. Returns pointMap, faceMap from
-        //  subsetMeshMap
+        //- Return new surface
+        //
+        //  \param[in] include the faces to select
+        //  \param[out] pointMap from subsetMeshMap
+        //  \param[out] faceMap from subsetMeshMap
         triSurface subsetMesh
         (
             const boolList& include,
@@ -438,6 +442,11 @@ public:
             labelList& faceMap
         ) const;
 
+        //- Return new surface
+        //
+        //  \param[in] include the faces to select
+        triSurface subsetMesh(const boolList& include) const;
+
 
         //- Swap the list of faces being addressed
         void swapFaces(List<labelledTri>& faceLst);