diff --git a/src/finiteArea/faMatrices/faMatrix/faMatrix.C b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
index 55aa863bf71724c4fcecbb41c0c21b080b183645..074cc0693a88ec08fc4bf641bba6baacdaab338e 100644
--- a/src/finiteArea/faMatrices/faMatrix/faMatrix.C
+++ b/src/finiteArea/faMatrices/faMatrix/faMatrix.C
@@ -2108,18 +2108,12 @@ Foam::operator&
     const DimensionedField<Type, areaMesh>& psi
 )
 {
-    auto tMphi = tmp<GeometricField<Type, faPatchField, areaMesh>>::New
+    auto tMphi = GeometricField<Type, faPatchField, areaMesh>::New
     (
-        IOobject
-        (
-            "M&" + psi.name(),
-            psi.instance(),
-            psi.mesh().mesh(),
-            IOobject::NO_READ,
-            IOobject::NO_WRITE
-        ),
+        "M&" + psi.name(),
         psi.mesh(),
-        M.dimensions()/dimArea
+        M.dimensions()/dimArea,
+        faPatchFieldBase::extrapolatedCalculatedType()
     );
     auto& Mphi = tMphi.ref();
 
diff --git a/src/finiteArea/faMesh/faMesh.C b/src/finiteArea/faMesh/faMesh.C
index 7a0efb3f9f0721f3367106673675ddfc1bb3b16f..8e09506272805862e77c3f37b4cc286c002374ef 100644
--- a/src/finiteArea/faMesh/faMesh.C
+++ b/src/finiteArea/faMesh/faMesh.C
@@ -68,6 +68,25 @@ Foam::word Foam::faMesh::meshSubDir = "faMesh";
 const int Foam::faMesh::quadricsFit_ = 0;  // Tuning (experimental)
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+const Foam::objectRegistry* Foam::faMesh::registry(const polyMesh& pMesh)
+{
+    // This will change in the near future
+    return &static_cast<const objectRegistry&>(pMesh);
+}
+
+
+const Foam::faMesh& Foam::faMesh::mesh
+(
+    const polyMesh& pMesh
+)
+{
+    // This will change in the near future
+    return pMesh.lookupObject<faMesh>("faMesh");
+}
+
+
 // * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
 
 namespace Foam
diff --git a/src/finiteArea/faMesh/faMesh.H b/src/finiteArea/faMesh/faMesh.H
index c64430008132fec961699ac7c21b5c2550109657..49d35817f21923170debfad67bc2a23cd22c8226 100644
--- a/src/finiteArea/faMesh/faMesh.H
+++ b/src/finiteArea/faMesh/faMesh.H
@@ -625,6 +625,14 @@ public:
 
     // Database
 
+        //- The parent registry containing all finite-area meshes
+        //- on the polyMesh.
+        static const objectRegistry* registry(const polyMesh& pMesh);
+
+        //- The single-region finite-area region on the polyMesh.
+        //- Uses lookupObject semantics - Fatal if non-existent
+        static const faMesh& mesh(const polyMesh& pMesh);
+
         //- Return access to polyMesh
         inline const polyMesh& mesh() const;
 
diff --git a/src/functionObjects/utilities/areaWrite/areaWrite.C b/src/functionObjects/utilities/areaWrite/areaWrite.C
index 424471ddc723e3b29d525be42ffafd2c3e59e43d..cecb0e2fac3e5201c51021cbae163ce3df4d9ca8 100644
--- a/src/functionObjects/utilities/areaWrite/areaWrite.C
+++ b/src/functionObjects/utilities/areaWrite/areaWrite.C
@@ -148,18 +148,24 @@ bool Foam::areaWrite::read(const dictionary& dict)
 
     verbose_ = dict.getOrDefault("verbose", false);
 
+    // Registry containing all finite-area meshes on the polyMesh
+    const auto* faRegistry = faMesh::registry(mesh_);
+
     dict.readIfPresent("areas", selectAreas_);
 
     if (selectAreas_.empty())
     {
         word areaName;
+
         if (!dict.readIfPresent("area", areaName))
         {
-            wordList available = obr().sortedNames<faMesh>();
-
-            if (available.size())
+            if (faRegistry)
             {
-                areaName = available.front();
+                wordList available = faRegistry->sortedNames<faMesh>();
+                if (!available.empty())
+                {
+                    areaName = available.front();
+                }
             }
         }
 
@@ -171,7 +177,12 @@ bool Foam::areaWrite::read(const dictionary& dict)
     }
 
     // Restrict to specified meshes
-    meshes_ = obr().csorted<faMesh>(selectAreas_);
+    meshes_.clear();
+
+    if (faRegistry)
+    {
+        meshes_ = faRegistry->csorted<faMesh>(selectAreas_);
+    }
 
     dict.readEntry("fields", fieldSelection_);
     fieldSelection_.uniq();
@@ -252,7 +263,7 @@ bool Foam::areaWrite::write()
 
         selected.clear();
 
-        IOobjectList objects(0);
+        IOobjectList objects;
 
         if (loadFromFiles_)
         {
@@ -279,7 +290,7 @@ bool Foam::areaWrite::write()
         {
             if (!ListOps::found(allFields, fieldSelection_[i]))
             {
-                missed.append(i);
+                missed.push_back(i);
             }
         }
 
@@ -304,8 +315,8 @@ bool Foam::areaWrite::write()
 
             if
             (
-                fieldTypes::area.found(clsName)
-             || fieldTypes::area_internal.found(clsName)
+                fieldTypes::area.contains(clsName)
+             || fieldTypes::area_internal.contains(clsName)
             )
             {
                 nAreaFields += n;
diff --git a/src/functionObjects/utilities/areaWrite/areaWrite.H b/src/functionObjects/utilities/areaWrite/areaWrite.H
index 4c26164070827cbae16202af56975dd733d4d18f..4974f9f56b19e9e9548595b034486c93a2876017 100644
--- a/src/functionObjects/utilities/areaWrite/areaWrite.H
+++ b/src/functionObjects/utilities/areaWrite/areaWrite.H
@@ -75,8 +75,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef areaWrite_H
-#define areaWrite_H
+#ifndef Foam_areaWrite_H
+#define Foam_areaWrite_H
 
 #include "fvMeshFunctionObject.H"
 #include "polyMesh.H"
@@ -191,8 +191,8 @@ public:
             const dictionary& dict
         );
 
-        //- Construct for given objectRegistry and dictionary
-        //  allow the possibility to load fields from files
+        //- Construct for given objectRegistry and dictionary.
+        //- Allow the possibility to load fields from files
         areaWrite
         (
             const word& name,