diff --git a/applications/test/Function1/Test-Function1.C b/applications/test/Function1/Test-Function1.C
index 3d27af76495c1c6266645bbe25531b6c69ee9b47..951786ad7114ec0b30bb377baa3a5818c213bb0f 100644
--- a/applications/test/Function1/Test-Function1.C
+++ b/applications/test/Function1/Test-Function1.C
@@ -109,7 +109,11 @@ int main(int argc, char *argv[])
     {
         #include "setConstantRunTimeDictionaryIO.H"
 
-        IOdictionary propsDict(dictIO);
+        #if (OPENFOAM > 2212)
+        dictionary propsDict(IOdictionary::readContents(dictIO));
+        #else
+        dictionary propsDict(static_cast<dictionary&&>(IOdictionary(dictIO)));
+        #endif
 
         const scalarField xvals(propsDict.lookup("x"));
 
diff --git a/src/OpenFOAM/db/IOobject/IOobject.H b/src/OpenFOAM/db/IOobject/IOobject.H
index 5f088ae206edc1b0e40b6f7282cc8a22661c3429..016032a180bb7c072117724b84f85838962b1f8f 100644
--- a/src/OpenFOAM/db/IOobject/IOobject.H
+++ b/src/OpenFOAM/db/IOobject/IOobject.H
@@ -434,6 +434,13 @@ public:
             IOobjectOption::writeOption wOpt
         );
 
+        //- Copy construct, resetting register option
+        inline IOobject
+        (
+            const IOobject& io,
+            IOobjectOption::registerOption regOpt
+        );
+
 
         //- Clone
         autoPtr<IOobject> clone() const
diff --git a/src/OpenFOAM/db/IOobject/IOobjectI.H b/src/OpenFOAM/db/IOobject/IOobjectI.H
index 41a410fc2ed9ee4a78d591c44a9a2fe80cc0e8a3..eed345e0d2595481da6af6685f3247e79ff41471 100644
--- a/src/OpenFOAM/db/IOobject/IOobjectI.H
+++ b/src/OpenFOAM/db/IOobject/IOobjectI.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2017-2022 OpenCFD Ltd.
+    Copyright (C) 2017-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -145,8 +145,20 @@ inline Foam::IOobject::IOobject
 :
     IOobject(io)
 {
-    readOpt(rOpt);
-    writeOpt(wOpt);
+    IOobjectOption::readOpt(rOpt);
+    IOobjectOption::writeOpt(wOpt);
+}
+
+
+inline Foam::IOobject::IOobject
+(
+    const IOobject& io,
+    IOobjectOption::registerOption regOpt
+)
+:
+    IOobject(io)
+{
+    IOobjectOption::registerObject(regOpt);
 }
 
 
diff --git a/src/OpenFOAM/db/IOobject/IOobjectTemplates.C b/src/OpenFOAM/db/IOobject/IOobjectTemplates.C
index 2c95206a1d096740f8155e05556a722d223af456..444d219dc5d1321a121c515ff961bb23e0714441 100644
--- a/src/OpenFOAM/db/IOobject/IOobjectTemplates.C
+++ b/src/OpenFOAM/db/IOobject/IOobjectTemplates.C
@@ -93,7 +93,7 @@ void Foam::IOobject::warnNoRereading() const
     {
         WarningInFunction
             << Type::typeName << ' ' << name()
-            << " constructed with IOobject::MUST_READ_IF_MODIFIED but "
+            << " constructed with MUST_READ_IF_MODIFIED but "
             << Type::typeName << " does not support automatic rereading."
             << endl;
     }
diff --git a/src/OpenFOAM/db/IOobjects/IOField/IOField.C b/src/OpenFOAM/db/IOobjects/IOField/IOField.C
index fd249924886618af035c42a0c0ca3b621185ef62..516971f8c070eb03529a3586a77ca27f1a752efe 100644
--- a/src/OpenFOAM/db/IOobjects/IOField/IOField.C
+++ b/src/OpenFOAM/db/IOobjects/IOField/IOField.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2016-2022 OpenCFD Ltd.
+    Copyright (C) 2016-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -180,6 +180,23 @@ Foam::IOFieldRef<Type>::IOFieldRef
 {}
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Field<Type> Foam::IOField<Type>::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    IOField<Type> reader(rio);
+
+    return Field<Type>(std::move(static_cast<Field<Type>&>(reader)));
+}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/OpenFOAM/db/IOobjects/IOField/IOField.H b/src/OpenFOAM/db/IOobjects/IOField/IOField.H
index e7ac808430da9e66c28d9ab60126b236765ee7ee..bb6bff25848c29701388a09bcdbeced47c14a14c 100644
--- a/src/OpenFOAM/db/IOobjects/IOField/IOField.H
+++ b/src/OpenFOAM/db/IOobjects/IOField/IOField.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2018-2022 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -98,6 +98,12 @@ public:
         IOField(const IOobject& io, const tmp<Field<Type>>& tfld);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static Field<Type> readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~IOField() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOList/IOList.C b/src/OpenFOAM/db/IOobjects/IOList/IOList.C
index bb29720f1cabb7d08b107fd56783a0517b77f67f..59c6b63a8e9a9790a76d47d8dee54390ef9c3d00 100644
--- a/src/OpenFOAM/db/IOobjects/IOList/IOList.C
+++ b/src/OpenFOAM/db/IOobjects/IOList/IOList.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2016-2022 OpenCFD Ltd.
+    Copyright (C) 2016-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -126,6 +126,23 @@ Foam::IOListRef<T>::IOListRef
 {}
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class T>
+Foam::List<T> Foam::IOList<T>::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    IOList<T> reader(rio);
+
+    return List<T>(std::move(static_cast<List<T>&>(reader)));
+}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class T>
diff --git a/src/OpenFOAM/db/IOobjects/IOList/IOList.H b/src/OpenFOAM/db/IOobjects/IOList/IOList.H
index d22d73e7c524543f1f316aec9c911effb1d9c5d9..d621655476c1fa6e15a69c6f539769be80ac90bc 100644
--- a/src/OpenFOAM/db/IOobjects/IOList/IOList.H
+++ b/src/OpenFOAM/db/IOobjects/IOList/IOList.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2018-2022 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -92,6 +92,12 @@ public:
         IOList(const IOobject& io, List<T>&& content);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject is never registered
+        static List<T> readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~IOList() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOMap/IOMap.C b/src/OpenFOAM/db/IOobjects/IOMap/IOMap.C
index 253d9960a2e20b3fbd66252071bc14d9dcef1e1d..702aebd322ebb11d0998ae438dde9f297c96123e 100644
--- a/src/OpenFOAM/db/IOobjects/IOMap/IOMap.C
+++ b/src/OpenFOAM/db/IOobjects/IOMap/IOMap.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2018-2022 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -94,6 +94,23 @@ Foam::IOMap<T>::IOMap(const IOobject& io, Map<T>&& content)
 }
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class T>
+Foam::Map<T> Foam::IOMap<T>::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    IOMap<T> reader(rio);
+
+    return Map<T>(std::move(static_cast<Map<T>&>(reader)));
+}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class T>
diff --git a/src/OpenFOAM/db/IOobjects/IOMap/IOMap.H b/src/OpenFOAM/db/IOobjects/IOMap/IOMap.H
index ea226239c8de55bee9a6409cfe896bb1305154e4..637c302a24090f2fa0963f4a65dbae91a22f9d23 100644
--- a/src/OpenFOAM/db/IOobjects/IOMap/IOMap.H
+++ b/src/OpenFOAM/db/IOobjects/IOMap/IOMap.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2018-2022 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -89,6 +89,12 @@ public:
         IOMap(const IOobject&, Map<T>&& content);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static Map<T> readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~IOMap() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C
index cc46681dbf69854283d133f54ebb5e4405568cd2..48efa21d5ea2764005454b81ce089ff12528a984 100644
--- a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C
+++ b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2018-2022 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -116,6 +116,23 @@ Foam::IOPtrList<T>::IOPtrList(const IOobject& io, PtrList<T>&& content)
 }
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class T>
+Foam::PtrList<T> Foam::IOPtrList<T>::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    IOPtrList<T> reader(rio);
+
+    return PtrList<T>(std::move(static_cast<PtrList<T>&>(reader)));
+}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class T>
diff --git a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H
index aa829d34a5841b72d6c2ba4dc37465791ec8f1cc..a838177aa9696c3ff0bd52fb0c0ea1ca86d30a5d 100644
--- a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H
+++ b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2016 OpenFOAM Foundation
-    Copyright (C) 2018 OpenCFD Ltd.
+    Copyright (C) 2018-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -35,8 +35,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef IOPtrList_H
-#define IOPtrList_H
+#ifndef Foam_IOPtrList_H
+#define Foam_IOPtrList_H
 
 #include "PtrList.H"
 #include "regIOobject.H"
@@ -84,6 +84,12 @@ public:
         IOPtrList(const IOobject& io, PtrList<T>&& content);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static PtrList<T> readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~IOPtrList() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
index 009dddadc90416936b87aa7cf98a58b8ad79efbc..83834881ec780ea84af366c4ee35db6be7e1eef1 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2021-2022 OpenCFD Ltd.
+    Copyright (C) 2021-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -91,4 +91,20 @@ Foam::IOdictionary::IOdictionary
 }
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::dictionary Foam::IOdictionary::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    IOdictionary reader(rio);
+
+    return dictionary(std::move(static_cast<dictionary&>(reader)));
+}
+
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.H b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.H
index 2ba3eb251368efee9dc5e3262742f05e547ada65..a10a3e25279a133aa2c293584106093206be4afb 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.H
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionary.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2021 OpenCFD Ltd.
+    Copyright (C) 2021-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -38,8 +38,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef IOdictionary_H
-#define IOdictionary_H
+#ifndef Foam_IOdictionary_H
+#define Foam_IOdictionary_H
 
 #include "baseIOdictionary.H"
 
@@ -87,6 +87,12 @@ public:
         IOdictionary(const IOobject& io, Istream& is);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static dictionary readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~IOdictionary() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/baseIOdictionary.H b/src/OpenFOAM/db/IOobjects/IOdictionary/baseIOdictionary.H
index 943c1cd4751007735816bae3d8414fa8b18ab1af..4615703727b34ceb741bf1d013fb12b86da718b8 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/baseIOdictionary.H
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/baseIOdictionary.H
@@ -39,8 +39,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef baseIOdictionary_H
-#define baseIOdictionary_H
+#ifndef Foam_baseIOdictionary_H
+#define Foam_baseIOdictionary_H
 
 #include "dictionary.H"
 #include "regIOobject.H"
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.C b/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.C
index 759ea26ce890784888363362883cb0470a36d976..bd45e100c782c1d490447494b41e5ffd9f4ee209 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.C
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2015-2017 OpenFOAM Foundation
-    Copyright (C) 2021-2022 OpenCFD Ltd.
+    Copyright (C) 2021-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -88,4 +88,20 @@ Foam::localIOdictionary::localIOdictionary
 }
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::dictionary Foam::localIOdictionary::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    localIOdictionary reader(rio);
+
+    return dictionary(std::move(static_cast<dictionary&>(reader)));
+}
+
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.H b/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.H
index d2e032139309a2dd3b45fe5d17777ec960d6c769..e151f258fc372b7d05248a66897624f527c262c5 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.H
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/localIOdictionary.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2015-2017 OpenFOAM Foundation
-    Copyright (C) 2021 OpenCFD Ltd.
+    Copyright (C) 2021-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -36,8 +36,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef localIOdictionary_H
-#define localIOdictionary_H
+#ifndef Foam_localIOdictionary_H
+#define Foam_localIOdictionary_H
 
 #include "baseIOdictionary.H"
 
@@ -84,6 +84,12 @@ public:
         localIOdictionary(const IOobject& io, Istream& is);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static dictionary readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~localIOdictionary() = default;
 
diff --git a/src/OpenFOAM/db/IOobjects/IOdictionary/unwatchedIOdictionary.H b/src/OpenFOAM/db/IOobjects/IOdictionary/unwatchedIOdictionary.H
index b38f5cf165e5bc81f19bf58f358d4f1c1796a28e..549666a02786dfbf2a356650535ba8c2cb099af1 100644
--- a/src/OpenFOAM/db/IOobjects/IOdictionary/unwatchedIOdictionary.H
+++ b/src/OpenFOAM/db/IOobjects/IOdictionary/unwatchedIOdictionary.H
@@ -37,8 +37,8 @@ SourceFiles
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef unwatchedIOdictionary_H
-#define unwatchedIOdictionary_H
+#ifndef Foam_unwatchedIOdictionary_H
+#define Foam_unwatchedIOdictionary_H
 
 #include "baseIOdictionary.H"
 
diff --git a/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.C b/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.C
index 35f6283f74ece71dd4abe2217f742386e42da0c9..69f4d1772b547a273a2e726b109b4e462ca47825 100644
--- a/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.C
+++ b/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.C
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2016-2022 OpenCFD Ltd.
+    Copyright (C) 2016-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -188,6 +188,23 @@ Foam::rawIOField<Type>::rawIOField
 {}
 
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class Type>
+Foam::Field<Type> Foam::rawIOField<Type>::readContents(const IOobject& io)
+{
+    IOobject rio(io, IOobjectOption::NO_REGISTER);
+    if (rio.readOpt() == IOobjectOption::MUST_READ_IF_MODIFIED)
+    {
+        rio.readOpt(IOobjectOption::MUST_READ);
+    }
+
+    rawIOField<Type> reader(rio);
+
+    return Field<Type>(std::move(static_cast<Field<Type>&>(reader)));
+}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.H b/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.H
index 3dfc3d0c6d5d446300cacaf2e9e53873a33bf2b8..eaf5a9e934eb911c27a27b4242c5db4a8079289b 100644
--- a/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.H
+++ b/src/OpenFOAM/db/IOobjects/rawIOField/rawIOField.H
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2020-2022 OpenCFD Ltd.
+    Copyright (C) 2020-2023 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -99,6 +99,12 @@ public:
         rawIOField(const IOobject& io, const bool readAverage);
 
 
+    // Factory Methods
+
+        //- Read and return contents. The IOobject will not be registered
+        static Field<Type> readContents(const IOobject& io);
+
+
     //- Destructor
     virtual ~rawIOField() = default;