diff --git a/applications/test/QRMatrix/Test-QRMatrix.C b/applications/test/QRMatrix/Test-QRMatrix.C
index fb22d78bde3f9c8316a2a51485fdd9d61a5daaf7..281c62dd5b40dcd3d8983541fab42af31fc9608d 100644
--- a/applications/test/QRMatrix/Test-QRMatrix.C
+++ b/applications/test/QRMatrix/Test-QRMatrix.C
@@ -324,7 +324,7 @@ void verification_QRMatrix
     // QRMatrix Constructors
     #if (0 | RUNALL)
     {
-        QRMatrix<MatrixType> QRNull();
+        QRMatrix<MatrixType> QRNull;
     }
     #endif
 
@@ -967,14 +967,14 @@ void verification_tsqr
     typedef RectangularMatrix<Type> RMatrix;
 
     // Size of the full matrix and its partitions
-    const label nColsSum = rndGen.position(1, 100);
-    const label qParts = rndGen.position(10, 30);
+    const label nColsSum = rndGen.position<label>(1, 100);
+    const label qParts = rndGen.position<label>(10, 30);
     List<label> mRowsList(qParts, Zero);
 
     label mRowsSum = 0;
     for (label i = 0; i < qParts; ++i)
     {
-        const label mRows = rndGen.position(nColsSum, 10*nColsSum);
+        const label mRows = rndGen.position<label>(nColsSum, 10*nColsSum);
         mRowsList[i] = mRows;
         mRowsSum += mRows;
     }
@@ -1084,7 +1084,7 @@ void verification_backSubstitution
     {
         Info<< nl << "# A*X = b:" << nl;
         const RMatrix AX(A*X);
-        equal(AX, b, verbose, 1e-3, 1e-3);
+        equal(AX, b, verbose, 10, 1e-3, 1e-3);
     }
     #endif
 }
@@ -1170,7 +1170,7 @@ int main(int argc, char *argv[])
 
         for (label i = 0; i < numberOfTests; ++i)
         {
-            const label mRows = rndGen.position(1, 50);
+            const label mRows = rndGen.position<label>(1, 50);
             Info<< nl << nl << "# Random A with random mRows = " << mRows << nl;
 
             SMatrix A(makeRandomMatrix<SMatrix>({mRows, mRows}, rndGen));
@@ -1199,8 +1199,8 @@ int main(int argc, char *argv[])
 
         for (label i = 0; i < numberOfTests; ++i)
         {
-            const label mRows = rndGen.position(1, 50);
-            const label nCols = rndGen.position(1, 50);
+            const label mRows = rndGen.position<label>(1, 50);
+            const label nCols = rndGen.position<label>(1, 50);
             Info<< nl << nl << "# Random matrix A with"
                 << " random mRows = " << mRows
                 << " random nCols = " << nCols << nl;
@@ -1231,7 +1231,7 @@ int main(int argc, char *argv[])
 
         for (label i = 0; i < numberOfTests; ++i)
         {
-            const label mRows = rndGen.position(1, 50);
+            const label mRows = rndGen.position<label>(1, 50);
             Info<< nl << nl << "# Random A with random mRows = " << mRows << nl;
 
             SCMatrix A({mRows, mRows}, complex(0, 0));
@@ -1258,7 +1258,7 @@ int main(int argc, char *argv[])
 
         for (label i = 0; i < numberOfTests; ++i)
         {
-            const label mRows = rndGen.position(1, 50);
+            const label mRows = rndGen.position<label>(1, 50);
             Info<< nl << nl << "# Random A with random mRows = " << mRows << nl;
 
             SCMatrix A(makeRandomMatrix<SCMatrix>({mRows, mRows}, rndGen));
@@ -1287,8 +1287,8 @@ int main(int argc, char *argv[])
 
         for (label i = 0; i < numberOfTests; ++i)
         {
-            const label mRows = rndGen.position(1, 50);
-            const label nCols = rndGen.position(1, 50);
+            const label mRows = rndGen.position<label>(1, 50);
+            const label nCols = rndGen.position<label>(1, 50);
             Info<< nl << nl << "# Random matrix A with"
                 << " random mRows = " << mRows
                 << " random nCols = " << nCols << nl;
@@ -1363,8 +1363,8 @@ int main(int argc, char *argv[])
 
             for (label i = 0; i < numberOfTests; ++i)
             {
-                const label mRows = rndGen.position(20, 50);
-                const label pCols = rndGen.position(20, 50);
+                const label mRows = rndGen.position<label>(20, 50);
+                const label pCols = rndGen.position<label>(20, 50);
                 Info<< nl << nl << "# Random square matrix A with"
                     << " random mRows = " << mRows
                     << " random nCols = " << mRows << nl;
@@ -1422,8 +1422,8 @@ int main(int argc, char *argv[])
 
             for (label i = 0; i < numberOfTests; ++i)
             {
-                const label mRows = rndGen.position(20, 50);
-                const label pCols = rndGen.position(20, 50);
+                const label mRows = rndGen.position<label>(20, 50);
+                const label pCols = rndGen.position<label>(20, 50);
                 Info<< nl << nl << "# Random square matrix A with"
                     << " random mRows = " << mRows
                     << " random nCols = " << mRows << nl;
diff --git a/etc/bashrc b/etc/bashrc
index ff61f4f84e67fb62f98646a018bf47feebc0f50c..1c63377b8e01f2e94f53fba4e04836e086c0a60a 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -39,11 +39,12 @@
 #         - local site-specific directory, uses WM_PROJECT_DIR/site if unset
 #
 # Note
-#     Changes made to this bashrc file may be lost with the next upgrade.
+#     Changes made to this file will be lost with the next upgrade.
 #
 #------------------------------------------------------------------------------
 
-export WM_PROJECT=OpenFOAM
+# [WM_PROJECT_VERSION] - A human-readable version name
+# A development version is often named 'com' - as in www.openfoam.com
 export WM_PROJECT_VERSION=com
 
 #------------------------------------------------------------------------------
@@ -67,7 +68,7 @@ export WM_PRECISION_OPTION=DP
 # = 32 | 64
 export WM_LABEL_SIZE=32
 
-# [WM_COMPILE_OPTION] - Optimised, debug, profiling, other:
+# [WM_COMPILE_OPTION] - Optimised(default), debug, profiling, other:
 # = Opt | Debug | Prof
 # Other is processor or packaging specific (eg, OptKNL)
 export WM_COMPILE_OPTION=Opt
@@ -82,6 +83,9 @@ export WM_MPLIB=SYSTEMOPENMPI
 #------------------------------------------------------------------------------
 # (advanced / legacy)
 
+# [WM_PROJECT] - This project is "OpenFOAM" - do not change
+export WM_PROJECT=OpenFOAM
+
 # [projectDir] - directory containing this OpenFOAM version.
 # \- When this file is located as $WM_PROJECT_DIR/etc/bashrc, the next lines
 #    should work when sourced by BASH or ZSH shells. If this however fails,
diff --git a/etc/cshrc b/etc/cshrc
index a4a1c39ed880127e32d64e7c13d8b347dbcc158f..9d458a301d385e23f51fd5cc865565dc13a3ac77 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -39,11 +39,12 @@
 #         - local site-specific directory, uses WM_PROJECT_DIR/site if unset
 #
 # Note
-#     Changes made to this cshrc file may be lost with the next upgrade.
+#     Changes made to this file will be lost with the next upgrade.
 #
 #------------------------------------------------------------------------------
 
-setenv WM_PROJECT OpenFOAM
+# [WM_PROJECT_VERSION] - A human-readable version name
+# A development version is often named 'com' - as in www.openfoam.com
 setenv WM_PROJECT_VERSION com
 
 #------------------------------------------------------------------------------
@@ -67,7 +68,7 @@ setenv WM_PRECISION_OPTION DP
 # = 32 | 64
 setenv WM_LABEL_SIZE 32
 
-# [WM_COMPILE_OPTION] - Optimised, debug, profiling, other:
+# [WM_COMPILE_OPTION] - Optimised(default), debug, profiling, other:
 # = Opt | Debug | Prof
 # Other is processor or packaging specific (eg, OptKNL)
 setenv WM_COMPILE_OPTION Opt
@@ -82,6 +83,9 @@ setenv WM_MPLIB SYSTEMOPENMPI
 #------------------------------------------------------------------------------
 # (advanced / legacy)
 
+# [WM_PROJECT] - This project is "OpenFOAM" - do not change
+setenv WM_PROJECT OpenFOAM
+
 # [projectDir] - directory containing this OpenFOAM version.
 # \- When this file is located as $WM_PROJECT_DIR/etc/cshrc, the next lines
 #    should work when sourced by CSH or TCSH shells. If this however fails,
diff --git a/src/OpenFOAM/matrices/Matrix/MatrixTools.C b/src/OpenFOAM/matrices/Matrix/MatrixTools.C
index 30dbce057147b3a16bb106bf0c25f44162e35e78..2000628aee14c77e94a8a2c80df3312055275628 100644
--- a/src/OpenFOAM/matrices/Matrix/MatrixTools.C
+++ b/src/OpenFOAM/matrices/Matrix/MatrixTools.C
@@ -35,7 +35,7 @@ bool Foam::MatrixTools::equal
     const Matrix<Form1, Type>& A,
     const Matrix<Form2, Type>& B,
     const bool verbose,
-    const label lenDiffs,
+    const label maxDiffs,
     const scalar relTol,
     const scalar absTol
 )
@@ -55,24 +55,24 @@ bool Foam::MatrixTools::equal
     auto iter1 = A.cbegin();
     auto iter2 = B.cbegin();
 
-    label j = 0;
+    label nDiffs = 0;
 
     for (label i = 0; i < len; ++i)
     {
         if ((absTol + relTol*mag(*iter2)) < Foam::mag(*iter1 - *iter2))
         {
+            ++nDiffs;
+
             if (verbose)
             {
                 Info<< "Matrix element " << i
                     << " differs beyond tolerance: "
                     << *iter1 << " vs " << *iter2 << nl;
-                ++j;
             }
-            if (lenDiffs < j)
+            if (maxDiffs && maxDiffs < nDiffs)
             {
-                Info<< "Number of different elements exceeds = " << lenDiffs
-                    << " Ceasing comparisons for the remaining of elements."
-                    << nl;
+                Info<< "More than " << maxDiffs << " elements differ."
+                    << " Skipping further comparisons." << nl;
                 return false;
             }
         }
@@ -83,10 +83,17 @@ bool Foam::MatrixTools::equal
 
     if (verbose)
     {
-        Info<< "All elements equal within the tolerances" << nl;
+        if (nDiffs)
+        {
+            Info<< "Some elements differed" << nl;
+        }
+        else
+        {
+            Info<< "All elements equal within the tolerances" << nl;
+        }
     }
 
-    return true;
+    return !nDiffs;
 }
 
 
diff --git a/src/OpenFOAM/matrices/Matrix/MatrixTools.H b/src/OpenFOAM/matrices/Matrix/MatrixTools.H
index 58bdac3ef482662637ae340201dfd1568d9cab50..95fa5bcd59a9bfd127376ab1b084831c14b8407d 100644
--- a/src/OpenFOAM/matrices/Matrix/MatrixTools.H
+++ b/src/OpenFOAM/matrices/Matrix/MatrixTools.H
@@ -27,7 +27,7 @@ Namespace
     Foam::MatrixTools
 
 Description
-    Collection of static functions for matrix-related verifications.
+    Collection of functions for matrix-related verifications.
 
 SourceFiles
     MatrixTools.C
@@ -47,7 +47,6 @@ namespace Foam
 // Forward declarations
 class Ostream;
 
-
 /*---------------------------------------------------------------------------*\
                        Namespace MatrixTools Declaration
 \*---------------------------------------------------------------------------*/
@@ -56,13 +55,14 @@ namespace MatrixTools
 {
 
 //- Compare matrix elements for absolute or relative equality
+//
 template<class Form1, class Form2, class Type>
 bool equal
 (
     const Matrix<Form1, Type>& A,
     const Matrix<Form2, Type>& B,
     const bool verbose = false,
-    const label lenDiffs = 10,
+    const label maxDiffs = 10, //!< Stop reporting after maxDiffs (0 to disable)
     const scalar relTol = 1e-5,
     const scalar absTol = 1e-8
 );
diff --git a/src/finiteVolume/expressions/volume/volumeExprDriver.C b/src/finiteVolume/expressions/volume/volumeExprDriver.C
index 8cb2c5002ec94ddaf83bddbe29ba91274501fd2d..6a417e5eddc3be76b725448dc9ed0e949a2377c1 100644
--- a/src/finiteVolume/expressions/volume/volumeExprDriver.C
+++ b/src/finiteVolume/expressions/volume/volumeExprDriver.C
@@ -81,39 +81,6 @@ addNamedToRunTimeSelectionTable
 } // End namespace Foam
 
 
-// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    static label getPatchID(const fvMesh& mesh, const word& patchName)
-    {
-        const auto& bMesh = mesh.boundaryMesh();
-
-        const label patchId = bMesh.findPatchID(patchName);
-
-        if (patchId < 0)
-        {
-            FatalErrorInFunction
-                << "No patch " << patchName << " found in "
-                << flatOutput(bMesh.names()) << nl
-                << exit(FatalError);
-        }
-        return patchId;
-    }
-
-
-    static inline const polyPatch& findPolyPatch
-    (
-        const fvMesh& mesh,
-        const word& patchName
-    )
-    {
-        return mesh.boundaryMesh()[getPatchID(mesh, patchName)];
-    }
-
-} // End namespace Foam
-
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::expressions::volumeExpr::parseDriver::parseDriver
diff --git a/src/functionObjects/utilities/parProfiling/parProfiling.H b/src/functionObjects/utilities/parProfiling/parProfiling.H
index d29629bbe92ccfb4b9008f3a0446d941f1938880..7cc6fc3dd4e65ed614efd2eb28e75827960c78cf 100644
--- a/src/functionObjects/utilities/parProfiling/parProfiling.H
+++ b/src/functionObjects/utilities/parProfiling/parProfiling.H
@@ -77,10 +77,10 @@ class parProfiling
 {
     // Private Member Functions
 
-        //- Disallow default bitwise copy construct
+        //- No copy construct
         parProfiling(const parProfiling&) = delete;
 
-        //- Disallow default bitwise assignment
+        //- No copy assignment
         void operator=(const parProfiling&) = delete;
 
 
diff --git a/src/parallel/distributed/patchDistMethods/exact/exactPatchDistMethod.H b/src/parallel/distributed/patchDistMethods/exact/exactPatchDistMethod.H
index 0804d62fd995884ab38b448101a57dcf4fed3ee1..4fd1f82fb1ac3a1fc3f18a3f56a4565b411a3cfb 100644
--- a/src/parallel/distributed/patchDistMethods/exact/exactPatchDistMethod.H
+++ b/src/parallel/distributed/patchDistMethods/exact/exactPatchDistMethod.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2018 OpenCFD Ltd.
+    Copyright (C) 2018-2019 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -72,11 +72,11 @@ class exact
 
         const distributedTriSurfaceMesh& patchSurface() const;
 
-        //- Disallow default bitwise copy construct
-        exact(const exact&);
+        //- No copy construct
+        exact(const exact&) = delete;
 
-        //- Disallow default bitwise assignment
-        void operator=(const exact&);
+        //- No copy assignment
+        void operator=(const exact&) = delete;
 
 
 public:
diff --git a/wmake/rules/General/general b/wmake/rules/General/general
index fdd53275d6a427e33e1dea98974a61860d6739c1..8c433e46fabb4f58255dc65b4b178e93c96e79aa 100644
--- a/wmake/rules/General/general
+++ b/wmake/rules/General/general
@@ -14,11 +14,16 @@ GLIBS      = -lm
 GLIB_LIBS  =
 
 
-COMPILER_TYPE   = $(shell echo "$(WM_COMPILER)" | sed -e 's/[0-9].*//')
-DEFAULT_RULES   = $(WM_DIR)/rules/$(WM_ARCH)$(COMPILER_TYPE)
+COMPILER_FAMILY = $(shell echo "$(WM_COMPILER)" | sed -e 's/[0-9].*//')
+DEFAULT_RULES   = $(WM_DIR)/rules/$(WM_ARCH)$(COMPILER_FAMILY)
 RULES           = $(WM_DIR)/rules/$(WM_ARCH)$(WM_COMPILER)
 WMAKE_BIN       = $(WM_DIR)/platforms/$(WM_ARCH)$(WM_COMPILER)
 
+# Default compilation is 'Opt' - never permit an empty value
+ifeq ($(WM_COMPILE_OPTION),)
+    WM_COMPILE_OPTION = Opt
+endif
+
 ifeq ($(WM_SCHEDULER),)
     AND = &&
 else
@@ -26,7 +31,6 @@ else
 endif
 
 include $(DEFAULT_RULES)/general
-include $(DEFAULT_RULES)/c++
 sinclude $(RULES)/general
 sinclude $(RULES)/c++
 include $(GENERAL_RULES)/transform
diff --git a/wmake/src/Makefile b/wmake/src/Makefile
index 20c4907d08e0f20f6691a310b4ce88e7ad65221c..2b602f11c13857d51beee7087b078b23fb2b52b6 100644
--- a/wmake/src/Makefile
+++ b/wmake/src/Makefile
@@ -63,10 +63,13 @@ archTarget  := $(shell basename $(WMAKE_BIN))
 # Targets
 #------------------------------------------------------------------------------
 
-.PHONY: all clean message
+.PHONY: all clean message old
 
 all: $(WMAKE_BIN)/lemon$(EXT_EXE) $(WMAKE_BIN)/wmkdepend$(EXT_EXE) message
 
+# Flex-based processing
+old: $(WMAKE_BIN)/wmkdep$(EXT_EXE)
+
 message:
 ifneq ($(archHost),$(archTarget))
 	@echo "built wmake-bin ($(archTarget)) for $(archHost) host"
@@ -76,7 +79,7 @@ endif
 
 clean:
 	@echo "clean wmake-bin ($(archTarget))"
-	@rm -rf $(WMAKE_BIN) 2>/dev/null
+	@rm -rf $(WMAKE_BIN)
 	@rmdir $(shell dirname $(WMAKE_BIN)) 2>/dev/null || true
 
 $(WMAKE_BIN)/lemon$(EXT_EXE): lemon.c
@@ -88,17 +91,17 @@ $(WMAKE_BIN)/wmkdep$(EXT_EXE): wmkdep.l
 	@mkdir -p $(WMAKE_BIN)
 	$(call QUIET_MESSAGE,flex,$(<F))
 	$E flex -o $@.c $(<F) && $(cc) $(cFLAGS) $@.c -o $@
-	@rm -f $@.c 2>/dev/null
+	@rm -f $@.c
 
 $(WMAKE_BIN)/wmkdepend$(EXT_EXE): wmkdepend.cc
 	@mkdir -p $(WMAKE_BIN)
 	$(call QUIET_MESSAGE,wmkdepend,$(<F))
-	$E $(CC) $(c++FLAGS) $(c++LESSWARN) $(<F) -o $@
+	$E $(CC) $(c++FLAGS) $(<F) -o $@
 
-# $(WMAKE_BIN)/wmkdepend$(EXT_EXE): wmkdepend.rl
-# 	@mkdir -p $(WMAKE_BIN)
-# 	$(call QUIET_MESSAGE,ragel,$(<F))
-# 	$E ragel -G2 -o $@.cc $(<F) && $(CC) $(c++FLAGS) $(c++LESSWARN) $@.cc -o $@
-# 	@rm -f $@.cc 2>/dev/null
+#$(WMAKE_BIN)/wmkdepend$(EXT_EXE): wmkdepend.rl
+#	@mkdir -p $(WMAKE_BIN)
+#	$(call QUIET_MESSAGE,ragel,$(<F))
+#	$E ragel -G2 -o $@.cc $(<F) && $(CC) $(c++FLAGS) $@.cc -o $@
+#	@rm -f $@.cc
 
 #------------------------------------------------------------------------------
diff --git a/wmake/wclean b/wmake/wclean
index cc77be3c5a7ac06a39f4c9bcf4b9e312f7e658a2..c7ebcd7babfc4a34566730309a88ff7e5ecf9462 100755
--- a/wmake/wclean
+++ b/wmake/wclean
@@ -46,7 +46,6 @@ usage() {
 
 Usage: $Script [OPTION] [dir]
        $Script [OPTION] target [dir [MakeDir]]
-
 options:
   -a | -all         Same as the 'all' target
   -s | -silent      Ignored - for compatibility with wmake
diff --git a/wmake/wmake b/wmake/wmake
index 7d4b12b74df9e3eaf532748fd31f6d736efe7e8f..8bc070eb4b710f9647951f9da34812f0390d70ea 100755
--- a/wmake/wmake
+++ b/wmake/wmake
@@ -59,15 +59,12 @@
 Script="${0##*/}"           # Use 'Script' for error messages in wmakeFunctions
 . "${0%/*}/scripts/wmakeFunctions"              # Source wmake functions
 
-unset optHelpFull
-usage() {
-    exec 1>&2
-    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+# Print help to stdout so that it can be captured
+printHelp() {
     cat<<HELP_HEAD
 
 Usage: $Script [OPTION] [dir]
        $Script [OPTION] target [dir [MakeDir]]
-
 options:
   -s | -silent      Quiet mode (does not echo commands)
   -a | -all         wmake all sub-directories, running Allwmake if present
@@ -77,7 +74,7 @@ options:
   -update           Update lnInclude dirs, dep files, remove deprecated files/dirs
 HELP_HEAD
 
-if [ "$optHelpFull" = true ]
+if [ -n "$1" ]
 then
 cat<<HELP_FULL
   -debug            Define c++DBUG='-DFULLDEBUG -g -O0' as override
@@ -123,6 +120,19 @@ HELP_TAIL
     exit 1
 }
 
+# Report error and exit
+die()
+{
+    exec 1>&2
+    echo
+    echo "Error encountered:"
+    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
+    echo
+    echo "See '${0##*/} -help' for usage"
+    echo
+    exit 1
+}
+
 # Default make is the "make" in the path
 make="make"
 
@@ -149,11 +159,10 @@ while [ "$#" -gt 0 ]
 do
     case "$1" in
         -help-f*)   # Full help
-            optHelpFull=true
-            usage
+            printHelp -full
             ;;
         -h | -help*) # Short help
-            usage
+            printHelp
             ;;
         -s | -silent)
             export WM_QUIET=true
@@ -224,7 +233,7 @@ do
             break
             ;;
         -*)
-            usage "unknown option: '$1'"
+            die "unknown option: '$1'"
             ;;
         *)
             break