diff --git a/applications/solvers/multiphase/reactingMultiphaseEulerFoam/pUf/pEqn.H b/applications/solvers/multiphase/reactingMultiphaseEulerFoam/pUf/pEqn.H
index 08d97031b044fd0379c63b333fde4638e4cdc742..b66aabffce6e986fb1db584af0f7772c02eea69b 100644
--- a/applications/solvers/multiphase/reactingMultiphaseEulerFoam/pUf/pEqn.H
+++ b/applications/solvers/multiphase/reactingMultiphaseEulerFoam/pUf/pEqn.H
@@ -272,10 +272,7 @@ while (pimple.correct())
                     ).ptr()
                 );
 
-                deleteDemandDrivenData
-                (
-                    pEqnComps[phasei].faceFluxCorrectionPtr()
-                );
+                pEqnComps[phasei].faceFluxCorrectionPtr(nullptr);
 
                 pEqnComps[phasei].relax();
             }
diff --git a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
index 4197ef6bac7a9e4016864aff75056dbb16e86cd2..bc97ae9c80fc93d1648b60de9cb1678353fa289a 100644
--- a/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
+++ b/src/dynamicFaMesh/interfaceTrackingFvMesh/interfaceTrackingFvMesh.C
@@ -50,6 +50,7 @@ License
 #include "demandDrivenData.H"
 #include "unitConversion.H"
 #include "foamVtkIndPatchWriter.H"
+#include "calculatedFaPatchFields.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/areaMesh/areaFaMesh.H b/src/finiteArea/areaMesh/areaFaMesh.H
index 0a9cea06d47bde1031737bfa8f732dce1a2e4bb1..039a574c7c19c12149811904c585eb096592d8da 100644
--- a/src/finiteArea/areaMesh/areaFaMesh.H
+++ b/src/finiteArea/areaMesh/areaFaMesh.H
@@ -69,22 +69,13 @@ public:
     // Member Functions
 
         //- Return size. Number of faces
-        static label size(const Mesh& mesh)
-        {
-            return mesh.nFaces();
-        }
+        static label size(const Mesh& mesh) { return mesh.nFaces(); }
 
         //- Return size. Number of faces
-        label size() const
-        {
-            return size(mesh_);
-        }
+        label size() const { return size(mesh_); }
 
         //- Field of face centres
-        const areaVectorField& C() const
-        {
-            return mesh_.areaCentres();
-        }
+        const areaVectorField& C() const { return mesh_.areaCentres(); }
 };
 
 
diff --git a/src/finiteArea/distributed/faMeshDistributor.C b/src/finiteArea/distributed/faMeshDistributor.C
index 9ee084fd949ff362c0a064a5008a2d12b85f8842..a3b8841d1ec23ddae772126fe6454925aaa45c07 100644
--- a/src/finiteArea/distributed/faMeshDistributor.C
+++ b/src/finiteArea/distributed/faMeshDistributor.C
@@ -84,10 +84,10 @@ void Foam::faMeshDistributor::createInternalEdgeMap() const
     const auto& faEdgeMap = distMap_.faceMap();
 
     // Copy full map
-    internalEdgeMap_.reset(new mapDistributeBase(faEdgeMap));
+    internalEdgeMapPtr_ = std::make_unique<mapDistributeBase>(faEdgeMap);
 
     // Retain internal edges
-    internalEdgeMap_->compactRemoteData
+    internalEdgeMapPtr_->compactRemoteData
     (
         bitSet(tgtMesh_.nInternalEdges(), true),
         UPstream::msgType(),
@@ -200,8 +200,6 @@ Foam::faMeshDistributor::faMeshDistributor
     srcMesh_(srcMesh),
     tgtMesh_(tgtMesh),
     distMap_(distMap),
-    internalEdgeMap_(),
-    patchEdgeMaps_(),
     dummyHandler_(fileOperation::null()),
     writeHandler_(dummyHandler_),
     isWriteProc_(isWriteProc)
@@ -221,8 +219,6 @@ Foam::faMeshDistributor::faMeshDistributor
     srcMesh_(srcMesh),
     tgtMesh_(tgtMesh),
     distMap_(distMap),
-    internalEdgeMap_(),
-    patchEdgeMaps_(),
     dummyHandler_(nullptr),
     writeHandler_(writeHandler),
     isWriteProc_(Switch::INVALID)
diff --git a/src/finiteArea/distributed/faMeshDistributor.H b/src/finiteArea/distributed/faMeshDistributor.H
index 52f2c4d82594c2f1710536bcab7d8749c6917f8f..632d617308341332c408538fb9ccd1a4628c4945 100644
--- a/src/finiteArea/distributed/faMeshDistributor.H
+++ b/src/finiteArea/distributed/faMeshDistributor.H
@@ -73,7 +73,7 @@ class faMeshDistributor
         const mapDistributePolyMesh& distMap_;
 
         //- Internal edge mapper
-        mutable std::unique_ptr<mapDistributeBase> internalEdgeMap_;
+        mutable std::unique_ptr<mapDistributeBase> internalEdgeMapPtr_;
 
         //- Patch edge mappers
         mutable PtrList<mapDistributeBase> patchEdgeMaps_;
@@ -99,6 +99,7 @@ class faMeshDistributor
         //- Debug: check addressing
         void checkAddressing() const;
 
+        //- Construct reconstruct mapping
         static mapDistributePolyMesh createReconstructMap
         (
             const faMesh& mesh,
diff --git a/src/finiteArea/distributed/faMeshDistributorTemplates.C b/src/finiteArea/distributed/faMeshDistributorTemplates.C
index 9215cc3b2bf31b15a99dd9d22f93c5b8d11d72f5..8df66fe2ab8c12429457ed67d457bbfee5e4df26 100644
--- a/src/finiteArea/distributed/faMeshDistributorTemplates.C
+++ b/src/finiteArea/distributed/faMeshDistributorTemplates.C
@@ -154,7 +154,7 @@ Foam::faMeshDistributor::distributeField
     const GeometricField<Type, faePatchField, edgeMesh>& fld
 ) const
 {
-    if (!internalEdgeMap_)
+    if (!internalEdgeMapPtr_)
     {
         createInternalEdgeMap();
     }
@@ -165,7 +165,7 @@ Foam::faMeshDistributor::distributeField
     const distributedFieldMapper mapper
     (
         labelUList::null(),
-        *(internalEdgeMap_)
+        *(internalEdgeMapPtr_)
     );
 
     DimensionedField<Type, edgeMesh> internalField
diff --git a/src/finiteArea/edgeMesh/edgeFaMesh.H b/src/finiteArea/edgeMesh/edgeFaMesh.H
index e726f628810aa8c60b82f12d6f8b02f213817364..214af6a9c746464fa1871fd799297e6cc76260b2 100644
--- a/src/finiteArea/edgeMesh/edgeFaMesh.H
+++ b/src/finiteArea/edgeMesh/edgeFaMesh.H
@@ -65,25 +65,17 @@ public:
             GeoMesh<faMesh>(mesh)
         {}
 
+
     // Member Functions
 
         //- Return size. Number of internal edges
-        static label size(const Mesh& mesh)
-        {
-            return mesh.nInternalEdges();
-        }
+        static label size(const Mesh& mesh) { return mesh.nInternalEdges(); }
 
         //- Return size. Number of internal edges
-        label size() const
-        {
-            return size(mesh_);
-        }
+        label size() const { return size(mesh_); }
 
         //- Field of edge centres
-        const edgeVectorField& C() const
-        {
-            return mesh_.edgeCentres();
-        }
+        const edgeVectorField& C() const { return mesh_.edgeCentres(); }
 };
 
 
diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
index 4d06db262d2ac0c95e62f3bd331936cfda249774..ac90e7101280522ca012ac3d104faa5784bc8f17 100644
--- a/src/finiteArea/faMatrices/faMatrix/faMatrix.C
+++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
@@ -28,12 +28,9 @@ License
 
 #include "areaFields.H"
 #include "edgeFields.H"
-#include "calculatedFaPatchFields.H"
 #include "extrapolatedCalculatedFaPatchFields.H"
-#include "zeroGradientFaPatchFields.H"
 #include "IndirectList.H"
 #include "UniformList.H"
-#include "demandDrivenData.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
@@ -50,7 +47,7 @@ void Foam::faMatrix<Type>::addToInternalField
     {
         FatalErrorInFunction
             << "addressing (" << addr.size()
-            << ") and field (" << pf.size() << ") are different sizes" << endl
+            << ") and field (" << pf.size() << ") are different sizes"
             << abort(FatalError);
     }
 
@@ -88,7 +85,7 @@ void Foam::faMatrix<Type>::subtractFromInternalField
     {
         FatalErrorInFunction
             << "addressing (" << addr.size()
-            << ") and field (" << pf.size() << ") are different sizes" << endl
+            << ") and field (" << pf.size() << ") are different sizes"
             << abort(FatalError);
     }
 
@@ -193,8 +190,7 @@ Foam::faMatrix<Type>::faMatrix
     dimensions_(ds),
     source_(psi.size(), Zero),
     internalCoeffs_(psi.mesh().boundary().size()),
-    boundaryCoeffs_(psi.mesh().boundary().size()),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(psi.mesh().boundary().size())
 {
     DebugInFunction
         << "constructing faMatrix<Type> for field " << psi_.name()
@@ -234,19 +230,17 @@ Foam::faMatrix<Type>::faMatrix(const faMatrix<Type>& fam)
     dimensions_(fam.dimensions_),
     source_(fam.source_),
     internalCoeffs_(fam.internalCoeffs_),
-    boundaryCoeffs_(fam.boundaryCoeffs_),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(fam.boundaryCoeffs_)
 {
     DebugInFunction
         << "Copying faMatrix<Type> for field " << psi_.name() << endl;
 
     if (fam.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, faePatchField, edgeMesh>
-            (
-                *(fam.faceFluxCorrectionPtr_)
-            );
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            *(fam.faceFluxCorrectionPtr_)
+        );
     }
 }
 
@@ -259,8 +253,7 @@ Foam::faMatrix<Type>::faMatrix(const tmp<faMatrix<Type>>& tmat)
     dimensions_(tmat().dimensions_),
     source_(tmat.constCast().source_, tmat.movable()),
     internalCoeffs_(tmat.constCast().internalCoeffs_, tmat.movable()),
-    boundaryCoeffs_(tmat.constCast().boundaryCoeffs_, tmat.movable()),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(tmat.constCast().boundaryCoeffs_, tmat.movable())
 {
     DebugInFunction
         << "Copy/Move faMatrix<Type> for field " << psi_.name() << endl;
@@ -269,16 +262,15 @@ Foam::faMatrix<Type>::faMatrix(const tmp<faMatrix<Type>>& tmat)
     {
         if (tmat.movable())
         {
-            faceFluxCorrectionPtr_ = tmat().faceFluxCorrectionPtr_;
-            tmat().faceFluxCorrectionPtr_ = nullptr;
+            faceFluxCorrectionPtr_ =
+                std::move(tmat.constCast().faceFluxCorrectionPtr_);
         }
-        else
+        else if (tmat().faceFluxCorrectionPtr_)
         {
-            faceFluxCorrectionPtr_ =
-                new GeometricField<Type, faePatchField, edgeMesh>
-                (
-                    *(tmat().faceFluxCorrectionPtr_)
-                );
+            faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+            (
+                *(tmat().faceFluxCorrectionPtr_)
+            );
         }
     }
 
@@ -293,8 +285,6 @@ Foam::faMatrix<Type>::~faMatrix()
 {
     DebugInFunction
         << "Destroying faMatrix<Type> for field " << psi_.name() << endl;
-
-    deleteDemandDrivenData(faceFluxCorrectionPtr_);
 }
 
 
@@ -791,9 +781,10 @@ void Foam::faMatrix<Type>::operator=(const faMatrix<Type>& famv)
     }
     else if (famv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, faePatchField, edgeMesh>
-            (*famv.faceFluxCorrectionPtr_);
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            *famv.faceFluxCorrectionPtr_
+        );
     }
 }
 
@@ -838,8 +829,7 @@ void Foam::faMatrix<Type>::operator+=(const faMatrix<Type>& famv)
     }
     else if (famv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ = new
-        GeometricField<Type, faePatchField, edgeMesh>
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
         (
             *famv.faceFluxCorrectionPtr_
         );
@@ -872,9 +862,10 @@ void Foam::faMatrix<Type>::operator-=(const faMatrix<Type>& famv)
     }
     else if (famv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, faePatchField, edgeMesh>
-            (-*famv.faceFluxCorrectionPtr_);
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            -*famv.faceFluxCorrectionPtr_
+        );
     }
 }
 
diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.H b/src/finiteArea/faMatrices/faMatrix/faMatrix.H
index 47b19d76048d6b0e454716c00176f390d5794413..0b4681537c04c95e2a455c36f334c360bb16a2bd 100644
--- a/src/finiteArea/faMatrices/faMatrix/faMatrix.H
+++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.H
@@ -46,10 +46,6 @@ Author
 #include "areaFields.H"
 #include "edgeFields.H"
 #include "lduMatrix.H"
-#include "tmp.H"
-#include "autoPtr.H"
-#include "dimensionedTypes.H"
-#include "className.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -155,7 +151,7 @@ private:
         FieldField<Field, Type> boundaryCoeffs_;
 
         //- Face flux field for non-orthogonal correction
-        mutable faceFluxFieldType* faceFluxCorrectionPtr_;
+        mutable std::unique_ptr<faceFluxFieldType> faceFluxCorrectionPtr_;
 
 
 protected:
@@ -357,8 +353,7 @@ public:
             }
 
             //- Declare return type of the faceFluxCorrectionPtr() function
-            typedef GeometricField<Type, faePatchField, edgeMesh>
-                *faceFluxFieldPtrType;
+            typedef std::unique_ptr<faceFluxFieldType> faceFluxFieldPtrType;
 
             //- Return pointer to face-flux non-orthogonal correction field
             faceFluxFieldPtrType& faceFluxCorrectionPtr()
@@ -366,6 +361,12 @@ public:
                 return faceFluxCorrectionPtr_;
             }
 
+            //- Set pointer to face-flux non-orthogonal correction field
+            void faceFluxCorrectionPtr(faceFluxFieldType* flux)
+            {
+                faceFluxCorrectionPtr_.reset(flux);
+            }
+
             //- True if face-flux non-orthogonal correction field exists
             bool hasFaceFluxCorrection() const noexcept
             {
diff --git a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C
index 5df6a43abe8e12dfc5e95a40dc98610d5b730ca6..3ed9ea7f8fc7c6b3a0e5dfdd4a55a1d1705d2ce5 100644
--- a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C
+++ b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.C
@@ -29,7 +29,6 @@ License
 #include "faBoundaryMesh.H"
 #include "faMesh.H"
 #include "globalIndex.H"
-#include "primitiveMesh.H"
 #include "processorFaPatch.H"
 #include "wordRes.H"
 #include "PtrListOps.H"
diff --git a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.H b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.H
index 9a147781d5b1fb4ca42e164b6b7a5c27fa9dc9b3..0603bd28d2e9a093113fc0e415fd11d9cf3fbdf2 100644
--- a/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.H
+++ b/src/finiteArea/faMesh/faBoundaryMesh/faBoundaryMesh.H
@@ -46,8 +46,6 @@ Author
 #include "faPatch.H"
 #include "labelPair.H"
 #include "lduInterfacePtrsList.H"
-#include "wordList.H"
-#include "pointField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/faMesh/faGlobalMeshData/faGlobalMeshData.H b/src/finiteArea/faMesh/faGlobalMeshData/faGlobalMeshData.H
index c494e22f535ac4385e1d5951fb22bcb692237f60..ea6da26d7fd22cff137a94a37fc78240782efe7c 100644
--- a/src/finiteArea/faMesh/faGlobalMeshData/faGlobalMeshData.H
+++ b/src/finiteArea/faMesh/faGlobalMeshData/faGlobalMeshData.H
@@ -77,7 +77,13 @@ class faGlobalMeshData
         labelList sharedPointAddr_;
 
 
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    ClassName("faGlobalMeshData");
+
+
+    // Generated Methods
 
         //- No copy construct
         faGlobalMeshData(const faGlobalMeshData&) = delete;
@@ -86,12 +92,6 @@ class faGlobalMeshData
         void operator=(const faGlobalMeshData&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    ClassName("faGlobalMeshData");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/faMesh/faMesh.C b/src/finiteArea/faMesh/faMesh.C
index cfb9e1608cb97abe79d89951eb141d016f376161..49c518363d5b3461ce1bb549bae08bf341fb665c 100644
--- a/src/finiteArea/faMesh/faMesh.C
+++ b/src/finiteArea/faMesh/faMesh.C
@@ -169,14 +169,12 @@ void Foam::faMesh::checkBoundaryEdgeLabelRange
 
 void Foam::faMesh::initPatch() const
 {
-    patchPtr_.reset
+    patchPtr_ = std::make_unique<uindirectPrimitivePatch>
     (
-        new uindirectPrimitivePatch
-        (
-            UIndirectList<face>(mesh().faces(), faceLabels_),
-            mesh().points()
-        )
+        UIndirectList<face>(mesh().faces(), faceLabels_),
+        mesh().points()
     );
+
     // Could set some basic primitive data here...
     // nEdges_ = patchPtr_->nEdges();
     // nInternalEdges_ = patchPtr_->nInternalEdges();
@@ -253,17 +251,17 @@ void Foam::faMesh::clearGeomNotAreas() const
     polyPatchFacesPtr_.reset(nullptr);
     polyPatchIdsPtr_.reset(nullptr);
     bndConnectPtr_.reset(nullptr);
-    deleteDemandDrivenData(SPtr_);
-    deleteDemandDrivenData(patchStartsPtr_);
-    deleteDemandDrivenData(LePtr_);
-    deleteDemandDrivenData(magLePtr_);
-    deleteDemandDrivenData(faceCentresPtr_);
-    deleteDemandDrivenData(edgeCentresPtr_);
-    deleteDemandDrivenData(faceAreaNormalsPtr_);
-    deleteDemandDrivenData(edgeAreaNormalsPtr_);
+    SPtr_.reset(nullptr);
+    patchStartsPtr_.reset(nullptr);
+    LePtr_.reset(nullptr);
+    magLePtr_.reset(nullptr);
+    faceCentresPtr_.reset(nullptr);
+    edgeCentresPtr_.reset(nullptr);
+    faceAreaNormalsPtr_.reset(nullptr);
+    edgeAreaNormalsPtr_.reset(nullptr);
     pointAreaNormalsPtr_.reset(nullptr);
-    deleteDemandDrivenData(faceCurvaturesPtr_);
-    deleteDemandDrivenData(edgeTransformTensorsPtr_);
+    faceCurvaturesPtr_.reset(nullptr);
+    edgeTransformTensorsPtr_.reset(nullptr);
 }
 
 
@@ -272,9 +270,9 @@ void Foam::faMesh::clearGeom() const
     DebugInFunction << "Clearing geometry" << endl;
 
     clearGeomNotAreas();
-    deleteDemandDrivenData(S0Ptr_);
-    deleteDemandDrivenData(S00Ptr_);
-    deleteDemandDrivenData(correctPatchPointNormalsPtr_);
+    S0Ptr_.reset(nullptr);
+    S00Ptr_.reset(nullptr);
+    correctPatchPointNormalsPtr_.reset(nullptr);
 }
 
 
@@ -282,7 +280,7 @@ void Foam::faMesh::clearAddressing() const
 {
     DebugInFunction << "Clearing addressing" << endl;
 
-    deleteDemandDrivenData(lduPtr_);
+    lduPtr_.reset(nullptr);
 }
 
 
@@ -402,33 +400,7 @@ Foam::faMesh::faMesh
         *this
     ),
     comm_(UPstream::worldComm),
-    curTimeIndex_(time().timeIndex()),
-
-    patchPtr_(nullptr),
-    polyPatchFacesPtr_(nullptr),
-    polyPatchIdsPtr_(nullptr),
-    bndConnectPtr_(nullptr),
-    lduPtr_(nullptr),
-
-    SPtr_(nullptr),
-    S0Ptr_(nullptr),
-    S00Ptr_(nullptr),
-    patchStartsPtr_(nullptr),
-    LePtr_(nullptr),
-    magLePtr_(nullptr),
-    faceCentresPtr_(nullptr),
-    edgeCentresPtr_(nullptr),
-    faceAreaNormalsPtr_(nullptr),
-    edgeAreaNormalsPtr_(nullptr),
-    pointAreaNormalsPtr_(nullptr),
-    faceCurvaturesPtr_(nullptr),
-    edgeTransformTensorsPtr_(nullptr),
-    correctPatchPointNormalsPtr_(nullptr),
-    globalMeshDataPtr_(nullptr),
-
-    haloMapPtr_(nullptr),
-    haloFaceCentresPtr_(nullptr),
-    haloFaceNormalsPtr_(nullptr)
+    curTimeIndex_(time().timeIndex())
 {
     DebugInFunction << "Creating from IOobject" << endl;
 
@@ -459,7 +431,7 @@ Foam::faMesh::faMesh
         rio.resetHeader("S0");
         if (returnReduceOr(rio.typeHeaderOk<regIOobject>(false)))
         {
-            S0Ptr_ = new DimensionedField<scalar, areaMesh>
+            S0Ptr_ = std::make_unique<DimensionedField<scalar, areaMesh>>
             (
                 rio,
                 *this,
@@ -524,33 +496,7 @@ Foam::faMesh::faMesh
         label(0)
     ),
     comm_(UPstream::worldComm),
-    curTimeIndex_(time().timeIndex()),
-
-    patchPtr_(nullptr),
-    polyPatchFacesPtr_(nullptr),
-    polyPatchIdsPtr_(nullptr),
-    bndConnectPtr_(nullptr),
-    lduPtr_(nullptr),
-
-    SPtr_(nullptr),
-    S0Ptr_(nullptr),
-    S00Ptr_(nullptr),
-    patchStartsPtr_(nullptr),
-    LePtr_(nullptr),
-    magLePtr_(nullptr),
-    faceCentresPtr_(nullptr),
-    edgeCentresPtr_(nullptr),
-    faceAreaNormalsPtr_(nullptr),
-    edgeAreaNormalsPtr_(nullptr),
-    pointAreaNormalsPtr_(nullptr),
-    faceCurvaturesPtr_(nullptr),
-    edgeTransformTensorsPtr_(nullptr),
-    correctPatchPointNormalsPtr_(nullptr),
-    globalMeshDataPtr_(nullptr),
-
-    haloMapPtr_(nullptr),
-    haloFaceCentresPtr_(nullptr),
-    haloFaceNormalsPtr_(nullptr)
+    curTimeIndex_(time().timeIndex())
 {
     // Not yet much for primitive mesh data possible...
     nPoints_ = 0;
@@ -609,33 +555,7 @@ Foam::faMesh::faMesh
         label(0)
     ),
     comm_(UPstream::worldComm),
-    curTimeIndex_(time().timeIndex()),
-
-    patchPtr_(nullptr),
-    polyPatchFacesPtr_(nullptr),
-    polyPatchIdsPtr_(nullptr),
-    bndConnectPtr_(nullptr),
-    lduPtr_(nullptr),
-
-    SPtr_(nullptr),
-    S0Ptr_(nullptr),
-    S00Ptr_(nullptr),
-    patchStartsPtr_(nullptr),
-    LePtr_(nullptr),
-    magLePtr_(nullptr),
-    faceCentresPtr_(nullptr),
-    edgeCentresPtr_(nullptr),
-    faceAreaNormalsPtr_(nullptr),
-    edgeAreaNormalsPtr_(nullptr),
-    pointAreaNormalsPtr_(nullptr),
-    faceCurvaturesPtr_(nullptr),
-    edgeTransformTensorsPtr_(nullptr),
-    correctPatchPointNormalsPtr_(nullptr),
-    globalMeshDataPtr_(nullptr),
-
-    haloMapPtr_(nullptr),
-    haloFaceCentresPtr_(nullptr),
-    haloFaceNormalsPtr_(nullptr)
+    curTimeIndex_(time().timeIndex())
 {
     // Not yet much for primitive mesh data possible...
     nPoints_ = 0;
@@ -732,7 +652,7 @@ Foam::faMesh::faMesh
         rio.resetHeader("S0");
         if (returnReduceOr(rio.typeHeaderOk<regIOobject>(false)))
         {
-            S0Ptr_ = new DimensionedField<scalar, areaMesh>
+            S0Ptr_ = std::make_unique<DimensionedField<scalar, areaMesh>>
             (
                 rio,
                 *this,
@@ -948,7 +868,7 @@ Foam::faMesh::S00() const
 {
     if (!S00Ptr_)
     {
-        S00Ptr_ = new DimensionedField<scalar, areaMesh>
+        S00Ptr_ = std::make_unique<DimensionedField<scalar, areaMesh>>
         (
             IOobject
             (
@@ -994,7 +914,7 @@ const Foam::vectorField& Foam::faMesh::pointAreaNormals() const
 {
     if (!pointAreaNormalsPtr_)
     {
-        pointAreaNormalsPtr_.reset(new vectorField(nPoints()));
+        pointAreaNormalsPtr_ = std::make_unique<vectorField>(nPoints());
 
         calcPointAreaNormals(*pointAreaNormalsPtr_);
 
@@ -1082,7 +1002,7 @@ bool Foam::faMesh::movePoints()
         {
             DebugInfo<< "Creating old cell volumes." << endl;
 
-            S0Ptr_ = new DimensionedField<scalar, areaMesh>
+            S0Ptr_ = std::make_unique<DimensionedField<scalar, areaMesh>>
             (
                 IOobject
                 (
@@ -1140,7 +1060,8 @@ Foam::boolList& Foam::faMesh::correctPatchPointNormals() const
 {
     if (!correctPatchPointNormalsPtr_)
     {
-        correctPatchPointNormalsPtr_ = new boolList(boundary().size(), false);
+        correctPatchPointNormalsPtr_ =
+            std::make_unique<boolList>(boundary().size(), false);
     }
 
     return *correctPatchPointNormalsPtr_;
diff --git a/src/finiteArea/faMesh/faMesh.H b/src/finiteArea/faMesh/faMesh.H
index ce875b9a794014a3b965e434d864665c3d042a6a..34e1352250faaa7c8ca26b3d3ad4357cb74661d6 100644
--- a/src/finiteArea/faMesh/faMesh.H
+++ b/src/finiteArea/faMesh/faMesh.H
@@ -261,52 +261,53 @@ class faMesh
         mutable std::unique_ptr<List<labelPair>> bndConnectPtr_;
 
         //- Ldu addressing data
-        mutable faMeshLduAddressing* lduPtr_;
+        mutable std::unique_ptr<faMeshLduAddressing> lduPtr_;
 
 
     // Geometric Data
 
         //- Face areas
-        mutable DimensionedField<scalar, areaMesh>* SPtr_;
+        mutable std::unique_ptr<DimensionedField<scalar, areaMesh>> SPtr_;
 
         //- Face areas old time level
-        mutable DimensionedField<scalar, areaMesh>* S0Ptr_;
+        mutable std::unique_ptr<DimensionedField<scalar, areaMesh>> S0Ptr_;
 
         //- Face areas old-old time level
-        mutable DimensionedField<scalar, areaMesh>* S00Ptr_;
+        mutable std::unique_ptr<DimensionedField<scalar, areaMesh>> S00Ptr_;
 
         //- Patch starts in the edge list
-        mutable labelList* patchStartsPtr_;
+        mutable std::unique_ptr<labelList> patchStartsPtr_;
 
         //- Edge length vectors
-        mutable edgeVectorField* LePtr_;
+        mutable std::unique_ptr<edgeVectorField> LePtr_;
 
         //- Mag edge length vectors
-        mutable edgeScalarField* magLePtr_;
+        mutable std::unique_ptr<edgeScalarField> magLePtr_;
 
         //- Face centres
-        mutable areaVectorField* faceCentresPtr_;
+        mutable std::unique_ptr<areaVectorField> faceCentresPtr_;
 
         //- Edge centres
-        mutable edgeVectorField* edgeCentresPtr_;
+        mutable std::unique_ptr<edgeVectorField> edgeCentresPtr_;
 
         //- Face area normals
-        mutable areaVectorField* faceAreaNormalsPtr_;
+        mutable std::unique_ptr<areaVectorField> faceAreaNormalsPtr_;
 
         //- Edge area normals
-        mutable edgeVectorField* edgeAreaNormalsPtr_;
+        mutable std::unique_ptr<edgeVectorField> edgeAreaNormalsPtr_;
 
         //- Point area normals
         mutable std::unique_ptr<vectorField> pointAreaNormalsPtr_;
 
         //- Face curvatures
-        mutable areaScalarField* faceCurvaturesPtr_;
+        mutable std::unique_ptr<areaScalarField> faceCurvaturesPtr_;
 
         //- Edge transformation tensors
-        mutable FieldField<Field, tensor>* edgeTransformTensorsPtr_;
+        mutable std::unique_ptr<FieldField<Field, tensor>>
+            edgeTransformTensorsPtr_;
 
         //- Whether point normals must be corrected for a patch
-        mutable boolList* correctPatchPointNormalsPtr_;
+        mutable std::unique_ptr<boolList> correctPatchPointNormalsPtr_;
 
 
     // Other mesh-related data
@@ -332,12 +333,6 @@ class faMesh
 
     // Private Member Functions
 
-        //- No copy construct
-        faMesh(const faMesh&) = delete;
-
-        //- No copy assignment
-        void operator=(const faMesh&) = delete;
-
         //- Set indirect patch, removing any old one.
         //  No communication
         void initPatch() const;
@@ -524,6 +519,15 @@ public:
         static word meshSubDir;
 
 
+    // Generated Methods
+
+        //- No copy construct
+        faMesh(const faMesh&) = delete;
+
+        //- No copy assignment
+        void operator=(const faMesh&) = delete;
+
+
     // Constructors
 
         //- Read construct from polyMesh, using its IOobject properties
diff --git a/src/finiteArea/faMesh/faMeshDemandDrivenData.C b/src/finiteArea/faMesh/faMeshDemandDrivenData.C
index 3f94292886eb70bf71225d10ed1b9bbeea8a63d4..49b60d401803fd44135b1e88024b81cd9c60089f 100644
--- a/src/finiteArea/faMesh/faMeshDemandDrivenData.C
+++ b/src/finiteArea/faMesh/faMeshDemandDrivenData.C
@@ -222,7 +222,7 @@ void Foam::faMesh::calcLduAddressing() const
             << abort(FatalError);
     }
 
-    lduPtr_ = new faMeshLduAddressing(*this);
+    lduPtr_ = std::make_unique<faMeshLduAddressing>(*this);
 }
 
 
@@ -238,7 +238,7 @@ void Foam::faMesh::calcPatchStarts() const
             << abort(FatalError);
     }
 
-    patchStartsPtr_ = new labelList(boundary().patchStarts());
+    patchStartsPtr_ = std::make_unique<labelList>(boundary().patchStarts());
 }
 
 
@@ -254,9 +254,9 @@ void Foam::faMesh::calcWhichPatchFaces() const
 
     const polyBoundaryMesh& pbm = mesh().boundaryMesh();
 
-    polyPatchFacesPtr_.reset
+    polyPatchFacesPtr_ = std::make_unique<List<labelPair>>
     (
-        new List<labelPair>(pbm.whichPatchFace(faceLabels_))
+        pbm.whichPatchFace(faceLabels_)
     );
 
     labelHashSet ids;
@@ -278,7 +278,7 @@ void Foam::faMesh::calcWhichPatchFaces() const
         this->comm()
     );
 
-    polyPatchIdsPtr_.reset(new labelList(ids.sortedToc()));
+    polyPatchIdsPtr_ = std::make_unique<labelList>(ids.sortedToc());
 }
 
 
@@ -675,23 +675,22 @@ void Foam::faMesh::calcLe() const
             << abort(FatalError);
     }
 
-    LePtr_ =
-        new edgeVectorField
+    LePtr_ = std::make_unique<edgeVectorField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "Le",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimLength
-            // -> calculatedType()
-        );
+            "Le",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimLength
+        // -> calculatedType()
+    );
     edgeVectorField& Le = *LePtr_;
 
     // Need face centres
@@ -773,23 +772,21 @@ void Foam::faMesh::calcMagLe() const
             << abort(FatalError);
     }
 
-    magLePtr_ =
-        new edgeScalarField
+    magLePtr_ = std::make_unique<edgeScalarField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "magLe",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimLength
-        );
-
+            "magLe",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimLength
+    );
     edgeScalarField& magLe = *magLePtr_;
 
     const pointField& localPoints = points();
@@ -849,24 +846,22 @@ void Foam::faMesh::calcFaceCentres() const
             << abort(FatalError);
     }
 
-    faceCentresPtr_ =
-        new areaVectorField
+    faceCentresPtr_ = std::make_unique<areaVectorField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "centres",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimLength
-            // -> calculatedType()
-        );
-
+            "centres",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimLength
+        // -> calculatedType()
+    );
     areaVectorField& centres = *faceCentresPtr_;
 
     // Need local points
@@ -931,24 +926,22 @@ void Foam::faMesh::calcEdgeCentres() const
             << abort(FatalError);
     }
 
-    edgeCentresPtr_ =
-        new edgeVectorField
+    edgeCentresPtr_ = std::make_unique<edgeVectorField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "edgeCentres",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimLength
-            // -> calculatedType()
-        );
-
+            "edgeCentres",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimLength
+        // -> calculatedType()
+    );
     edgeVectorField& centres = *edgeCentresPtr_;
 
     // Need local points
@@ -996,7 +989,7 @@ void Foam::faMesh::calcS() const
             << abort(FatalError);
     }
 
-    SPtr_ = new DimensionedField<scalar, areaMesh>
+    SPtr_ = std::make_unique<DimensionedField<scalar, areaMesh>>
     (
         IOobject
         (
@@ -1068,23 +1061,21 @@ void Foam::faMesh::calcFaceAreaNormals() const
             << abort(FatalError);
     }
 
-    faceAreaNormalsPtr_ =
-        new areaVectorField
+    faceAreaNormalsPtr_ = std::make_unique<areaVectorField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "faceAreaNormals",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimless
-        );
-
+            "faceAreaNormals",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimless
+    );
     areaVectorField& faceNormals = *faceAreaNormalsPtr_;
 
     const pointField& localPoints = points();
@@ -1149,23 +1140,22 @@ void Foam::faMesh::calcEdgeAreaNormals() const
             << abort(FatalError);
     }
 
-    edgeAreaNormalsPtr_ =
-        new edgeVectorField
+    edgeAreaNormalsPtr_ = std::make_unique<edgeVectorField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "edgeAreaNormals",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimless
-            // -> calculatedType()
-        );
+            "edgeAreaNormals",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimless
+        // -> calculatedType()
+    );
     edgeVectorField& edgeAreaNormals = *edgeAreaNormalsPtr_;
 
 
@@ -1279,23 +1269,21 @@ void Foam::faMesh::calcFaceCurvatures() const
             << abort(FatalError);
     }
 
-    faceCurvaturesPtr_ =
-        new areaScalarField
+    faceCurvaturesPtr_ = std::make_unique<areaScalarField>
+    (
+        IOobject
         (
-            IOobject
-            (
-                "faceCurvatures",
-                mesh().pointsInstance(),
-                faMesh::meshSubDir,
-                faMesh::thisDb(),
-                IOobject::NO_READ,
-                IOobject::NO_WRITE,
-                IOobject::NO_REGISTER
-            ),
-            *this,
-            dimless/dimLength
-        );
-
+            "faceCurvatures",
+            mesh().pointsInstance(),
+            faMesh::meshSubDir,
+            faMesh::thisDb(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            IOobject::NO_REGISTER
+        ),
+        *this,
+        dimless/dimLength
+    );
     areaScalarField& faceCurvatures = *faceCurvaturesPtr_;
 
 
@@ -1321,7 +1309,8 @@ void Foam::faMesh::calcEdgeTransformTensors() const
             << abort(FatalError);
     }
 
-    edgeTransformTensorsPtr_ = new FieldField<Field, tensor>(nEdges_);
+    edgeTransformTensorsPtr_ =
+        std::make_unique<FieldField<Field, tensor>>(nEdges_);
     auto& edgeTransformTensors = *edgeTransformTensorsPtr_;
 
     // Initialize all transformation tensors
diff --git a/src/finiteArea/faMesh/faMeshLduAddressing.H b/src/finiteArea/faMesh/faMeshLduAddressing.H
index 28981c11c8b9466d9647e1a451a5151d403b95ea..3e6d41e3e5681ff3c0ad47db9198bb2780229ae0 100644
--- a/src/finiteArea/faMesh/faMeshLduAddressing.H
+++ b/src/finiteArea/faMesh/faMeshLduAddressing.H
@@ -73,7 +73,9 @@ class faMeshLduAddressing
         const lduSchedule& patchSchedule_;
 
 
-    // Private Member Functions
+public:
+
+    // Generated Methods
 
         //- No copy construct
         faMeshLduAddressing(const faMeshLduAddressing&) = delete;
@@ -82,8 +84,6 @@ class faMeshLduAddressing
         void operator=(const faMeshLduAddressing&) = delete;
 
 
-public:
-
     // Constructors
 
         //- Construct from components
diff --git a/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.C b/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.C
index e079de2bab53eb9443a94e96af2cb1f60dd3c358..f575d1a6e87c11fb5665423a3fe4d76c5a8c0a8f 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.C
+++ b/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.C
@@ -61,10 +61,18 @@ void Foam::faAreaMapper::calcAddressing() const
 
     // Prepare a list of new face labels and (preliminary) addressing
     // Note: dimensioned to number of boundary faces of polyMesh
-    newFaceLabelsPtr_ = new labelList(mesh_.mesh().nBoundaryFaces(), -1);
-    labelList& newFaceLabels = *newFaceLabelsPtr_;
+    newFaceLabelsPtr_ = std::make_unique<labelList>
+    (
+        mesh_.mesh().nBoundaryFaces(),
+        -1
+    );
+    auto& newFaceLabels = *newFaceLabelsPtr_;
 
-    newFaceLabelsMapPtr_ = new labelList(mesh_.mesh().nBoundaryFaces(), -1);
+    newFaceLabelsMapPtr_ = std::make_unique<labelList>
+    (
+        mesh_.mesh().nBoundaryFaces(),
+        -1
+    );
     labelList& newFaceLabelsMap = *newFaceLabelsMapPtr_;
     label nNewFaces = 0;
 
@@ -94,7 +102,7 @@ void Foam::faAreaMapper::calcAddressing() const
         // Direct mapping: no further faces to add.  Resize list
         newFaceLabels.setSize(nNewFaces);
 
-        directAddrPtr_ = new labelList(newFaceLabels.size());
+        directAddrPtr_ = std::make_unique<labelList>(newFaceLabels.size());
         labelList& addr = *directAddrPtr_;
 
         // Adjust for creation of a boundary face from an internal face
@@ -114,10 +122,13 @@ void Foam::faAreaMapper::calcAddressing() const
     {
         // There are further faces to add.  Prepare interpolation addressing
         // and weights to full size
-        interpolationAddrPtr_ = new labelListList(newFaceLabels.size());
+        interpolationAddrPtr_ = std::make_unique<labelListList>
+        (
+            newFaceLabels.size()
+        );
         labelListList& addr = *interpolationAddrPtr_;
 
-        weightsPtr_ = new scalarListList(newFaceLabels.size());
+        weightsPtr_ = std::make_unique<scalarListList>(newFaceLabels.size());
         scalarListList& w = *weightsPtr_;
 
         // Insert single addressing and weights
@@ -256,20 +267,20 @@ void Foam::faAreaMapper::calcAddressing() const
 
     // Inserted objects cannot appear in the new faMesh as they have no master
     // HJ, 10/Aug/2011
-    insertedObjectLabelsPtr_ = new labelList(0);
+    insertedObjectLabelsPtr_ = std::make_unique<labelList>();
 }
 
 
 void Foam::faAreaMapper::clearOut()
 {
-    deleteDemandDrivenData(newFaceLabelsPtr_);
-    deleteDemandDrivenData(newFaceLabelsMapPtr_);
+    newFaceLabelsPtr_.reset(nullptr);
+    newFaceLabelsMapPtr_.reset(nullptr);
 
-    deleteDemandDrivenData(directAddrPtr_);
-    deleteDemandDrivenData(interpolationAddrPtr_);
-    deleteDemandDrivenData(weightsPtr_);
+    directAddrPtr_.reset(nullptr);
+    interpolationAddrPtr_.reset(nullptr);
+    weightsPtr_.reset(nullptr);
 
-    deleteDemandDrivenData(insertedObjectLabelsPtr_);
+    insertedObjectLabelsPtr_.reset(nullptr);
     hasUnmapped_ = false;
 }
 
@@ -286,13 +297,7 @@ Foam::faAreaMapper::faAreaMapper
     mpm_(mpm),
     direct_(false),
     hasUnmapped_(false),
-    sizeBeforeMapping_(mesh.nFaces()),
-    newFaceLabelsPtr_(nullptr),
-    newFaceLabelsMapPtr_(nullptr),
-    directAddrPtr_(nullptr),
-    interpolationAddrPtr_(nullptr),
-    weightsPtr_(nullptr),
-    insertedObjectLabelsPtr_(nullptr)
+    sizeBeforeMapping_(mesh.nFaces())
 {
     // Check for possibility of direct mapping
     if
diff --git a/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.H b/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.H
index e13c97c6bf649abcfc24080aff0e18c245ce0b1c..9a75decf955ff0220d48c64f5c26460420be12d2 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.H
+++ b/src/finiteArea/faMesh/faMeshMapper/faAreaMapper.H
@@ -43,9 +43,6 @@ SourceFiles
 
 #include "morphFieldMapper.H"
 #include "faMesh.H"
-#include "faceMapper.H"
-#include "HashSet.H"
-#include "mapPolyMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -60,7 +57,7 @@ class faAreaMapper
 :
     public morphFieldMapper
 {
-    // Private data
+    // Private Data
 
         //- Reference to mesh mapper
         const faMesh& mesh_;
@@ -80,33 +77,27 @@ class faAreaMapper
         label sizeBeforeMapping_;
 
         //- New face labels after mapping
-        mutable labelList* newFaceLabelsPtr_;
+        mutable std::unique_ptr<labelList> newFaceLabelsPtr_;
 
         //- New face labels after mapping
-        mutable labelList* newFaceLabelsMapPtr_;
+        mutable std::unique_ptr<labelList> newFaceLabelsMapPtr_;
 
 
         //- Direct addressing (only one form of addressing is used)
-        mutable labelList* directAddrPtr_;
+        mutable std::unique_ptr<labelList> directAddrPtr_;
 
         //- Interpolated addressing (only one form of addressing is used)
-        mutable labelListList* interpolationAddrPtr_;
+        mutable std::unique_ptr<labelListList> interpolationAddrPtr_;
 
         //- Interpolation weights
-        mutable scalarListList* weightsPtr_;
+        mutable std::unique_ptr<scalarListList> weightsPtr_;
 
         //- Inserted faces
-        mutable labelList* insertedObjectLabelsPtr_;
+        mutable std::unique_ptr<labelList> insertedObjectLabelsPtr_;
 
 
     // Private Member Functions
 
-        //- No copy construct
-        faAreaMapper(const faAreaMapper&) = delete;
-
-        //- No copy assignment
-        void operator=(const faAreaMapper&) = delete;
-
         //- Calculate addressing
         void calcAddressing() const;
 
@@ -116,6 +107,15 @@ class faAreaMapper
 
 public:
 
+    // Generated Methods
+
+        //- No copy construct
+        faAreaMapper(const faAreaMapper&) = delete;
+
+        //- No copy assignment
+        void operator=(const faAreaMapper&) = delete;
+
+
     //- Construct from components
     faAreaMapper
     (
@@ -127,7 +127,6 @@ public:
     //- Destructor
     virtual ~faAreaMapper();
 
-
     // Member Functions
 
         //- Return new face labels
diff --git a/src/finiteArea/faMesh/faMeshMapper/faBoundaryMeshMapper.H b/src/finiteArea/faMesh/faMeshMapper/faBoundaryMeshMapper.H
index 8cb95b33583b6d2be42cd8c664cc04abaed64ea4..b60d1a66124511a5df7c43861b04b4fe7ba5f32e 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faBoundaryMeshMapper.H
+++ b/src/finiteArea/faMesh/faMeshMapper/faBoundaryMeshMapper.H
@@ -34,7 +34,6 @@ Description
 #ifndef faBoundaryMeshMapper_H
 #define faBoundaryMeshMapper_H
 
-#include "PtrList.H"
 #include "faPatchMapper.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.C b/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.C
index dd0684a39c5a5e982a6852edd7280d2803f7304e..2dffd9ed7b23998edd0343a65cc0024858073157 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.C
+++ b/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.C
@@ -43,13 +43,13 @@ void Foam::faEdgeMapper::calcAddressing() const
     hasUnmapped_ = false;
 
     // Dummy mapping: take value from edge 0
-    directAddrPtr_ = new labelList(size(), Zero);
+    directAddrPtr_ = std::make_unique<labelList>(size(), Foam::zero{});
 }
 
 
 void Foam::faEdgeMapper::clearOut()
 {
-    deleteDemandDrivenData(directAddrPtr_);
+    directAddrPtr_.reset(nullptr);
     hasUnmapped_ = false;
 }
 
@@ -63,10 +63,8 @@ Foam::faEdgeMapper::faEdgeMapper
 )
 :
     mesh_(mesh),
-//    mpm_(mpm),
     sizeBeforeMapping_(mesh.nInternalEdges()),
-    hasUnmapped_(false),
-    directAddrPtr_(nullptr)
+    hasUnmapped_(false)
 {}
 
 
diff --git a/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.H b/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.H
index 267790b7d266a811d5b09c730cbd61703054a5e2..05f0cd0fda979f1824937404407a28be02fa6872 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.H
+++ b/src/finiteArea/faMesh/faMeshMapper/faEdgeMapper.H
@@ -45,7 +45,6 @@ SourceFiles
 #include "morphFieldMapper.H"
 #include "faMesh.H"
 #include "faceMapper.H"
-#include "HashSet.H"
 #include "mapPolyMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -61,14 +60,11 @@ class faEdgeMapper
 :
     public morphFieldMapper
 {
-    // Private data
+    // Private Data
 
         //- Reference to mesh
         const faMesh& mesh_;
 
-        //- Reference to mapPolyMesh
-        //const mapPolyMesh& mpm_;
-
         //- Old mesh size
         label sizeBeforeMapping_;
 
@@ -78,17 +74,11 @@ class faEdgeMapper
         mutable bool hasUnmapped_;
 
         //- Direct addressing
-        mutable labelList* directAddrPtr_;
+        mutable std::unique_ptr<labelList> directAddrPtr_;
 
 
     // Private Member Functions
 
-        //- No copy construct
-        faEdgeMapper(const faEdgeMapper&) = delete;
-
-        //- No copy assignment
-        void operator=(const faEdgeMapper&) = delete;
-
         //- Calculate addressing
         void calcAddressing() const;
 
@@ -98,6 +88,15 @@ class faEdgeMapper
 
 public:
 
+    // Generated Methods
+
+        //- No copy construct
+        faEdgeMapper(const faEdgeMapper&) = delete;
+
+        //- No copy assignment
+        void operator=(const faEdgeMapper&) = delete;
+
+
     //- Construct from components
     faEdgeMapper
     (
diff --git a/src/finiteArea/faMesh/faMeshMapper/faMeshMapper.H b/src/finiteArea/faMesh/faMeshMapper/faMeshMapper.H
index aaef4826d8e6326d4de9ad052a1b907297487973..16760b12e67a80db2be3f8cd16abb200a3dfb658 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faMeshMapper.H
+++ b/src/finiteArea/faMesh/faMeshMapper/faMeshMapper.H
@@ -68,7 +68,7 @@ class mapPolyMesh;
 
 class faMeshMapper
 {
-    // Private data
+    // Private Data
 
         //- Reference to mesh
         const faMesh& mesh_;
@@ -110,7 +110,9 @@ class faMeshMapper
             faBoundaryMeshMapper boundaryMap_;
 
 
-    // Private Member Functions
+public:
+
+    // Generated Methods
 
         //- No copy construct
         faMeshMapper(const faMeshMapper&) = delete;
@@ -119,8 +121,6 @@ class faMeshMapper
         void operator=(const faMeshMapper&) = delete;
 
 
-public:
-
     // Constructors
 
         //- Construct from components
diff --git a/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.C b/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.C
index 569a2c02f38bd35ec80dde76f64c0fb8cc0615d5..69aa3177f6611f0f5e30a093aceb88e8ab24a5e2 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.C
+++ b/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.C
@@ -26,11 +26,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "faPatchMapper.H"
-#include "faPatch.H"
-#include "faBoundaryMesh.H"
-#include "faMesh.H"
 #include "mapPolyMesh.H"
-#include "faceMapper.H"
 #include "demandDrivenData.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
@@ -47,7 +43,7 @@ void Foam::faPatchMapper::calcAddressing() const
     // Compatibility change  HJ, 12/Aug/2017
     hasUnmapped_ = false;
 
-    directAddrPtr_ = new labelList(patch_.size(), Zero);
+    directAddrPtr_ = std::make_unique<labelList>(patch_.size(), Foam::zero{});
     labelList& addr = *directAddrPtr_;
 
     // Make a map of old edgeFaces, giving edge index in patch given the new
@@ -90,7 +86,7 @@ void Foam::faPatchMapper::calcAddressing() const
 
 void Foam::faPatchMapper::clearOut()
 {
-    deleteDemandDrivenData(directAddrPtr_);
+    directAddrPtr_.reset(nullptr);
     hasUnmapped_ = false;
 }
 
@@ -107,8 +103,7 @@ Foam::faPatchMapper::faPatchMapper
     mpm_(mpm),
     sizeBeforeMapping_(patch.size()),
     oldEdgeFaces_(patch.edgeFaces()),
-    hasUnmapped_(false),
-    directAddrPtr_(nullptr)
+    hasUnmapped_(false)
 {}
 
 
diff --git a/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.H b/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.H
index 764ecd34a449c0d40118a000949a5a187b81f0c9..b27bd6874dfe56bd22cf6bf8ad3284c39dbfc1b9 100644
--- a/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.H
+++ b/src/finiteArea/faMesh/faMeshMapper/faPatchMapper.H
@@ -45,7 +45,6 @@ SourceFiles
 #include "faPatchFieldMapper.H"
 #include "faceMapper.H"
 #include "faPatch.H"
-#include "primitiveFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -64,7 +63,7 @@ class faPatchMapper
 :
     public faPatchFieldMapper
 {
-    // Private data
+    // Private Data
 
         //- Reference to patch
         const faPatch& patch_;
@@ -84,18 +83,11 @@ class faPatchMapper
         mutable bool hasUnmapped_;
 
         //- Direct addressing
-        mutable labelList* directAddrPtr_;
+        mutable std::unique_ptr<labelList> directAddrPtr_;
 
 
     // Private Member Functions
 
-        //- No copy construct
-        faPatchMapper(const faPatchMapper&) = delete;
-
-        //- No copy assignment
-        void operator=(const faPatchMapper&) = delete;
-
-
         //- Calculate addressing for mapping with inserted cells
         void calcAddressing() const;
 
@@ -105,6 +97,15 @@ class faPatchMapper
 
 public:
 
+    // Generated Methods
+
+        //- No copy construct
+        faPatchMapper(const faPatchMapper&) = delete;
+
+        //- No copy assignment
+        void operator=(const faPatchMapper&) = delete;
+
+
     //- Construct from mappers
     faPatchMapper
     (
diff --git a/src/finiteArea/faMesh/faMeshSubset/faMeshSubset.H b/src/finiteArea/faMesh/faMeshSubset/faMeshSubset.H
index 0617e7e7d6a9ebc32a0c640cb8db5c66f5c6e43b..3c4c3b217f9e9becdc993992ba3b0c412f4328cb 100644
--- a/src/finiteArea/faMesh/faMeshSubset/faMeshSubset.H
+++ b/src/finiteArea/faMesh/faMeshSubset/faMeshSubset.H
@@ -102,12 +102,6 @@ protected:
         //- FatalError if subset has not been performed
         bool checkHasSubMesh() const;
 
-        //- No copy construct
-        faMeshSubset(const faMeshSubset&) = delete;
-
-        //- No copy assignment
-        void operator=(const faMeshSubset&) = delete;
-
 
 public:
 
@@ -116,6 +110,14 @@ public:
         //- Name for exposed internal edges (default: oldInternalEdges)
         static word exposedPatchName;
 
+    // Generated Methods
+
+        //- No copy construct
+        faMeshSubset(const faMeshSubset&) = delete;
+
+        //- No copy assignment
+        void operator=(const faMeshSubset&) = delete;
+
 
     // Constructors
 
diff --git a/src/finiteArea/faMesh/faMeshTools/faMeshTools.C b/src/finiteArea/faMesh/faMeshTools/faMeshTools.C
index d9a346a52d1b97ca005ed5ed4c2b2d2695e5a8c7..0154e9929801ec02a2bdf74dc15147a48a5d47b6 100644
--- a/src/finiteArea/faMesh/faMeshTools/faMeshTools.C
+++ b/src/finiteArea/faMesh/faMeshTools/faMeshTools.C
@@ -144,7 +144,7 @@ Foam::faMeshTools::newMesh
     IOobject cmptIO(meshIO, "faceLabels", meshSubDir);
     cmptIO.readOpt(IOobject::MUST_READ);
     cmptIO.writeOpt(IOobject::NO_WRITE);
-    cmptIO.registerObject(false);
+    cmptIO.registerObject(IOobject::NO_REGISTER);
 
 
     // Check who has a mesh
diff --git a/src/finiteArea/faMesh/faMeshTopology.C b/src/finiteArea/faMesh/faMeshTopology.C
index 9c85727b5a143c3929963665a2d52a84b9fe30d8..c9dbb6b130bcd22fb109b77986cc46b39eda64a5 100644
--- a/src/finiteArea/faMesh/faMeshTopology.C
+++ b/src/finiteArea/faMesh/faMeshTopology.C
@@ -849,9 +849,10 @@ void Foam::faMesh::setBoundaryConnections
             << abort(FatalError);
     }
 
-    bndConnectPtr_.reset
+    bndConnectPtr_ = std::make_unique<List<labelPair>>
     (
-        new List<labelPair>(nBoundaryEdges, labelPair(-1,-1))
+        nBoundaryEdges,
+        labelPair(-1,-1)
     );
     auto& bndConnect = *bndConnectPtr_;
 
@@ -989,7 +990,7 @@ const Foam::faMeshBoundaryHalo& Foam::faMesh::boundaryHaloMap() const
 {
     if (!haloMapPtr_)
     {
-        haloMapPtr_.reset(new faMeshBoundaryHalo(*this));
+        haloMapPtr_ = std::make_unique<faMeshBoundaryHalo>(*this);
     }
 
     return *haloMapPtr_;
@@ -1022,8 +1023,8 @@ void Foam::faMesh::calcHaloFaceGeometry() const
 
     const labelList& inputFaceIds = halo.inputMeshFaces();
 
-    haloFaceCentresPtr_.reset(new pointField);
-    haloFaceNormalsPtr_.reset(new vectorField);
+    haloFaceCentresPtr_ = std::make_unique<pointField>();
+    haloFaceNormalsPtr_ = std::make_unique<vectorField>();
 
     auto& centres = *haloFaceCentresPtr_;
     auto& normals = *haloFaceNormalsPtr_;
diff --git a/src/finiteArea/faMesh/faPatches/constraint/cyclic/cyclicFaPatch.C b/src/finiteArea/faMesh/faPatches/constraint/cyclic/cyclicFaPatch.C
index f513163190145ed34b40a783942c640bc9f83084..5d0ffcb436fe3931b4b9406c2f6c9eca5d3aa56b 100644
--- a/src/finiteArea/faMesh/faPatches/constraint/cyclic/cyclicFaPatch.C
+++ b/src/finiteArea/faMesh/faPatches/constraint/cyclic/cyclicFaPatch.C
@@ -27,10 +27,8 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "cyclicFaPatch.H"
-#include "coupledPolyPatch.H"
 #include "addToRunTimeSelectionTable.H"
 #include "transform.H"
-#include "faMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/faMesh/faPatches/constraint/processor/processorFaPatch.C b/src/finiteArea/faMesh/faPatches/constraint/processor/processorFaPatch.C
index 340403498092bb9e6d87946965d37881a31cd940..c60a08a0ba62a8f41d448e5badbf6e170a90161a 100644
--- a/src/finiteArea/faMesh/faPatches/constraint/processor/processorFaPatch.C
+++ b/src/finiteArea/faMesh/faPatches/constraint/processor/processorFaPatch.C
@@ -30,7 +30,6 @@ License
 #include "processorPolyPatch.H"  // For newName()
 #include "addToRunTimeSelectionTable.H"
 #include "transformField.H"
-#include "faBoundaryMesh.H"
 #include "faMesh.H"
 #include "globalMeshData.H"
 
diff --git a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C
index c6dc0755051ef5a3b03993ca1c8b7fe51d4260c7..8c8e70e661dfbc13f88864bdc3f3a1d224f6022e 100644
--- a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C
+++ b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C
@@ -28,9 +28,6 @@ License
 
 #include "wedgeFaPatch.H"
 #include "addToRunTimeSelectionTable.H"
-#include "faBoundaryMesh.H"
-#include "wedgePolyPatch.H"
-#include "polyMesh.H"
 #include "faMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteArea/faMesh/faPatches/faPatch/faPatch.C b/src/finiteArea/faMesh/faPatches/faPatch/faPatch.C
index 39c1627d59be1b6ef8775c45d46869f2d8a71bb8..735b9b2224ba3ad7bb9ed176939857ab71803488 100644
--- a/src/finiteArea/faMesh/faPatches/faPatch/faPatch.C
+++ b/src/finiteArea/faMesh/faPatches/faPatch/faPatch.C
@@ -105,10 +105,7 @@ Foam::faPatch::faPatch
     patchIdentifier(name, index),
     labelList(edgeLabels),
     nbrPolyPatchId_(nbrPolyPatchi),
-    boundaryMesh_(bm),
-    edgeFacesPtr_(nullptr),
-    pointLabelsPtr_(nullptr),
-    pointEdgesPtr_(nullptr)
+    boundaryMesh_(bm)
 {
     if (constraintType(patchType))
     {
@@ -129,10 +126,7 @@ Foam::faPatch::faPatch
     patchIdentifier(name, dict, index),
     labelList(dict.get<labelList>("edgeLabels")),
     nbrPolyPatchId_(dict.get<label>("ngbPolyPatchIndex")),
-    boundaryMesh_(bm),
-    edgeFacesPtr_(nullptr),
-    pointLabelsPtr_(nullptr),
-    pointEdgesPtr_(nullptr)
+    boundaryMesh_(bm)
 {
     if (constraintType(patchType))
     {
@@ -153,10 +147,7 @@ Foam::faPatch::faPatch
     patchIdentifier(p, index),
     labelList(edgeLabels),
     nbrPolyPatchId_(p.nbrPolyPatchId_),
-    boundaryMesh_(bm),
-    edgeFacesPtr_(nullptr),
-    pointLabelsPtr_(nullptr),
-    pointEdgesPtr_(nullptr)
+    boundaryMesh_(bm)
 {}
 
 
@@ -331,7 +322,7 @@ void Foam::faPatch::calcPointLabels() const
     }
 
     // Transfer to plain list (reuse storage)
-    pointLabelsPtr_.reset(new labelList(std::move(dynEdgePoints)));
+    pointLabelsPtr_ = std::make_unique<labelList>(std::move(dynEdgePoints));
 
     /// const auto& edgePoints = *pointLabelsPtr_;
     ///
@@ -381,7 +372,7 @@ void Foam::faPatch::calcPointEdges() const
     }
 
     // Flatten to regular list
-    pointEdgesPtr_.reset(new labelListList(edgePoints.size()));
+    pointEdgesPtr_ = std::make_unique<labelListList>(edgePoints.size());
     auto& pEdges = *pointEdgesPtr_;
 
     forAll(pEdges, pointi)
@@ -441,12 +432,9 @@ const Foam::labelUList& Foam::faPatch::edgeFaces() const
 {
     if (!edgeFacesPtr_)
     {
-        edgeFacesPtr_.reset
+        edgeFacesPtr_ = std::make_unique<labelList::subList>
         (
-            new labelList::subList
-            (
-                patchSlice(boundaryMesh().mesh().edgeOwner())
-            )
+            patchSlice(boundaryMesh().mesh().edgeOwner())
         );
     }
 
@@ -520,11 +508,9 @@ void Foam::faPatch::makeDeltaCoeffs(scalarField& dc) const
 
 void Foam::faPatch::makeCorrectionVectors(vectorField& k) const
 {
-    vectorField unitDelta(delta()/mag(delta()));
-    vectorField edgeNormMag(edgeNormals()/mag(edgeNormals()));
-    scalarField dn(edgeNormals() & delta());
+    const vectorField unitDelta(delta()/mag(delta()));
 
-    k = edgeNormMag - (scalar(1)/(unitDelta & edgeNormMag))*unitDelta;
+    k = edgeNormals() - (scalar(1)/(unitDelta & edgeNormals()))*unitDelta;
 }
 
 
diff --git a/src/finiteArea/faSolution/faSolution.H b/src/finiteArea/faSolution/faSolution.H
index ded55b74311ae32b6c73c4816c6a97d6e962b65b..c3e4772b0d3d67e1602ee2db14481290c26f7296 100644
--- a/src/finiteArea/faSolution/faSolution.H
+++ b/src/finiteArea/faSolution/faSolution.H
@@ -61,11 +61,13 @@ class faSolution
 {
 public:
 
-    //- No copy construct
-    faSolution(const faSolution&) = delete;
+    // Generated Methods
 
-    //- No copy assignment
-    void operator=(const faSolution&) = delete;
+        //- No copy construct
+        faSolution(const faSolution&) = delete;
+
+        //- No copy assignment
+        void operator=(const faSolution&) = delete;
 
 
     // Constructors
diff --git a/src/finiteArea/fields/areaFields/areaFields.H b/src/finiteArea/fields/areaFields/areaFields.H
index eedec105a2fd1129dba7094370c1adf391a7c59f..22ce54161aacb38f32016c051a79d34a1e4813c4 100644
--- a/src/finiteArea/fields/areaFields/areaFields.H
+++ b/src/finiteArea/fields/areaFields/areaFields.H
@@ -47,7 +47,6 @@ SourceFiles
 #include "faMesh.H"
 #include "faPatchFields.H"
 #include "areaFieldsFwd.H"
-#include "calculatedFaPatchFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/fields/edgeFields/edgeFields.H b/src/finiteArea/fields/edgeFields/edgeFields.H
index 974dfc7d0a984e3eb117ff6e975d9f55f894abca..73c95fb2d7adaca1d86e7e0a1619ec93a18ca2dd 100644
--- a/src/finiteArea/fields/edgeFields/edgeFields.H
+++ b/src/finiteArea/fields/edgeFields/edgeFields.H
@@ -48,7 +48,6 @@ SourceFiles
 #include "faMesh.H"
 #include "faePatchFields.H"
 #include "edgeFieldsFwd.H"
-#include "calculatedFaePatchFields.H"
 
 #endif
 
diff --git a/src/finiteArea/fields/faPatchFields/constraint/cyclic/cyclicFaPatchField.H b/src/finiteArea/fields/faPatchFields/constraint/cyclic/cyclicFaPatchField.H
index 5ac2a891c5ea2bf8190539a59cd8ae3562ce024f..7a6f8e158cdaded6a22266c391326503fe454aee 100644
--- a/src/finiteArea/fields/faPatchFields/constraint/cyclic/cyclicFaPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/constraint/cyclic/cyclicFaPatchField.H
@@ -68,7 +68,7 @@ class cyclicFaPatchField
         const cyclicFaPatch& cyclicPatch_;
 
 
-    // Private member functions
+    // Private Member Functions
 
         //- Return neighbour side field given internal fields
         template<class Type2>
diff --git a/src/finiteArea/fields/faPatchFields/faPatchField/faPatchFieldMapperPatchRef.H b/src/finiteArea/fields/faPatchFields/faPatchField/faPatchFieldMapperPatchRef.H
index fc0bb216a62ec85f678a7892863ef767bf7e70e5..ba6e52aa05e69fb32c331dae1e3cd52244aad5dd 100644
--- a/src/finiteArea/fields/faPatchFields/faPatchField/faPatchFieldMapperPatchRef.H
+++ b/src/finiteArea/fields/faPatchFields/faPatchField/faPatchFieldMapperPatchRef.H
@@ -48,7 +48,7 @@ class faPatchFieldMapperPatchRef
 :
     public faPatchFieldMapper
 {
-    // Private data
+    // Private Data
 
         const faPatch& sourcePatch_;
         const faPatch& targetPatch_;
diff --git a/src/finiteArea/fields/faePatchFields/constraint/cyclic/cyclicFaePatchField.H b/src/finiteArea/fields/faePatchFields/constraint/cyclic/cyclicFaePatchField.H
index 3993605ab30098b932e650006a6b2c22bf56f058..77dd9189186ce5351331b0e6947dee7e68254102 100644
--- a/src/finiteArea/fields/faePatchFields/constraint/cyclic/cyclicFaePatchField.H
+++ b/src/finiteArea/fields/faePatchFields/constraint/cyclic/cyclicFaePatchField.H
@@ -59,7 +59,7 @@ class cyclicFaePatchField
 :
     public coupledFaePatchField<Type>
 {
-    // Private data
+    // Private Data
 
         //- Local reference cast into the cyclic patch
         const cyclicFaPatch& cyclicPatch_;
diff --git a/src/finiteArea/finiteArea/convectionSchemes/faConvectionScheme/faConvectionScheme.H b/src/finiteArea/finiteArea/convectionSchemes/faConvectionScheme/faConvectionScheme.H
index ae2673c8fc6a9d1e9382d42b94747f9105091436..cb882d1206900817062b8018ce35c01103b2d11e 100644
--- a/src/finiteArea/finiteArea/convectionSchemes/faConvectionScheme/faConvectionScheme.H
+++ b/src/finiteArea/finiteArea/convectionSchemes/faConvectionScheme/faConvectionScheme.H
@@ -37,10 +37,8 @@ SourceFiles
 #ifndef faConvectionScheme_H
 #define faConvectionScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -48,6 +46,7 @@ SourceFiles
 namespace Foam
 {
 
+// Forward Declarations
 template<class Type>
 class faMatrix;
 
@@ -67,20 +66,12 @@ class convectionScheme
 :
     public refCount
 {
-    // Private data
+    // Private Data
 
+        //- Reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        convectionScheme(const convectionScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const convectionScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -99,6 +90,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        convectionScheme(const convectionScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const convectionScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh, flux and Istream
@@ -130,10 +130,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const
-        {
-            return mesh_;
-        }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         virtual tmp<GeometricField<Type, faePatchField, edgeMesh>> flux
         (
diff --git a/src/finiteArea/finiteArea/convectionSchemes/gaussFaConvectionScheme/gaussFaConvectionScheme.H b/src/finiteArea/finiteArea/convectionSchemes/gaussFaConvectionScheme/gaussFaConvectionScheme.H
index be22ae9dbc1c689226ee67302eed430d168ee2b1..b3b46da0f96a395ea97364839d9f9e70e50375f7 100644
--- a/src/finiteArea/finiteArea/convectionSchemes/gaussFaConvectionScheme/gaussFaConvectionScheme.H
+++ b/src/finiteArea/finiteArea/convectionSchemes/gaussFaConvectionScheme/gaussFaConvectionScheme.H
@@ -60,12 +60,19 @@ class gaussConvectionScheme
 :
     public fa::convectionScheme<Type>
 {
-    // Private data
+    // Private Data
 
+        //- Edge-interpolation scheme
         tmp<edgeInterpolationScheme<Type>> tinterpScheme_;
 
 
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("Gauss");
+
+
+    // Generated Methods
 
         //- No copy construct
         gaussConvectionScheme(const gaussConvectionScheme&) = delete;
@@ -74,12 +81,6 @@ class gaussConvectionScheme
         void operator=(const gaussConvectionScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("Gauss");
-
-
     // Constructors
 
         //- Construct from flux and interpolation scheme
diff --git a/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.C b/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.C
index 7327de14f5d74fcb8af0bbddcd6c437f125843a1..aeca2e05161f8d0fe3d2f0668ea26baaccdafb10 100644
--- a/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.C
+++ b/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "EulerFaD2dt2Scheme.H"
-#include "facDiv.H"
 #include "faMatrices.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -72,21 +71,21 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
     scalar coefft   = (deltaT + deltaT0)/(2*deltaT);
     scalar coefft00 = (deltaT + deltaT0)/(2*deltaT0);
 
-    IOobject d2dt2IOobject
+    const IOobject d2dt2IOobject
     (
-        "d2dt2("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "d2dt2("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
     {
-        scalar halfRdeltaT2 = rDeltaT2.value()/2.0;
+        scalar halfRdeltaT2 = 0.5*rDeltaT2.value();
 
-        scalarField SS0 = mesh().S() + mesh().S0();
-        scalarField S0S00 = mesh().S0() + mesh().S00();
+        scalarField SS0(mesh().S() + mesh().S0());
+        scalarField S0S00(mesh().S0() + mesh().S00());
 
         tmp<GeometricField<Type, faPatchField, areaMesh>> tdt2dt2
         (
@@ -131,13 +130,13 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
     dimensionedScalar rDeltaT2 =
         4.0/sqr(mesh().time().deltaT() + mesh().time().deltaT0());
 
-    IOobject d2dt2IOobject
+    const IOobject d2dt2IOobject
     (
-        "d2dt2("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "d2dt2("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -149,10 +148,10 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
 
     if (mesh().moving())
     {
-        scalar halfRdeltaT2 = rDeltaT2.value()/2.0;
+        scalar halfRdeltaT2 = 0.5*rDeltaT2.value();
 
-        scalarField SS0 = mesh().S() + mesh().S0();
-        scalarField S0S00 = mesh().S0() + mesh().S00();
+        scalarField SS0(mesh().S() + mesh().S0());
+        scalarField S0S00(mesh().S0() + mesh().S00());
 
         return tmp<GeometricField<Type, faPatchField, areaMesh>>
         (
@@ -209,13 +208,13 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
     dimensionedScalar rDeltaT2 =
         4.0/sqr(mesh().time().deltaT() + mesh().time().deltaT0());
 
-    IOobject d2dt2IOobject
+    const IOobject d2dt2IOobject
     (
-        "d2dt2("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "d2dt2("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -229,13 +228,15 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
     {
         scalar halfRdeltaT2 = 0.5*rDeltaT2.value();
 
-        scalarField SS0rhoRho0 =
-            (mesh().S() + mesh().S0())
-           *rho.value();
+        scalarField SS0rhoRho0
+        (
+            (mesh().S() + mesh().S0())*rho.value()
+        );
 
-        scalarField S0S00rho0Rho00 =
-            (mesh().S0() + mesh().S00())
-           *rho.value();
+        scalarField S0S00rho0Rho00
+        (
+            (mesh().S0() + mesh().S00())*rho.value()
+        );
 
         return tmp<GeometricField<Type, faPatchField, areaMesh>>
         (
@@ -294,13 +295,13 @@ EulerFaD2dt2Scheme<Type>::facD2dt2
     dimensionedScalar rDeltaT2 =
         4.0/sqr(mesh().time().deltaT() + mesh().time().deltaT0());
 
-    IOobject d2dt2IOobject
+    const IOobject d2dt2IOobject
     (
-        "d2dt2("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "d2dt2("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -490,7 +491,6 @@ EulerFaD2dt2Scheme<Type>::famD2dt2
         scalar halfRdeltaT2 = 0.5*rDeltaT2;
 
         scalarField SS0(mesh().S() + mesh().S0());
-
         scalarField S0S00(mesh().S0() + mesh().S00());
 
         fam.diag() = rho.value()*(coefft*halfRdeltaT2)*SS0;
diff --git a/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.H b/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.H
index f25ca65a793220c7c685e88ce464e6ddc116c35c..584114c2fa4a61fd84b6b7a5aa0d59edb1abd104 100644
--- a/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.H
+++ b/src/finiteArea/finiteArea/d2dt2Schemes/EulerFaD2dt2Scheme/EulerFaD2dt2Scheme.H
@@ -67,12 +67,6 @@ class EulerFaD2dt2Scheme
         //- Return the previous time-step
         scalar deltaT0_() const;
 
-        //- No copy construct
-        EulerFaD2dt2Scheme(const EulerFaD2dt2Scheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const EulerFaD2dt2Scheme&) = delete;
-
 
 public:
 
@@ -80,6 +74,15 @@ public:
     TypeName("Euler");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        EulerFaD2dt2Scheme(const EulerFaD2dt2Scheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const EulerFaD2dt2Scheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.C b/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.C
index 2f33acefcf46fbd8f1dc91f47bfbf3d2e13c2648..76a5c8b615acba6505cd5d2ad9f7487557532438 100644
--- a/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.C
+++ b/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.C
@@ -24,13 +24,9 @@ License
     You should have received a copy of the GNU General Public License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
-Description
-    Abstract base class for finite area d2dt2 schemes.
-
 \*---------------------------------------------------------------------------*/
 
 #include "fa.H"
-#include "HashTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.H b/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.H
index 1b679b5f7ea232a29ceb48d522aab4ba2cdb9198..9d040c4062fc1db43fd9eae057cf99227d610ec2 100644
--- a/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.H
+++ b/src/finiteArea/finiteArea/d2dt2Schemes/faD2dt2Scheme/faD2dt2Scheme.H
@@ -37,11 +37,9 @@ SourceFiles
 #ifndef faD2dt2Scheme_H
 #define faD2dt2Scheme_H
 
-#include "tmp.H"
 #include "dimensionedType.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -49,6 +47,7 @@ SourceFiles
 namespace Foam
 {
 
+// Forward Declarations
 template<class Type>
 class faMatrix;
 
@@ -68,23 +67,14 @@ class faD2dt2Scheme
 :
     public refCount
 {
-
 protected:
 
-    // Protected data
+    // Protected Data
 
+        //- Reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        faD2dt2Scheme(const faD2dt2Scheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const faD2dt2Scheme&) = delete;
-
-
 public:
 
     //- Runtime type information
@@ -103,6 +93,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        faD2dt2Scheme(const faD2dt2Scheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const faD2dt2Scheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -135,10 +134,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const
-        {
-            return mesh_;
-        }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         virtual tmp<GeometricField<Type, faPatchField, areaMesh>> facD2dt2
         (
diff --git a/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.C b/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.C
index 8b9c8e9fac29ddb157935cc5472399266879d0d6..3359014fe4bc3264b4c33d865cd1362c89f5198e 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.C
+++ b/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "EulerFaDdtScheme.H"
-#include "facDiv.H"
 #include "faMatrices.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -50,13 +49,13 @@ EulerFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -97,13 +96,13 @@ EulerFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     tmp<GeometricField<Type, faPatchField, areaMesh>> tdtdt0
@@ -135,13 +134,13 @@ EulerFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -188,13 +187,13 @@ EulerFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -235,13 +234,13 @@ EulerFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -288,13 +287,13 @@ EulerFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -337,13 +336,13 @@ EulerFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
@@ -394,13 +393,13 @@ EulerFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     if (mesh().moving())
diff --git a/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.H b/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.H
index 6d0d96c1405954c3589554ddf11e97e12a60913a..834cc62a23ed8072feaf224e37dd4a6b5e5c0083 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.H
+++ b/src/finiteArea/finiteArea/ddtSchemes/EulerFaDdtScheme/EulerFaDdtScheme.H
@@ -59,7 +59,13 @@ class EulerFaDdtScheme
 :
     public fa::faDdtScheme<Type>
 {
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("Euler");
+
+
+    // Generated Methods
 
         //- No copy construct
         EulerFaDdtScheme(const EulerFaDdtScheme&) = delete;
@@ -68,12 +74,6 @@ class EulerFaDdtScheme
         void operator=(const EulerFaDdtScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("Euler");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.C b/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.C
index 01c0576d719147358950f95db7768d6dd7e24de8..457e744df21b6d2b5d59f51fa8a1dd14455c1539 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.C
+++ b/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "backwardFaDdtScheme.H"
-#include "facDiv.H"
 #include "faMatrices.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -81,13 +80,13 @@ backwardFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -136,13 +135,13 @@ backwardFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -183,13 +182,13 @@ backwardFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -256,13 +255,13 @@ backwardFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -327,13 +326,13 @@ backwardFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -400,13 +399,13 @@ backwardFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -471,13 +470,13 @@ backwardFaDdtScheme<Type>::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -548,13 +547,13 @@ backwardFaDdtScheme<Type>::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
diff --git a/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.H b/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.H
index e2bff70518868c7725e05c45cb195c6bc8179898..54fcb89e4e99955df90209281b8f9372d254b2dc 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.H
+++ b/src/finiteArea/finiteArea/ddtSchemes/backwardFaDdtScheme/backwardFaDdtScheme.H
@@ -72,12 +72,6 @@ class backwardFaDdtScheme
         template<class GeoField>
         scalar deltaT0_(const GeoField&) const;
 
-        //- No copy construct
-        backwardFaDdtScheme(const backwardFaDdtScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const backwardFaDdtScheme&) = delete;
-
 
 public:
 
@@ -85,6 +79,15 @@ public:
     TypeName("backward");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        backwardFaDdtScheme(const backwardFaDdtScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const backwardFaDdtScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.C b/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.C
index b63446ae20b4094952fae2768f6486a9f23a57da..2e41f5289713b63596bf10c18be870734345f863 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.C
+++ b/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "boundedBackwardFaDdtScheme.H"
-#include "facDiv.H"
 #include "faMatrices.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -64,13 +63,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt
 
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -119,13 +118,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt0
 
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+dt.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+dt.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -164,13 +163,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -261,13 +260,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -356,13 +355,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -453,13 +452,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -548,13 +547,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
@@ -649,13 +648,13 @@ tmp<areaScalarField> boundedBackwardFaDdtScheme::facDdt0
 {
     dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
 
-    IOobject ddtIOobject
+    const IOobject ddtIOobject
     (
-        "ddt0("+rho.name()+','+vf.name()+')',
-        mesh().time().timeName(),
-        mesh().thisDb(),
-        IOobject::NO_READ,
-        IOobject::NO_WRITE
+        mesh().thisDb().newIOobject
+        (
+            "ddt0("+rho.name()+','+vf.name()+')',
+            { IOobject::REGISTER }
+        )
     );
 
     scalar deltaT = deltaT_();
diff --git a/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.H b/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.H
index 02163a746be1ac4a0befd31e91fc23df5e88df39..f778368530a17784fd1835fd6bfeb8fe35fc3b8e 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.H
+++ b/src/finiteArea/finiteArea/ddtSchemes/boundedBackwardFaDdtScheme/boundedBackwardFaDdtScheme.H
@@ -76,13 +76,19 @@ class boundedBackwardFaDdtScheme
             {
                 return GREAT;
             }
-            else
-            {
-                return deltaT0_();
-            }
+
+            return deltaT0_();
         }
 
 
+public:
+
+    //- Runtime type information
+    TypeName("boundedBackward");
+
+
+    // Generated Methods
+
         //- No copy construct
         boundedBackwardFaDdtScheme(const boundedBackwardFaDdtScheme&) = delete;
 
@@ -90,12 +96,6 @@ class boundedBackwardFaDdtScheme
         void operator=(const boundedBackwardFaDdtScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("boundedBackward");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.C b/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.C
index 9c18bf8f16cb844c3cb2406c95f68ef963eed936..d8f2c6550568cae43fe5da3a2082e9fc881654d0 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.C
+++ b/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.C
@@ -27,7 +27,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "fa.H"
-#include "HashTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.H b/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.H
index 3415c5332e504da32faec6b90b42d7897cfb043d..1cbaa58008fbe814dff19df2776cddc35a38132f 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.H
+++ b/src/finiteArea/finiteArea/ddtSchemes/faDdtScheme/faDdtScheme.H
@@ -37,11 +37,9 @@ SourceFiles
 #ifndef faDdtScheme_H
 #define faDdtScheme_H
 
-#include "tmp.H"
 #include "dimensionedType.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -49,6 +47,7 @@ SourceFiles
 namespace Foam
 {
 
+// Forward Declarations
 template<class Type>
 class faMatrix;
 
@@ -68,23 +67,14 @@ class faDdtScheme
 :
     public refCount
 {
-
 protected:
 
-    // Protected data
+    // Protected Data
 
+        //- Reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        faDdtScheme(const faDdtScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const faDdtScheme&) = delete;
-
-
 public:
 
     //- Runtime type information
@@ -103,6 +93,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        faDdtScheme(const faDdtScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const faDdtScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -135,10 +134,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const
-        {
-            return mesh_;
-        }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         virtual tmp<GeometricField<Type, faPatchField, areaMesh>> facDdt
         (
diff --git a/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.C b/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.C
index d430680d880aeecced441eb6fc6c7147a27bf460..c562a9b2401f63c55ba24dbd8b639de583da9590 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.C
+++ b/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.C
@@ -48,16 +48,13 @@ steadyStateFaDdtScheme<Type>::facDdt
     const dimensioned<Type> dt
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt("+dt.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt("+dt.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(dt.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        dt.dimensions()/dimTime
     );
 }
 
@@ -69,16 +66,13 @@ steadyStateFaDdtScheme<Type>::facDdt0
     const dimensioned<Type> dt
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt("+dt.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt("+dt.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(dt.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        dt.dimensions()/dimTime
     );
 }
 
@@ -90,16 +84,13 @@ steadyStateFaDdtScheme<Type>::facDdt
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt("+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt("+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        vf.dimensions()/dimTime
     );
 }
 
@@ -111,16 +102,13 @@ steadyStateFaDdtScheme<Type>::facDdt0
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt0("+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt0("+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        vf.dimensions()/dimTime
     );
 }
 
@@ -133,16 +121,13 @@ steadyStateFaDdtScheme<Type>::facDdt
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt("+rho.name()+','+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt("+rho.name()+','+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(rho.dimensions()*vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        rho.dimensions()*vf.dimensions()/dimTime
     );
 }
 
@@ -154,16 +139,13 @@ steadyStateFaDdtScheme<Type>::facDdt0
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt0("+rho.name()+','+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt0("+rho.name()+','+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(rho.dimensions()*vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        rho.dimensions()*vf.dimensions()/dimTime
     );
 }
 
@@ -176,16 +158,13 @@ steadyStateFaDdtScheme<Type>::facDdt
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt("+rho.name()+','+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt("+rho.name()+','+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(rho.dimensions()*vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        rho.dimensions()*vf.dimensions()/dimTime
     );
 }
 
@@ -198,16 +177,13 @@ steadyStateFaDdtScheme<Type>::facDdt0
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-    return tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    return GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "ddt0("+rho.name()+','+vf.name()+')',
-            mesh().time().timeName(),
-            mesh().thisDb()
-        ),
+        "ddt0("+rho.name()+','+vf.name()+')',
+        IOobject::REGISTER,
         mesh(),
-        dimensioned<Type>(rho.dimensions()*vf.dimensions()/dimTime, Zero)
+        Foam::zero{},
+        rho.dimensions()*vf.dimensions()/dimTime
     );
 }
 
diff --git a/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.H b/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.H
index af83dcc556cd5f9cbb8d02a01a00d7b45e7aefd9..48704d0d192c0b8f7ee6db32c2a78cdbd5ded426 100644
--- a/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.H
+++ b/src/finiteArea/finiteArea/ddtSchemes/steadyStateFaDdtScheme/steadyStateFaDdtScheme.H
@@ -58,7 +58,13 @@ class steadyStateFaDdtScheme
 :
     public fa::faDdtScheme<Type>
 {
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("steadyState");
+
+
+    // Generated Methods
 
         //- No copy construct
         steadyStateFaDdtScheme(const steadyStateFaDdtScheme&) = delete;
@@ -67,12 +73,6 @@ class steadyStateFaDdtScheme
         void operator=(const steadyStateFaDdtScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("steadyState");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.C b/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.C
index 6d85dfafd9b09ec162499269709a87872e4197c1..d2fdc7ca4340634e243c74356b0dcedf00bff7a6 100644
--- a/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.C
+++ b/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.C
@@ -27,8 +27,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "fa.H"
-#include "HashTable.H"
-#include "linearEdgeInterpolation.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.H b/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.H
index 47414a91231ad19cf6aff89bf50e02f4606b3131..8fac369c6aaad11c53f09f9a2f8959ab4870e8cc 100644
--- a/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.H
+++ b/src/finiteArea/finiteArea/divSchemes/faDivScheme/faDivScheme.H
@@ -38,11 +38,9 @@ SourceFiles
 #ifndef Foam_faDivScheme_H
 #define Foam_faDivScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
 #include "linearEdgeInterpolation.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -72,20 +70,13 @@ protected:
 
     // Protected Data
 
+        //- Reference to mesh
         const faMesh& mesh_;
 
+        //- Edge interpolation scheme
         tmp<edgeInterpolationScheme<Type>> tinterpScheme_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        divScheme(const divScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const divScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -100,6 +91,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        divScheme(const divScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const divScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -148,10 +148,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const
-        {
-            return mesh_;
-        }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         virtual tmp
         <
diff --git a/src/finiteArea/finiteArea/divSchemes/gaussFaDivScheme/gaussFaDivScheme.H b/src/finiteArea/finiteArea/divSchemes/gaussFaDivScheme/gaussFaDivScheme.H
index 98e834128fec5c4f7643625a0af22e8ab2c9598d..7217f80acc2506033cffe7acb5699569062b5a8d 100644
--- a/src/finiteArea/finiteArea/divSchemes/gaussFaDivScheme/gaussFaDivScheme.H
+++ b/src/finiteArea/finiteArea/divSchemes/gaussFaDivScheme/gaussFaDivScheme.H
@@ -59,7 +59,13 @@ class gaussDivScheme
 :
     public fa::divScheme<Type>
 {
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("Gauss");
+
+
+    // Generated Methods
 
         //- No copy construct
         gaussDivScheme(const gaussDivScheme&) = delete;
@@ -68,12 +74,6 @@ class gaussDivScheme
         void operator=(const gaussDivScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("Gauss");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/faSchemes/faSchemes.H b/src/finiteArea/finiteArea/faSchemes/faSchemes.H
index 8647069ad3c13e8883eacda1890341bc345f105b..0d666c3c968ca44bc476c99c96f48512b0c090d4 100644
--- a/src/finiteArea/finiteArea/faSchemes/faSchemes.H
+++ b/src/finiteArea/finiteArea/faSchemes/faSchemes.H
@@ -61,11 +61,13 @@ class faSchemes
 {
 public:
 
-    //- No copy construct
-    faSchemes(const faSchemes&) = delete;
+    // Generated Methods
 
-    //- No copy assignment
-    void operator=(const faSchemes&) = delete;
+        //- No copy construct
+        faSchemes(const faSchemes&) = delete;
+
+        //- No copy assignment
+        void operator=(const faSchemes&) = delete;
 
 
     // Constructors
diff --git a/src/finiteArea/finiteArea/fac/facAverage.H b/src/finiteArea/finiteArea/fac/facAverage.H
index 5ff0a1993af14114a13ccc8d68d649e674c53d12..1aac0cdb2728235835baa8b8c247ae3dfe5e4f8f 100644
--- a/src/finiteArea/finiteArea/fac/facAverage.H
+++ b/src/finiteArea/finiteArea/fac/facAverage.H
@@ -34,7 +34,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facAverage_H
 #define facAverage_H
 
diff --git a/src/finiteArea/finiteArea/fac/facDdt.H b/src/finiteArea/finiteArea/fac/facDdt.H
index 64c6d35d7605cf9bea99fbf7bc2b2e54f9e0e5af..2b9c872477b36a1673f6d4fcaaf655b1dcc0062f 100644
--- a/src/finiteArea/finiteArea/fac/facDdt.H
+++ b/src/finiteArea/finiteArea/fac/facDdt.H
@@ -37,7 +37,6 @@ Author
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facDdt_H
 #define facDdt_H
 
diff --git a/src/finiteArea/finiteArea/fac/facDiv.H b/src/finiteArea/finiteArea/fac/facDiv.H
index d98e2d4ca7b0e28ac0caf7d5f16fdcbcdbb9a237..b3f4ecadba7581ae4eaa51754c4849e9b819c635 100644
--- a/src/finiteArea/finiteArea/fac/facDiv.H
+++ b/src/finiteArea/finiteArea/fac/facDiv.H
@@ -34,7 +34,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facDiv_H
 #define facDiv_H
 
diff --git a/src/finiteArea/finiteArea/fac/facEdgeIntegrate.H b/src/finiteArea/finiteArea/fac/facEdgeIntegrate.H
index d7acc4231c2fcaa1a4c234416605770ce7965f94..b9a1d887c7a1ad498e7d24f591df599b6d9b2c76 100644
--- a/src/finiteArea/finiteArea/fac/facEdgeIntegrate.H
+++ b/src/finiteArea/finiteArea/fac/facEdgeIntegrate.H
@@ -35,7 +35,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facEdgeIntegrate_H
 #define facEdgeIntegrate_H
 
diff --git a/src/finiteArea/finiteArea/fac/facGrad.H b/src/finiteArea/finiteArea/fac/facGrad.H
index 29c9d4ef0c8b4d3d864be1625702014bac3d1f1b..89e60708343309da5288feacb7460ecad3b7f8e4 100644
--- a/src/finiteArea/finiteArea/fac/facGrad.H
+++ b/src/finiteArea/finiteArea/fac/facGrad.H
@@ -34,7 +34,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facGrad_H
 #define facGrad_H
 
diff --git a/src/finiteArea/finiteArea/fac/facLaplacian.H b/src/finiteArea/finiteArea/fac/facLaplacian.H
index 0e29d7c97dbdb274a6c5845f222f21e6afa57c98..53697dcdce6a9461904fab99a9b53c7568824a2b 100644
--- a/src/finiteArea/finiteArea/fac/facLaplacian.H
+++ b/src/finiteArea/finiteArea/fac/facLaplacian.H
@@ -34,7 +34,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facLaplacian_H
 #define facLaplacian_H
 
diff --git a/src/finiteArea/finiteArea/fac/facLnGrad.H b/src/finiteArea/finiteArea/fac/facLnGrad.H
index 8a136ed844aab1d6a7eeba5bfb4e7bca9c0bc6a7..cfc3cbb11182a64dafbc14e0d9bfe31693fcf993 100644
--- a/src/finiteArea/finiteArea/fac/facLnGrad.H
+++ b/src/finiteArea/finiteArea/fac/facLnGrad.H
@@ -34,7 +34,6 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-
 #ifndef facLnGrad_H
 #define facLnGrad_H
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.C b/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.C
index 597355f7147a9c85d94e382339238fbefcf1b15c..e008472d0b464883efb47cff0a988c71b67723d8 100644
--- a/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.C
+++ b/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.C
@@ -27,7 +27,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "fa.H"
-#include "HashTable.H"
 #include "objectRegistry.H"
 #include "solution.H"
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.H b/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.H
index e6f2bac9c1eb773d2885a0ce87dead960037651b..9cd17ef905eca93c73fc1587ef147f3e8d88c13f 100644
--- a/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.H
+++ b/src/finiteArea/finiteArea/gradSchemes/faGradScheme/faGradScheme.H
@@ -39,17 +39,15 @@ SourceFiles
 #ifndef faGradScheme_H
 #define faGradScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
-#include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
 
+// Forward Declarations
 class faMesh;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -66,20 +64,12 @@ class gradScheme
 :
     public refCount
 {
-    // Private data
+    // Private Data
 
+        //- Reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        gradScheme(const gradScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const gradScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -94,6 +84,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        gradScheme(const gradScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const gradScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -120,7 +119,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const { return mesh_; }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         //- Calculate and return the grad of the given field.
         //  Used by grad either to recalculate the cached gradient when it is
diff --git a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.C b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.C
index af88fa2cf92cf63c90af1f84b4e978ec3b08a305..f83661c1bd05e2273a018bdc101827273fd1ab79 100644
--- a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.C
+++ b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.C
@@ -28,8 +28,6 @@ License
 
 #include "gaussFaGrad.H"
 #include "facGrad.H"
-#include "areaFields.H"
-#include "edgeFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.H b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.H
index 59fc08d91d46ff7e2b5f16808fdcbf86f5189d37..9b008cabed64610e0fb0fe8403b7f62f904cccd8 100644
--- a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.H
+++ b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrad.H
@@ -69,7 +69,13 @@ class gaussGrad
         tmp<edgeInterpolationScheme<Type>> tinterpScheme_;
 
 
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("Gauss");
+
+
+    // Generated Methods
 
         //- No copy construct
         gaussGrad(const gaussGrad&) = delete;
@@ -78,12 +84,6 @@ class gaussGrad
         void operator=(const gaussGrad&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("Gauss");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrads.C b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrads.C
index 7780036413cbe893b8139925aebb6645a0cdd522..479ec97c5ac1e45a6ce64f47ce8fb1fe141f2fb3 100644
--- a/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrads.C
+++ b/src/finiteArea/finiteArea/gradSchemes/gaussFaGrad/gaussFaGrads.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "gaussFaGrad.H"
-#include "faMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.C b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.C
index ea983b89750369520d4cd6eeb121964eac4786ff..118c60e9f2cd367e3b493a31ba36e86e5c8d3345 100644
--- a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.C
+++ b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.C
@@ -29,11 +29,6 @@ License
 #include "leastSquaresFaGrad.H"
 #include "leastSquaresFaVectors.H"
 #include "gaussFaGrad.H"
-#include "faMesh.H"
-#include "areaFaMesh.H"
-#include "edgeFaMesh.H"
-#include "GeometricField.H"
-#include "zeroGradientFaPatchField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -96,10 +91,10 @@ leastSquaresFaGrad<Type>::calcGrad
 
     forAll(own, edgei)
     {
-        label ownEdgeI = own[edgei];
-        label neiEdgeI = nei[edgei];
+        const label ownEdgeI = own[edgei];
+        const label neiEdgeI = nei[edgei];
 
-        Type deltaVsf = vsf[neiEdgeI] - vsf[ownEdgeI];
+        const Type deltaVsf(vsf[neiEdgeI] - vsf[ownEdgeI]);
 
         lsGrad[ownEdgeI] += ownLs[edgei]*deltaVsf;
         lsGrad[neiEdgeI] -= neiLs[edgei]*deltaVsf;
@@ -108,35 +103,23 @@ leastSquaresFaGrad<Type>::calcGrad
     // Boundary edges
     forAll(vsf.boundaryField(), patchi)
     {
-        const faePatchVectorField& patchOwnLs = ownLs.boundaryField()[patchi];
+        const faPatchField<Type>& bf = vsf.boundaryField()[patchi];
 
+        const Field<Type>& vsfp =
+        (
+            bf.coupled()
+          ? bf.patchNeighbourField().cref()
+          : const_cast<faPatchField<Type>&>(bf)
+        );
+
+        const faePatchVectorField& ownLsp = ownLs.boundaryField()[patchi];
         const labelUList& edgeFaces =
             lsGrad.boundaryField()[patchi].patch().edgeFaces();
 
-        if (vsf.boundaryField()[patchi].coupled())
-        {
-            Field<Type> neiVsf
-            (
-                vsf.boundaryField()[patchi].patchNeighbourField()
-            );
-
-            forAll(neiVsf, patchEdgeI)
-            {
-                lsGrad[edgeFaces[patchEdgeI]] +=
-                    patchOwnLs[patchEdgeI]
-                   *(neiVsf[patchEdgeI] - vsf[edgeFaces[patchEdgeI]]);
-            }
-        }
-        else
+        forAll(vsfp, pEdgei)
         {
-            const faPatchField<Type>& patchVsf = vsf.boundaryField()[patchi];
-
-            forAll(patchVsf, patchEdgeI)
-            {
-                lsGrad[edgeFaces[patchEdgeI]] +=
-                     patchOwnLs[patchEdgeI]
-                    *(patchVsf[patchEdgeI] - vsf[edgeFaces[patchEdgeI]]);
-            }
+            lsGrad[edgeFaces[pEdgei]] +=
+                ownLsp[pEdgei]*(vsfp[pEdgei] - vsf[edgeFaces[pEdgei]]);
         }
     }
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.H b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.H
index 1e3e518f76e9786bcf01da3ce8a2ff800cb44576..95612b12253399e84574b5c76509525ab2e746c5 100644
--- a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.H
+++ b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrad.H
@@ -62,7 +62,13 @@ class leastSquaresFaGrad
 :
     public fa::gradScheme<Type>
 {
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("leastSquares");
+
+
+    // Generated Methods
 
         //- No copy construct
         leastSquaresFaGrad(const leastSquaresFaGrad&) = delete;
@@ -71,12 +77,6 @@ class leastSquaresFaGrad
         void operator=(const leastSquaresFaGrad&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("leastSquares");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrads.C b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrads.C
index b593bbde114dedbde4c8f0d5b5a731230f839f62..04927b53994f99c2c84ff50943ef0156076cb709 100644
--- a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrads.C
+++ b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaGrads.C
@@ -25,7 +25,6 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "faMesh.H"
 #include "leastSquaresFaGrad.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.C b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.C
index 3421ea637968a7f2a22ed691b7494f15173d473f..f0718e17e182ead406236680cf5822aac5ee5c72 100644
--- a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.C
+++ b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.C
@@ -29,7 +29,6 @@ License
 #include "leastSquaresFaVectors.H"
 #include "edgeFields.H"
 #include "areaFields.H"
-#include "mapPolyMesh.H"
 #include "demandDrivenData.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -44,21 +43,10 @@ namespace Foam
 
 Foam::leastSquaresFaVectors::leastSquaresFaVectors(const faMesh& mesh)
 :
-    MeshObject<faMesh, Foam::MoveableMeshObject, leastSquaresFaVectors>(mesh),
-    pVectorsPtr_(nullptr),
-    nVectorsPtr_(nullptr)
+    MeshObject<faMesh, Foam::MoveableMeshObject, leastSquaresFaVectors>(mesh)
 {}
 
 
-// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
-
-Foam::leastSquaresFaVectors::~leastSquaresFaVectors()
-{
-    deleteDemandDrivenData(pVectorsPtr_);
-    deleteDemandDrivenData(nVectorsPtr_);
-}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::leastSquaresFaVectors::makeLeastSquaresVectors() const
@@ -67,7 +55,7 @@ void Foam::leastSquaresFaVectors::makeLeastSquaresVectors() const
         << "Constructing finite area (invDist) least square gradient vectors"
         << nl;
 
-    pVectorsPtr_ = new edgeVectorField
+    pVectorsPtr_ = std::make_unique<edgeVectorField>
     (
         IOobject
         (
@@ -83,7 +71,7 @@ void Foam::leastSquaresFaVectors::makeLeastSquaresVectors() const
     );
     auto& lsP = *pVectorsPtr_;
 
-    nVectorsPtr_ = new edgeVectorField
+    nVectorsPtr_ = std::make_unique<edgeVectorField>
     (
         IOobject
         (
@@ -237,8 +225,8 @@ bool Foam::leastSquaresFaVectors::movePoints()
     DebugInFunction
         << "Clearing least square data" << nl;
 
-    deleteDemandDrivenData(pVectorsPtr_);
-    deleteDemandDrivenData(nVectorsPtr_);
+    pVectorsPtr_.reset(nullptr);
+    nVectorsPtr_.reset(nullptr);
 
     return true;
 }
diff --git a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.H b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.H
index db963c6786fa5553dbd2c3011fb785b9f58f6df2..701dcf29aead100f6f3d3237791eee7b3af92f4d 100644
--- a/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.H
+++ b/src/finiteArea/finiteArea/gradSchemes/leastSquaresFaGrad/leastSquaresFaVectors.H
@@ -43,7 +43,6 @@ SourceFiles
 #include "MeshObject.H"
 #include "faMesh.H"
 #include "edgeFieldsFwd.H"
-#include "labelPair.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -58,14 +57,14 @@ class leastSquaresFaVectors
 :
     public MeshObject<faMesh, Foam::MoveableMeshObject, leastSquaresFaVectors>
 {
-    // Private data
+    // Private Data
 
         //- Least-squares gradient vectors
-        mutable edgeVectorField* pVectorsPtr_;
-        mutable edgeVectorField* nVectorsPtr_;
+        mutable std::unique_ptr<edgeVectorField> pVectorsPtr_;
+        mutable std::unique_ptr<edgeVectorField> nVectorsPtr_;
 
 
-    // Private member functions
+    // Private Member Functions
 
         //- Construct Least-squares gradient vectors
         void makeLeastSquaresVectors() const;
@@ -84,7 +83,7 @@ public:
 
 
     //- Destructor
-    virtual ~leastSquaresFaVectors();
+    virtual ~leastSquaresFaVectors() = default;
 
 
     // Member functions
diff --git a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrad.H b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrad.H
index 1d4ca927fdfe61cdfebb273941d144916ad0d75d..4eef13831fa8447716c2ebf5b90631af3c0ba0dd 100644
--- a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrad.H
+++ b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrad.H
@@ -66,6 +66,7 @@ class edgeLimitedGrad
 {
     // Private Data
 
+        //- Basic gradient scheme
         tmp<fa::gradScheme<Type>> basicGradScheme_;
 
         //- Limiter coefficient
@@ -83,6 +84,14 @@ class edgeLimitedGrad
         ) const;
 
 
+public:
+
+    //- RunTime type information
+    TypeName("edgeLimited");
+
+
+    // Generated Methods
+
         //- No copy construct
         edgeLimitedGrad(const edgeLimitedGrad&) = delete;
 
@@ -90,12 +99,6 @@ class edgeLimitedGrad
         void operator=(const edgeLimitedGrad&) = delete;
 
 
-public:
-
-    //- RunTime type information
-    TypeName("edgeLimited");
-
-
     // Constructors
 
         //- Construct from mesh and schemeData
diff --git a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrads.C b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrads.C
index d86270a326c1b718a69821a924142eb4dd4c2547..a68d4f63ec717ad2578af29e386c879b88dc9d5c 100644
--- a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrads.C
+++ b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/edgeLimitedFaGrad/edgeLimitedFaGrads.C
@@ -28,11 +28,6 @@ License
 
 #include "edgeLimitedFaGrad.H"
 #include "gaussFaGrad.H"
-#include "faMesh.H"
-#include "areaFaMesh.H"
-#include "edgeFaMesh.H"
-#include "areaFields.H"
-#include "fixedValueFaPatchFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -96,22 +91,22 @@ tmp<areaVectorField> edgeLimitedGrad<scalar>::calcGrad
     const areaVectorField& C = mesh.areaCentres();
     const edgeVectorField& Cf = mesh.edgeCentres();
 
-    // create limiter
+    // Create limiter field
     scalarField limiter(vsf.internalField().size(), 1.0);
 
-    scalar rk = (1.0/k_ - 1.0);
+    const scalar rk = (1.0/k_ - 1.0);
 
     forAll(owner, edgei)
     {
-        label own = owner[edgei];
-        label nei = neighbour[edgei];
+        const label own = owner[edgei];
+        const label nei = neighbour[edgei];
 
-        scalar vsfOwn = vsf[own];
-        scalar vsfNei = vsf[nei];
+        const scalar vsfOwn = vsf[own];
+        const scalar vsfNei = vsf[nei];
 
         scalar maxEdge = max(vsfOwn, vsfNei);
         scalar minEdge = min(vsfOwn, vsfNei);
-        scalar maxMinEdge = rk*(maxEdge - minEdge);
+        const scalar maxMinEdge = rk*(maxEdge - minEdge);
         maxEdge += maxMinEdge;
         minEdge -= maxMinEdge;
 
@@ -119,7 +114,8 @@ tmp<areaVectorField> edgeLimitedGrad<scalar>::calcGrad
         limitEdge
         (
             limiter[own],
-            maxEdge - vsfOwn, minEdge - vsfOwn,
+            maxEdge - vsfOwn,
+            minEdge - vsfOwn,
             (Cf[edgei] - C[own]) & g[own]
         );
 
@@ -127,67 +123,53 @@ tmp<areaVectorField> edgeLimitedGrad<scalar>::calcGrad
         limitEdge
         (
             limiter[nei],
-            maxEdge - vsfNei, minEdge - vsfNei,
+            maxEdge - vsfNei,
+            minEdge - vsfNei,
             (Cf[edgei] - C[nei]) & g[nei]
         );
     }
 
-    const areaScalarField::Boundary& bsf = vsf.boundaryField();
+    // Lambda expression to update limiter for boundary edges
+    auto updateLimiter = [&](const label patchi, const scalarField& fld) -> void
+    {
+        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
+        const vectorField& pCf = Cf.boundaryField()[patchi];
+
+        forAll(pOwner, edgei)
+        {
+            const label own = pOwner[edgei];
+
+            const scalar vsfOwn = vsf[own];
+            const scalar vsfNei = fld[edgei];
+
+            scalar maxEdge = max(vsfOwn, vsfNei);
+            scalar minEdge = min(vsfOwn, vsfNei);
+            const scalar maxMinEdge = rk*(maxEdge - minEdge);
+            maxEdge += maxMinEdge;
+            minEdge -= maxMinEdge;
+
+            limitEdge
+            (
+                limiter[own],
+                maxEdge - vsfOwn,
+                minEdge - vsfOwn,
+                (pCf[edgei] - C[own]) & g[own]
+            );
+        }
+    };
 
+    const areaScalarField::Boundary& bsf = vsf.boundaryField();
     forAll(bsf, patchi)
     {
         const faPatchScalarField& psf = bsf[patchi];
 
-        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
-        const vectorField& pCf = Cf.boundaryField()[patchi];
-
         if (psf.coupled())
         {
-            const scalarField psfNei(psf.patchNeighbourField());
-
-            forAll(pOwner, pEdgei)
-            {
-                label own = pOwner[pEdgei];
-
-                scalar vsfOwn = vsf[own];
-                scalar vsfNei = psfNei[pEdgei];
-
-                scalar maxEdge = max(vsfOwn, vsfNei);
-                scalar minEdge = min(vsfOwn, vsfNei);
-                scalar maxMinEdge = rk*(maxEdge - minEdge);
-                maxEdge += maxMinEdge;
-                minEdge -= maxMinEdge;
-
-                limitEdge
-                (
-                    limiter[own],
-                    maxEdge - vsfOwn, minEdge - vsfOwn,
-                    (pCf[pEdgei] - C[own]) & g[own]
-                );
-            }
+            updateLimiter(patchi, psf.patchNeighbourField());
         }
         else if (psf.fixesValue())
         {
-            forAll(pOwner, pEdgei)
-            {
-                label own = pOwner[pEdgei];
-
-                scalar vsfOwn = vsf[own];
-                scalar vsfNei = psf[pEdgei];
-
-                scalar maxEdge = max(vsfOwn, vsfNei);
-                scalar minEdge = min(vsfOwn, vsfNei);
-                scalar maxMinEdge = rk*(maxEdge - minEdge);
-                maxEdge += maxMinEdge;
-                minEdge -= maxMinEdge;
-
-                limitEdge
-                (
-                    limiter[own],
-                    maxEdge - vsfOwn, minEdge - vsfOwn,
-                    (pCf[pEdgei] - C[own]) & g[own]
-                );
-            }
+            updateLimiter(patchi, psf);
         }
     }
 
@@ -231,35 +213,33 @@ tmp<areaTensorField> edgeLimitedGrad<vector>::calcGrad
     const areaVectorField& C = mesh.areaCentres();
     const edgeVectorField& Cf = mesh.edgeCentres();
 
-    // create limiter
+    // Create limiter
     scalarField limiter(vvf.internalField().size(), 1.0);
 
-    scalar rk = (1.0/k_ - 1.0);
+    const scalar rk = (1.0/k_ - 1.0);
 
     forAll(owner, edgei)
     {
-        label own = owner[edgei];
-        label nei = neighbour[edgei];
-
-        vector vvfOwn = vvf[own];
-        vector vvfNei = vvf[nei];
+        const label own = owner[edgei];
+        const label nei = neighbour[edgei];
 
         // owner side
-        vector gradf = (Cf[edgei] - C[own]) & g[own];
+        vector gradf((Cf[edgei] - C[own]) & g[own]);
 
-        scalar vsfOwn = gradf & vvfOwn;
-        scalar vsfNei = gradf & vvfNei;
+        scalar vsfOwn = gradf & vvf[own];
+        scalar vsfNei = gradf & vvf[nei];
 
         scalar maxEdge = max(vsfOwn, vsfNei);
         scalar minEdge = min(vsfOwn, vsfNei);
-        scalar maxMinEdge = rk*(maxEdge - minEdge);
+        const scalar maxMinEdge = rk*(maxEdge - minEdge);
         maxEdge += maxMinEdge;
         minEdge -= maxMinEdge;
 
         limitEdge
         (
             limiter[own],
-            maxEdge - vsfOwn, minEdge - vsfOwn,
+            maxEdge - vsfOwn,
+            minEdge - vsfOwn,
             magSqr(gradf)
         );
 
@@ -267,8 +247,8 @@ tmp<areaTensorField> edgeLimitedGrad<vector>::calcGrad
         // neighbour side
         gradf = (Cf[edgei] - C[nei]) & g[nei];
 
-        vsfOwn = gradf & vvfOwn;
-        vsfNei = gradf & vvfNei;
+        vsfOwn = gradf & vvf[own];
+        vsfNei = gradf & vvf[nei];
 
         maxEdge = max(vsfOwn, vsfNei);
         minEdge = min(vsfOwn, vsfNei);
@@ -276,78 +256,57 @@ tmp<areaTensorField> edgeLimitedGrad<vector>::calcGrad
         limitEdge
         (
             limiter[nei],
-            maxEdge - vsfNei, minEdge - vsfNei,
+            maxEdge - vsfNei,
+            minEdge - vsfNei,
             magSqr(gradf)
         );
     }
 
 
-    const areaVectorField::Boundary& bvf = vvf.boundaryField();
-
-    forAll(bvf, patchi)
+    // Lambda expression to update limiter for boundary edges
+    auto updateLimiter = [&](const label patchi, const vectorField& fld) -> void
     {
-        const faPatchVectorField& psf = bvf[patchi];
-
         const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
         const vectorField& pCf = Cf.boundaryField()[patchi];
 
-        if (psf.coupled())
+        forAll(pOwner, edgei)
         {
-            const vectorField psfNei(psf.patchNeighbourField());
-
-            forAll(pOwner, pEdgei)
-            {
-                label own = pOwner[pEdgei];
-
-                vector vvfOwn = vvf[own];
-                vector vvfNei = psfNei[pEdgei];
-
-                vector gradf = (pCf[pEdgei] - C[own]) & g[own];
+            const label own = pOwner[edgei];
+
+            const vector gradf((pCf[edgei] - C[own]) & g[own]);
+
+            const scalar vsfOwn = gradf & vvf[own];
+            const scalar vsfNei = gradf & fld[edgei];
+
+            scalar maxEdge = max(vsfOwn, vsfNei);
+            scalar minEdge = min(vsfOwn, vsfNei);
+            const scalar maxMinEdge = rk*(maxEdge - minEdge);
+            maxEdge += maxMinEdge;
+            minEdge -= maxMinEdge;
+
+            limitEdge
+            (
+                limiter[own],
+                maxEdge - vsfOwn,
+                minEdge - vsfOwn,
+                magSqr(gradf)
+            );
+        }
+    };
 
-                scalar vsfOwn = gradf & vvfOwn;
-                scalar vsfNei = gradf & vvfNei;
 
-                scalar maxEdge = max(vsfOwn, vsfNei);
-                scalar minEdge = min(vsfOwn, vsfNei);
-                scalar maxMinEdge = rk*(maxEdge - minEdge);
-                maxEdge += maxMinEdge;
-                minEdge -= maxMinEdge;
+    const areaVectorField::Boundary& bvf = vvf.boundaryField();
+    forAll(bvf, patchi)
+    {
+        const faPatchVectorField& psf = bvf[patchi];
 
-                limitEdge
-                (
-                    limiter[own],
-                    maxEdge - vsfOwn, minEdge - vsfOwn,
-                    magSqr(gradf)
-                );
-            }
+        if (psf.coupled())
+        {
+            updateLimiter(patchi, psf.patchNeighbourField());
         }
         else if (psf.fixesValue())
         {
-            forAll(pOwner, pEdgei)
-            {
-                label own = pOwner[pEdgei];
-
-                vector vvfOwn = vvf[own];
-                vector vvfNei = psf[pEdgei];
-
-                vector gradf = (pCf[pEdgei] - C[own]) & g[own];
-
-                scalar vsfOwn = gradf & vvfOwn;
-                scalar vsfNei = gradf & vvfNei;
-
-                scalar maxEdge = max(vsfOwn, vsfNei);
-                scalar minEdge = min(vsfOwn, vsfNei);
-                scalar maxMinEdge = rk*(maxEdge - minEdge);
-                maxEdge += maxMinEdge;
-                minEdge -= maxMinEdge;
-
-                limitEdge
-                (
-                    limiter[own],
-                    maxEdge - vsfOwn, minEdge - vsfOwn,
-                    magSqr(gradf)
-                );
-            }
+            updateLimiter(patchi, psf);
         }
     }
 
diff --git a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrad.H b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrad.H
index 16f503326422caa36d639a7d22f15580f15941be..006280d2656d7a492bf7455c27756dab903742d3 100644
--- a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrad.H
+++ b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrad.H
@@ -69,13 +69,20 @@ class faceLimitedGrad
 {
     // Private Data
 
+        //- Basic gradient scheme
         tmp<fa::gradScheme<Type>> basicGradScheme_;
 
         //- Limiter coefficient
         scalar k_;
 
 
-    // Private Member Functions
+public:
+
+    //- RunTime type information
+    TypeName("faceLimited");
+
+
+    // Generated Methods
 
         //- No copy construct
         faceLimitedGrad(const faceLimitedGrad&) = delete;
@@ -84,12 +91,6 @@ class faceLimitedGrad
         void operator=(const faceLimitedGrad&) = delete;
 
 
-public:
-
-    //- RunTime type information
-    TypeName("faceLimited");
-
-
     // Constructors
 
         //- Construct from mesh and schemeData
diff --git a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrads.C b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrads.C
index c32dda42fe48a3cab5dfcec663bb5a576b8a0b14..eb0cc9bcbd05eaf9f37004519f3e0f0d54db7ef6 100644
--- a/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrads.C
+++ b/src/finiteArea/finiteArea/gradSchemes/limitedGradSchemes/faceLimitedFaGrad/faceLimitedFaGrads.C
@@ -28,11 +28,6 @@ License
 
 #include "faceLimitedFaGrad.H"
 #include "gaussFaGrad.H"
-#include "faMesh.H"
-#include "areaFaMesh.H"
-#include "edgeFaMesh.H"
-#include "areaFields.H"
-#include "fixedValueFaPatchFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -123,11 +118,11 @@ tmp<areaVectorField> faceLimitedGrad<scalar>::calcGrad
 
     forAll(owner, facei)
     {
-        label own = owner[facei];
-        label nei = neighbour[facei];
+        const label own = owner[facei];
+        const label nei = neighbour[facei];
 
-        scalar vsfOwn = vsf[own];
-        scalar vsfNei = vsf[nei];
+        const scalar vsfOwn = vsf[own];
+        const scalar vsfNei = vsf[nei];
 
         maxVsf[own] = max(maxVsf[own], vsfNei);
         minVsf[own] = min(minVsf[own], vsfNei);
@@ -137,37 +132,33 @@ tmp<areaVectorField> faceLimitedGrad<scalar>::calcGrad
     }
 
 
-    const areaScalarField::Boundary& bsf = vsf.boundaryField();
+    // Lambda expression to update limiter for boundary edges
+    auto updateLimiter = [&](const label patchi, const scalarField& fld) -> void
+    {
+        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
+
+        forAll(pOwner, facei)
+        {
+            const label own = pOwner[facei];
+            const scalar vsf = fld[facei];
+
+            maxVsf[own] = max(maxVsf[own], vsf);
+            minVsf[own] = min(minVsf[own], vsf);
+        }
+    };
 
+    const areaScalarField::Boundary& bsf = vsf.boundaryField();
     forAll(bsf, patchi)
     {
         const faPatchScalarField& psf = bsf[patchi];
 
-        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
-
         if (psf.coupled())
         {
-            scalarField psfNei(psf.patchNeighbourField());
-
-            forAll(pOwner, pFacei)
-            {
-                label own = pOwner[pFacei];
-                scalar vsfNei = psfNei[pFacei];
-
-                maxVsf[own] = max(maxVsf[own], vsfNei);
-                minVsf[own] = min(minVsf[own], vsfNei);
-            }
+            updateLimiter(patchi, psf.patchNeighbourField());
         }
         else
         {
-            forAll(pOwner, pFacei)
-            {
-                label own = pOwner[pFacei];
-                scalar vsfNei = psf[pFacei];
-
-                maxVsf[own] = max(maxVsf[own], vsfNei);
-                minVsf[own] = min(minVsf[own], vsfNei);
-            }
+            updateLimiter(patchi, psf);
         }
     }
 
@@ -176,19 +167,19 @@ tmp<areaVectorField> faceLimitedGrad<scalar>::calcGrad
 
     if (k_ < 1.0)
     {
-        scalarField maxMinVsf((1.0/k_ - 1.0)*(maxVsf - minVsf));
+        const scalarField maxMinVsf((1.0/k_ - 1.0)*(maxVsf - minVsf));
         maxVsf += maxMinVsf;
         minVsf -= maxMinVsf;
     }
 
 
-    // create limiter
+    // Create limiter
     scalarField limiter(vsf.internalField().size(), 1.0);
 
     forAll(owner, facei)
     {
-        label own = owner[facei];
-        label nei = neighbour[facei];
+        const label own = owner[facei];
+        const label nei = neighbour[facei];
 
         // owner side
         limitEdge
@@ -216,7 +207,7 @@ tmp<areaVectorField> faceLimitedGrad<scalar>::calcGrad
 
         forAll(pOwner, pFacei)
         {
-            label own = pOwner[pFacei];
+            const label own = pOwner[pFacei];
 
             limitEdge
             (
@@ -273,8 +264,8 @@ tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
 
     forAll(owner, facei)
     {
-        label own = owner[facei];
-        label nei = neighbour[facei];
+        const label own = owner[facei];
+        const label nei = neighbour[facei];
 
         const vector& vsfOwn = vsf[own];
         const vector& vsfNei = vsf[nei];
@@ -287,36 +278,33 @@ tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
     }
 
 
-    const areaVectorField::Boundary& bsf = vsf.boundaryField();
+    // Lambda expression to update limiter for boundary edges
+    auto updateLimiter = [&](const label patchi, const vectorField& fld) -> void
+    {
+        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
 
+        forAll(pOwner, facei)
+        {
+            const label own = pOwner[facei];
+            const vector& vsf = fld[facei];
+
+            maxVsf[own] = max(maxVsf[own], vsf);
+            minVsf[own] = min(minVsf[own], vsf);
+        }
+    };
+
+    const areaVectorField::Boundary& bsf = vsf.boundaryField();
     forAll(bsf, patchi)
     {
         const faPatchVectorField& psf = bsf[patchi];
-        const labelUList& pOwner = mesh.boundary()[patchi].edgeFaces();
 
         if (psf.coupled())
         {
-            vectorField psfNei(psf.patchNeighbourField());
-
-            forAll(pOwner, pFacei)
-            {
-                label own = pOwner[pFacei];
-                const vector& vsfNei = psfNei[pFacei];
-
-                maxVsf[own] = max(maxVsf[own], vsfNei);
-                minVsf[own] = min(minVsf[own], vsfNei);
-            }
+            updateLimiter(patchi, psf.patchNeighbourField());
         }
         else
         {
-            forAll(pOwner, pFacei)
-            {
-                label own = pOwner[pFacei];
-                const vector& vsfNei = psf[pFacei];
-
-                maxVsf[own] = max(maxVsf[own], vsfNei);
-                minVsf[own] = min(minVsf[own], vsfNei);
-            }
+            updateLimiter(patchi, psf);
         }
     }
 
@@ -325,7 +313,7 @@ tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
 
     if (k_ < 1.0)
     {
-        vectorField maxMinVsf((1.0/k_ - 1.0)*(maxVsf - minVsf));
+        const vectorField maxMinVsf((1.0/k_ - 1.0)*(maxVsf - minVsf));
         maxVsf += maxMinVsf;
         minVsf -= maxMinVsf;
 
@@ -334,13 +322,13 @@ tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
     }
 
 
-    // create limiter
+    // Create limiter
     vectorField limiter(vsf.internalField().size(), vector::one);
 
     forAll(owner, facei)
     {
-        label own = owner[facei];
-        label nei = neighbour[facei];
+        const label own = owner[facei];
+        const label nei = neighbour[facei];
 
         // owner side
         limitEdge
@@ -368,7 +356,7 @@ tmp<areaTensorField> faceLimitedGrad<vector>::calcGrad
 
         forAll(pOwner, pFacei)
         {
-            label own = pOwner[pFacei];
+            const label own = pOwner[pFacei];
 
             limitEdge
             (
diff --git a/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.C b/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.C
index 821f2c74e3d79514f132f4309c2516c86f3d6d89..af560bc7dbd227ffe4c8e078b91cd8c056dc4a92 100644
--- a/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.C
+++ b/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.C
@@ -27,8 +27,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "fa.H"
-#include "HashTable.H"
-#include "linearEdgeInterpolation.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.H b/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.H
index 009d2a8001487124a050166cfa0d7fd7176456b3..63c76b9f92f3ff85890340f6f4630dcbf2b99e0f 100644
--- a/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.H
+++ b/src/finiteArea/finiteArea/laplacianSchemes/faLaplacianScheme/faLaplacianScheme.H
@@ -38,12 +38,9 @@ SourceFiles
 #ifndef Foam_faLaplacianScheme_H
 #define Foam_faLaplacianScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "linearEdgeInterpolation.H"
 #include "correctedLnGrad.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -79,15 +76,6 @@ protected:
         tmp<lnGradScheme<Type>> tlnGradScheme_;
 
 
-    // Private Member Functions
-
-        //- No copy construct
-        laplacianScheme(const laplacianScheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const laplacianScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -102,6 +90,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        laplacianScheme(const laplacianScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const laplacianScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.C b/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.C
index 46e7d4bb4f3502bb177523dc985d30905cc2b5d1..b5236b2369e9787d3ef4f1d3bcc829751914c503 100644
--- a/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.C
+++ b/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.C
@@ -82,8 +82,10 @@ gaussLaplacianScheme<Type>::famLaplacian
     {
         if (this->mesh().fluxRequired(vf.name()))
         {
-            fam.faceFluxCorrectionPtr() = new
-            GeometricField<Type, faePatchField, edgeMesh>
+            fam.faceFluxCorrectionPtr() = std::make_unique
+            <
+                GeometricField<Type, faePatchField, edgeMesh>
+            >
             (
                 gammaMagSf*this->tlnGradScheme_().correction(vf)
             );
diff --git a/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.H b/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.H
index 7da23957004659a9fae23dc5c21288ba1a016b4c..86130d54b5328efddfc0d84b7a18d0378ad2f5db 100644
--- a/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.H
+++ b/src/finiteArea/finiteArea/laplacianSchemes/gaussFaLaplacianScheme/gaussFaLaplacianScheme.H
@@ -59,7 +59,13 @@ class gaussLaplacianScheme
 :
     public fa::laplacianScheme<Type>
 {
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("Gauss");
+
+
+    // Generated Methods
 
         //- No copy construct
         gaussLaplacianScheme(const gaussLaplacianScheme&) = delete;
@@ -68,12 +74,6 @@ class gaussLaplacianScheme
         void operator=(const gaussLaplacianScheme&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("Gauss");
-
-
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.C b/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.C
index 808fd89648f635540ed85a66f4abf2ff8dac62f1..53805d07aed14bb407a9f821944d8ebaa4054c20 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.C
+++ b/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.C
@@ -25,10 +25,8 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "correctedLnGrad.H"
 #include "areaFields.H"
 #include "edgeFields.H"
-#include "linearEdgeInterpolation.H"
 #include "gaussFaGrad.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.H b/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.H
index b7128c00a6cb91b6f9a79f6ff09941cf14099385..74bcf22ba19b4c06c7d2734b5f34bf4a9b9fbd1e 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.H
+++ b/src/finiteArea/finiteArea/lnGradSchemes/correctedLnGrad/correctedLnGrad.H
@@ -58,18 +58,21 @@ class correctedLnGrad
 :
     public lnGradScheme<Type>
 {
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const correctedLnGrad&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("corrected");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        correctedLnGrad(const correctedLnGrad&) = delete;
+
+        //- No copy assignment
+        void operator=(const correctedLnGrad&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.C b/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.C
index b8cef6777752dd7a6ee573cd9466558b33fdb90d..425891626aa9677ffea6d00c8625f019736c18a3 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.C
+++ b/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.C
@@ -29,7 +29,6 @@ License
 #include "areaFields.H"
 #include "edgeFields.H"
 #include "correctedLnGrad.H"
-#include "linearEdgeInterpolation.H"
 #include "gaussFaGrad.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.H b/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.H
index 97a250e9c6e672a27805b3b514a56281199d0abb..6a9ad2331ad539f101a558eb1a8a82c20d925773 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.H
+++ b/src/finiteArea/finiteArea/lnGradSchemes/fourthLnGrad/fourthLnGrad.H
@@ -58,18 +58,21 @@ class fourthLnGrad
 :
     public lnGradScheme<Type>
 {
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const fourthLnGrad&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("fourth");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        fourthLnGrad(const fourthLnGrad&) = delete;
+
+        //- No copy assignment
+        void operator=(const fourthLnGrad&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -102,10 +105,7 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
-        {
-            return true;
-        }
+        virtual bool corrected() const { return true; }
 
         //- Return the explicit correction to the fourthLnGrad
         //  for the given field
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.C b/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.C
index 8c3f93a3f6f064b38428f2d0baa1051084854f86..d8857d4e1f62f578a69bf3c2e89e25d9b0afcd0d 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.C
+++ b/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.C
@@ -72,7 +72,7 @@ limitedLnGrad<Type>::correction
                 (1 - limitCoeff_)*mag(corr)
               + dimensionedScalar("small", corr.dimensions(), SMALL)
             ),
-            dimensionedScalar("one", dimless, 1.0)
+            dimensionedScalar(dimless, Foam::one{})
         )
     );
 
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.H b/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.H
index 1e0a6d7720e34a81f4c45d959cbef19d4ca8c58e..eef75a51f8ac1494f071af06f85844e13127f190 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.H
+++ b/src/finiteArea/finiteArea/lnGradSchemes/limitedLnGrad/limitedLnGrad.H
@@ -68,24 +68,27 @@ class limitedLnGrad
 :
     public lnGradScheme<Type>
 {
-    // Private data
+    // Private Data
 
         //- Limiter.  0 = no limiting, 1 = full limiting
         scalar limitCoeff_;
 
 
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const limitedLnGrad&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("limited");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        limitedLnGrad(const limitedLnGrad&) = delete;
+
+        //- No copy assignment
+        void operator=(const limitedLnGrad&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.C b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.C
index 2fbc4fbc81bdfcae9ca5ae23f78a43d622fcbadd..1e073adb513d22d5333d7f139c38f1137b9338d7 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.C
+++ b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.C
@@ -30,7 +30,6 @@ License
 #include "lnGradScheme.H"
 #include "areaFields.H"
 #include "edgeFields.H"
-#include "HashTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.H b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.H
index 63adf7ea78a15263e6614fc3e9e7877fe9d4d7ff..a1692f0d8d806bb48b4a48fae2125b30aa84a584 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.H
+++ b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradScheme.H
@@ -37,10 +37,8 @@ SourceFiles
 #ifndef lnGradScheme_H
 #define lnGradScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -48,6 +46,7 @@ SourceFiles
 namespace Foam
 {
 
+// Forward Declarations
 class faMesh;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -64,18 +63,12 @@ class lnGradScheme
 :
     public refCount
 {
-    // Private data
+    // Private Data
 
         //- Hold reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const lnGradScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -90,6 +83,15 @@ public:
         );
 
 
+    // Generated Methods
+
+        //- No copy construct
+        lnGradScheme(const lnGradScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const lnGradScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -116,10 +118,7 @@ public:
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const
-        {
-            return mesh_;
-        }
+        const faMesh& mesh() const noexcept { return mesh_; }
 
         //- Return the lnGrad of the given cell field
         //  with the given weighting factors
@@ -138,10 +137,7 @@ public:
         ) const = 0;
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
-        {
-            return false;
-        }
+        virtual bool corrected() const { return false; }
 
         //- Return the explicit correction to the lnGrad
         //  for the given field
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradSchemes.C b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradSchemes.C
index 65acc733043f383cff3c285cbff79c082e1f0b0d..49ae846a8b65f6293134da7be8ee054aa5001c80 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradSchemes.C
+++ b/src/finiteArea/finiteArea/lnGradSchemes/lnGradScheme/lnGradSchemes.C
@@ -26,7 +26,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "lnGradScheme.H"
-#include "HashTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/finiteArea/lnGradSchemes/uncorrectedLnGrad/uncorrectedLnGrad.H b/src/finiteArea/finiteArea/lnGradSchemes/uncorrectedLnGrad/uncorrectedLnGrad.H
index 8ff48692cecadb96f9ce608b8fd407be67e90096..ecda9a6e1fc858ed703caee0d2366fce1e5c7f3e 100644
--- a/src/finiteArea/finiteArea/lnGradSchemes/uncorrectedLnGrad/uncorrectedLnGrad.H
+++ b/src/finiteArea/finiteArea/lnGradSchemes/uncorrectedLnGrad/uncorrectedLnGrad.H
@@ -58,18 +58,21 @@ class uncorrectedLnGrad
 :
     public lnGradScheme<Type>
 {
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const uncorrectedLnGrad&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("uncorrected");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        uncorrectedLnGrad(const uncorrectedLnGrad&) = delete;
+
+        //- No copy assignment
+        void operator=(const uncorrectedLnGrad&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -101,10 +104,7 @@ public:
         }
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
-        {
-            return false;
-        }
+        virtual bool corrected() const { return false; }
 
         //- Return the explicit correction to the uncorrectedLnGrad
         //- for the given field
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.C b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.C
index 54dcd271b1460ce156813086109b87c999756221..2fcbe116a1a743c73c4935647750dca34d1f57e5 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.C
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.C
@@ -100,14 +100,14 @@ Foam::fac::interpolate
     Istream& schemeData
 )
 {
-#   ifdef DEBUGInterpolations
+    #ifdef DEBUGInterpolations
     if (edgeInterpolation::debug)
     {
         InfoInFunction
             << "interpolating GeometricField<Type, faPatchField, areaMesh> "
             << endl;
     }
-#   endif
+    #endif
 
     return scheme<Type>(faceFlux, schemeData)().interpolate(vf);
 }
@@ -122,7 +122,7 @@ Foam::fac::interpolate
     const word& name
 )
 {
-#   ifdef DEBUGInterpolations
+    #ifdef DEBUGInterpolations
     if (edgeInterpolation::debug)
     {
         InfoInFunction
@@ -130,7 +130,7 @@ Foam::fac::interpolate
             << "using " << name
             << endl;
     }
-#   endif
+    #endif
 
     return scheme<Type>(faceFlux, name)().interpolate(vf);
 }
@@ -199,14 +199,14 @@ Foam::fac::interpolate
     Istream& schemeData
 )
 {
-#   ifdef DEBUGInterpolations
+    #ifdef DEBUGInterpolations
     if (edgeInterpolation::debug)
     {
         InfoInFunction
             << "interpolating GeometricField<Type, faPatchField, areaMesh> "
             << endl;
     }
-#   endif
+    #endif
 
     return scheme<Type>(vf.mesh(), schemeData)().interpolate(vf);
 }
@@ -220,7 +220,7 @@ Foam::fac::interpolate
     const word& name
 )
 {
-#   ifdef DEBUGInterpolations
+    #ifdef DEBUGInterpolations
     if (edgeInterpolation::debug)
     {
         InfoInFunction
@@ -228,7 +228,7 @@ Foam::fac::interpolate
             << "using " << name
             << endl;
     }
-#   endif
+    #endif
 
     return scheme<Type>(vf.mesh(), name)().interpolate(vf);
 }
@@ -257,7 +257,7 @@ Foam::fac::interpolate
     const GeometricField<Type, faPatchField, areaMesh>& vf
 )
 {
-#   ifdef DEBUGInterpolations
+    #ifdef DEBUGInterpolations
     if (edgeInterpolation::debug)
     {
         InfoInFunction
@@ -265,7 +265,7 @@ Foam::fac::interpolate
             << "using run-time selected scheme"
             << endl;
     }
-#   endif
+    #endif
 
     return interpolate(vf, "interpolate(" + vf.name() + ')');
 }
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.H b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.H
index 2b38213350c98911c47bc6e079d9d860d60787a4..a9a974ad01ce23f01352c3ce3add69b83cc2fee2 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolate.H
@@ -36,7 +36,6 @@ SourceFiles
 #ifndef edgeInterpolate_H
 #define edgeInterpolate_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
 #include "edgeInterpolationScheme.H"
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.C b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.C
index be58b303255f51cdc2438f97d97426555712919c..5da45321ce37f7a182ec8c9334cdb16b2d9560ae 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.C
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.C
@@ -29,8 +29,6 @@ License
 #include "faMesh.H"
 #include "areaFields.H"
 #include "edgeFields.H"
-#include "demandDrivenData.H"
-#include "faPatchFields.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -39,79 +37,55 @@ namespace Foam
     defineTypeNameAndDebug(edgeInterpolation, 0);
 }
 
-// * * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * //
-
-void Foam::edgeInterpolation::clearOut()
-{
-    deleteDemandDrivenData(lPN_);
-    deleteDemandDrivenData(weightingFactors_);
-    deleteDemandDrivenData(differenceFactors_);
-    deleteDemandDrivenData(correctionVectors_);
-    deleteDemandDrivenData(skewCorrectionVectors_);
-}
-
 
 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
 
 Foam::edgeInterpolation::edgeInterpolation(const faMesh& fam)
 :
     faMesh_(fam),
-    lPN_(nullptr),
-    weightingFactors_(nullptr),
-    differenceFactors_(nullptr),
-    correctionVectors_(nullptr),
-    skewCorrectionVectors_(nullptr),
     orthogonal_(false),
     skew_(true)
 {}
 
 
-// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
-
-Foam::edgeInterpolation::~edgeInterpolation()
-{
-    clearOut();
-}
-
-
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 const Foam::edgeScalarField& Foam::edgeInterpolation::lPN() const
 {
-    if (!lPN_)
+    if (!lPNptr_)
     {
         makeLPN();
     }
 
-    return (*lPN_);
+    return (*lPNptr_);
 }
 
 
 const Foam::edgeScalarField& Foam::edgeInterpolation::weights() const
 {
-    if (!weightingFactors_)
+    if (!weightingFactorsPtr_)
     {
         makeWeights();
     }
 
-    return (*weightingFactors_);
+    return (*weightingFactorsPtr_);
 }
 
 
 const Foam::edgeScalarField& Foam::edgeInterpolation::deltaCoeffs() const
 {
-    if (!differenceFactors_)
+    if (!differenceFactorsPtr_)
     {
         makeDeltaCoeffs();
     }
 
-    return (*differenceFactors_);
+    return (*differenceFactorsPtr_);
 }
 
 
 bool Foam::edgeInterpolation::orthogonal() const
 {
-    if (orthogonal_ == false && !correctionVectors_)
+    if (orthogonal_ == false && !correctionVectorsPtr_)
     {
         makeCorrectionVectors();
     }
@@ -129,13 +103,13 @@ const Foam::edgeVectorField& Foam::edgeInterpolation::correctionVectors() const
             << abort(FatalError);
     }
 
-    return (*correctionVectors_);
+    return (*correctionVectorsPtr_);
 }
 
 
 bool Foam::edgeInterpolation::skew() const
 {
-    if (skew_ == true && !skewCorrectionVectors_)
+    if (skew_ == true && !skewCorrectionVectorsPtr_)
     {
         makeSkewCorrectionVectors();
     }
@@ -154,21 +128,21 @@ Foam::edgeInterpolation::skewCorrectionVectors() const
             << abort(FatalError);
     }
 
-    return (*skewCorrectionVectors_);
+    return (*skewCorrectionVectorsPtr_);
 }
 
 
 bool Foam::edgeInterpolation::movePoints() const
 {
-    deleteDemandDrivenData(lPN_);
-    deleteDemandDrivenData(weightingFactors_);
-    deleteDemandDrivenData(differenceFactors_);
+    lPNptr_.reset(nullptr);
+    weightingFactorsPtr_.reset(nullptr);
+    differenceFactorsPtr_.reset(nullptr);
 
     orthogonal_ = false;
-    deleteDemandDrivenData(correctionVectors_);
+    correctionVectorsPtr_.reset(nullptr);
 
     skew_ = true;
-    deleteDemandDrivenData(skewCorrectionVectors_);
+    skewCorrectionVectorsPtr_.reset(nullptr);
 
     return true;
 }
@@ -180,14 +154,14 @@ const Foam::vector& Foam::edgeInterpolation::skewCorr(const label edgeI) const
 
     return
         (
-            skewCorrectionVectors_
-          ? (*skewCorrectionVectors_)[edgeI]
+            skewCorrectionVectorsPtr_
+          ? (*skewCorrectionVectorsPtr_)[edgeI]
           : pTraits<vector>::zero
         );
 
     #else
 
-    return (*skewCorrectionVectors_)[edgeI];
+    return (*skewCorrectionVectorsPtr_)[edgeI];
 
     #endif
 }
@@ -200,7 +174,7 @@ void Foam::edgeInterpolation::makeLPN() const
         << endl;
 
 
-    lPN_ = new edgeScalarField
+    lPNptr_ = std::make_unique<edgeScalarField>
     (
         IOobject
         (
@@ -214,7 +188,7 @@ void Foam::edgeInterpolation::makeLPN() const
         mesh(),
         dimLength
     );
-    edgeScalarField& lPN = *lPN_;
+    edgeScalarField& lPN = *lPNptr_;
 
     // Set local references to mesh data
     const edgeVectorField& edgeCentres = mesh().edgeCentres();
@@ -281,7 +255,7 @@ void Foam::edgeInterpolation::makeWeights() const
         << endl;
 
 
-    weightingFactors_ = new edgeScalarField
+    weightingFactorsPtr_ = std::make_unique<edgeScalarField>
     (
         IOobject
         (
@@ -295,7 +269,7 @@ void Foam::edgeInterpolation::makeWeights() const
         mesh(),
         dimensionedScalar(dimless, 1)
     );
-    edgeScalarField& weightingFactors = *weightingFactors_;
+    edgeScalarField& weightingFactors = *weightingFactorsPtr_;
 
 
     // Set local references to mesh data
@@ -361,11 +335,11 @@ void Foam::edgeInterpolation::makeDeltaCoeffs() const
     // needed to make sure deltaCoeffs are calculated for parallel runs.
     weights();
 
-    differenceFactors_ = new edgeScalarField
+    differenceFactorsPtr_ = std::make_unique<edgeScalarField>
     (
         IOobject
         (
-            "differenceFactors_",
+            "differenceFactors",
             mesh().pointsInstance(),
             mesh().thisDb(),
             IOobject::NO_READ,
@@ -375,7 +349,7 @@ void Foam::edgeInterpolation::makeDeltaCoeffs() const
         mesh(),
         dimensionedScalar(dimless/dimLength, SMALL)
     );
-    edgeScalarField& DeltaCoeffs = *differenceFactors_;
+    edgeScalarField& DeltaCoeffs = *differenceFactorsPtr_;
     scalarField& dc = DeltaCoeffs.primitiveFieldRef();
 
     // Set local references to mesh data
@@ -455,7 +429,7 @@ void Foam::edgeInterpolation::makeCorrectionVectors() const
         << "Constructing non-orthogonal correction vectors"
         << endl;
 
-    correctionVectors_ = new edgeVectorField
+    correctionVectorsPtr_ = std::make_unique<edgeVectorField>
     (
         IOobject
         (
@@ -469,7 +443,7 @@ void Foam::edgeInterpolation::makeCorrectionVectors() const
         mesh(),
         dimless
     );
-    edgeVectorField& CorrVecs = *correctionVectors_;
+    edgeVectorField& CorrVecs = *correctionVectorsPtr_;
 
     // Set local references to mesh data
     const areaVectorField& faceCentres = mesh().areaCentres();
@@ -543,7 +517,7 @@ void Foam::edgeInterpolation::makeCorrectionVectors() const
     if (NonOrthogCoeff < 0.1)
     {
         orthogonal_ = true;
-        deleteDemandDrivenData(correctionVectors_);
+        correctionVectorsPtr_.reset(nullptr);
     }
     else
     {
@@ -562,7 +536,7 @@ void Foam::edgeInterpolation::makeSkewCorrectionVectors() const
         << "Constructing skew correction vectors"
         << endl;
 
-    skewCorrectionVectors_ = new edgeVectorField
+    skewCorrectionVectorsPtr_ = std::make_unique<edgeVectorField>
     (
         IOobject
         (
@@ -576,7 +550,7 @@ void Foam::edgeInterpolation::makeSkewCorrectionVectors() const
         mesh(),
         dimensionedVector(dimless, Zero)
     );
-    edgeVectorField& SkewCorrVecs = *skewCorrectionVectors_;
+    edgeVectorField& SkewCorrVecs = *skewCorrectionVectorsPtr_;
 
     // Set local references to mesh data
     const areaVectorField& C = mesh().areaCentres();
@@ -700,12 +674,12 @@ void Foam::edgeInterpolation::makeSkewCorrectionVectors() const
 
     if (skewCoeff < maxSkewRatio)
     {
-        deleteDemandDrivenData(skewCorrectionVectors_);
+        skewCorrectionVectorsPtr_.reset(nullptr);
     }
 
     #endif
 
-    skew_ = bool(skewCorrectionVectors_);
+    skew_ = bool(skewCorrectionVectorsPtr_);
 
 
     DebugInFunction
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.H
index ff84b3c7420a893d3d025e3ef7610ccfa9b71496..689b1384d47faed7db87878bbe078dc8d5ef9c0b 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolation.H
@@ -42,11 +42,8 @@ SourceFiles
 #ifndef Foam_edgeInterpolation_H
 #define Foam_edgeInterpolation_H
 
-#include "tmp.H"
-#include "scalar.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "className.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -71,19 +68,19 @@ class edgeInterpolation
         // Demand-driven data
 
             //- Geodesic distance between centroids of neighbour finite areas
-            mutable edgeScalarField* lPN_;
+            mutable std::unique_ptr<edgeScalarField> lPNptr_;
 
             //- Central-differencing weighting factors
-            mutable edgeScalarField* weightingFactors_;
+            mutable std::unique_ptr<edgeScalarField> weightingFactorsPtr_;
 
             //- Face-gradient difference factors
-            mutable edgeScalarField* differenceFactors_;
+            mutable std::unique_ptr<edgeScalarField> differenceFactorsPtr_;
 
             //- Non-orthogonality correction vectors
-            mutable edgeVectorField* correctionVectors_;
+            mutable std::unique_ptr<edgeVectorField> correctionVectorsPtr_;
 
             //- Skew correction vectors
-            mutable edgeVectorField* skewCorrectionVectors_;
+            mutable std::unique_ptr<edgeVectorField> skewCorrectionVectorsPtr_;
 
             //- Is mesh orthogonal
             mutable bool orthogonal_;
@@ -113,20 +110,19 @@ class edgeInterpolation
         void makeSkewCorrectionVectors() const;
 
 
-protected:
+public:
 
-    // Protected Member Functions
+    // Declare name of the class and it's debug switch
+    ClassName("edgeInterpolation");
 
-        // Storage Management
 
-            //- Clear all geometry and addressing
-            void clearOut();
+    // Generated Methods
 
+        //- No copy construct
+        edgeInterpolation(const edgeInterpolation&) = delete;
 
-public:
-
-    // Declare name of the class and it's debug switch
-    ClassName("edgeInterpolation");
+        //- No copy assignment
+        void operator=(const edgeInterpolation&) = delete;
 
 
     // Constructors
@@ -136,16 +132,13 @@ public:
 
 
     //- Destructor
-    ~edgeInterpolation();
+    ~edgeInterpolation() = default;
 
 
     // Member Functions
 
         //- Return mesh reference
-        const faMesh& mesh() const noexcept
-        {
-            return faMesh_;
-        }
+        const faMesh& mesh() const noexcept { return faMesh_; }
 
         //- Return reference to PN geodesic distance
         const edgeScalarField& lPN() const;
@@ -178,7 +171,7 @@ public:
     // Storage Management
 
         //- True if weights exist
-        bool hasWeights() const noexcept { return bool(weightingFactors_); }
+        bool hasWeights() const noexcept { return bool(weightingFactorsPtr_); }
 };
 
 
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.C b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.C
index b348c7ca0f2e8639c020fe1c89427f6d55dc3838..5d4ead9d021700a377a7f3ae902d09e662e30ae0 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.C
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.C
@@ -29,9 +29,7 @@ License
 #include "edgeInterpolationScheme.H"
 #include "areaFields.H"
 #include "edgeFields.H"
-#include "faPatchFields.H"
 #include "coupledFaPatchField.H"
-#include "transform.H"
 
 // * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
 
diff --git a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.H b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.H
index 64bc2a9cef82885f52ff49a0f0f99fd650418a47..bc4a12f06f6f60e95d32be50a111fa5a952f3304 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/edgeInterpolationScheme/edgeInterpolationScheme.H
@@ -37,10 +37,8 @@ SourceFiles
 #ifndef edgeInterpolationScheme_H
 #define edgeInterpolationScheme_H
 
-#include "tmp.H"
 #include "areaFieldsFwd.H"
 #include "edgeFieldsFwd.H"
-#include "typeInfo.H"
 #include "runTimeSelectionTables.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -59,18 +57,12 @@ class edgeInterpolationScheme
 :
     public refCount
 {
-    // Private data
+    // Private Data
 
-        //- Hold reference to mesh
+        //- Reference to mesh
         const faMesh& mesh_;
 
 
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const edgeInterpolationScheme&) = delete;
-
-
 public:
 
     // Declare run-time constructor selection tables
@@ -101,6 +93,15 @@ public:
         );
 
 
+    // Private Member Functions
+
+        //- No copy construct
+        edgeInterpolationScheme(const edgeInterpolationScheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const edgeInterpolationScheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
@@ -179,10 +180,7 @@ public:
         ) const = 0;
 
         //- Return true if this scheme uses an explicit correction
-        virtual bool corrected() const
-        {
-            return false;
-        }
+        virtual bool corrected() const { return false; }
 
         //- Return the explicit correction to the face-interpolate
         //  for the given field
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/Gamma/Gamma.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/Gamma/Gamma.H
index 39b547745ded6de2c0db3d8090505a664721a361..6b3eb5f3be418dd0054f5aac358063c7f4dfd4a3 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/Gamma/Gamma.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/Gamma/Gamma.H
@@ -54,7 +54,11 @@ namespace Foam
 
 class GammaWeight
 {
-    scalar k_;
+    // Private Data
+
+        //- Model coefficient [0,1]
+        scalar k_;
+
 
 public:
 
@@ -72,7 +76,7 @@ public:
 
         // Rescale k_ to be >= 0 and <= 0.5 (TVD conformant)
         // and avoid the /0 when k_ = 0
-        k_ = max(k_/2.0, SMALL);
+        k_ = max(0.5*k_, SMALL);
     }
 
 
@@ -87,30 +91,19 @@ public:
         const vector& d
     ) const
     {
-        scalar magd = mag(d);
-        vector dHat = d/mag(d);
-
-        scalar gradf = (phiN - phiP)/magd;
+        const vector dHat(normalised(d));
 
-        scalar gradcf;
-        scalar udWeight;
-
-        if (faceFlux > 0)
-        {
-            gradcf = dHat & gradcP;
-            udWeight = 1;
-        }
-        else
-        {
-            gradcf = dHat & gradcN;
-            udWeight = 0;
-        }
+        // Choose gradc based on faceFlux
+        const vector& gradcPN = (faceFlux > 0) ? gradcP : gradcN;
+        const scalar udWeight = (faceFlux > 0) ? 1 : 0;
 
         // Stabilise for division
-        gradcf = stabilise(gradcf, SMALL);
+        const scalar gradcf = stabilise(dHat & gradcPN, SMALL);
+
+        const scalar gradf = (phiN - phiP)/mag(d);
 
-        scalar phict = 1 - 0.5*gradf/gradcf;
-        scalar limiter = clamp(phict/k_, zero_one{});
+        const scalar phict = 1 - 0.5*gradf/gradcf;
+        const scalar limiter = clamp(phict/k_, zero_one{});
 
         return lerp(udWeight, cdWeight, limiter);
     }
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/NVDscheme/faNVDscheme.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/NVDscheme/faNVDscheme.H
index b6ad35709a3d049f462b842736bd23e9e65ceae9..442d045698c63f6781aa14e7e2f8fd5fe376884a 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/NVDscheme/faNVDscheme.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/NVDscheme/faNVDscheme.H
@@ -72,14 +72,6 @@ protected:
 
         const edgeScalarField& edgeFlux_;
 
-    // Protected Member Functions
-
-        //- No copy construct
-        faNVDscheme(const faNVDscheme&) = delete;
-
-        //- No copy assignment
-        void operator=(const faNVDscheme&) = delete;
-
 
 public:
 
@@ -91,6 +83,15 @@ public:
     TypeName("faNVDscheme");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        faNVDscheme(const faNVDscheme&) = delete;
+
+        //- No copy assignment
+        void operator=(const faNVDscheme&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh and edgeFlux and blendingFactor
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/blended/blendedEdgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/blended/blendedEdgeInterpolation.H
index 5e3bfc513a793a40a517b8a87ce7b5b700c88cd2..f4a027d4a21a43f0f92c405784b2237d6281bc58 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/blended/blendedEdgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/blended/blendedEdgeInterpolation.H
@@ -56,12 +56,19 @@ class blendedEdgeInterpolation
     public linearEdgeInterpolation<Type>,
     public upwindEdgeInterpolation<Type>
 {
-    // Private data
+    // Private Data
 
+        //- Blending factor
         const scalar blendingFactor_;
 
 
-    // Private Member Functions
+public:
+
+    //- Runtime type information
+    TypeName("blended");
+
+
+    // Generated Methods
 
         //- No copy construct
         blendedEdgeInterpolation(const blendedEdgeInterpolation&) = delete;
@@ -70,12 +77,6 @@ class blendedEdgeInterpolation
         void operator=(const blendedEdgeInterpolation&) = delete;
 
 
-public:
-
-    //- Runtime type information
-    TypeName("blended");
-
-
     // Constructors
 
         //- Construct from mesh, faceFlux and blendingFactor
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/leastSquares/leastSquaresEdgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/leastSquares/leastSquaresEdgeInterpolation.H
index fd261bae448323c9c9b55b64f08ce35032782e73..6ccff4b7956aa52851317ecfcc6e2cef1a393a7c 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/leastSquares/leastSquaresEdgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/leastSquares/leastSquaresEdgeInterpolation.H
@@ -67,18 +67,22 @@ class leastSquaresEdgeInterpolation
 :
     virtual public edgeInterpolationScheme<Type>
 {
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const leastSquaresEdgeInterpolation&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("leastSquares");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        leastSquaresEdgeInterpolation(const leastSquaresEdgeInterpolation&)
+            = delete;
+
+        //- No copy assignment
+        void operator=(const leastSquaresEdgeInterpolation&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/linear/linearEdgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/linear/linearEdgeInterpolation.H
index 9a1c99c3d2e2cfbc14b53f82c385560aef11c051..e4ce7041bd393da7a8d09d75af584287372729c9 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/linear/linearEdgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/linear/linearEdgeInterpolation.H
@@ -54,17 +54,21 @@ class linearEdgeInterpolation
 :
     virtual public edgeInterpolationScheme<Type>
 {
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const linearEdgeInterpolation&) = delete;
-
 public:
 
     //- Runtime type information
     TypeName("linear");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        linearEdgeInterpolation(const linearEdgeInterpolation&) = delete;
+
+        //- No copy assignment
+        void operator=(const linearEdgeInterpolation&) = delete;
+
+
     // Constructors
 
         //- Construct from mesh
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/linearUpwind/linearUpwind.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/linearUpwind/linearUpwind.H
index da9b6bdfc7e5cfb0e23724b62e9c726a9c895aa6..5ac45a791306a011dcedc55dc3db1d9a898bed5e 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/linearUpwind/linearUpwind.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/linearUpwind/linearUpwind.H
@@ -58,9 +58,17 @@ namespace Foam
 
 class linearUpwindWeight
 {
-
 public:
 
+    // Generated Methods
+
+        //- No copy construct
+        linearUpwindWeight(const linearUpwindWeight&) = delete;
+
+        //- No copy assignment
+        void operator=(const linearUpwindWeight&) = delete;
+
+
     linearUpwindWeight(Istream&)
     {}
 
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/skewCorrected/skewCorrectedEdgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/skewCorrected/skewCorrectedEdgeInterpolation.H
index da63c64444d2a01ba880adde40e7eb974dfec6de..a725730e359a29767359c0a1bc238778e4d720f1 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/skewCorrected/skewCorrectedEdgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/skewCorrected/skewCorrectedEdgeInterpolation.H
@@ -39,10 +39,8 @@ SourceFiles
 #define skewCorrectedEdgeInterpolation_H
 
 #include "edgeInterpolationScheme.H"
-#include "linearEdgeInterpolation.H"
 #include "gaussFaGrad.H"
 #include "areaFields.H"
-#include "zeroGradientFaPatchFields.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -60,6 +58,7 @@ class skewCorrectedEdgeInterpolation
 {
     // Private Data
 
+        //- Edge-interpolation scheme
         tmp<edgeInterpolationScheme<Type>> tScheme_;
 
 
@@ -69,6 +68,16 @@ public:
     TypeName("skewCorrected");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        skewCorrectedEdgeInterpolation(const skewCorrectedEdgeInterpolation&)
+            = delete;
+
+        //- No copy assignment
+        void operator=(const skewCorrectedEdgeInterpolation&) = delete;
+
+
     // Constructors
 
         //- Construct from Istream
@@ -96,13 +105,6 @@ public:
             )
         {}
 
-        //- No copy construct
-        skewCorrectedEdgeInterpolation(const skewCorrectedEdgeInterpolation&) =
-            delete;
-
-        //- No copy assignment
-        void operator=(const skewCorrectedEdgeInterpolation&) = delete;
-
 
     // Member Functions
 
@@ -115,7 +117,7 @@ public:
             return tScheme_().weights(vf);
         }
 
-         //- Return true if this scheme uses an explicit correction
+        //- Return true if this scheme uses an explicit correction
         virtual bool corrected() const
         {
             return
diff --git a/src/finiteArea/interpolation/edgeInterpolation/schemes/upwind/upwindEdgeInterpolation.H b/src/finiteArea/interpolation/edgeInterpolation/schemes/upwind/upwindEdgeInterpolation.H
index 7384f19d5e91613b47787ec8e2de9665e0028837..fbafdcb4e813eb3124d05a79af5333a7f1f55719 100644
--- a/src/finiteArea/interpolation/edgeInterpolation/schemes/upwind/upwindEdgeInterpolation.H
+++ b/src/finiteArea/interpolation/edgeInterpolation/schemes/upwind/upwindEdgeInterpolation.H
@@ -55,23 +55,27 @@ class upwindEdgeInterpolation
 :
     virtual public edgeInterpolationScheme<Type>
 {
-    // Private data
+    // Private Data
 
+        //- Face flux
         const edgeScalarField& faceFlux_;
 
 
-    // Private Member Functions
-
-        //- No copy assignment
-        void operator=(const upwindEdgeInterpolation&) = delete;
-
-
 public:
 
     //- Runtime type information
     TypeName("upwind");
 
 
+    // Generated Methods
+
+        //- No copy construct
+        upwindEdgeInterpolation(const upwindEdgeInterpolation&) = delete;
+
+        //- No copy assignment
+        void operator=(const upwindEdgeInterpolation&) = delete;
+
+
     // Constructors
 
         //- Construct from faceFlux
diff --git a/src/finiteArea/output/ensight/ensightFaMesh.H b/src/finiteArea/output/ensight/ensightFaMesh.H
index ce3deb7534a5307dc37a111154ac09f02110b91f..ae30d33ea76eeb33ec02b63bd6aed66ae01ac9ff 100644
--- a/src/finiteArea/output/ensight/ensightFaMesh.H
+++ b/src/finiteArea/output/ensight/ensightFaMesh.H
@@ -85,6 +85,11 @@ class ensightFaMesh
         //- Enforce consistent index/part numbering
         void renumber();
 
+
+public:
+
+    // Generated Methods
+
         //- No copy construct
         ensightFaMesh(const ensightFaMesh&) = delete;
 
@@ -92,8 +97,6 @@ class ensightFaMesh
         void operator=(const ensightFaMesh&) = delete;
 
 
-public:
-
     // Constructors
 
         //- Construct from mesh with all default options
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C
index 20f20e80e1b4df8b11b79b96804819de65f402b7..27f420f72eeba9c31b0b1c91e72ca8afb0c16ca0 100644
--- a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C
@@ -194,7 +194,7 @@ gaussLaplacianScheme<Type, GType>::fvmLaplacian
 
     if (mesh.fluxRequired(vf.name()))
     {
-        fvm.faceFluxCorrectionPtr() = tfaceFluxCorrection.ptr();
+        fvm.faceFluxCorrectionPtr(tfaceFluxCorrection.ptr());
     }
 
     return tfvm;
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianSchemes.C b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianSchemes.C
index 1201bad1fe2f66ae24587653e2da1b8d49d94a6b..7d19f5b2656c2fb8c48e39e67aa6cb57466516f6 100644
--- a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianSchemes.C
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianSchemes.C
@@ -61,8 +61,10 @@ Foam::fv::gaussLaplacianScheme<Foam::Type, Foam::scalar>::fvmLaplacian         \
     {                                                                          \
         if (mesh.fluxRequired(vf.name()))                                      \
         {                                                                      \
-            fvm.faceFluxCorrectionPtr() = new                                  \
-            GeometricField<Type, fvsPatchField, surfaceMesh>                   \
+            fvm.faceFluxCorrectionPtr() = std::make_unique                     \
+            <                                                                  \
+                GeometricField<Type, fvsPatchField, surfaceMesh>               \
+            >                                                                  \
             (                                                                  \
                 gammaMagSf*this->tsnGradScheme_().correction(vf)               \
             );                                                                 \
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C
index ef0efdb299fe2026b77b40934784c78cc711ef12..44e554ad400a705d89ec7e3409296bbc805de612 100644
--- a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianScheme.C
@@ -222,7 +222,7 @@ relaxedNonOrthoGaussLaplacianScheme<Type, GType>::fvmLaplacian
 
     if (mesh.fluxRequired(vf.name()))
     {
-        fvm.faceFluxCorrectionPtr() = trelaxedCorrection.ptr();
+        fvm.faceFluxCorrectionPtr(trelaxedCorrection.ptr());
     }
 
     return tfvm;
diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
index ce32fd20fbbb7f9b4ed3f2494365640e9b1db887..662e909dd5095c1b86164aa9966a11b07e7b8c31 100644
--- a/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
+++ b/src/finiteVolume/finiteVolume/laplacianSchemes/relaxedNonOrthoGaussLaplacianScheme/relaxedNonOrthoGaussLaplacianSchemes.C
@@ -98,7 +98,7 @@ fvmLaplacian                                                                   \
                                                                                \
         if (mesh.fluxRequired(vf.name()))                                      \
         {                                                                      \
-            fvm.faceFluxCorrectionPtr() = trelaxedCorrection.ptr();            \
+            fvm.faceFluxCorrectionPtr(trelaxedCorrection.ptr());               \
         }                                                                      \
     }                                                                          \
                                                                                \
diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
index bf2ab42635a6bee80179197d9f820be4fd526238..254436784f3e1c4e492f68a249b335a9b81dc0f1 100644
--- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
+++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C
@@ -369,8 +369,7 @@ Foam::fvMatrix<Type>::fvMatrix
     dimensions_(ds),
     source_(psi.size(), Zero),
     internalCoeffs_(psi.mesh().boundary().size()),
-    boundaryCoeffs_(psi.mesh().boundary().size()),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(psi.mesh().boundary().size())
 {
     DebugInFunction
         << "Constructing fvMatrix<Type> for field " << psi_.name() << endl;
@@ -410,19 +409,17 @@ Foam::fvMatrix<Type>::fvMatrix(const fvMatrix<Type>& fvm)
     dimensions_(fvm.dimensions_),
     source_(fvm.source_),
     internalCoeffs_(fvm.internalCoeffs_),
-    boundaryCoeffs_(fvm.boundaryCoeffs_),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(fvm.boundaryCoeffs_)
 {
     DebugInFunction
         << "Copying fvMatrix<Type> for field " << psi_.name() << endl;
 
     if (fvm.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, fvsPatchField, surfaceMesh>
-            (
-                *(fvm.faceFluxCorrectionPtr_)
-            );
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            *(fvm.faceFluxCorrectionPtr_)
+        );
     }
 }
 
@@ -438,8 +435,7 @@ Foam::fvMatrix<Type>::fvMatrix(const tmp<fvMatrix<Type>>& tmat)
     dimensions_(tmat().dimensions_),
     source_(tmat.constCast().source_, tmat.movable()),
     internalCoeffs_(tmat.constCast().internalCoeffs_, tmat.movable()),
-    boundaryCoeffs_(tmat.constCast().boundaryCoeffs_, tmat.movable()),
-    faceFluxCorrectionPtr_(nullptr)
+    boundaryCoeffs_(tmat.constCast().boundaryCoeffs_, tmat.movable())
 {
     DebugInFunction
         << "Copy/move fvMatrix<Type> for field " << psi_.name() << endl;
@@ -448,16 +444,15 @@ Foam::fvMatrix<Type>::fvMatrix(const tmp<fvMatrix<Type>>& tmat)
     {
         if (tmat.movable())
         {
-            faceFluxCorrectionPtr_ = tmat().faceFluxCorrectionPtr_;
-            tmat().faceFluxCorrectionPtr_ = nullptr;
+            faceFluxCorrectionPtr_ =
+                std::move(tmat.constCast().faceFluxCorrectionPtr_);
         }
-        else
+        else if (tmat().faceFluxCorrectionPtr_)
         {
-            faceFluxCorrectionPtr_ =
-                new GeometricField<Type, fvsPatchField, surfaceMesh>
-                (
-                    *(tmat().faceFluxCorrectionPtr_)
-                );
+            faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+            (
+                *(tmat().faceFluxCorrectionPtr_)
+            );
         }
     }
 
@@ -473,7 +468,6 @@ Foam::fvMatrix<Type>::~fvMatrix()
     DebugInFunction
         << "Destroying fvMatrix<Type> for field " << psi_.name() << endl;
 
-    deleteDemandDrivenData(faceFluxCorrectionPtr_);
     subMatrices_.clear();
 }
 
@@ -1577,9 +1571,10 @@ void Foam::fvMatrix<Type>::operator=(const fvMatrix<Type>& fvmv)
     }
     else if (fvmv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, fvsPatchField, surfaceMesh>
-        (*fvmv.faceFluxCorrectionPtr_);
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            *fvmv.faceFluxCorrectionPtr_
+        );
     }
 
     useImplicit_ = fvmv.useImplicit_;
@@ -1631,8 +1626,7 @@ void Foam::fvMatrix<Type>::operator+=(const fvMatrix<Type>& fvmv)
     }
     else if (fvmv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ = new
-        GeometricField<Type, fvsPatchField, surfaceMesh>
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
         (
             *fvmv.faceFluxCorrectionPtr_
         );
@@ -1669,9 +1663,10 @@ void Foam::fvMatrix<Type>::operator-=(const fvMatrix<Type>& fvmv)
     }
     else if (fvmv.faceFluxCorrectionPtr_)
     {
-        faceFluxCorrectionPtr_ =
-            new GeometricField<Type, fvsPatchField, surfaceMesh>
-        (-*fvmv.faceFluxCorrectionPtr_);
+        faceFluxCorrectionPtr_ = std::make_unique<faceFluxFieldType>
+        (
+            -*fvmv.faceFluxCorrectionPtr_
+        );
     }
 }
 
@@ -2002,7 +1997,7 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::correction
 
     // Delete the faceFluxCorrection from the correction matrix
     // as it does not have a clear meaning or purpose
-    deleteDemandDrivenData(tAcorr.ref().faceFluxCorrectionPtr());
+    tAcorr.ref().faceFluxCorrectionPtr(nullptr);
 
     return tAcorr;
 }
@@ -2018,7 +2013,7 @@ Foam::tmp<Foam::fvMatrix<Type>> Foam::correction
 
     // Delete the faceFluxCorrection from the correction matrix
     // as it does not have a clear meaning or purpose
-    deleteDemandDrivenData(tAcorr.ref().faceFluxCorrectionPtr());
+    tAcorr.ref().faceFluxCorrectionPtr(nullptr);
 
     return tAcorr;
 }
diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.H b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.H
index c00236f7c9f8a5da6539e4fefb304872df54a5f9..78f18d22c3e97b8dc76dc7efc3928b50320a7f70 100644
--- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.H
+++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.H
@@ -172,7 +172,7 @@ private:
         FieldField<Field, Type> boundaryCoeffs_;
 
         //- Face flux field for non-orthogonal correction
-        mutable faceFluxFieldType* faceFluxCorrectionPtr_;
+        mutable std::unique_ptr<faceFluxFieldType> faceFluxCorrectionPtr_;
 
 
 protected:
@@ -494,8 +494,7 @@ public:
             }
 
             //- Declare return type of the faceFluxCorrectionPtr() function
-            typedef GeometricField<Type, fvsPatchField, surfaceMesh>
-                *faceFluxFieldPtrType;
+            typedef std::unique_ptr<faceFluxFieldType> faceFluxFieldPtrType;
 
             //- Return pointer to face-flux non-orthogonal correction field
             faceFluxFieldPtrType& faceFluxCorrectionPtr()
@@ -503,6 +502,12 @@ public:
                 return faceFluxCorrectionPtr_;
             }
 
+            //- Set pointer to face-flux non-orthogonal correction field
+            void faceFluxCorrectionPtr(faceFluxFieldType* flux)
+            {
+                faceFluxCorrectionPtr_.reset(flux);
+            }
+
             //- True if face-flux non-orthogonal correction field exists
             bool hasFaceFluxCorrection() const noexcept
             {