diff --git a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C
index 2f65cef903786488e500d2b5521fc5861bf02dfb..97c5c3103ac6dcb1926c2a9dd51da00732cb5031 100644
--- a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C
+++ b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2015 OpenFOAM Foundation
-    Copyright (C) 2016-2023 OpenCFD Ltd.
+    Copyright (C) 2016-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,9 +30,8 @@ License
 #include "Time.H"
 #include "PtrList.H"
 #include "fvPatchFields.H"
+#include "fvsPatchFields.H"
 #include "emptyFvPatch.H"
-#include "emptyFvPatchField.H"
-#include "emptyFvsPatchField.H"
 #include "IOobjectList.H"
 #include "mapDistributePolyMesh.H"
 #include "processorFvPatch.H"
@@ -123,15 +122,19 @@ Foam::parFvFieldDistributor::distributeField
     {
         if (patchFaceMaps_.set(patchi))
         {
-            // Clone local patch field
-            oldPatchFields.set(patchi, bfld[patchi].clone());
-
             distributedFvPatchFieldMapper mapper
             (
                 labelUList::null(),
                 patchFaceMaps_[patchi]
             );
 
+            // Clone local patch field
+            oldPatchFields.set
+            (
+                patchi,
+                bfld[patchi].clone(fld.internalField())
+            );
+
             // Map into local copy
             oldPatchFields[patchi].autoMap(mapper);
         }
@@ -159,7 +162,7 @@ Foam::parFvFieldDistributor::distributeField
                 (
                     pfld,
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, volMesh>::null(),
+                    fvPatchField<Type>::Internal::null(),
                     dummyMapper
                 )
             );
@@ -178,9 +181,9 @@ Foam::parFvFieldDistributor::distributeField
                 patchi,
                 fvPatchField<Type>::New
                 (
-                    emptyFvPatchField<Type>::typeName,
+                    fvPatchFieldBase::emptyType(),
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -268,15 +271,19 @@ Foam::parFvFieldDistributor::distributeField
     {
         if (patchFaceMaps_.set(patchi))
         {
-            // Clone local patch field
-            oldPatchFields.set(patchi, bfld[patchi].clone());
-
             distributedFvPatchFieldMapper mapper
             (
                 labelUList::null(),
                 patchFaceMaps_[patchi]
             );
 
+            // Clone local patch field
+            oldPatchFields.set
+            (
+                patchi,
+                bfld[patchi].clone(fld.internalField())
+            );
+
             // Map into local copy
             oldPatchFields[patchi].autoMap(mapper);
         }
@@ -303,7 +310,7 @@ Foam::parFvFieldDistributor::distributeField
                 (
                     pfld,
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, surfaceMesh>::null(),
+                    fvsPatchField<Type>::Internal::null(),
                     dummyMapper
                 )
             );
@@ -321,9 +328,9 @@ Foam::parFvFieldDistributor::distributeField
                 patchi,
                 fvsPatchField<Type>::New
                 (
-                    emptyFvsPatchField<Type>::typeName,
+                    fvsPatchFieldBase::emptyType(),
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, surfaceMesh>::null()
+                    fvsPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C
index 4c1964f076870709f0ed77ce3d7d339f40914b42..f1d1361b29093f5339ca08b40ca118d85558de95 100644
--- a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C
+++ b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C
@@ -26,11 +26,11 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "Time.H"
-#include "emptyPointPatchField.H"
 #include "IOobjectList.H"
 #include "mapDistributePolyMesh.H"
 #include "distributedFieldMapper.H"
 #include "distributedPointPatchFieldMapper.H"
+#include "emptyPointPatch.H"
 #include "pointFields.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
@@ -108,7 +108,7 @@ Foam::parPointFieldDistributor::distributeField
                 (
                     bfld[patchi],
                     tgtMesh.boundary()[patchi],    // pointPatch
-                    DimensionedField<Type, pointMesh>::null(),
+                    pointPatchField<Type>::Internal::null(),
                     mapper
                 )
             );
@@ -122,7 +122,7 @@ Foam::parPointFieldDistributor::distributeField
             //    bfld[patchi].clone
             //    (
             //        tgtMesh.boundary()[patchi],
-            //        DimensionedField<Type, pointMesh>::null(),
+            //        pointPatchField<Type>::Internal::null(),
             //        mapper
             //    )
             //);
@@ -140,9 +140,9 @@ Foam::parPointFieldDistributor::distributeField
                 patchi,
                 pointPatchField<Type>::New
                 (
-                    emptyPointPatchField<Type>::typeName,
+                    pointPatchFieldBase::emptyType(),
                     tgtMesh.boundary()[patchi],
-                    DimensionedField<Type, pointMesh>::null()
+                    pointPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
index d66463a46d9c055b23aeb8f70591d2e9a57c566b..011569f452cd1237c47ed9183180c79bc64033f8 100644
--- a/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/pointPatchField/pointPatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2019-2023 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -240,26 +240,32 @@ class pointPatchField
 :
     public pointPatchFieldBase
 {
-    // Private Data
+public:
 
-        //- Reference to internal field
-        const DimensionedField<Type, pointMesh>& internalField_;
+    // Public Data Types
 
+        //- The patch type for the patch field
+        typedef pointPatch Patch;
 
-public:
+        //- The value_type for the patch field
+        typedef Type value_type;
+
+        //- The internal field type associated with the patch field
+        typedef DimensionedField<Type, pointMesh> Internal;
 
-    //- The Field value_type
-    typedef Type value_type;
+        //- Type for a \em calculated patch
+        typedef calculatedPointPatchField<Type> Calculated;
 
-    //- The internal field type associated with the patch field
-    typedef DimensionedField<Type, pointMesh> Internal;
 
-    //- The patch type for the patch field
-    typedef pointPatch Patch;
+private:
+
+    // Private Data
+
+        //- Reference to internal field
+        const DimensionedField<Type, pointMesh>& internalField_;
 
-    //- Type for a \em calculated patch
-    typedef calculatedPointPatchField<Type> Calculated;
 
+public:
 
     // Declare run-time constructor selection tables
 
diff --git a/src/finiteArea/distributed/faMeshDistributorTemplates.C b/src/finiteArea/distributed/faMeshDistributorTemplates.C
index 19ddc494040cda42badc3744459b0a4a18eb6d9f..9215cc3b2bf31b15a99dd9d22f93c5b8d11d72f5 100644
--- a/src/finiteArea/distributed/faMeshDistributorTemplates.C
+++ b/src/finiteArea/distributed/faMeshDistributorTemplates.C
@@ -26,8 +26,8 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "Time.H"
-#include "emptyFaPatchField.H"
-#include "emptyFaePatchField.H"
+#include "faPatchFields.H"
+#include "faePatchFields.H"
 #include "IOobjectList.H"
 #include "polyMesh.H"
 #include "polyPatch.H"
@@ -49,10 +49,6 @@ Foam::faMeshDistributor::distributeField
     const GeometricField<Type, faPatchField, areaMesh>& fld
 ) const
 {
-    typedef typename
-        GeometricField<Type, faPatchField, areaMesh>::Patch
-        PatchFieldType;
-
     if (tgtMesh_.boundary().size() && patchEdgeMaps_.empty())
     {
         createPatchMaps();
@@ -87,7 +83,7 @@ Foam::faMeshDistributor::distributeField
 
     // Create patchFields by remote mapping
 
-    PtrList<PatchFieldType> newPatchFields(tgtMesh_.boundary().size());
+    PtrList<faPatchField<Type>> newPatchFields(tgtMesh_.boundary().size());
 
     const auto& bfld = fld.boundaryField();
 
@@ -107,11 +103,11 @@ Foam::faMeshDistributor::distributeField
             newPatchFields.set
             (
                 patchi,
-                PatchFieldType::New
+                faPatchField<Type>::New
                 (
                     bfld[patchi],
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, areaMesh>::null(),
+                    faPatchField<Type>::Internal::null(),
                     mapper
                 )
             );
@@ -127,11 +123,11 @@ Foam::faMeshDistributor::distributeField
             newPatchFields.set
             (
                 patchi,
-                PatchFieldType::New
+                faPatchField<Type>::New
                 (
-                    emptyFaPatchField<Type>::typeName,
+                    faPatchFieldBase::emptyType(),
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, areaMesh>::null()
+                    faPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -158,10 +154,6 @@ Foam::faMeshDistributor::distributeField
     const GeometricField<Type, faePatchField, edgeMesh>& fld
 ) const
 {
-    typedef typename
-        GeometricField<Type, faePatchField, edgeMesh>::Patch
-        PatchFieldType;
-
     if (!internalEdgeMap_)
     {
         createInternalEdgeMap();
@@ -197,7 +189,7 @@ Foam::faMeshDistributor::distributeField
 
     // Create patchFields by remote mapping
 
-    PtrList<PatchFieldType> newPatchFields(tgtMesh_.boundary().size());
+    PtrList<faePatchField<Type>> newPatchFields(tgtMesh_.boundary().size());
 
     const auto& bfld = fld.boundaryField();
 
@@ -217,11 +209,11 @@ Foam::faMeshDistributor::distributeField
             newPatchFields.set
             (
                 patchi,
-                PatchFieldType::New
+                faePatchField<Type>::New
                 (
                     bfld[patchi],
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, edgeMesh>::null(),
+                    faePatchField<Type>::Internal::null(),
                     mapper
                 )
             );
@@ -237,11 +229,11 @@ Foam::faMeshDistributor::distributeField
             newPatchFields.set
             (
                 patchi,
-                PatchFieldType::New
+                faePatchField<Type>::New
                 (
-                    emptyFaePatchField<Type>::typeName,
+                    faePatchFieldBase::emptyType(),
                     tgtMesh_.boundary()[patchi],
-                    DimensionedField<Type, edgeMesh>::null()
+                    faePatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/finiteArea/faMesh/faMeshSubset/faMeshSubsetTemplates.C b/src/finiteArea/faMesh/faMeshSubset/faMeshSubsetTemplates.C
index 93340446e483ed9f3d1314d918f790a3d10e3d9c..28a147b7b4a8da836d54dab61916399bfcddb08d 100644
--- a/src/finiteArea/faMesh/faMeshSubset/faMeshSubsetTemplates.C
+++ b/src/finiteArea/faMesh/faMeshSubset/faMeshSubsetTemplates.C
@@ -60,7 +60,7 @@ Foam::faMeshSubset::interpolate
             (
                 faPatchFieldBase::calculatedType(),
                 sMesh.boundary()[patchi],
-                DimensionedField<Type, areaMesh>::null()
+                faPatchField<Type>::Internal::null()
             )
         );
     }
@@ -167,7 +167,7 @@ Foam::faMeshSubset::interpolate
             (
                 faePatchFieldBase::calculatedType(),
                 sMesh.boundary()[patchi],
-                DimensionedField<Type, edgeMesh>::null()
+                faePatchField<Type>::Internal::null()
             )
         );
     }
diff --git a/src/finiteArea/fields/faPatchFields/faPatchField/faPatchField.H b/src/finiteArea/fields/faPatchFields/faPatchField/faPatchField.H
index e1f208e274f7b4bb5c5ab594205385904d95e471..f2c438325badd8ca55a5780db486612c13221900 100644
--- a/src/finiteArea/fields/faPatchFields/faPatchField/faPatchField.H
+++ b/src/finiteArea/fields/faPatchFields/faPatchField/faPatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2016-2017 Wikki Ltd
-    Copyright (C) 2019-2023 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -238,11 +238,31 @@ class faPatchField
     public faPatchFieldBase,
     public Field<Type>
 {
+public:
+
+    // Public Data Types
+
+        //- The patch type for the patch field
+        typedef faPatch Patch;
+
+        //- The value_type for the patch field
+        typedef Type value_type;
+
+        //- The internal field type associated with the patch field
+        typedef DimensionedField<Type, areaMesh> Internal;
+
+        //- Type for a \em calculated patch
+        typedef calculatedFaPatchField<Type> Calculated;
+
+
+private:
+
     // Private Data
 
         //- Reference to internal field
         const DimensionedField<Type, areaMesh>& internalField_;
 
+
 protected:
 
     // Protected Member Functions
@@ -268,16 +288,6 @@ protected:
 
 public:
 
-    //- The internal field type associated with the patch field
-    typedef DimensionedField<Type, areaMesh> Internal;
-
-    //- The patch type for the patch field
-    typedef faPatch Patch;
-
-    //- Type for a \em calculated patch
-    typedef calculatedFaPatchField<Type> Calculated;
-
-
     // Declare run-time constructor selection tables
 
         declareRunTimeSelectionTable
diff --git a/src/finiteArea/fields/faePatchFields/faePatchField/faePatchField.H b/src/finiteArea/fields/faePatchFields/faePatchField/faePatchField.H
index d009f72dc8b99fd55dca7e8ba8e6ad9ef9b0d8c2..b484b702b5fd63a33255660b0ccb075efee0632a 100644
--- a/src/finiteArea/fields/faePatchFields/faePatchField/faePatchField.H
+++ b/src/finiteArea/fields/faePatchFields/faePatchField/faePatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2016-2017 Wikki Ltd
-    Copyright (C) 2019-2023 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -211,6 +211,25 @@ class faePatchField
     public faePatchFieldBase,
     public Field<Type>
 {
+public:
+
+    // Public Data Types
+
+        //- The patch type for the patch field
+        typedef faPatch Patch;
+
+        //- The value_type for the patch field
+        typedef Type value_type;
+
+        //- The internal field type associated with the patch field
+        typedef DimensionedField<Type, edgeMesh> Internal;
+
+        //- Type for a \em calculated patch
+        typedef calculatedFaePatchField<Type> Calculated;
+
+
+private:
+
     // Private Data
 
         //- Reference to internal field
@@ -238,16 +257,6 @@ protected:
 
 public:
 
-    //- The internal field type associated with the patch field
-    typedef DimensionedField<Type, edgeMesh> Internal;
-
-    //- The patch type for the patch field
-    typedef faPatch Patch;
-
-    //- Type for a \em calculated patch
-    typedef calculatedFaePatchField<Type> Calculated;
-
-
     // Declare run-time constructor selection tables
 
         declareRunTimeSelectionTable
diff --git a/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H b/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
index 6237d679d883de88edbcba3946bd771d8fea52a0..1d993b178ba4d48ad2065df2da451a89a27d1492 100644
--- a/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/fvPatchField/fvPatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2019-2023 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -281,11 +281,31 @@ class fvPatchField
     public fvPatchFieldBase,
     public Field<Type>
 {
+public:
+
+    // Public Data Types
+
+        //- The patch type for the patch field
+        typedef fvPatch Patch;
+
+        //- The value_type for the patch field
+        typedef Type value_type;
+
+        //- The internal field type associated with the patch field
+        typedef DimensionedField<Type, volMesh> Internal;
+
+        //- Type for a \em calculated patch
+        typedef calculatedFvPatchField<Type> Calculated;
+
+
+private:
+
     // Private Data
 
         //- Reference to internal field
         const DimensionedField<Type, volMesh>& internalField_;
 
+
 protected:
 
     // Protected Member Functions
@@ -311,16 +331,6 @@ protected:
 
 public:
 
-    //- The internal field type associated with the patch field
-    typedef DimensionedField<Type, volMesh> Internal;
-
-    //- The patch type for the patch field
-    typedef fvPatch Patch;
-
-    //- Type for a \em calculated patch
-    typedef calculatedFvPatchField<Type> Calculated;
-
-
     // Declare run-time constructor selection tables
 
         declareRunTimeSelectionTable
diff --git a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
index c6ab5ffc0448ce07bbbf8b3ca2acb11f6385f125..d4b9ff1c180a2d12e48ad86e9130db317b3451bc 100644
--- a/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
+++ b/src/finiteVolume/fields/fvsPatchFields/fvsPatchField/fvsPatchField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2019-2023 OpenCFD Ltd.
+    Copyright (C) 2019-2024 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -205,11 +205,31 @@ class fvsPatchField
     public fvsPatchFieldBase,
     public Field<Type>
 {
+public:
+
+    // Public Data Types
+
+        //- The patch type for the patch field
+        typedef fvPatch Patch;
+
+        //- The value_type for the patch field
+        typedef Type value_type;
+
+        //- The internal field type associated with the patch field
+        typedef DimensionedField<Type, surfaceMesh> Internal;
+
+        //- Type for a \em calculated patch
+        typedef calculatedFvsPatchField<Type> Calculated;
+
+
+private:
+
     // Private Data
 
         //- Reference to internal field
         const DimensionedField<Type, surfaceMesh>& internalField_;
 
+
 protected:
 
     // Protected Member Functions
@@ -232,16 +252,6 @@ protected:
 
 public:
 
-    //- The internal field type associated with the patch field
-    typedef DimensionedField<Type, surfaceMesh> Internal;
-
-    //- The patch type for the patch field
-    typedef fvPatch Patch;
-
-    //- Type for a \em calculated patch
-    typedef calculatedFvsPatchField<Type> Calculated;
-
-
     // Declare run-time constructor selection tables
 
         declareRunTimeSelectionTable
diff --git a/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubsetTemplates.C b/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubsetTemplates.C
index 8d5da86172a61ad7f7a20309100f987b6885a8ea..9dd83ab0e0aed4058f4c5659be6cb1bd59cb60e2 100644
--- a/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubsetTemplates.C
+++ b/src/finiteVolume/fvMesh/fvMeshSubset/fvMeshSubsetTemplates.C
@@ -67,7 +67,7 @@ Foam::fvMeshSubset::interpolate
                 new emptyFvPatchField<Type>
                 (
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -80,7 +80,7 @@ Foam::fvMeshSubset::interpolate
                 (
                     fvPatchFieldBase::calculatedType(),
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -248,7 +248,7 @@ Foam::fvMeshSubset::interpolate
                 new emptyFvsPatchField<Type>
                 (
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, surfaceMesh>::null()
+                    fvsPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -261,7 +261,7 @@ Foam::fvMeshSubset::interpolate
                 (
                     fvsPatchFieldBase::calculatedType(),
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, surfaceMesh>::null()
+                    fvsPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -435,7 +435,7 @@ Foam::fvMeshSubset::interpolate
                 new emptyPointPatchField<Type>
                 (
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, pointMesh>::null()
+                    pointPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -448,7 +448,7 @@ Foam::fvMeshSubset::interpolate
                 (
                     pointPatchFieldBase::calculatedType(),
                     sMesh.boundary()[patchi],
-                    DimensionedField<Type, pointMesh>::null()
+                    pointPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMeshInterpolate.C b/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMeshInterpolate.C
index 767a08ff88ba1d858ade866d249217cfa65bc447..312b763fcc2fcd37a529f91fc74ebc3a40060828 100644
--- a/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMeshInterpolate.C
+++ b/src/finiteVolume/fvMesh/singleCellFvMesh/singleCellFvMeshInterpolate.C
@@ -55,7 +55,7 @@ tmp<GeometricField<Type, fvPatchField, volMesh>> singleCellFvMesh::interpolate
             (
                 fvPatchFieldBase::calculatedType(),
                 boundary()[patchi],
-                DimensionedField<Type, volMesh>::null()
+                fvPatchField<Type>::Internal::null()
             )
         );
     }
diff --git a/src/parallel/decompose/decompose/fvFieldDecomposerTemplates.C b/src/parallel/decompose/decompose/fvFieldDecomposerTemplates.C
index caa7884053f10100264be19078c10d1b80dee1b7..007ee5d3d0fd9c0ff68db940aa28b81037507d76 100644
--- a/src/parallel/decompose/decompose/fvFieldDecomposerTemplates.C
+++ b/src/parallel/decompose/decompose/fvFieldDecomposerTemplates.C
@@ -89,7 +89,7 @@ Foam::fvFieldDecomposer::decomposeField
             (
                 fvPatchFieldBase::calculatedType(),
                 procMesh_.boundary()[patchi],
-                DimensionedField<Type, volMesh>::null()
+                fvPatchField<Type>::Internal::null()
             )
         );
     }
@@ -262,7 +262,7 @@ Foam::fvFieldDecomposer::decomposeField
             (
                 fvsPatchFieldBase::calculatedType(),
                 procMesh_.boundary()[patchi],
-                DimensionedField<Type, surfaceMesh>::null()
+                fvsPatchField<Type>::Internal::null()
             )
         );
     }
diff --git a/src/parallel/decompose/decompose/pointFieldDecomposerTemplates.C b/src/parallel/decompose/decompose/pointFieldDecomposerTemplates.C
index b42fbc1a21fb14ea681ee5cb9b9cceaf1614e1df..0c01857cd7eba0f9d53be2fdb30a37a1e70a387d 100644
--- a/src/parallel/decompose/decompose/pointFieldDecomposerTemplates.C
+++ b/src/parallel/decompose/decompose/pointFieldDecomposerTemplates.C
@@ -56,7 +56,7 @@ Foam::pointFieldDecomposer::decomposeField
                 (
                     field.boundaryField()[boundaryAddressing_[patchi]],
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, pointMesh>::null(),
+                    pointPatchField<Type>::Internal::null(),
                     patchFieldDecomposerPtrs_[patchi]
                 )
             );
@@ -69,7 +69,7 @@ Foam::pointFieldDecomposer::decomposeField
                 new processorPointPatchField<Type>
                 (
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, pointMesh>::null()
+                    pointPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/parallel/decompose/faDecompose/faFieldDecomposerTemplates.C b/src/parallel/decompose/faDecompose/faFieldDecomposerTemplates.C
index 2c6cfb251f750d614fd0dddea06b221070362ccb..ee072e7a67cbb979e5096dd85bcbfeddb2dc9615 100644
--- a/src/parallel/decompose/faDecompose/faFieldDecomposerTemplates.C
+++ b/src/parallel/decompose/faDecompose/faFieldDecomposerTemplates.C
@@ -60,7 +60,7 @@ Foam::faFieldDecomposer::decomposeField
                 (
                     field.boundaryField()[oldPatchi],
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, areaMesh>::null(),
+                    faPatchField<Type>::Internal::null(),
                     patchFieldDecomposerPtrs_[patchi]
                 )
             );
@@ -73,7 +73,7 @@ Foam::faFieldDecomposer::decomposeField
                 new processorFaPatchField<Type>
                 (
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, areaMesh>::null(),
+                    faPatchField<Type>::Internal::null(),
                     Field<Type>
                     (
                         field.internalField(),
@@ -171,7 +171,7 @@ Foam::faFieldDecomposer::decomposeField
                 (
                     field.boundaryField()[oldPatchi],
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, edgeMesh>::null(),
+                    faePatchField<Type>::Internal::null(),
                     patchFieldDecomposerPtrs_[patchi]
                 )
             );
@@ -184,7 +184,7 @@ Foam::faFieldDecomposer::decomposeField
                 new processorFaePatchField<Type>
                 (
                     procMesh_.boundary()[patchi],
-                    DimensionedField<Type, edgeMesh>::null(),
+                    faePatchField<Type>::Internal::null(),
                     Field<Type>
                     (
                         allEdgeField,
diff --git a/src/parallel/reconstruct/faReconstruct/faFieldReconstructorTemplates.C b/src/parallel/reconstruct/faReconstruct/faFieldReconstructorTemplates.C
index e5c27951ff7cefbcf5f5f2b1445c1991725cb849..15d1fb3b63db1a89097b082754d86c06ac0f795c 100644
--- a/src/parallel/reconstruct/faReconstruct/faFieldReconstructorTemplates.C
+++ b/src/parallel/reconstruct/faReconstruct/faFieldReconstructorTemplates.C
@@ -29,10 +29,9 @@ License
 #include "faFieldReconstructor.H"
 #include "Time.H"
 #include "PtrList.H"
-#include "faPatchFields.H"
 #include "emptyFaPatch.H"
-#include "emptyFaPatchField.H"
-#include "emptyFaePatchField.H"
+#include "faPatchFields.H"
+#include "faePatchFields.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
@@ -130,7 +129,7 @@ Foam::faFieldReconstructor::reconstructField
                         (
                             procField.boundaryField()[patchI],
                             mesh_.boundary()[curBPatch],
-                            DimensionedField<Type, areaMesh>::null(),
+                            faPatchField<Type>::Internal::null(),
                             faPatchFieldReconstructor
                             (
                                 mesh_.boundary()[curBPatch].size(),
@@ -204,7 +203,7 @@ Foam::faFieldReconstructor::reconstructField
                                 (
                                     mesh_.boundary()[curBPatch].type(),
                                     mesh_.boundary()[curBPatch],
-                                    DimensionedField<Type, areaMesh>::null()
+                                    faPatchField<Type>::Internal::null()
                                 )
                             );
                         }
@@ -238,9 +237,9 @@ Foam::faFieldReconstructor::reconstructField
                 patchI,
                 faPatchField<Type>::New
                 (
-                    emptyFaPatchField<Type>::typeName,
+                    faPatchFieldBase::emptyType(),
                     mesh_.boundary()[patchI],
-                    DimensionedField<Type, areaMesh>::null()
+                    faPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -371,7 +370,7 @@ Foam::faFieldReconstructor::reconstructField
                         (
                             procField.boundaryField()[patchI],
                             mesh_.boundary()[curBPatch],
-                            DimensionedField<Type, edgeMesh>::null(),
+                            faePatchField<Type>::Internal::null(),
                             faPatchFieldReconstructor
                             (
                                 mesh_.boundary()[curBPatch].size(),
@@ -448,8 +447,7 @@ Foam::faFieldReconstructor::reconstructField
                                     (
                                         mesh_.boundary()[curBPatch].type(),
                                         mesh_.boundary()[curBPatch],
-                                        DimensionedField<Type, edgeMesh>
-                                           ::null()
+                                        faePatchField<Type>::Internal::null()
                                     )
                                 );
                             }
@@ -489,9 +487,9 @@ Foam::faFieldReconstructor::reconstructField
                 patchI,
                 faePatchField<Type>::New
                 (
-                    emptyFaePatchField<Type>::typeName,
+                    faePatchFieldBase::emptyType(),
                     mesh_.boundary()[patchI],
-                    DimensionedField<Type, edgeMesh>::null()
+                    faePatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorTemplates.C b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorTemplates.C
index 70a31ea8ccc7abc68821b0eedf8c2967e1d7f49e..1549abe4e78f3286b56ba9ba8b9c837408a9fc79 100644
--- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorTemplates.C
+++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorTemplates.C
@@ -29,10 +29,9 @@ License
 #include "fvFieldReconstructor.H"
 #include "Time.H"
 #include "PtrList.H"
-#include "fvPatchFields.H"
 #include "emptyFvPatch.H"
-#include "emptyFvPatchField.H"
-#include "emptyFvsPatchField.H"
+#include "fvPatchFields.H"
+#include "fvsPatchFields.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
@@ -125,7 +124,7 @@ Foam::fvFieldReconstructor::reconstructField
                         (
                             procField.boundaryField()[patchi],
                             mesh_.boundary()[curBPatch],
-                            DimensionedField<Type, volMesh>::null(),
+                            fvPatchField<Type>::Internal::null(),
                             fvPatchFieldReconstructor
                             (
                                 mesh_.boundary()[curBPatch].size()
@@ -193,7 +192,7 @@ Foam::fvFieldReconstructor::reconstructField
                                 (
                                     mesh_.boundary()[curBPatch].type(),
                                     mesh_.boundary()[curBPatch],
-                                    DimensionedField<Type, volMesh>::null()
+                                    fvPatchField<Type>::Internal::null()
                                 )
                             );
                         }
@@ -225,9 +224,9 @@ Foam::fvFieldReconstructor::reconstructField
                 patchi,
                 fvPatchField<Type>::New
                 (
-                    emptyFvPatchField<Type>::typeName,
+                    fvPatchFieldBase::emptyType(),
                     mesh_.boundary()[patchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -323,7 +322,7 @@ Foam::fvFieldReconstructor::reconstructField
                         (
                             procField.boundaryField()[patchi],
                             mesh_.boundary()[curBPatch],
-                            DimensionedField<Type, surfaceMesh>::null(),
+                            fvsPatchField<Type>::Internal::null(),
                             fvPatchFieldReconstructor
                             (
                                 mesh_.boundary()[curBPatch].size()
@@ -379,8 +378,7 @@ Foam::fvFieldReconstructor::reconstructField
                                     (
                                         mesh_.boundary()[curBPatch].type(),
                                         mesh_.boundary()[curBPatch],
-                                        DimensionedField<Type, surfaceMesh>
-                                           ::null()
+                                        fvsPatchField<Type>::Internal::null()
                                     )
                                 );
                             }
@@ -418,9 +416,9 @@ Foam::fvFieldReconstructor::reconstructField
                 patchi,
                 fvsPatchField<Type>::New
                 (
-                    emptyFvsPatchField<Type>::typeName,
+                    fvsPatchFieldBase::emptyType(),
                     mesh_.boundary()[patchi],
-                    DimensionedField<Type, surfaceMesh>::null()
+                    fvsPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/parallel/reconstruct/reconstruct/pointFieldReconstructorTemplates.C b/src/parallel/reconstruct/reconstruct/pointFieldReconstructorTemplates.C
index ae49e24b1b7f9bed9076b946288398b51b58ac7c..bc7b03167a29a2990f2fdb4cc9eb01d5fdc3aed8 100644
--- a/src/parallel/reconstruct/reconstruct/pointFieldReconstructorTemplates.C
+++ b/src/parallel/reconstruct/reconstruct/pointFieldReconstructorTemplates.C
@@ -79,7 +79,7 @@ Foam::pointFieldReconstructor::reconstructField
                         (
                             procField.boundaryField()[patchi],
                             mesh_.boundary()[curBPatch],
-                            DimensionedField<Type, pointMesh>::null(),
+                            pointPatchField<Type>::Internal::null(),
                             pointPatchFieldReconstructor
                             (
                                 mesh_.boundary()[curBPatch].size()
diff --git a/src/sampling/meshToMesh/meshToMeshTemplates.C b/src/sampling/meshToMesh/meshToMeshTemplates.C
index afea1c70b69c2d253eb65bcc6938e0db3608b6da..a1f8b6f637b466d3adb0a38ac226dd35dd9df35b 100644
--- a/src/sampling/meshToMesh/meshToMeshTemplates.C
+++ b/src/sampling/meshToMesh/meshToMeshTemplates.C
@@ -612,7 +612,7 @@ Foam::meshToMesh::mapSrcToTgt
                 (
                     srcBfld[srcPatchi],
                     tgtMesh.boundary()[tgtPatchi],
-                    DimensionedField<Type, volMesh>::null(),
+                    fvPatchField<Type>::Internal::null(),
                     directFvPatchFieldMapper
                     (
                         labelList(tgtMesh.boundary()[tgtPatchi].size(), -1)
@@ -636,7 +636,7 @@ Foam::meshToMesh::mapSrcToTgt
                 (
                     fvPatchFieldBase::calculatedType(),
                     tgtMesh.boundary()[tgtPatchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
@@ -843,7 +843,7 @@ Foam::meshToMesh::mapTgtToSrc
                 (
                     tgtBfld[tgtPatchi],
                     srcMesh.boundary()[srcPatchi],
-                    DimensionedField<Type, volMesh>::null(),
+                    fvPatchField<Type>::Internal::null(),
                     directFvPatchFieldMapper
                     (
                         labelList(srcMesh.boundary()[srcPatchi].size(), -1)
@@ -867,7 +867,7 @@ Foam::meshToMesh::mapTgtToSrc
                 (
                     fvPatchFieldBase::calculatedType(),
                     srcMesh.boundary()[srcPatchi],
-                    DimensionedField<Type, volMesh>::null()
+                    fvPatchField<Type>::Internal::null()
                 )
             );
         }
diff --git a/src/sampling/meshToMesh0/meshToMesh0Templates.C b/src/sampling/meshToMesh0/meshToMesh0Templates.C
index c40298f4bd38b40cd1eb5b46846261e647ea2466..8daeb7a09a153d94391f82b5d2ab56db24481faa 100644
--- a/src/sampling/meshToMesh0/meshToMesh0Templates.C
+++ b/src/sampling/meshToMesh0/meshToMesh0Templates.C
@@ -395,7 +395,7 @@ Foam::meshToMesh0::interpolate
             (
                 fromVf.boundaryField()[patchi],
                 toMesh_.boundary()[patchi],
-                DimensionedField<Type, volMesh>::null(),
+                fvPatchField<Type>::Internal::null(),
                 patchFieldInterpolator
                 (
                     boundaryAddressing_[patchi]