diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
index c6d71c9dca48fb633029a99b0b83677817b06341..7f62628ca36442cd262eb88d9496409fa7e0c0d0 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
@@ -54,7 +54,7 @@ class hyperbolic
     // Private data
 
         //- Minimum fraction of phases which can be considered continuous
-        HashTable<dimensionedScalar, word, word::hash> minContinuousAlpha_;
+        HashTable<dimensionedScalar> minContinuousAlpha_;
 
         //- Width of the transition
         const dimensionedScalar transitionAlphaScale_;
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/linear/linear.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/linear/linear.H
index 16b22a7bb4869b540c1bb1b56247e67e23382cc6..13072bf5453b4d02834a62b0a920c4141e730a5e 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/linear/linear.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/BlendedInterfacialModel/blendingMethods/linear/linear.H
@@ -54,12 +54,10 @@ class linear
     // Private data
 
         //- Minimum fraction of phases which can be considered fully continuous
-        HashTable<dimensionedScalar, word, word::hash>
-            minFullyContinuousAlpha_;
+        HashTable<dimensionedScalar> minFullyContinuousAlpha_;
 
         //- Minimum fraction of phases which can be considered partly continuous
-        HashTable<dimensionedScalar, word, word::hash>
-            minPartlyContinuousAlpha_;
+        HashTable<dimensionedScalar> minPartlyContinuousAlpha_;
 
 
 public:
diff --git a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
index 9bfaebd9f7ac29b013c5c8d64c677f1ddb0e2b7c..8e46adc919261ccfc4edcf8e0a4d9026c329c204 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/phaseSystems/phaseSystem/phaseSystem.H
@@ -134,7 +134,7 @@ protected:
             phasePairTable;
 
         typedef
-            HashTable<autoPtr<blendingMethod>, word, word::hash>
+            HashTable<autoPtr<blendingMethod>>
             blendingMethodTable;
 
         typedef
diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
index b45f0f766e404abed68ddc240d6f23ce2d75ee9c..f518d7f0835ec8a42fcce1d44dadc82cab953d3c 100644
--- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
+++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/hyperbolic/hyperbolic.H
@@ -54,7 +54,7 @@ class hyperbolic
     // Private data
 
         //- Maximum fraction of phases which can be considered dispersed
-        HashTable<dimensionedScalar, word, word::hash> maxDispersedAlpha_;
+        HashTable<dimensionedScalar> maxDispersedAlpha_;
 
         //- Width of the transition
         const dimensionedScalar transitionAlphaScale_;
diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/linear/linear.H b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/linear/linear.H
index e041b39faae6d9f17ffe8be273bbeabd4bb4866a..54dcc73ecf36d53976d3a95977a54ef2bbf85011 100644
--- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/linear/linear.H
+++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/BlendedInterfacialModel/blendingMethods/linear/linear.H
@@ -54,12 +54,10 @@ class linear
     // Private data
 
         //- Maximum fraction of phases which can be considered fully dispersed
-        HashTable<dimensionedScalar, word, word::hash>
-            maxFullyDispersedAlpha_;
+        HashTable<dimensionedScalar> maxFullyDispersedAlpha_;
 
         //- Maximum fraction of phases which can be considered partly dispersed
-        HashTable<dimensionedScalar, word, word::hash>
-            maxPartlyDispersedAlpha_;
+        HashTable<dimensionedScalar> maxPartlyDispersedAlpha_;
 
 
 public:
diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H
index 225bf34f620c4fa8e8bd1a62588789ef524ca230..ed1da78460780597005151eb5de221fa7c75b25b 100644
--- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H
+++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H
@@ -94,7 +94,7 @@ class twoPhaseSystem
         autoPtr<orderedPhasePair> pair2In1_;
 
         //- Blending methods
-        HashTable<autoPtr<blendingMethod>, word, word::hash> blendingMethods_;
+        HashTable<autoPtr<blendingMethod>> blendingMethods_;
 
         //- Drag model
         autoPtr<BlendedInterfacialModel<dragModel>> drag_;
diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
index 69fd78f75d52b31b9815672a589b220b8fc6cbf2..22e572370ea4a9d1d23b7bdcc45b708af0f99d32 100644
--- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
+++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L
@@ -103,7 +103,7 @@ DynamicList<label> cellGroupType;
 bool cubitFile = false;
 
 
-void uniquify(word& name, HashSet<word>& patchNames)
+void uniquify(word& name, wordHashSet& patchNames)
 {
     if (!patchNames.found(name))
     {
@@ -929,7 +929,7 @@ int main(int argc, char *argv[])
     // Foam patch type for Fluent zone type
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    HashSet<word> fluentGroupToFoamPatch;
+    wordHashSet fluentGroupToFoamPatch;
     fluentGroupToFoamPatch.insert("wall");
     fluentGroupToFoamPatch.insert("fan");
 
@@ -1040,7 +1040,7 @@ int main(int argc, char *argv[])
     // ~~~~~~~~~~~~~~~~~
 
     List<polyPatch*> newPatches(patchIDs.size());
-    HashSet<word> patchNames;
+    wordHashSet patchNames;
 
     forAll(patchIDs, patchi)
     {
@@ -1138,7 +1138,7 @@ int main(int argc, char *argv[])
 
     // Cell zones
     mesh.cellZones().setSize(cellZoneIDs.size());
-    HashSet<word> cellZoneNames;
+    wordHashSet cellZoneNames;
 
     forAll(cellZoneIDs, cellZonei)
     {
@@ -1167,7 +1167,7 @@ int main(int argc, char *argv[])
 
     // Face zones
     mesh.faceZones().setSize(faceZoneIDs.size());
-    HashSet<word> faceZoneNames;
+    wordHashSet faceZoneNames;
 
     forAll(faceZoneIDs, faceZonei)
     {
diff --git a/applications/utilities/mesh/generation/foamyMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C b/applications/utilities/mesh/generation/foamyMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C
index d453a0f4ed70ca6a5fecedb36654f006585daa86..327eaa3332f98c9c6de054db52c96b31e57ec5b9 100644
--- a/applications/utilities/mesh/generation/foamyMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C
+++ b/applications/utilities/mesh/generation/foamyMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C
@@ -331,7 +331,7 @@ Foam::conformationSurfaces::conformationSurfaces
     List<sideVolumeType> globalVolumeTypes(surfI);
     List<Map<sideVolumeType>> regionVolumeTypes(surfI);
 
-    HashSet<word> unmatchedKeys(surfacesDict.toc());
+    wordHashSet unmatchedKeys(surfacesDict.toc());
 
     surfI = 0;
     forAll(allGeometry_.names(), geomI)
diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
index 44b1266aa5e770e1d31dd64bc92a0c9cb75ef4dc..4b4b4690156ba8e6ae726403a0ce8d73e4ad078c 100644
--- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
+++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
@@ -118,7 +118,7 @@ autoPtr<refinementSurfaces> createRefinementSurfaces
     List<Map<scalar>> regionAngle(surfi);
     List<Map<autoPtr<dictionary>>> regionPatchInfo(surfi);
 
-    HashSet<word> unmatchedKeys(surfacesDict.toc());
+    wordHashSet unmatchedKeys(surfacesDict.toc());
 
     surfi = 0;
     forAll(allGeometry.names(), geomi)
diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
index 4e65c8b2192f02491b799ac3a22495d60d362577..d02cd5f6edccb342c3ec61391d1f7f49f58215ad 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/checkMesh.C
@@ -133,7 +133,7 @@ int main(int argc, char *argv[])
 
     word surfaceFormat;
     const bool writeSets = args.readIfPresent("writeSets", surfaceFormat);
-    HashSet<word> selectedFields;
+    wordHashSet selectedFields;
     bool writeFields = args.readIfPresent
     (
         "writeFields",
diff --git a/applications/utilities/mesh/manipulation/checkMesh/writeFields.C b/applications/utilities/mesh/manipulation/checkMesh/writeFields.C
index 73e02328b081de322f524dcdec977623ef6a67c6..d8c23f33a3a01a6e8fd1189020c4a9416b244031 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/writeFields.C
+++ b/applications/utilities/mesh/manipulation/checkMesh/writeFields.C
@@ -69,7 +69,7 @@ void minFaceToCell
 void Foam::writeFields
 (
     const fvMesh& mesh,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     if (selectedFields.empty())
diff --git a/applications/utilities/mesh/manipulation/checkMesh/writeFields.H b/applications/utilities/mesh/manipulation/checkMesh/writeFields.H
index 09c31b0e62bf43db1b9a7d5205d9905fb1be8c18..675784c40d7bf9ef0cd5ed858e24b32e218645c8 100644
--- a/applications/utilities/mesh/manipulation/checkMesh/writeFields.H
+++ b/applications/utilities/mesh/manipulation/checkMesh/writeFields.H
@@ -4,7 +4,7 @@ namespace Foam
 {
     void writeFields
     (
-        const fvMesh&,
-        const HashSet<word>& selectedFields
+        const fvMesh& mesh,
+        const wordHashSet& selectedFields
     );
 }
diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
index 3f7a722fc6e4d67f5fe9785ccc8e541f292a7e60..e7702b69ddc4f08ec8272c12d4aea0ed65372aed 100644
--- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
+++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
@@ -113,7 +113,7 @@ label addPatch
 
 
 // Filter out the empty patches.
-void filterPatches(fvMesh& mesh, const HashSet<word>& addedPatchNames)
+void filterPatches(fvMesh& mesh, const wordHashSet& addedPatchNames)
 {
     // Remove any zero-sized ones. Assumes
     // - processor patches are already only there if needed
@@ -613,7 +613,7 @@ int main(int argc, char *argv[])
 
     // Count patches to add
     // ~~~~~~~~~~~~~~~~~~~~
-    HashSet<word> bafflePatches;
+    wordHashSet bafflePatches;
     {
         forAll(selectors, selectorI)
         {
@@ -655,7 +655,7 @@ int main(int argc, char *argv[])
     // Pass 1: add patches
     // ~~~~~~~~~~~~~~~~~~~
 
-    //HashSet<word> addedPatches;
+    // wordHashSet addedPatches;
     {
         const polyBoundaryMesh& pbm = mesh.boundaryMesh();
         forAll(selectors, selectorI)
@@ -834,7 +834,7 @@ int main(int argc, char *argv[])
         fvMeshMapper mapper(mesh, map);
         bool hasWarned = false;
 
-        forAllConstIter(HashSet<word>, bafflePatches, iter)
+        forAllConstIter(wordHashSet, bafflePatches, iter)
         {
             label patchi = mesh.boundaryMesh().findPatchID(iter.key());
 
diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
index d4e978a8f16584b27e419e160b191646deaecdfd..4e071c7e6299986eb1c8e9c079b97e2a12336c3c 100644
--- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C
+++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C
@@ -102,7 +102,7 @@ void changePatchID
 
 
 // Filter out the empty patches.
-void filterPatches(polyMesh& mesh, const HashSet<word>& addedPatchNames)
+void filterPatches(polyMesh& mesh, const wordHashSet& addedPatchNames)
 {
     const polyBoundaryMesh& patches = mesh.boundaryMesh();
 
@@ -557,7 +557,7 @@ int main(int argc, char *argv[])
     // Read patch construct info from dictionary
     PtrList<dictionary> patchSources(dict.lookup("patches"));
 
-    HashSet<word> addedPatchNames;
+    wordHashSet addedPatchNames;
     forAll(patchSources, addedI)
     {
         const dictionary& dict = patchSources[addedI];
diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
index 3b511db95a99888ec16087775d50a20d106044b2..a737e50c1fbf4566877f3f39ed884c5926e0beb2 100644
--- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
+++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
@@ -139,7 +139,7 @@ int main(int argc, char *argv[])
 
     IOobjectList faceObjects(objects.lookupClass(faceSet::typeName));
 
-    HashSet<word> slaveCellSets;
+    wordHashSet slaveCellSets;
 
     //Pout<< "faceSets:" << faceObjects.names() << endl;
 
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
index 4d1852f269bd167916b909cc6313767aa0dbd5ab..9e12c211779a01fd9e9a1d0b96e819a25962c052 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
@@ -101,11 +101,11 @@ void Foam::helpTypes::helpBoundary::execute
     }
     else if (args.found("constraint"))
     {
-        HashSet<word> constraintTypes(fvPatch::constraintTypes());
+        wordHashSet constraintTypes(fvPatch::constraintTypes());
         Info<< "Constraint types:" << nl;
-        forAllConstIter(HashSet<word>, constraintTypes, iter)
+        for (const word& cType : constraintTypes)
         {
-            Info<< "    " << iter.key() << nl;
+            Info<< "    " << cType << nl;
         }
         Info<< endl;
     }
diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
index 9bd600c2bb210e9d096248b3d1eed6e75a359297..46184913f48f8fa02ed387583792207ff50282eb 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/foamToTecplot360.C
@@ -321,11 +321,8 @@ int main(int argc, char *argv[])
         // Search for list of objects for this time
         IOobjectList objects(mesh, runTime.timeName());
 
-        HashSet<word> selectedFields;
-        if (args.found("fields"))
-        {
-            args.lookup("fields")() >> selectedFields;
-        }
+        wordHashSet selectedFields;
+        args.readIfPresent("fields", selectedFields);
 
         // Construct the vol fields (on the original mesh if subsetted)
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.C b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.C
index 172a83cf2399cd5f8d4b8678d6e1531fcc16929a..158db03a21f257a245c19f08200761841ebf21c2 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.C
@@ -39,7 +39,7 @@ void readFields
     const meshSubsetHelper& helper,
     const typename GeoField::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     PtrList<const GeoField>& fields
 )
 {
diff --git a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.H b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.H
index 510bd11d2536419dea3c29bfce016e2dbd5ddd8e..3cdaa5667721d7b7bb6c294fd7c88e254bc9a693 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToTecplot360/readFields.H
@@ -51,7 +51,7 @@ void readFields
     const meshSubsetHelper&,
     const typename GeoField::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     PtrList<const GeoField>& fields
 );
 
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/findClouds.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/findClouds.H
index ebeb36cbff90f00ba97f527fefdf4f5eb6dd3669..0bc5970d7565de28e938328e1db17262e6cefa8a 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/findClouds.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/findClouds.H
@@ -1,7 +1,7 @@
 // check all time directories for the following:
 
 // Any cloud names:
-HashSet<word> allCloudDirs;
+wordHashSet allCloudDirs;
 
 if (timeDirs.size() && !noLagrangian)
 {
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.C
index 6547f11d38d51ed639fe5a74808fcca414949d5d..5e712e2d7bec80b269b4bf30d4bb0031bd809d1f 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.C
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.C
@@ -39,7 +39,7 @@ label readFields
     const meshSubsetHelper& helper,
     const typename GeoField::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     PtrList<const GeoField>& fields
 )
 {
@@ -77,7 +77,7 @@ void readFields
 (
     const typename GeoField::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     PtrList<const GeoField>& fields
 )
 {
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.H
index 702138525541654d853ed47067294bcc7c108b58..91fffac0443a097be4257a99609186516cf3dedc 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.H
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/readFields.H
@@ -51,7 +51,7 @@ label readFields
     const meshSubsetHelper& helper,
     const typename GeoField::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     PtrList<const GeoField>& fields
 );
 
diff --git a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
index 1b1e0bdfc45c3fb20c1601b7d236f674ecc47560..3a1f585c63dc24ae4dcee8d87a4d9dc226dbfd04 100644
--- a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
+++ b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
@@ -53,7 +53,7 @@ class fieldInterpolator
     Time& runTime_;
     const fvMesh& mesh_;
     const IOobjectList& objects_;
-    const HashSet<word>& selectedFields_;
+    const wordHashSet& selectedFields_;
     instant ti_;
     instant ti1_;
     const interpolationWeights& interpolator_;
@@ -67,7 +67,7 @@ public:
         Time& runTime,
         const fvMesh& mesh,
         const IOobjectList& objects,
-        const HashSet<word>& selectedFields,
+        const wordHashSet& selectedFields,
         const instant& ti,
         const instant& ti1,
         const interpolationWeights& interpolator,
@@ -216,11 +216,9 @@ int main(int argc, char *argv[])
     #include "createTime.H"
     runTime.functionObjects().off();
 
-    HashSet<word> selectedFields;
-    if (args.found("fields"))
-    {
-        args.lookup("fields")() >> selectedFields;
-    }
+    wordHashSet selectedFields;
+    args.readIfPresent("fields", selectedFields);
+
     if (selectedFields.size())
     {
         Info<< "Interpolating fields " << selectedFields << nl << endl;
diff --git a/applications/utilities/postProcessing/postProcess/postProcess.C b/applications/utilities/postProcessing/postProcess/postProcess.C
index e8a18e31b3687a40cf1cf9898448375d485ebd87..62d73583cc1ed8dae5ff71c36ba384b61bf18d33 100644
--- a/applications/utilities/postProcessing/postProcess/postProcess.C
+++ b/applications/utilities/postProcessing/postProcess/postProcess.C
@@ -60,7 +60,7 @@ void executeFunctionObjects
     const argList& args,
     const Time& runTime,
     fvMesh& mesh,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     functionObjectList& functions,
     bool lastTime
 )
diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
index 5942e4642994e2d681cb3c0bf6b2ec71b088bb7e..94cc850a1f67d7ccbf2c034dec1ea798ed68b353 100644
--- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
+++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C
@@ -93,9 +93,9 @@ namespace Foam
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 // Extract groupPatch info from boundary file info
-HashTable<wordList, word> extractPatchGroups(const dictionary& boundaryDict)
+HashTable<wordList> extractPatchGroups(const dictionary& boundaryDict)
 {
-    HashTable<wordList, word> groupToPatch;
+    HashTable<wordList> groupToPatch;
 
     forAllConstIter(dictionary, boundaryDict, iter)
     {
@@ -107,11 +107,8 @@ HashTable<wordList, word> extractPatchGroups(const dictionary& boundaryDict)
         {
             forAll(groups, i)
             {
-                HashTable<wordList, word>::iterator fndGroup = groupToPatch.find
-                (
-                    groups[i]
-                );
-                if (fndGroup == groupToPatch.end())
+                auto fndGroup = groupToPatch.find(groups[i]);
+                if (!fndGroup.found())
                 {
                     groupToPatch.insert(groups[i], wordList(1, patchName));
                 }
@@ -132,7 +129,7 @@ bool merge
     dictionary&,
     const dictionary&,
     const bool,
-    const HashTable<wordList, word>&
+    const HashTable<wordList>&
 );
 
 
@@ -143,7 +140,7 @@ bool addEntry
     entry& thisEntry,
     const entry& mergeEntry,
     const bool literalRE,
-    const HashTable<wordList, word>& shortcuts
+    const HashTable<wordList>& shortcuts
 )
 {
     bool changed = false;
@@ -181,7 +178,7 @@ bool addEntry
 // List of indices into thisKeys
 labelList findMatches
 (
-    const HashTable<wordList, word>& shortcuts,
+    const HashTable<wordList>& shortcuts,
     const wordList& shortcutNames,
     const wordList& thisKeys,
     const keyType& key
@@ -228,7 +225,7 @@ bool merge
     dictionary& thisDict,
     const dictionary& mergeDict,
     const bool literalRE,
-    const HashTable<wordList, word>& shortcuts
+    const HashTable<wordList>& shortcuts
 )
 {
     const wordList shortcutNames(shortcuts.toc());
@@ -236,7 +233,7 @@ bool merge
     bool changed = false;
 
     // Save current (non-wildcard) keys before adding items.
-    HashSet<word> thisKeysSet;
+    wordHashSet thisKeysSet;
     {
         List<keyType> keys = thisDict.keys(false);
         forAll(keys, i)
@@ -378,8 +375,8 @@ bool merge
                             thisEntry,
                             mergeIter(),
                             literalRE,
-                            HashTable<wordList, word>(0)    // no shortcuts
-                                                            // at deeper levels
+                            HashTable<wordList>(0)    // no shortcuts
+                                                      // at deeper levels
                         )
                     )
                     {
@@ -575,7 +572,7 @@ int main(int argc, char *argv[])
 
         // Extract any patchGroups information (= shortcut for set of
         // patches)
-        HashTable<wordList, word> patchGroups;
+        HashTable<wordList> patchGroups;
         if (!disablePatchGroups)
         {
             patchGroups = extractPatchGroups(fieldDict);
diff --git a/applications/utilities/preProcessing/mapFieldsPar/MapMeshes.H b/applications/utilities/preProcessing/mapFieldsPar/MapMeshes.H
index 83e3789926671ba74ebd50f3272da073e7efd114..3da452ae6a014ca5728f9b3b4dca5df5dd4fc21c 100644
--- a/applications/utilities/preProcessing/mapFieldsPar/MapMeshes.H
+++ b/applications/utilities/preProcessing/mapFieldsPar/MapMeshes.H
@@ -40,7 +40,7 @@ template<template<class> class CombineOp>
 void MapMesh
 (
     const meshToMesh& interp,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     const bool noLagrangian
 )
 {
diff --git a/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H b/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H
index 1624ed87ce8c71cce5ce25b26781eb9a8098ce22..943cbb088cd2820957eb26872117ccd6ad4cf725 100644
--- a/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H
+++ b/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H
@@ -121,7 +121,7 @@ template<class Type, class CombineOp>
 void MapVolFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     const meshToMesh& interp,
     const CombineOp& cop
 )
diff --git a/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C b/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
index fa2ec58a51496259f4fb626be952501f06cffafb..49a19106888492361acf3d47d76fbcb832c8996c 100644
--- a/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
+++ b/applications/utilities/preProcessing/mapFieldsPar/mapFieldsPar.C
@@ -47,7 +47,7 @@ void mapConsistentMesh
     const word& mapMethod,
     const word& AMIMapMethod,
     const bool subtract,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     const bool noLagrangian
 )
 {
@@ -86,7 +86,7 @@ void mapSubMesh
     const word& mapMethod,
     const word& AMIMapMethod,
     const bool subtract,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     const bool noLagrangian
 )
 {
@@ -260,7 +260,7 @@ int main(int argc, char *argv[])
         Info<< "Subtracting mapped source field from target" << endl;
     }
 
-    HashSet<word> selectedFields;
+    wordHashSet selectedFields;
     args.readIfPresent("fields", selectedFields);
 
     const bool noLagrangian = args.found("noLagrangian");
diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
index b7a4d8a827bf7b477fe91165596420f283beb416..1fc36e78cce681ded5261cf88cf8845f96145f37 100644
--- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C
+++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C
@@ -54,6 +54,7 @@ Usage
 \*---------------------------------------------------------------------------*/
 
 #include "triangle.H"
+#include "edgeHashes.H"
 #include "triSurface.H"
 #include "triSurfaceSearch.H"
 #include "triSurfaceTools.H"
@@ -222,7 +223,7 @@ void syncEdges(const triSurface& p, labelHashSet& markedEdges)
     // See comment below about having duplicate edges
 
     const edgeList& edges = p.edges();
-    HashSet<edge, Hash<edge>> edgeSet(2*markedEdges.size());
+    edgeHashSet edgeSet(2*markedEdges.size());
 
     forAllConstIter(labelHashSet, markedEdges, iter)
     {
@@ -254,7 +255,7 @@ void syncEdges(const triSurface& p, boolList& isMarkedEdge)
         }
     }
 
-    HashSet<edge, Hash<edge>> edgeSet(2*n);
+    edgeHashSet edgeSet(2*n);
 
     forAll(isMarkedEdge, edgei)
     {
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
index 3b4e937943339f52eee4cddaa004c91f4afefa15..d6ec115a0f4a08414292952a682aa3a7ad2276ce 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C
@@ -98,7 +98,7 @@ Foam::functionObject* Foam::functionObjectList::remove
 void Foam::functionObjectList::listDir
 (
     const fileName& dir,
-    HashSet<word>& foMap
+    wordHashSet& foMap
 )
 {
     // Search specified directory for functionObject configuration files
@@ -126,7 +126,7 @@ void Foam::functionObjectList::listDir
 
 void Foam::functionObjectList::list()
 {
-    HashSet<word> foMap;
+    wordHashSet foMap;
 
     fileNameList etcDirs(findEtcDirs(functionObjectDictPath));
 
diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
index aadf0e310ec819572c244dddb0fa777ac0e4f864..0a4fa5aaa210d9cfd1e01e6a833e31d2e2b7e331 100644
--- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
+++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H
@@ -102,7 +102,7 @@ class functionObjectList
 
         //- Search the specified directory for functionObject
         //- configuration files, add to the given map and recurse
-        static void listDir(const fileName& dir, HashSet<word>& foMap);
+        static void listDir(const fileName& dir, wordHashSet& foMap);
 
         //- Disallow default bitwise copy construct
         functionObjectList(const functionObjectList&) = delete;
diff --git a/src/OpenFOAM/fields/ReadFields/ReadFields.C b/src/OpenFOAM/fields/ReadFields/ReadFields.C
index 6f2fc52436a6765b5055426070226881a1f31349..1914e3f06b686a31aaff7910e90f8f5e5518d04d 100644
--- a/src/OpenFOAM/fields/ReadFields/ReadFields.C
+++ b/src/OpenFOAM/fields/ReadFields/ReadFields.C
@@ -48,13 +48,13 @@ Foam::wordList Foam::fieldNames
         const wordList localNames(masterNames);
         Pstream::scatter(masterNames);
 
-        HashSet<word> localNamesSet(localNames);
+        wordHashSet localNamesSet(localNames);
 
         forAll(masterNames, i)
         {
             const word& masterFld = masterNames[i];
 
-            HashSet<word>::iterator iter = localNamesSet.find(masterFld);
+            wordHashSet::iterator iter = localNamesSet.find(masterFld);
 
             if (iter == localNamesSet.end())
             {
@@ -70,7 +70,7 @@ Foam::wordList Foam::fieldNames
             }
         }
 
-        forAllConstIter(HashSet<word>, localNamesSet, iter)
+        forAllConstIter(wordHashSet, localNamesSet, iter)
         {
             FatalErrorInFunction
                 << "Fields not synchronised across processors." << endl
diff --git a/src/OpenFOAM/fields/ReadFields/ReadFields.H b/src/OpenFOAM/fields/ReadFields/ReadFields.H
index 028c74af59a29945bc27aa27951978764210e58a..32dd5af2f7121babe311d843fbbf8706ae52d804 100644
--- a/src/OpenFOAM/fields/ReadFields/ReadFields.H
+++ b/src/OpenFOAM/fields/ReadFields/ReadFields.H
@@ -117,7 +117,7 @@ void readFields
 (
     const typename GeoFieldType::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     LIFOStack<regIOobject*>& storedObjects
 );
 
@@ -129,7 +129,7 @@ template<class GeoFieldType>
 void readUniformFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     LIFOStack<regIOobject*>& storedObjects,
     const bool syncPar = true
 );
diff --git a/src/OpenFOAM/fields/ReadFields/ReadFieldsTemplates.C b/src/OpenFOAM/fields/ReadFields/ReadFieldsTemplates.C
index fcc6c071a6327bb78dd89f057f42f08968539213..38354fbd80e2a5bcbafc251290e2aa40ddacc576 100644
--- a/src/OpenFOAM/fields/ReadFields/ReadFieldsTemplates.C
+++ b/src/OpenFOAM/fields/ReadFields/ReadFieldsTemplates.C
@@ -192,7 +192,7 @@ void Foam::ReadFields
 {
     // Collect all times that are no longer used
     {
-        HashSet<word> usedTimes(timeNames);
+        wordHashSet usedTimes(timeNames);
 
         DynamicList<word> unusedTimes(fieldsCache.size());
 
@@ -316,7 +316,7 @@ void Foam::readFields
 (
     const typename GeoFieldType::Mesh& mesh,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     LIFOStack<regIOobject*>& storedObjects
 )
 {
@@ -369,7 +369,7 @@ template<class UniformFieldType>
 void Foam::readUniformFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields,
+    const wordHashSet& selectedFields,
     LIFOStack<regIOobject*>& storedObjects,
     const bool syncPar
 )
@@ -386,13 +386,13 @@ void Foam::readUniformFields
         const wordList localNames(masterNames);
         Pstream::scatter(masterNames);
 
-        HashSet<word> localNamesSet(localNames);
+        wordHashSet localNamesSet(localNames);
 
         forAll(masterNames, i)
         {
             const word& masterFld = masterNames[i];
 
-            HashSet<word>::iterator iter = localNamesSet.find(masterFld);
+            wordHashSet::iterator iter = localNamesSet.find(masterFld);
 
             if (iter == localNamesSet.end())
             {
@@ -408,7 +408,7 @@ void Foam::readUniformFields
             }
         }
 
-        forAllConstIter(HashSet<word>, localNamesSet, iter)
+        forAllConstIter(wordHashSet, localNamesSet, iter)
         {
             FatalErrorInFunction
                 << "Fields not synchronised across processors." << endl
diff --git a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C
index b1e1dac7f1f1d682876d4baf28ae59e819e72fd9..6b36461924db11281e9244d9de700e530c04e5a0 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C
+++ b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C
@@ -963,7 +963,7 @@ bool Foam::polyBoundaryMesh::checkDefinition(const bool report) const
 
     bool hasError = false;
 
-    HashSet<word> patchNames(2*size());
+    wordHashSet patchNames(2*size());
 
     forAll(bm, patchi)
     {
diff --git a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C
index d3a2a760b4da99f580041b0c0102ac292f8e0107..355c8333494b7807ead94cdc0396656cba842af9 100644
--- a/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C
+++ b/src/dynamicMesh/fvMeshDistribute/fvMeshDistribute.C
@@ -225,7 +225,7 @@ Foam::wordList Foam::fvMeshDistribute::mergeWordList(const wordList& procNames)
     Pstream::gatherList(allNames);
     Pstream::scatterList(allNames);
 
-    HashSet<word> mergedNames;
+    wordHashSet mergedNames;
     forAll(allNames, proci)
     {
         forAll(allNames[proci], i)
diff --git a/src/functionObjects/utilities/writeDictionary/writeDictionary.C b/src/functionObjects/utilities/writeDictionary/writeDictionary.C
index ab36d93772b3e5382236351282f0978e2f2f3009..8e9625f0f5980ac0f035a9f06fc3765251fa4d50 100644
--- a/src/functionObjects/utilities/writeDictionary/writeDictionary.C
+++ b/src/functionObjects/utilities/writeDictionary/writeDictionary.C
@@ -126,7 +126,7 @@ bool Foam::functionObjects::writeDictionary::read(const dictionary& dict)
     regionFunctionObject::read(dict);
 
     wordList dictNames(dict.lookup("dictNames"));
-    HashSet<word> uniqueNames(dictNames);
+    wordHashSet uniqueNames(dictNames);
     dictNames_ = uniqueNames.toc();
 
     digests_.setSize(dictNames_.size(), SHA1Digest());
diff --git a/src/fvAgglomerationMethods/pairPatchAgglomeration/pairPatchAgglomeration.C b/src/fvAgglomerationMethods/pairPatchAgglomeration/pairPatchAgglomeration.C
index 0eb597a1c21a017894d3489fe5f1781d3cdb8fad..609053372047f0575c115014f65ed5b71ec89a0e 100644
--- a/src/fvAgglomerationMethods/pairPatchAgglomeration/pairPatchAgglomeration.C
+++ b/src/fvAgglomerationMethods/pairPatchAgglomeration/pairPatchAgglomeration.C
@@ -25,6 +25,7 @@ License
 
 #include "pairPatchAgglomeration.H"
 #include "meshTools.H"
+#include "edgeHashes.H"
 #include "unitConversion.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
@@ -123,7 +124,7 @@ void Foam::pairPatchAgglomeration::setEdgeWeights
     const label nCoarseI =  max(fineToCoarse) + 1;
     labelListList coarseToFine(invertOneToMany(nCoarseI, fineToCoarse));
 
-    HashSet<edge, Hash<edge>> fineFeaturedFaces(coarsePatch.nEdges()/10);
+    edgeHashSet fineFeaturedFaces(coarsePatch.nEdges()/10);
 
     // Map fine faces with featured edge into coarse faces
     forAllConstIter(EdgeMap<scalar>, facePairWeight_, iter)
diff --git a/src/fvMotionSolver/pointPatchFields/derived/uniformInterpolatedDisplacement/uniformInterpolatedDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/uniformInterpolatedDisplacement/uniformInterpolatedDisplacementPointPatchVectorField.C
index 82eee2cddcaec83ff0013edd2b7032ea5406917f..ba7320d68f0103906e8e92b9267d77ee220fb870 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/uniformInterpolatedDisplacement/uniformInterpolatedDisplacementPointPatchVectorField.C
+++ b/src/fvMotionSolver/pointPatchFields/derived/uniformInterpolatedDisplacement/uniformInterpolatedDisplacementPointPatchVectorField.C
@@ -187,7 +187,7 @@ void uniformInterpolatedDisplacementPointPatchVectorField::updateCoeffs()
         );
         // Save old times so we now which ones have been loaded and need
         // 'correctBoundaryConditions'. Bit messy.
-        HashSet<word> oldTimes(fieldsCache.toc());
+        wordHashSet oldTimes(fieldsCache.toc());
 
         ReadFields<pointVectorField>
         (
diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H
index 1e641cb2e9e285db530b58acf9174d0743b090c3..a6d233a38ed7862f73fc168189e732303b433db3 100644
--- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H
+++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H
@@ -186,13 +186,13 @@ private:
         wordList meshedPatches_;
 
         //- FaceZone to master patch name
-        HashTable<word, word> faceZoneToMasterPatch_;
+        HashTable<word> faceZoneToMasterPatch_;
 
         //- FaceZone to slave patch name
-        HashTable<word, word> faceZoneToSlavePatch_;
+        HashTable<word> faceZoneToSlavePatch_;
 
         //- FaceZone to method to handle faces
-        HashTable<surfaceZonesInfo::faceZoneType, word> faceZoneToType_;
+        HashTable<surfaceZonesInfo::faceZoneType> faceZoneToType_;
 
 
     // Private Member Functions
diff --git a/src/mesh/snappyHexMesh/refinementSurfaces/refinementSurfaces.C b/src/mesh/snappyHexMesh/refinementSurfaces/refinementSurfaces.C
index e30ab66c215e9b03f3954aec5edfa55bb83df570..3afb8fedb82221a78ceb9c53312c8a0e1c815bc3 100644
--- a/src/mesh/snappyHexMesh/refinementSurfaces/refinementSurfaces.C
+++ b/src/mesh/snappyHexMesh/refinementSurfaces/refinementSurfaces.C
@@ -177,7 +177,7 @@ Foam::refinementSurfaces::refinementSurfaces
     List<Map<autoPtr<dictionary>>> regionPatchInfo(surfI);
 
 
-    HashSet<word> unmatchedKeys(surfacesDict.toc());
+    wordHashSet unmatchedKeys(surfacesDict.toc());
 
     surfI = 0;
     forAll(allGeometry_.names(), geomI)
diff --git a/src/mesh/snappyHexMesh/shellSurfaces/shellSurfaces.C b/src/mesh/snappyHexMesh/shellSurfaces/shellSurfaces.C
index 1e2999a155cd85702162beffc1ee339cd8848341..955afee4e7fa0b9de2593230061c52eef3800f79 100644
--- a/src/mesh/snappyHexMesh/shellSurfaces/shellSurfaces.C
+++ b/src/mesh/snappyHexMesh/shellSurfaces/shellSurfaces.C
@@ -594,7 +594,7 @@ Foam::shellSurfaces::shellSurfaces
     nullGapLevel[2] = 0;
 
 
-    HashSet<word> unmatchedKeys(shellsDict.toc());
+    wordHashSet unmatchedKeys(shellsDict.toc());
     shellI = 0;
 
     forAll(allGeometry_.names(), geomI)
diff --git a/src/meshTools/edgeMesh/edgeMesh.C b/src/meshTools/edgeMesh/edgeMesh.C
index 879bdf7e1ee98635699c3fc4d17a09c5ab5b91d7..f91f5a1a817f6994a0fe59e2d03d4ce8529ac54e 100644
--- a/src/meshTools/edgeMesh/edgeMesh.C
+++ b/src/meshTools/edgeMesh/edgeMesh.C
@@ -28,7 +28,7 @@ License
 #include "addToRunTimeSelectionTable.H"
 #include "addToMemberFunctionSelectionTable.H"
 #include "ListOps.H"
-#include "EdgeMap.H"
+#include "edgeHashes.H"
 #include "PackedBoolList.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -323,7 +323,7 @@ void Foam::edgeMesh::mergePoints(const scalar mergeDist)
 
 void Foam::edgeMesh::mergeEdges()
 {
-    HashSet<edge, Hash<edge>> uniqEdges(2*edges_.size());
+    edgeHashSet uniqEdges(2*edges_.size());
     PackedBoolList pointIsUsed(points_.size());
 
     label nUniqEdges = 0;
diff --git a/src/meshTools/searchableSurfaces/searchableSurfaces/searchableSurfaces.C b/src/meshTools/searchableSurfaces/searchableSurfaces/searchableSurfaces.C
index 2783cea76f996baa4d96f0555d185f0bade8c568..2c7ad4377ea5e9c46cee9cd253fe5736a5279b2a 100644
--- a/src/meshTools/searchableSurfaces/searchableSurfaces/searchableSurfaces.C
+++ b/src/meshTools/searchableSurfaces/searchableSurfaces/searchableSurfaces.C
@@ -865,7 +865,7 @@ void Foam::searchableSurfaces::writeStats
 
         if (patchTypes.size() && patchTypes[surfI].size() >= 1)
         {
-            wordList unique(HashSet<word>(patchTypes[surfI]).sortedToc());
+            wordList unique(wordHashSet(patchTypes[surfI]).sortedToc());
             Info<< "        patches   : ";
             forAll(unique, i)
             {
diff --git a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C
index c38da917f025972ce9cc66de04903940d0419d51..7ed11e09bdb724fcec4f0beb49724976097e9713 100644
--- a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C
+++ b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersection.C
@@ -1525,7 +1525,7 @@ void Foam::surfaceIntersection::mergePoints(const scalar mergeDist)
 
 void Foam::surfaceIntersection::mergeEdges()
 {
-    HashSet<edge, Hash<edge>> uniqEdges(2*cutEdges_.size());
+    edgeHashSet uniqEdges(2*cutEdges_.size());
 
     label nUniqEdges = 0;
     labelList edgeNumbering(cutEdges_.size(), -1);
diff --git a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C
index d8797736b0b4a405103a00f9b005870e0c377036..7d275d37d54796348414aa331f56e2fceb212664 100644
--- a/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C
+++ b/src/meshTools/triSurface/booleanOps/surfaceIntersection/surfaceIntersectionFuncs.C
@@ -26,6 +26,7 @@ License
 #include "surfaceIntersection.H"
 #include "triSurface.H"
 #include "triSurfaceSearch.H"
+#include "edgeHashes.H"
 #include "labelPairHashes.H"
 #include "OFstream.H"
 
@@ -161,7 +162,7 @@ Foam::edgeList Foam::surfaceIntersection::filterEdges
     labelList& map
 )
 {
-    HashSet<edge, Hash<edge>> uniqueEdges(10*edges.size());
+    edgeHashSet uniqueEdges(10*edges.size());
 
     edgeList newEdges(edges.size());
 
diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H
index a56a761ec0ffc3a4bbac16cd10cd95aafc2161b4..b2454dc1007e90d3e1fd8996012bb47155c48d0f 100644
--- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H
+++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H
@@ -198,7 +198,7 @@ public:
         void reconstructFvVolumeInternalFields
         (
             const IOobjectList& objects,
-            const HashSet<word>& selectedFields
+            const wordHashSet& selectedFields
         );
 
         //- Read, reconstruct and write all/selected volume fields
@@ -206,7 +206,7 @@ public:
         void reconstructFvVolumeFields
         (
             const IOobjectList& objects,
-            const HashSet<word>& selectedFields
+            const wordHashSet& selectedFields
         );
 
         //- Read, reconstruct and write all/selected surface fields
@@ -214,7 +214,7 @@ public:
         void reconstructFvSurfaceFields
         (
             const IOobjectList& objects,
-            const HashSet<word>& selectedFields
+            const wordHashSet& selectedFields
         );
 };
 
diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C
index e7bd26b2cc95d2c4351c269360a2f62fde4b2f32..af0b1fe55775c345381a4b1653a9625b76490d25 100644
--- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C
+++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C
@@ -601,7 +601,7 @@ template<class Type>
 void Foam::fvFieldReconstructor::reconstructFvVolumeInternalFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     const word& fieldClassName = DimensionedField<Type, volMesh>::typeName;
@@ -636,7 +636,7 @@ template<class Type>
 void Foam::fvFieldReconstructor::reconstructFvVolumeFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     const word& fieldClassName =
@@ -672,7 +672,7 @@ template<class Type>
 void Foam::fvFieldReconstructor::reconstructFvSurfaceFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     const word& fieldClassName =
diff --git a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H
index 3d575d4a1cc4f9bfc3ef93d0b1c79d39ef3bdec2..03ba97dc51a9d4ce72a16d125d9aa3db685a29a0 100644
--- a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H
+++ b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H
@@ -154,7 +154,7 @@ public:
         void reconstructFields
         (
             const IOobjectList& objects,
-            const HashSet<word>& selectedFields
+            const wordHashSet& selectedFields
         );
 };
 
diff --git a/src/parallel/reconstruct/reconstruct/pointFieldReconstructorReconstructFields.C b/src/parallel/reconstruct/reconstruct/pointFieldReconstructorReconstructFields.C
index 41b1c3fc9b4d6286ddbcc73792f3d26854a8c370..9b1448b6f8b9d361d4bc9308cfd4edd885bd71ea 100644
--- a/src/parallel/reconstruct/reconstruct/pointFieldReconstructorReconstructFields.C
+++ b/src/parallel/reconstruct/reconstruct/pointFieldReconstructorReconstructFields.C
@@ -143,7 +143,7 @@ template<class Type>
 void Foam::pointFieldReconstructor::reconstructFields
 (
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     word fieldClassName
diff --git a/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H b/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
index 5c49b8ff46e5514bde73df35ac4e383a664155d5..bc8c32d6b51a74bbf83d4af4b49102668de83cfb 100644
--- a/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
+++ b/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
@@ -85,7 +85,7 @@ void reconstructLagrangianFields
     const polyMesh& mesh,
     const PtrList<fvMesh>& meshes,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 );
 
 
@@ -96,7 +96,7 @@ void reconstructLagrangianFieldFields
     const polyMesh& mesh,
     const PtrList<fvMesh>& meshes,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 );
 
 
diff --git a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
index eea4d38658286e991352a0be5fc0f36554ae1ded..62be1dc03cdfd7721b090d28b8142e1de548dcab 100644
--- a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
+++ b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
@@ -163,7 +163,7 @@ void Foam::reconstructLagrangianFields
     const polyMesh& mesh,
     const PtrList<fvMesh>& meshes,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     const word fieldClassName(IOField<Type>::typeName);
@@ -206,7 +206,7 @@ void Foam::reconstructLagrangianFieldFields
     const polyMesh& mesh,
     const PtrList<fvMesh>& meshes,
     const IOobjectList& objects,
-    const HashSet<word>& selectedFields
+    const wordHashSet& selectedFields
 )
 {
     {
diff --git a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
index d7d8f8e5b9a1aba0f16b36405bc116013618c758..52c4c2dfea1390997df145ac5220e048616148cc 100644
--- a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
+++ b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
@@ -108,7 +108,7 @@ protected:
         PtrList<subBody> mergedBodies_;
 
         //- Lookup-table of the IDs of the bodies
-        HashTable<label, word> bodyIDs_;
+        HashTable<label> bodyIDs_;
 
         //- List of indices of the parent of each body
         DynamicList<label> lambda_;
diff --git a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
index 96d9b422b9101ca81742bc0d8f0d4fc0bd6abab8..6b9b6a0a08cdd70e760c0fcc065cf4ceb752a0fe 100644
--- a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C
@@ -135,7 +135,7 @@ bool Foam::fileFormats::NASsurfaceFormat<Face>::read
     word  ansaType, ansaName;
 
     // A single warning per unrecognized command
-    HashSet<word> unhandledCmd;
+    wordHashSet unhandledCmd;
 
     while (is.good())
     {