diff --git a/BuildIssues.txt b/BuildIssues.txt
deleted file mode 100644
index a05b5301c3c3217f6ef357024abaea952f16974f..0000000000000000000000000000000000000000
--- a/BuildIssues.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-OpenFOAM-1712
-==================
-Known Build Issues
-==================
-
----------------------
-Intel MPI (Gcc/Clang)
----------------------
-
-  Either I_MPI_ROOT or MPI_ROOT can be used to specify the Intel-MPI
-  installation directory path.
-
-  The ThirdParty build of ptscotch uses `mpiicc` for Intel-MPI
-  instead of the usual `mpicc`.
-  When gcc or clang are used, it is highly likely that the
-  I_MPI_CC environment variable also needs to be set accordingly.
-
-  See `mpiicc -help` for more information about environment variables.
-
-
---------------
-Intel Compiler
---------------
-
-  Since OpenFOAM uses C++11, a fairly recent version is required.
-  The Intel compiler - icc (ICC) 17.0.1 20161005 is ok, but the
-  initial release - icc (ICC) 17.0.0 20160721 - has a bug that
-  will result in these types of error messages.
-
-    MatrixSpaceI.H(492): error: no instance of overloaded function
-    "Foam::MatrixSpace<Form, Cmpt, Mrows, Ncols>::Block<SubTensor,
-    BRowStart, BColStart>::operator=" matches the specified type
-
-
----
-VTK
----
-
-If using the runTimePostProcessing to create on-the-fly images, you
-can simply just compile ParaView and these libraries will be used.
-
-If you elect to use a separate VTK compilation (for example for
-off-screen rendering), it is advisable to reuse the VTK libraries that
-are provided with ParaView by making an appropriate symlink
-prior to using makeVTK. This doesn't just reduce disk-space, but works
-much better than using the VTK tar file.
-
-Using runTimePostProcessing with the 'plain' VTK libraries does
-generally work, but does not exit cleanly:
-
-    symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
-    undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv
-
-    symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
-    undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev
-
-This error appears to be suppressed if VTK is compiled with a Debug build-type.
-
-
--------------------------
-Building on older systems
--------------------------
-
-If the system gcc is too old for building OpenFOAM, a third-party gcc or
-clang/llvm installation can be used. If building clang/llvm, note that
-there are also minimum gcc/g++ requirements there:
-
-   Min gcc/g++
-   ===========   ==========
-    4.4          llvm-3.4.2
-    4.7          llvm-3.5.2 - llvm-3.7.0
-
-
-If your system compiler is too old to build the minimum required gcc or
-clang/llvm, it is just simply too old.
-
-
----------------------------------
-ThirdParty clang without gmp/mpfr
----------------------------------
-
-If using ThirdParty clang without gmp/mpfr, the ThirdParty makeCGAL
-script will need to be run manually and specify that there is no
-gmp/mpfr. Eg,
-
-    cd $WM_THIRD_PARTY_DIR
-    ./makeCGAL gmp-none mpfr-none
-
-Subequent compilation with Allwmake will now run largely without any
-problems, except that the components linking against CGAL
-(foamyMesh and surfaceBooleanFeatures) will also try to link against
-a nonexistent mpfr library. As a workaround, the link-dependency can
-be removed in wmake/rules/General/CGAL :
-
-    CGAL_LIBS = \
-        -L$(BOOST_ARCH_PATH)/lib \
-        -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
-        -L$(CGAL_ARCH_PATH)/lib \
-        -L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
-        -lCGAL
-
-This is a temporary inconvenience until a more robust solution is found.
-
-
--------------------------
-Building with spack
--------------------------
-
-If you are building with spack, note that the depends_on for paraview
-resolves poorly. The +qt dependency (for building the reader module)
-may need to be specified as a preference by including the following in
-your `~/.spack/packages.yaml` file:
-
-    packages:
-        paraview:
-            variants: +qt
-
-It appears that spack will otherwise ignore any paraview+qt version
-and attempt to install a paraview~qt version instead.
-
---
diff --git a/META-INFO/api-info b/META-INFO/api-info
index bade5ef065ed5e50060495e0850cea3d75eba402..4448e7818b720a2c8860989170025bd0b69b1f38 100644
--- a/META-INFO/api-info
+++ b/META-INFO/api-info
@@ -1,2 +1,2 @@
-api=1904
+api=1906
 patch=0
diff --git a/README.md b/README.md
index 163f443c55faacd85798bb258e713f92ab002b79..a98a59729312cd21537002695fc19969bdbc15f7 100644
--- a/README.md
+++ b/README.md
@@ -33,9 +33,9 @@ Please see the relevant guides:
 [repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
 [repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
 
-[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/BuildIssues.txt
 [link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
-[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
+[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
+[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
 [link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
 [link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
 [link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
diff --git a/applications/solvers/finiteArea/surfactantFoam/createVolFields.H b/applications/solvers/finiteArea/surfactantFoam/createVolFields.H
index 2f42dae83d971a8ba8794086d3575c80bf7200ac..2d1de76a61e2a3b878cc1790da299fbd8241b623 100644
--- a/applications/solvers/finiteArea/surfactantFoam/createVolFields.H
+++ b/applications/solvers/finiteArea/surfactantFoam/createVolFields.H
@@ -16,7 +16,7 @@
     );
 
     vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
-    Cvf.write();
+    //Cvf.write();
 
     volVectorField U
     (
@@ -33,4 +33,4 @@
     );
 
     vsm.mapToVolume(Us, U.boundaryFieldRef());
-    U.write();
+    //U.write();
diff --git a/applications/test/Matrix/Test-Matrix.C b/applications/test/Matrix/Test-Matrix.C
index 3ea5fcaaded9ebe7b7205c21cfb8aa602bd6fc8f..1aa50c363b1bac86e238df166cd105af0cab1ff9 100644
--- a/applications/test/Matrix/Test-Matrix.C
+++ b/applications/test/Matrix/Test-Matrix.C
@@ -30,6 +30,7 @@ License
 #include "LLTMatrix.H"
 #include "Random.H"
 #include "SortList.H"
+#include "Switch.H"
 #include <algorithm>
 
 using namespace Foam;
@@ -237,22 +238,14 @@ int main(int argc, char *argv[])
         Info<< "# SquareMatrix<scalar> example:" << nl;
         printMatrix(Info, S) << nl;
 
-        const label mRows = S.m();
-        const label nCols = S.n();
-        const label size = S.size();
-        const labelPair sizes = S.sizes();
-        const bool isEmpty = S.empty();
-        const long constPointer = long(S.cdata());
-        long pointer = long(S.data());
-
         Info
-            << "Number of rows =" << tab << mRows << nl
-            << "Number of columns = " << tab << nCols << nl
-            << "Number of elements = " << tab << size << nl
-            << "Number of rows/columns = " << tab << sizes << nl
-            << "Matrix is empty = " << tab << isEmpty << nl
-            << "Constant pointer = " << tab << constPointer << nl
-            << "Pointer = " << tab << pointer << nl
+            << "Number of rows =" << tab << S.m() << nl
+            << "Number of columns = " << tab << S.n() << nl
+            << "Number of elements = " << tab << S.size() << nl
+            << "Number of rows/columns = " << tab << S.sizes() << nl
+            << "Matrix is empty = " << tab << Switch(S.empty()) << nl
+            << "Constant pointer = " << tab << uintptr_t(S.cdata()) << nl
+            << "Pointer = " << tab << uintptr_t(S.data()) << nl
             << nl;
 
         horizontalLine();
diff --git a/doc/Build.md b/doc/Build.md
index 97aafcb5f2fe4d86e652217dd3f61330db76b90e..a59c8e6aa9ea362e0160d08bfb2c1673b0163f5c 100644
--- a/doc/Build.md
+++ b/doc/Build.md
@@ -15,7 +15,8 @@ The [third-party][repo third] directory includes a
 [build guide][link third-build].
 
 Some known build issues related to specific compiler and VTK library versions
-can be found in the [$WM_PROJECT_DIR/BuildIssues.txt][link openfoam-issues] file.
+can be found in the [$WM_PROJECT_DIR/doc/BuildIssues.md][link openfoam-issues]
+file.
 
 If you need to change the default versions for third-party libraries,
 or use system libraries for some components, please some additional
@@ -94,10 +95,10 @@ simpleFoam
 OpenFOAM ships with ParaView sources for post-processing OpenFOAM
 field results. However, the paraview version distributed with
 the operating system or a [binary package][download ParaView]
-will be sufficient, and avoids additional compilation complexity.
+will often be sufficient, and avoids additional compilation complexity.
 
-If do you wish to compile ParaView from sources, it is recommended
-that you do so *after* completing an initial compilation of OpenFOAM.
+If you do wish to compile ParaView from source, it is recommended
+that you do so ***after*** completing an initial compilation of OpenFOAM.
 This gets the process started much more quickly. At a later stage,
 OpenFOAM can be updated to compile with paraview. Only the affected
 applications will be compiled (eg, the blockMesh reader module) and the
@@ -123,8 +124,9 @@ More details in the [ThirdParty build guide][link third-build].
 [repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
 [repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
 
-[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/BuildIssues.txt
-[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
+[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
+[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
+[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
 [link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
 [link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
 [link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
diff --git a/doc/BuildIssues.md b/doc/BuildIssues.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3a4f5d3754d64ae95207c3d89c543890896f189
--- /dev/null
+++ b/doc/BuildIssues.md
@@ -0,0 +1,111 @@
+## Known Build Issues (OpenFOAM-v1906)
+
+### Intel MPI with Gcc/Clang)
+
+Either `I_MPI_ROOT` (preferred) or `MPI_ROOT` can be used to specify
+the Intel-MPI installation directory path.
+The ThirdParty build of ptscotch uses `mpiicc` for Intel-MPI instead
+of the usual `mpicc`. When gcc or clang are used, it is quite likely
+that the `I_MPI_CC` environment variable also needs to be set
+accordingly.
+See `mpiicc -help` for more information about environment variables.
+
+
+### VTK
+
+If using the runTimePostProcessing to create on-the-fly images, you
+can simply just compile ParaView and these libraries will be used.
+If you elect to use a separate VTK compilation (for example for
+off-screen rendering), it is advisable to reuse the VTK libraries that
+are provided with ParaView by making an appropriate symlink
+prior to using makeVTK. This doesn't just reduce disk-space, but works
+much better than using the VTK tar file.
+
+Using runTimePostProcessing with the *plain* VTK libraries does
+generally work, but may not exit cleanly:
+```
+symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
+undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv
+
+symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
+undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev
+```
+
+This error appears to be suppressed if VTK is compiled with a `Debug` build-type.
+
+
+### Building on older systems
+
+If the system gcc is too old for building OpenFOAM, a third-party gcc or
+clang/llvm installation can be used. If building clang/llvm, note that
+there are also minimum gcc/g++ requirements as listed in the
+detailed [build guide][link third-build].
+
+If your system compiler is too old to build the minimum required gcc or
+clang/llvm, it is just simply too old.
+
+
+### ThirdParty clang without gmp/mpfr
+
+If using ThirdParty clang without gmp/mpfr, the ThirdParty makeCGAL
+script will need to be run manually and specify that there is no
+gmp/mpfr. Eg,
+```
+cd $WM_THIRD_PARTY_DIR
+./makeCGAL gmp-none mpfr-none
+```
+
+Subequent compilation with Allwmake will now run largely without any
+problems, except that the components linking against CGAL
+(foamyMesh and surfaceBooleanFeatures) will also try to link against
+a nonexistent mpfr library. As a workaround, the link-dependency can
+be removed in wmake/rules/General/CGAL :
+```
+CGAL_LIBS = \
+    -L$(BOOST_ARCH_PATH)/lib \
+    -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+    -L$(CGAL_ARCH_PATH)/lib \
+    -L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+    -lCGAL
+```
+
+A robuster solution is still being sought.
+
+
+### Building with spack
+
+If you are building with spack, note that the `depends_on` for paraview
+resolves poorly. The `+qt` dependency (for building the reader module)
+may need to be specified as a preference by including the following in
+your `~/.spack/packages.yaml` file:
+```
+packages:
+    paraview:
+        variants: +qt
+```
+It appears that spack will otherwise ignore any `paraview+qt` version
+and attempt to install a `paraview~qt` version instead.
+
+--
+<!-- Links -->
+
+[page ParaView]:  http://www.paraview.org/
+[download ParaView]: https://www.paraview.org/download/
+
+
+<!-- OpenFOAM -->
+
+[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
+[repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
+
+[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
+[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
+[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
+[link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
+[link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
+[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
+[link third-build]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/BUILD.md
+[link third-require]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/Requirements.md
+
+---
+Copyright 2019 OpenCFD Ltd
diff --git a/etc/README.md b/doc/Config.md
similarity index 100%
rename from etc/README.md
rename to doc/Config.md
diff --git a/doc/Requirements.md b/doc/Requirements.md
index 5f9be72dae449c516185dacc9c085a2f4922d48b..a78bbd53ccdcf4115019168fbc49c91a4a1da433 100644
--- a/doc/Requirements.md
+++ b/doc/Requirements.md
@@ -10,15 +10,21 @@ OpenFOAM requires a functioning C++11 compiler and `make` build toolchain.
 - fftw: 3.3.7 (recommended - required for FFT-related functionality)
 - paraview: 5.5.2 (for visualization)
 
+If using the Intel&reg; compiler, `17.0.1 20161005` is the minimum
+usable version.
+
+
 To check the installed versions
 
 | Program       | To check the version  |
 |---------------|-----------------------|
 | gcc           | gcc --version         |
+| icc           | icc --version         |
 | cmake         | cmake --version       |
 | openmpi       | orterun --version     |
 
 
+
 ### Additional utilities
 
 - flex
@@ -81,7 +87,6 @@ sudo zypper install cmake boost-devel mpfr-devel gmp-devel openmpi-devel gnuplot
 
 This installs
 
-
 | Program   | openSUSE  | Program version |
 |-----------|-----------|-----------------|
 | gcc       | 15.0      | 7.4.3           |
@@ -157,7 +162,7 @@ A partial list is given in the [ThirdParty requirements][link third-require].
 <!-- OpenFOAM -->
 
 [link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
-[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
+[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
 [link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
 [link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
 [link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
diff --git a/etc/config.csh/vtk b/etc/config.csh/vtk
index dbd5edf90c60a6c958c697bcbd7479d20be3796f..eaabe2703141eb86ad9ce673a91552bdf86f4d68 100644
--- a/etc/config.csh/vtk
+++ b/etc/config.csh/vtk
@@ -25,7 +25,7 @@
 #
 # It is recommended to use VTK sources from ParaView (5.0.1 or later)
 #
-# See BuildIssues.txt about problems that can be encountered when using
+# See doc/BuildIssues.md about problems that can be encountered when using
 # the 'plain' VTK sources.
 #------------------------------------------------------------------------------
 # USER EDITABLE PART: Changes made here may be lost with the next upgrade
diff --git a/etc/config.sh/vtk b/etc/config.sh/vtk
index 4815da2435c7d6ee079b75042249661d290424e7..38859432d6430c9bb11e408fafe5bd5a3e118b0f 100644
--- a/etc/config.sh/vtk
+++ b/etc/config.sh/vtk
@@ -26,7 +26,7 @@
 #
 # It is recommended to use VTK sources from ParaView (5.0.1 or later)
 #
-# See BuildIssues.txt about problems that can be encountered when using
+# See doc/BuildIssues.md about problems that can be encountered when using
 # the 'plain' VTK sources.
 #------------------------------------------------------------------------------
 # USER EDITABLE PART: Changes made here may be lost with the next upgrade
diff --git a/etc/controlDict b/etc/controlDict
index 223f28e3abd134e726ca73efdab2b8223782c6b3..b30bff5d4f9cb644b0514e39fdc0b1877cb0b8b8 100644
--- a/etc/controlDict
+++ b/etc/controlDict
@@ -68,7 +68,8 @@ InfoSwitches
     allowSystemOperations   1;
 
     // Allow space character in fileName (use with caution)
-    allowSpaceInFileName    0;
+    // Default: 0 for non-Windows, 1 for Windows
+    //// allowSpaceInFileName    0;
 }
 
 
diff --git a/src/OpenFOAM/global/argList/argListHelp.C b/src/OpenFOAM/global/argList/argListHelp.C
index 850359654c0f11572341c1a3fdbf2edfa87cb697..bfc8e694ecff2780965a2ae584ecfb60b3fafa2f 100644
--- a/src/OpenFOAM/global/argList/argListHelp.C
+++ b/src/OpenFOAM/global/argList/argListHelp.C
@@ -33,6 +33,12 @@ License
 namespace Foam
 {
 
+// Convert api number (YYMM) -> 20YY. Eg, 1906 -> 2019
+static inline int apiYear()
+{
+    return 2000 + (foamVersion::api / 100);
+}
+
 // manpage Footer
 static inline void printManFooter()
 {
@@ -40,7 +46,7 @@ static inline void printManFooter()
         << "Online documentation "
         << "https://www.openfoam.com/documentation/" << nl
         << ".SH COPYRIGHT" << nl
-        << "Copyright \\(co 2018 OpenCFD Ltd." << nl;
+        << "Copyright \\(co 2018-" << apiYear() << " OpenCFD Ltd." << nl;
 }
 
 
diff --git a/src/OpenFOAM/primitives/strings/fileName/fileName.C b/src/OpenFOAM/primitives/strings/fileName/fileName.C
index 03daab90e0be40f5f1d8c288cb8932291bfb3037..0027a6367a070faeffc58ce6b24dcfa3e0b0f709 100644
--- a/src/OpenFOAM/primitives/strings/fileName/fileName.C
+++ b/src/OpenFOAM/primitives/strings/fileName/fileName.C
@@ -36,11 +36,18 @@ License
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
 const char* const Foam::fileName::typeName = "fileName";
+
 int Foam::fileName::debug(Foam::debug::debugSwitch(fileName::typeName, 0));
+
 int Foam::fileName::allowSpaceInFileName
 (
+    #ifdef _WIN32
+    Foam::debug::infoSwitch("allowSpaceInFileName", 1)
+    #else
     Foam::debug::infoSwitch("allowSpaceInFileName", 0)
+    #endif
 );
+
 const Foam::fileName Foam::fileName::null;
 
 
diff --git a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
index 8bf214aaf53ec13459cef783b2a0b43c6f5d30ed..526813dff0e9473dbc161171ee73aa4137497e52 100644
--- a/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
+++ b/src/functionObjects/field/stabilityBlendingFactor/stabilityBlendingFactor.C
@@ -109,12 +109,13 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
         if (!residualPtr)
         {
              WarningInFunction
-                << "Could not find residual file : " << residualName_
-                << ".The residual mode won't be " << nl
+                << "Could not find residual field : " << residualName_
+                << ". The residual mode won't be " << nl
                 << "    considered for the blended field in the stability "
                 << "blending factor. " << nl
-                << "    Add the corresponding residual function object. " << nl
-                << "    If the residual function object is already set "
+                << "    Please add the corresponding 'solverInfo'"
+                << " function object with 'writeResidualFields true'." << nl
+                << "    If the solverInfo function object is already enabled "
                 << "you might need to wait " << nl
                 << "    for the first iteration."
                 << nl << endl;
diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C
index 97420e80b37297af6f0fd91450b8f1f09d5f8ff8..962a9c233ecf6ba6947ef850c92d23ebfc85f40e 100644
--- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C
+++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010, 2015-2017 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2010, 2015-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -42,7 +42,6 @@ namespace Foam
 namespace functionObjects
 {
     defineTypeNameAndDebug(forceCoeffs, 0);
-
     addToRunTimeSelectionTable(functionObject, forceCoeffs, dictionary);
 }
 }
@@ -61,12 +60,23 @@ void Foam::functionObjects::forceCoeffs::createFiles()
 
         if (nBin_ > 1)
         {
-            CmBinFilePtr_ = createFile("CmBin");
-            writeBinHeader("Moment coefficient bins", CmBinFilePtr_());
             CdBinFilePtr_ = createFile("CdBin");
             writeBinHeader("Drag coefficient bins", CdBinFilePtr_());
+
+            CsBinFilePtr_ = createFile("CsBin");
+            writeBinHeader("Side coefficient bins", CsBinFilePtr_());
+
             ClBinFilePtr_ = createFile("ClBin");
             writeBinHeader("Lift coefficient bins", ClBinFilePtr_());
+
+            CmRollBinFilePtr_ = createFile("CmRollBin");
+            writeBinHeader("Roll moment coefficient bins", CmRollBinFilePtr_());
+
+            CmPitchBinFilePtr_ = createFile("CmPitchBin");
+            writeBinHeader("Moment coefficient bins", CmPitchBinFilePtr_());
+
+            CmYawBinFilePtr_ = createFile("CmYawBin");
+            writeBinHeader("Yaw moment coefficient bins", CmYawBinFilePtr_());
         }
     }
 }
@@ -79,18 +89,28 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedHeader
 ) const
 {
     writeHeader(os, "Force coefficients");
-    writeHeaderValue(os, "liftDir", liftDir_);
-    writeHeaderValue(os, "dragDir", dragDir_);
-    writeHeaderValue(os, "pitchAxis", pitchAxis_);
+    writeHeaderValue(os, "dragDir", coordSys_.e1());
+    writeHeaderValue(os, "sideDir", coordSys_.e2());
+    writeHeaderValue(os, "liftDir", coordSys_.e3());
+    writeHeaderValue(os, "rollAxis", coordSys_.e1());
+    writeHeaderValue(os, "pitchAxis", coordSys_.e2());
+    writeHeaderValue(os, "yawAxis", coordSys_.e3());
     writeHeaderValue(os, "magUInf", magUInf_);
     writeHeaderValue(os, "lRef", lRef_);
     writeHeaderValue(os, "Aref", Aref_);
     writeHeaderValue(os, "CofR", coordSys_.origin());
     writeHeader(os, "");
     writeCommented(os, "Time");
-    writeTabbed(os, "Cm");
     writeTabbed(os, "Cd");
+    writeTabbed(os, "Cs");
     writeTabbed(os, "Cl");
+    writeTabbed(os, "CmRoll");
+    writeTabbed(os, "CmPitch");
+    writeTabbed(os, "CmYaw");
+    writeTabbed(os, "Cd(f)");
+    writeTabbed(os, "Cd(r)");
+    writeTabbed(os, "Cs(f)");
+    writeTabbed(os, "Cs(r)");
     writeTabbed(os, "Cl(f)");
     writeTabbed(os, "Cl(r)");
     os  << endl;
@@ -114,30 +134,30 @@ void Foam::functionObjects::forceCoeffs::writeBinHeader
     forAll(binPoints, pointi)
     {
         binPoints[pointi] = (binMin_ + (pointi + 1)*binDx_)*binDir_;
-        os << tab << binPoints[pointi].x();
+        os  << tab << binPoints[pointi].x();
     }
-    os << nl;
+    os  << nl;
 
     writeCommented(os, "y co-ords  :");
     forAll(binPoints, pointi)
     {
-        os << tab << binPoints[pointi].y();
+        os  << tab << binPoints[pointi].y();
     }
-    os << nl;
+    os  << nl;
 
     writeCommented(os, "z co-ords  :");
     forAll(binPoints, pointi)
     {
-        os << tab << binPoints[pointi].z();
+        os  << tab << binPoints[pointi].z();
     }
-    os << nl;
+    os  << nl;
 
     writeHeader(os, "");
     writeCommented(os, "Time");
 
-    for (label j = 0; j < nBin_; j++)
+    for (label j = 0; j < nBin_; ++j)
     {
-        word jn(Foam::name(j) + ':');
+        const word jn(Foam::name(j) + ':');
         writeTabbed(os, jn + "total");
         writeTabbed(os, jn + "pressure");
         writeTabbed(os, jn + "viscous");
@@ -163,13 +183,13 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
         return;
     }
 
-    scalar pressure = sum(coeff[0]);
-    scalar viscous = sum(coeff[1]);
-    scalar porous = sum(coeff[2]);
-    scalar total = pressure + viscous + porous;
+    const scalar pressure = sum(coeff[0]);
+    const scalar viscous = sum(coeff[1]);
+    const scalar porous = sum(coeff[2]);
+    const scalar total = pressure + viscous + porous;
 
     Info<< "        " << title << "       : " << total << token::TAB
-        << "("
+        << '('
         << "pressure: " << pressure << token::TAB
         << "viscous: " << viscous;
 
@@ -178,7 +198,7 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
         Info<< token::TAB << "porous: " << porous;
     }
 
-    Info<< ")" << endl;
+    Info<< ')' << endl;
 }
 
 
@@ -190,7 +210,7 @@ void Foam::functionObjects::forceCoeffs::writeBinData
 {
     writeTime(os);
 
-    for (label bini = 0; bini < nBin_; bini++)
+    for (label bini = 0; bini < nBin_; ++bini)
     {
         scalar total = coeffs[0][bini] + coeffs[1][bini] + coeffs[2][bini];
 
@@ -216,45 +236,35 @@ Foam::functionObjects::forceCoeffs::forceCoeffs
 )
 :
     forces(name, runTime, dict),
-    liftDir_(Zero),
-    dragDir_(Zero),
-    pitchAxis_(Zero),
-    magUInf_(0.0),
-    lRef_(0.0),
-    Aref_(0.0),
+    magUInf_(Zero),
+    lRef_(Zero),
+    Aref_(Zero),
     coeffFilePtr_(),
-    CmBinFilePtr_(),
     CdBinFilePtr_(),
-    ClBinFilePtr_()
+    CsBinFilePtr_(),
+    ClBinFilePtr_(),
+    CmRollBinFilePtr_(),
+    CmPitchBinFilePtr_(),
+    CmYawBinFilePtr_()
 {
     read(dict);
+    setCoordinateSystem(dict, "liftDir", "dragDir");
     Info<< endl;
 }
 
 
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::functionObjects::forceCoeffs::~forceCoeffs()
-{}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
 {
     forces::read(dict);
 
-    // Directions for lift and drag forces, and pitch moment
-    dict.readEntry("liftDir", liftDir_);
-    dict.readEntry("dragDir", dragDir_);
-    dict.readEntry("pitchAxis", pitchAxis_);
-
     // Free stream velocity magnitude
     dict.readEntry("magUInf", magUInf_);
 
     // If case is compressible we must read rhoInf (store in rhoRef_) to
     // calculate the reference dynamic pressure
-    // - note: for incompressible, rhoRef_ is already initialised
+    // Note: for incompressible, rhoRef_ is already initialised
     if (rhoName_ != "rhoInf")
     {
         dict.readEntry("rhoInf", rhoRef_);
@@ -315,55 +325,94 @@ bool Foam::functionObjects::forceCoeffs::execute()
 
     createFiles();
 
-    scalar pDyn = 0.5*rhoRef_*magUInf_*magUInf_;
-
     // Storage for pressure, viscous and porous contributions to coeffs
-    List<Field<scalar>> momentCoeffs(3);
     List<Field<scalar>> dragCoeffs(3);
+    List<Field<scalar>> sideCoeffs(3);
     List<Field<scalar>> liftCoeffs(3);
+    List<Field<scalar>> rollMomentCoeffs(3);
+    List<Field<scalar>> pitchMomentCoeffs(3);
+    List<Field<scalar>> yawMomentCoeffs(3);
+
     forAll(liftCoeffs, i)
     {
-        momentCoeffs[i].setSize(nBin_);
         dragCoeffs[i].setSize(nBin_);
+        sideCoeffs[i].setSize(nBin_);
         liftCoeffs[i].setSize(nBin_);
+        rollMomentCoeffs[i].setSize(nBin_);
+        pitchMomentCoeffs[i].setSize(nBin_);
+        yawMomentCoeffs[i].setSize(nBin_);
     }
 
     // Calculate coefficients
-    scalar CmTot = 0;
     scalar CdTot = 0;
+    scalar CsTot = 0;
     scalar ClTot = 0;
+    scalar CmRollTot = 0;
+    scalar CmPitchTot = 0;
+    scalar CmYawTot = 0;
+
+    const scalar pDyn = 0.5*rhoRef_*sqr(magUInf_);
+
+    // Avoid divide by zero in 2D cases
+    const scalar momentScaling = 1.0/(Aref_*pDyn*lRef_ + SMALL);
+    const scalar forceScaling = 1.0/(Aref_*pDyn + SMALL);
+
     forAll(liftCoeffs, i)
     {
-        momentCoeffs[i] = (moment_[i] & pitchAxis_)/(Aref_*pDyn*lRef_);
-        dragCoeffs[i] = (force_[i] & dragDir_)/(Aref_*pDyn);
-        liftCoeffs[i] = (force_[i] & liftDir_)/(Aref_*pDyn);
+        const Field<vector> localForce(coordSys_.localVector(force_[i]));
+        const Field<vector> localMoment(coordSys_.localVector(moment_[i]));
+
+        dragCoeffs[i] = forceScaling*(localForce.component(0));
+        sideCoeffs[i] = forceScaling*(localForce.component(1));
+        liftCoeffs[i] = forceScaling*(localForce.component(2));
+        rollMomentCoeffs[i] = momentScaling*(localMoment.component(0));
+        pitchMomentCoeffs[i] = momentScaling*(localMoment.component(1));
+        yawMomentCoeffs[i] = momentScaling*(localMoment.component(2));
 
-        CmTot += sum(momentCoeffs[i]);
         CdTot += sum(dragCoeffs[i]);
+        CsTot += sum(sideCoeffs[i]);
         ClTot += sum(liftCoeffs[i]);
+        CmRollTot += sum(rollMomentCoeffs[i]);
+        CmPitchTot += sum(pitchMomentCoeffs[i]);
+        CmYawTot += sum(yawMomentCoeffs[i]);
     }
 
-    scalar ClfTot = ClTot/2.0 + CmTot;
-    scalar ClrTot = ClTot/2.0 - CmTot;
+    // Single contributions to the front and rear
+    const scalar CdfTot = 0.5*CdTot + CmRollTot;
+    const scalar CdrTot = 0.5*CdTot - CmRollTot;
+    const scalar CsfTot = 0.5*CsTot + CmYawTot;
+    const scalar CsrTot = 0.5*CsTot - CmYawTot;
+    const scalar ClfTot = 0.5*ClTot + CmPitchTot;
+    const scalar ClrTot = 0.5*ClTot - CmPitchTot;
 
     Log << type() << " " << name() << " execute:" << nl
         << "    Coefficients" << nl;
 
-    writeIntegratedData("Cm", momentCoeffs);
     writeIntegratedData("Cd", dragCoeffs);
+    writeIntegratedData("Cs", sideCoeffs);
     writeIntegratedData("Cl", liftCoeffs);
+    writeIntegratedData("CmRoll", rollMomentCoeffs);
+    writeIntegratedData("CmPitch", pitchMomentCoeffs);
+    writeIntegratedData("CmYaw", yawMomentCoeffs);
+
+    Log << "        Cd(f)    : " << CdfTot << nl
+        << "        Cd(r)    : " << CdrTot << nl;
+
+    Log << "        Cs(f)    : " << CsfTot << nl
+        << "        Cs(r)    : " << CsrTot << nl;
 
     Log << "        Cl(f)    : " << ClfTot << nl
-        << "        Cl(r)    : " << ClrTot << nl
-        << endl;
+        << "        Cl(r)    : " << ClrTot << nl;
 
     if (writeToFile())
     {
         writeTime(coeffFilePtr_());
         coeffFilePtr_()
-            << tab << CmTot << tab  << CdTot
-            << tab << ClTot << tab << ClfTot << tab << ClrTot << endl;
-
+            << tab << CdTot << tab << CsTot << tab << ClTot
+            << tab << CmRollTot << tab << CmPitchTot << tab << CmYawTot
+            << tab << CdfTot << tab << CdrTot
+            << tab << CsfTot << tab << CsrTot
+            << tab << ClfTot << tab << ClrTot << endl;
 
         if (nBin_ > 1)
         {
@@ -371,26 +420,41 @@ bool Foam::functionObjects::forceCoeffs::execute()
             {
                 forAll(liftCoeffs, i)
                 {
-                    for (label bini = 1; bini < nBin_; bini++)
+                    for (label bini = 1; bini < nBin_; ++bini)
                     {
-                        liftCoeffs[i][bini] += liftCoeffs[i][bini-1];
                         dragCoeffs[i][bini] += dragCoeffs[i][bini-1];
-                        momentCoeffs[i][bini] += momentCoeffs[i][bini-1];
+                        sideCoeffs[i][bini] += sideCoeffs[i][bini-1];
+                        liftCoeffs[i][bini] += liftCoeffs[i][bini-1];
+                        rollMomentCoeffs[i][bini] +=
+                            rollMomentCoeffs[i][bini-1];
+                        pitchMomentCoeffs[i][bini] +=
+                            pitchMomentCoeffs[i][bini-1];
+                        yawMomentCoeffs[i][bini] += yawMomentCoeffs[i][bini-1];
                     }
                 }
             }
 
             writeBinData(dragCoeffs, CdBinFilePtr_());
+            writeBinData(sideCoeffs, CsBinFilePtr_());
             writeBinData(liftCoeffs, ClBinFilePtr_());
-            writeBinData(momentCoeffs, CmBinFilePtr_());
+            writeBinData(rollMomentCoeffs, CmRollBinFilePtr_());
+            writeBinData(pitchMomentCoeffs, CmPitchBinFilePtr_());
+            writeBinData(yawMomentCoeffs, CmYawBinFilePtr_());
         }
     }
 
     // Write state/results information
     {
-        setResult("Cm", CmTot);
         setResult("Cd", CdTot);
+        setResult("Cs", CsTot);
         setResult("Cl", ClTot);
+        setResult("CmRoll", CmRollTot);
+        setResult("CmPitch", CmPitchTot);
+        setResult("CmYaw", CmYawTot);
+        setResult("Cd(f)", CdfTot);
+        setResult("Cd(r)", CdrTot);
+        setResult("Cs(f)", CsfTot);
+        setResult("Cs(r)", CsrTot);
         setResult("Cl(f)", ClfTot);
         setResult("Cl(r)", ClrTot);
     }
diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.H b/src/functionObjects/forces/forceCoeffs/forceCoeffs.H
index 83c26f1a7e2650772fa44951bace62dfe9d6cec6..aaa183bf797b1b1c56f9ec8cc1d0819cb55e3444 100644
--- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.H
+++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010, 2015 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2010, 2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -30,9 +30,18 @@ Group
     grpForcesFunctionObjects
 
 Description
-    Extends the forces functionObject by providing lift, drag and moment
-    coefficients.  The data can optionally be output into bins, defined in a
-    given direction.
+    Extends the \c forces functionObject by providing coefficients for:
+    - drag, side and lift forces (Cd, Cs, and Cl)
+    - roll, pitch and yaw moments (CmRoll, CmPitch, and CmYaw)
+    - front and rear axle force contributions (C(f) and C(r)) wherein
+
+    \verbatim
+        Cd(f/r) = 0.5*Cd \pm CmRoll
+        Cs(f/r) = 0.5*Cs \pm CmYaw
+        Cl(f/r) = 0.5*Cl \pm CmPitch
+    \endverbatim
+
+    The data can optionally be output into bins, defined in a given direction.
 
     The binned data provides the total and consitituent components per bin:
     - total coefficient
@@ -43,9 +52,12 @@ Description
     Data is written into multiple files in the
     postProcessing/\<functionObjectName\> directory:
     - coefficient.dat   : integrated coefficients over all geometries
-    - CmBin.dat         : moment coefficient bins
     - CdBin.dat         : drag coefficient bins
+    - CsBin.dat         : side coefficient bins
     - ClBin.dat         : lift coefficient bins
+    - CmRollBin.dat     : roll moment coefficient bins
+    - CmPitchBin.dat    : pitch moment coefficient bins
+    - CmYawBin.dat      : yaw moment coefficient bins
 
 Usage
     Example of function object specification:
@@ -58,12 +70,14 @@ Usage
         log         yes;
         writeFields yes;
         patches     (walls);
-        liftDir     (0 1 0);
-        dragDir     (-1 0 0);
-        pitchAxis   (0 0 1);
+
+        // input keywords for directions of force/moment coefficients
+        // refer below for options, and relations
+
         magUInf     100;
         lRef        3.5;
         Aref        2.2;
+        porosity    no;
 
         binData
         {
@@ -76,26 +90,65 @@ Usage
 
     Where the entries comprise:
     \table
-        Property     | Description             | Required    | Default value
-        type         | Type name: forceCoeffs  | yes         |
-        log          | Write force data to standard output | no | no
-        writeFields  | Write the force and moment coefficient fields | no | no
+        Property     | Description                          | Required | Default
+        type         | Type name: forceCoeffs               | yes |
+        log          | Write force data to standard output  | no  | no
+        writeFields  | Write force,moment coefficient fields | no | no
         patches      | Patches included in the forces calculation | yes |
-        liftDir      | Lift direction          | yes         |
-        dragDir      | Drag direction          | yes         |
-        pitchAxis    | Picth axis              | yes         |
-        magUInf      | Free stream velocity magnitude | yes  |
+        magUInf      | Free stream velocity magnitude       | yes |
         lRef         | Reference length scale for moment calculations | yes |
-        Aref         | Reference area          | yes |
-        porosity     | Flag to include porosity contributions | no | no
+        Aref         | Reference area                       | yes |
+        porosity     | Include porosity contributions       | no  | false
     \endtable
 
     Bin data is optional, but if the dictionary is present, the entries must
-    be defined according o
+    be defined according to following:
     \table
-        nBin         | number of data bins     | yes         |
-        direction    | direction along which bins are defined | yes |
-        cumulative   | bin data accumulated with incresing distance | yes |
+        nBin         | Number of data bins                    | yes |
+        direction    | Direction along which bins are defined | yes |
+        cumulative   | Bin data accumulated with incresing distance | yes |
+    \endtable
+
+    Input of force/moment coefficient directions:
+    - require an origin, and two orthogonal directions; the remaining orthogonal
+    direction is determined accordingly.
+    - can be added by the three options below.
+
+    \verbatim
+        CofR        (0 0 0); // Centre of rotation
+        dragDir     (1 0 0);
+        liftDir     (0 0 1);
+    \endverbatim
+
+    \verbatim
+        origin (0 0 0);
+        e1     (1 0 0);
+        e3     (0 0 1); // combinations: (e1, e2) or (e2, e3) or (e3, e1)
+    \endverbatim
+
+    \verbatim
+        coordinateSystem
+        {
+            origin  (0 0 0);
+            rotation
+            {
+                type axes;
+                e1 (1 0 0);
+                e3 (0 0 1); // combinations: (e1, e2) or (e2, e3) or (e3, e1)
+            }
+        }
+    \endverbatim
+
+    The default direction relations are shown below:
+
+    \table
+        Property     | Description           | Alias | Direction
+        dragDir      | Drag direction        | e1    | (1 0 0)
+        sideDir      | Side force direction  | e2    | (0 1 0)
+        liftDir      | Lift direction        | e3    | (0 0 1)
+        rollAxis     | Roll axis             | e1    | (1 0 0)
+        pitchAxis    | Pitch axis            | e2    | (0 1 0)
+        yawAxis      | Yaw axis              | e3    | (0 0 1)
     \endtable
 
 See also
@@ -130,30 +183,18 @@ class forceCoeffs
 {
     // Private data
 
-        // Force coefficient geometry
-
-            //- Lift
-            vector liftDir_;
-
-            //- Drag
-            vector  dragDir_;
-
-            //- Pitch
-            vector pitchAxis_;
-
-
         // Free-stream conditions
 
-            //- Velocity magnitude
+            //- Free-stream velocity magnitude
             scalar magUInf_;
 
 
         // Reference scales
 
-            //- Length
+            //- Reference length [m]
             scalar lRef_;
 
-            //- Area
+            //- Reference area [m^2]
             scalar Aref_;
 
 
@@ -162,15 +203,24 @@ class forceCoeffs
             //- Integrated coefficients
             autoPtr<OFstream> coeffFilePtr_;
 
-            //- Moment coefficient
-            autoPtr<OFstream> CmBinFilePtr_;
-
             //- Drag coefficient
             autoPtr<OFstream> CdBinFilePtr_;
 
+            //- Side coefficient
+            autoPtr<OFstream> CsBinFilePtr_;
+
             //- Lift coefficient
             autoPtr<OFstream> ClBinFilePtr_;
 
+            //- Roll moment coefficient
+            autoPtr<OFstream> CmRollBinFilePtr_;
+
+            //- Pitch moment coefficient
+            autoPtr<OFstream> CmPitchBinFilePtr_;
+
+            //- Yaw moment coefficient
+            autoPtr<OFstream> CmYawBinFilePtr_;
+
 
     // Private Member Functions
 
@@ -223,7 +273,7 @@ public:
 
 
     //- Destructor
-    virtual ~forceCoeffs();
+    virtual ~forceCoeffs() = default;
 
 
     // Member Functions
@@ -231,7 +281,7 @@ public:
         //- Read the forces data
         virtual bool read(const dictionary&);
 
-        //- Execute, currently does nothing
+        //- Execute
         virtual bool execute();
 
         //- Write the forces
@@ -249,3 +299,4 @@ public:
 #endif
 
 // ************************************************************************* //
+
diff --git a/src/functionObjects/forces/forces/forces.C b/src/functionObjects/forces/forces/forces.C
index 416b15fd899c94111cd6a7e72bf8b8678a855744..b43a20b61cd9d4d7f12eaaededf273751c546752 100644
--- a/src/functionObjects/forces/forces/forces.C
+++ b/src/functionObjects/forces/forces/forces.C
@@ -71,22 +71,6 @@ void Foam::functionObjects::forces::createFiles()
             momentBinFilePtr_ = createFile("momentBin");
             writeBinHeader("Moment", momentBinFilePtr_());
         }
-
-        if (localSystem_)
-        {
-            localForceFilePtr_ = createFile("localForce");
-            writeIntegratedHeader("Force", localForceFilePtr_());
-            localMomentFilePtr_ = createFile("localMoment");
-            writeIntegratedHeader("Moment", localMomentFilePtr_());
-
-            if (nBin_ > 1)
-            {
-                localForceBinFilePtr_ = createFile("localForceBin");
-                writeBinHeader("Force", localForceBinFilePtr_());
-                localMomentBinFilePtr_ = createFile("localMomentBin");
-                writeBinHeader("Moment", localMomentBinFilePtr_());
-            }
-        }
     }
 }
 
@@ -169,6 +153,49 @@ void Foam::functionObjects::forces::writeBinHeader
 }
 
 
+void Foam::functionObjects::forces::setCoordinateSystem
+(
+    const dictionary& dict,
+    const word& e3Name,
+    const word& e1Name
+)
+{
+    coordSys_.clear();
+
+    if (dict.readIfPresent<point>("CofR", coordSys_.origin()))
+    {
+        const vector e3 = e3Name == word::null ?
+            vector(0, 0, 1) : dict.get<vector>(e3Name);
+        const vector e1 = e1Name == word::null ?
+            vector(1, 0, 0) : dict.get<vector>(e1Name);
+
+        coordSys_ =
+            coordSystem::cartesian(coordSys_.origin(), e3, e1);
+    }
+    else
+    {
+        // The 'coordinateSystem' sub-dictionary is optional,
+        // but enforce use of a cartesian system if not found.
+
+        if (dict.found(coordinateSystem::typeName_()))
+        {
+            // New() for access to indirect (global) coordinate system
+            coordSys_ =
+                coordinateSystem::New
+                (
+                    obr_,
+                    dict,
+                    coordinateSystem::typeName_()
+                );
+        }
+        else
+        {
+            coordSys_ = coordSystem::cartesian(dict);
+        }
+    }
+
+}
+
 
 void Foam::functionObjects::forces::initialise()
 {
@@ -586,42 +613,21 @@ void Foam::functionObjects::forces::writeForces()
     writeIntegratedForceMoment
     (
         "forces",
-        force_[0],
-        force_[1],
-        force_[2],
+        coordSys_.localVector(force_[0]),
+        coordSys_.localVector(force_[1]),
+        coordSys_.localVector(force_[2]),
         forceFilePtr_
     );
 
     writeIntegratedForceMoment
     (
         "moments",
-        moment_[0],
-        moment_[1],
-        moment_[2],
+        coordSys_.localVector(moment_[0]),
+        coordSys_.localVector(moment_[1]),
+        coordSys_.localVector(moment_[2]),
         momentFilePtr_
     );
 
-    if (localSystem_)
-    {
-        writeIntegratedForceMoment
-        (
-            "local forces",
-            coordSys_.localVector(force_[0]),
-            coordSys_.localVector(force_[1]),
-            coordSys_.localVector(force_[2]),
-            localForceFilePtr_
-        );
-
-        writeIntegratedForceMoment
-        (
-            "local moments",
-            coordSys_.localVector(moment_[0]),
-            coordSys_.localVector(moment_[1]),
-            coordSys_.localVector(moment_[2]),
-            localMomentFilePtr_
-        );
-    }
-
     Log << endl;
 }
 
@@ -673,23 +679,17 @@ void Foam::functionObjects::forces::writeBinnedForceMoment
 
 void Foam::functionObjects::forces::writeBins()
 {
-    writeBinnedForceMoment(force_, forceBinFilePtr_);
-    writeBinnedForceMoment(moment_, momentBinFilePtr_);
-
-    if (localSystem_)
-    {
-        List<Field<vector>> lf(3);
-        List<Field<vector>> lm(3);
-        lf[0] = coordSys_.localVector(force_[0]);
-        lf[1] = coordSys_.localVector(force_[1]);
-        lf[2] = coordSys_.localVector(force_[2]);
-        lm[0] = coordSys_.localVector(moment_[0]);
-        lm[1] = coordSys_.localVector(moment_[1]);
-        lm[2] = coordSys_.localVector(moment_[2]);
-
-        writeBinnedForceMoment(lf, localForceBinFilePtr_);
-        writeBinnedForceMoment(lm, localMomentBinFilePtr_);
-    }
+    List<Field<vector>> lf(3);
+    List<Field<vector>> lm(3);
+    lf[0] = coordSys_.localVector(force_[0]);
+    lf[1] = coordSys_.localVector(force_[1]);
+    lf[2] = coordSys_.localVector(force_[2]);
+    lm[0] = coordSys_.localVector(moment_[0]);
+    lm[1] = coordSys_.localVector(moment_[1]);
+    lm[2] = coordSys_.localVector(moment_[2]);
+
+    writeBinnedForceMoment(lf, forceBinFilePtr_);
+    writeBinnedForceMoment(lm, momentBinFilePtr_);
 }
 
 
@@ -711,10 +711,6 @@ Foam::functionObjects::forces::forces
     momentFilePtr_(),
     forceBinFilePtr_(),
     momentBinFilePtr_(),
-    localForceFilePtr_(),
-    localMomentFilePtr_(),
-    localForceBinFilePtr_(),
-    localMomentBinFilePtr_(),
     patchSet_(),
     pName_(word::null),
     UName_(word::null),
@@ -724,7 +720,6 @@ Foam::functionObjects::forces::forces
     rhoRef_(VGREAT),
     pRef_(0),
     coordSys_(),
-    localSystem_(false),
     porosity_(false),
     nBin_(1),
     binDir_(Zero),
@@ -738,6 +733,7 @@ Foam::functionObjects::forces::forces
     if (readFields)
     {
         read(dict);
+        setCoordinateSystem(dict);
         Log << endl;
     }
 }
@@ -759,10 +755,6 @@ Foam::functionObjects::forces::forces
     momentFilePtr_(),
     forceBinFilePtr_(),
     momentBinFilePtr_(),
-    localForceFilePtr_(),
-    localMomentFilePtr_(),
-    localForceBinFilePtr_(),
-    localMomentBinFilePtr_(),
     patchSet_(),
     pName_(word::null),
     UName_(word::null),
@@ -772,7 +764,6 @@ Foam::functionObjects::forces::forces
     rhoRef_(VGREAT),
     pRef_(0),
     coordSys_(),
-    localSystem_(false),
     porosity_(false),
     nBin_(1),
     binDir_(Zero),
@@ -786,6 +777,7 @@ Foam::functionObjects::forces::forces
     if (readFields)
     {
         read(dict);
+        setCoordinateSystem(dict);
         Log << endl;
     }
 
@@ -843,32 +835,6 @@ bool Foam::functionObjects::forces::read(const dictionary& dict)
         Info<< "    Reference pressure (pRef) set to " << pRef_ << endl;
     }
 
-    coordSys_.clear();
-    localSystem_ = false;
-
-    // Centre of rotation for moment calculations
-    // specified directly, from coordinate system, or implicitly (0 0 0)
-    if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
-    {
-        // The 'coordinateSystem' sub-dictionary is optional,
-        // but enforce use of a cartesian system.
-
-        if (dict.found(coordinateSystem::typeName_()))
-        {
-            // New() for access to indirect (global) coordinate system
-            coordSys_ =
-                coordinateSystem::New
-                (
-                    obr_, dict, coordinateSystem::typeName_()
-                );
-        }
-        else
-        {
-            coordSys_ = coordSystem::cartesian(dict);
-        }
-
-        localSystem_ = true;
-    }
 
     dict.readIfPresent("porosity", porosity_);
     if (porosity_)
diff --git a/src/functionObjects/forces/forces/forces.H b/src/functionObjects/forces/forces/forces.H
index be28a40ada28ac9316fd9eefc3510a211de43704..a75de3e01e45cd692b806b96a58629984b409fd6 100644
--- a/src/functionObjects/forces/forces/forces.H
+++ b/src/functionObjects/forces/forces/forces.H
@@ -192,18 +192,6 @@ protected:
             //- Moment bins
             autoPtr<OFstream> momentBinFilePtr_;
 
-            //- Local force
-            autoPtr<OFstream> localForceFilePtr_;
-
-            //- Local moment
-            autoPtr<OFstream> localMomentFilePtr_;
-
-            //- Local force bins
-            autoPtr<OFstream> localForceBinFilePtr_;
-
-            //- Local moment bins
-            autoPtr<OFstream> localMomentBinFilePtr_;
-
 
         // Read from dictionary
 
@@ -234,9 +222,6 @@ protected:
             //- Coordinate system used when evaluting forces/moments
             coordSystem::cartesian coordSys_;
 
-            //- Flag to indicate whether we are using a local coordinates
-            bool localSystem_;
-
             //- Flag to include porosity effects
             bool porosity_;
 
@@ -283,6 +268,14 @@ protected:
         //- Write header for binned data
         void writeBinHeader(const word& header, Ostream& os) const;
 
+        //- Set the co-ordinate system from dictionary and axes names
+        void setCoordinateSystem
+        (
+            const dictionary& dict,
+            const word& e3Name = word::null,
+            const word& e1Name = word::null
+        );
+
         //- Initialise the fields
         void initialise();
 
diff --git a/src/meshTools/searchableSurfaces/searchableCone/searchableCone.H b/src/meshTools/searchableSurfaces/searchableCone/searchableCone.H
index d4151f806a9f1ef7d2aad9f9eba5e8d7e30b0d53..a04539462a25190048d3f33be5b4ad45c625a9a3 100644
--- a/src/meshTools/searchableSurfaces/searchableCone/searchableCone.H
+++ b/src/meshTools/searchableSurfaces/searchableCone/searchableCone.H
@@ -30,7 +30,7 @@ Description
     \heading Dictionary parameters
     \table
         Property    | Description                       | Required | Default
-        type        | code / searchableCone             | selector |
+        type        | cone / searchableCone             | selector |
         point1      | coordinate of endpoint            | yes   |
         radius1     | radius at point1                  | yes   |
         innerRadius1| inner radius at point1            | no    | 0
diff --git a/tutorials/finiteArea/surfactantFoam/planeTransport/0/U b/tutorials/finiteArea/surfactantFoam/planeTransport/0/U
deleted file mode 100644
index 7dc2712cffe545037783ccf037ae37c736fb2dd2..0000000000000000000000000000000000000000
--- a/tutorials/finiteArea/surfactantFoam/planeTransport/0/U
+++ /dev/null
@@ -1,53 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  v1812                                 |
-|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       volVectorField;
-    location    "0";
-    object      U;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-dimensions      [0 1 -1 0 0 0 0];
-
-
-internalField   uniform (0 0 0);
-
-boundaryField
-{
-    inlet
-    {
-        type            calculated;
-        value           uniform (0 0 0);
-    }
-    bound
-    {
-        type            calculated;
-        value           uniform (0 0 0);
-    }
-    outlet
-    {
-        type            calculated;
-        value           uniform (0 0 0);
-    }
-    bottom
-    {
-        type            calculated;
-        value           uniform (0 0 0);
-    }
-    top
-    {
-        type            calculated;
-        value           uniform (0.05 0 0);
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/tutorials/finiteArea/surfactantFoam/planeTransport/Allclean b/tutorials/finiteArea/surfactantFoam/planeTransport/Allclean
index b1673ba4c14beebd264413db6ade7d30bae841e6..e852bce316ab80215483776eb026b49c88d8ac85 100755
--- a/tutorials/finiteArea/surfactantFoam/planeTransport/Allclean
+++ b/tutorials/finiteArea/surfactantFoam/planeTransport/Allclean
@@ -2,12 +2,7 @@
 cd ${0%/*} || exit 1                        # Run from this directory
 . $WM_PROJECT_DIR/bin/tools/CleanFunctions  # Tutorial clean functions
 
-cleanTimeDirectories
-
-cleanPostProcessing
-
+cleanCase
 cleanFaMesh
 
-rm -rf processor*
-
 #------------------------------------------------------------------------------
diff --git a/tutorials/finiteArea/surfactantFoam/planeTransport/constant/polyMesh/blockMeshDict b/tutorials/finiteArea/surfactantFoam/planeTransport/system/blockMeshDict
similarity index 100%
rename from tutorials/finiteArea/surfactantFoam/planeTransport/constant/polyMesh/blockMeshDict
rename to tutorials/finiteArea/surfactantFoam/planeTransport/system/blockMeshDict
diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/stabilizationSchemes b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/stabilizationSchemes
index 6285f30aecedc1687e6124ed0540e31b9084d582..48854b29446b0664914d75d1c4b6fb993833876b 100644
--- a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/stabilizationSchemes
+++ b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/stabilizationSchemes
@@ -8,11 +8,11 @@
 
 residuals
 {
-    type            solverInfo;
-    libs            ("libutilityFunctionObjects.so");
-    writeFields     true;
-    writeControl    outputTime;
-    fields          (p);
+    type                solverInfo;
+    libs                ("libutilityFunctionObjects.so");
+    writeResidualFields true;
+    writeControl        outputTime;
+    fields              (p);
 }
 
 blendingFactor
diff --git a/tutorials/finiteArea/surfactantFoam/planeTransport/0/Cvf b/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/0.orig/MangrovesIndex
similarity index 62%
rename from tutorials/finiteArea/surfactantFoam/planeTransport/0/Cvf
rename to tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/0.orig/MangrovesIndex
index d977dc5f2a15030e9f52d8f44bdfc8b42e70ce76..65cb3332aaf1a9d17bb0ebfc5fe952223def4812 100644
--- a/tutorials/finiteArea/surfactantFoam/planeTransport/0/Cvf
+++ b/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/0.orig/MangrovesIndex
@@ -10,44 +10,20 @@ FoamFile
     version     2.0;
     format      ascii;
     class       volScalarField;
-    location    "0";
-    object      Cvf;
+    object      MangrovesIndex;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-dimensions      [0 -1 0 0 0 0 0];
-
+dimensions      [0 0 0 0 0 0 0];
 
 internalField   uniform 0;
 
 boundaryField
 {
-    inlet
-    {
-        type            calculated;
-        value           uniform 0;
-    }
-    bound
-    {
-        type            calculated;
-        value           uniform 0;
-    }
-    outlet
+    ".*"
     {
-        type            calculated;
-        value           uniform 0;
-    }
-    bottom
-    {
-        type            calculated;
-        value           uniform 0;
-    }
-    top
-    {
-        type            calculated;
-        value           uniform 0;
+        type            zeroGradient;
     }
 }
 
-
 // ************************************************************************* //
diff --git a/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/constant/triSurface/seaweed.stl b/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/constant/triSurface/seaweed.stl
index 4032531aaae30960001ccc4b0aba6eab767700c1..f548b62df2382efab08deff49dfc1697972b3d47 100644
--- a/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/constant/triSurface/seaweed.stl
+++ b/tutorials/multiphase/interFoam/laminar/waves/mangroveInteraction/constant/triSurface/seaweed.stl
@@ -1,85 +1,86 @@
-facet normal 0.0 1.0 0.0
-   outer loop
-      vertex 4.065 0.5475 0.25
-      vertex 5.7 0.5475 0.0
-      vertex 4.065 0.5475 0.0
-   endloop
-endfacet
-facet normal 0.0 1.0 0.0
-   outer loop
-      vertex 5.7 0.5475 0.0
-      vertex 4.065 0.5475 0.25
-      vertex 5.7 0.5475 0.25
-   endloop
-endfacet
-facet normal 1.0 0.0 0.0
-   outer loop
-      vertex 5.7 0.5475 0.0
-      vertex 5.7 0.0025 0.25
-      vertex 5.7 0.0025 0.0
-   endloop
-endfacet
-facet normal 1.0 0.0 0.0
-   outer loop
-      vertex 5.7 0.0025 0.25
-      vertex 5.7 0.5475 0.0
-      vertex 5.7 0.5475 0.25
-   endloop
-endfacet
-facet normal 1.63851263511957e-017 -1.0 0.0
-   outer loop
-      vertex 5.7 0.0025 0.25
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 5.7 0.0025 0.0
-   endloop
-endfacet
-facet normal 1.63851263511957e-017 -1.0 0.0
-   outer loop
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 5.7 0.0025 0.25
-      vertex 4.065 0.00249999999999997 0.25
-   endloop
-endfacet
-facet normal 0.0 0.0 -1.0
-   outer loop
-      vertex 5.7 0.5475 0.0
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 4.065 0.5475 0.0
-   endloop
-endfacet
-facet normal 0.0 0.0 -1.0
-   outer loop
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 5.7 0.5475 0.0
-      vertex 5.7 0.0025 0.0
-   endloop
-endfacet
-facet normal 0.0 0.0 1.0
-   outer loop
-      vertex 5.7 0.0025 0.25
-      vertex 4.065 0.5475 0.25
-      vertex 4.065 0.00249999999999997 0.25
-   endloop
-endfacet
-facet normal 0.0 0.0 1.0
-   outer loop
-      vertex 4.065 0.5475 0.25
-      vertex 5.7 0.0025 0.25
-      vertex 5.7 0.5475 0.25
-   endloop
-endfacet
-facet normal -1.0 0.0 0.0
-   outer loop
-      vertex 4.065 0.5475 0.25
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 4.065 0.00249999999999997 0.25
-   endloop
-endfacet
-facet normal -1.0 0.0 0.0
-   outer loop
-      vertex 4.065 0.00249999999999997 0.0
-      vertex 4.065 0.5475 0.25
-      vertex 4.065 0.5475 0.0
-   endloop
-endfacet
-endsolid C
+solid C
+facet normal 0.0 1.0 0.0
+   outer loop
+      vertex 4.065 0.5475 0.25
+      vertex 5.7 0.5475 0.0
+      vertex 4.065 0.5475 0.0
+   endloop
+endfacet
+facet normal 0.0 1.0 0.0
+   outer loop
+      vertex 5.7 0.5475 0.0
+      vertex 4.065 0.5475 0.25
+      vertex 5.7 0.5475 0.25
+   endloop
+endfacet
+facet normal 1.0 0.0 0.0
+   outer loop
+      vertex 5.7 0.5475 0.0
+      vertex 5.7 0.0025 0.25
+      vertex 5.7 0.0025 0.0
+   endloop
+endfacet
+facet normal 1.0 0.0 0.0
+   outer loop
+      vertex 5.7 0.0025 0.25
+      vertex 5.7 0.5475 0.0
+      vertex 5.7 0.5475 0.25
+   endloop
+endfacet
+facet normal 1.63851263511957e-017 -1.0 0.0
+   outer loop
+      vertex 5.7 0.0025 0.25
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 5.7 0.0025 0.0
+   endloop
+endfacet
+facet normal 1.63851263511957e-017 -1.0 0.0
+   outer loop
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 5.7 0.0025 0.25
+      vertex 4.065 0.00249999999999997 0.25
+   endloop
+endfacet
+facet normal 0.0 0.0 -1.0
+   outer loop
+      vertex 5.7 0.5475 0.0
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 4.065 0.5475 0.0
+   endloop
+endfacet
+facet normal 0.0 0.0 -1.0
+   outer loop
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 5.7 0.5475 0.0
+      vertex 5.7 0.0025 0.0
+   endloop
+endfacet
+facet normal 0.0 0.0 1.0
+   outer loop
+      vertex 5.7 0.0025 0.25
+      vertex 4.065 0.5475 0.25
+      vertex 4.065 0.00249999999999997 0.25
+   endloop
+endfacet
+facet normal 0.0 0.0 1.0
+   outer loop
+      vertex 4.065 0.5475 0.25
+      vertex 5.7 0.0025 0.25
+      vertex 5.7 0.5475 0.25
+   endloop
+endfacet
+facet normal -1.0 0.0 0.0
+   outer loop
+      vertex 4.065 0.5475 0.25
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 4.065 0.00249999999999997 0.25
+   endloop
+endfacet
+facet normal -1.0 0.0 0.0
+   outer loop
+      vertex 4.065 0.00249999999999997 0.0
+      vertex 4.065 0.5475 0.25
+      vertex 4.065 0.5475 0.0
+   endloop
+endfacet
+endsolid C
diff --git a/wmake/rules/General/general b/wmake/rules/General/general
index 4eb70d6c451ab5a751c362deeaaeb695e5358c47..6a6c7e130db88b54b31b802bb98a9804a9e6eb8a 100644
--- a/wmake/rules/General/general
+++ b/wmake/rules/General/general
@@ -1,5 +1,5 @@
 #-------------------------------*- makefile -*---------------------------------
-WM_VERSION = OPENFOAM=1904
+WM_VERSION = OPENFOAM=1906
 
 AR         = ar
 ARFLAGS    = cr