diff --git a/META-INFO/api-info b/META-INFO/api-info
index 0821b0ef51831997726dfc7a9e4e36b5cb17b430..996a322b6a39d9f743b12663fad0f01284c8098e 100644
--- a/META-INFO/api-info
+++ b/META-INFO/api-info
@@ -1,2 +1,2 @@
-api=1812
-patch=190129
+api=1901
+patch=0
diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
index cc745f61e6c21b89458a77e39c75199dee86d8f6..f93d0c1f7d0867e296db2931f4a7ad6e9a5ed57c 100644
--- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C
+++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
@@ -285,6 +285,12 @@ bool Foam::objectRegistry::checkOut(regIOobject& io) const
 }
 
 
+bool Foam::objectRegistry::checkOut(const word& key) const
+{
+    return const_cast<objectRegistry&>(*this).erase(key);
+}
+
+
 void Foam::objectRegistry::clear()
 {
     // Free anything owned by the registry
@@ -367,6 +373,67 @@ void Foam::objectRegistry::rename(const word& newName)
 }
 
 
+bool Foam::objectRegistry::found
+(
+    const word& name,
+    const bool recursive
+) const
+{
+    return cfindIOobject(name, recursive);
+}
+
+
+const Foam::regIOobject* Foam::objectRegistry::cfindIOobject
+(
+    const word& name,
+    const bool recursive
+) const
+{
+    const_iterator iter = cfind(name);
+
+    if (iter.found())
+    {
+        return iter.val();
+    }
+    else if (recursive && this->parentNotTime())
+    {
+        return parent_.cfindIOobject(name, recursive);
+    }
+
+    return nullptr;
+}
+
+
+const Foam::regIOobject* Foam::objectRegistry::findIOobject
+(
+    const word& name,
+    const bool recursive
+) const
+{
+    return cfindIOobject(name, recursive);
+}
+
+
+Foam::regIOobject* Foam::objectRegistry::findIOobject
+(
+    const word& name,
+    const bool recursive
+)
+{
+    return const_cast<regIOobject*>(cfindIOobject(name, recursive));
+}
+
+
+Foam::regIOobject* Foam::objectRegistry::getIOobjectPtr
+(
+    const word& name,
+    const bool recursive
+) const
+{
+    return const_cast<regIOobject*>(cfindIOobject(name, recursive));
+}
+
+
 bool Foam::objectRegistry::modified() const
 {
     for (const_iterator iter = cbegin(); iter != cend(); ++iter)
diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.H b/src/OpenFOAM/db/objectRegistry/objectRegistry.H
index 7eb7d0c4679091346ca215d81bed79fed8684dec..d3d05761a88c858c1f7d6a4f5bf0a1705485eb74 100644
--- a/src/OpenFOAM/db/objectRegistry/objectRegistry.H
+++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.H
@@ -340,6 +340,59 @@ public:
         template<class Type>
         HashTable<Type*> lookupClass(const bool strict = false);
 
+
+        //- Can the regIOobject object be found (by name).
+        //
+        //  \param recursive search parent registries
+        bool found(const word& name, const bool recursive = false) const;
+
+
+        //- Return const pointer to the regIOobject.
+        //
+        //  \param recursive search parent registries
+        //
+        //  \return nullptr if the object was not found.
+        const regIOobject* cfindIOobject
+        (
+            const word& name,
+            const bool recursive = false
+        ) const;
+
+        //- Return const pointer to the regIOobject.
+        //
+        //  \param recursive search parent registries
+        //
+        //  \return nullptr if the object was not found.
+        const regIOobject* findIOobject
+        (
+            const word& name,
+            const bool recursive = false
+        ) const;
+
+        //- Return non-const pointer to the regIOobject.
+        //
+        //  \param recursive search parent registries
+        //
+        //  \return nullptr if the object was not found.
+        regIOobject* findIOobject
+        (
+            const word& name,
+            const bool recursive = false
+        );
+
+        //- Return non-const pointer to the regIOobject,
+        //- using a const-cast to have it behave like a mutable.
+        //  Exercise caution when using.
+        //
+        //  \param recursive search parent registries.
+        //
+        //  \return nullptr if the object was not found.
+        regIOobject* getIOobjectPtr
+        (
+            const word& name,
+            const bool recursive = false
+        ) const;
+
         //- Is the named Type found?
         //
         //  \param recursive search parent registries
@@ -438,6 +491,10 @@ public:
         //- object is ownedByRegistry
         bool checkOut(regIOobject& io) const;
 
+        //- Remove a regIOobject by name from registry and frees memory if the
+        //- object is ownedByRegistry
+        bool checkOut(const word& key) const;
+
         //- Clear all entries from the registry
         //  Performs a checkOut() for all objects that are ownedByRegistry
         void clear();
diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C b/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C
index 4d412332900bfc5546784cf55426a52d18775e65..127786b74ff6531cd2beacd845ed5964a1575d8c 100644
--- a/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C
+++ b/src/OpenFOAM/db/objectRegistry/objectRegistryTemplates.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2015 OpenFOAM Foundation
@@ -391,23 +391,7 @@ const Type* Foam::objectRegistry::cfindObject
     const bool recursive
 ) const
 {
-    const_iterator iter = cfind(name);
-
-    if (iter.found())
-    {
-        const Type* ptr = dynamic_cast<const Type*>(iter());
-
-        if (ptr)
-        {
-            return ptr;
-        }
-    }
-    else if (recursive && this->parentNotTime())
-    {
-        return parent_.cfindObject<Type>(name, recursive);
-    }
-
-    return nullptr;
+    return dynamic_cast<const Type*>(this->cfindIOobject(name, recursive));
 }
 
 
@@ -429,9 +413,7 @@ Type* Foam::objectRegistry::findObject
     const bool recursive
 )
 {
-    const Type* ptr = this->cfindObject<Type>(name, recursive);
-
-    return const_cast<Type*>(ptr);
+    return const_cast<Type*>(this->cfindObject<Type>(name, recursive));
 }
 
 
@@ -442,9 +424,7 @@ Type* Foam::objectRegistry::getObjectPtr
     const bool recursive
 ) const
 {
-    const Type* ptr = this->cfindObject<Type>(name, recursive);
-
-    return const_cast<Type*>(ptr);
+    return const_cast<Type*>(this->cfindObject<Type>(name, recursive));
 }
 
 
diff --git a/src/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C b/src/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
index e21c88193910606769e037a7aa0f4a2639d3ea69..7864b12bbbfa37a5358b6b87a2c35c0a61c06953 100644
--- a/src/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
+++ b/src/functionObjects/field/fieldAverage/fieldAverageItem/fieldAverageItem.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2009-2011, 2017-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2016 OpenFOAM Foundation
@@ -152,7 +152,7 @@ void Foam::functionObjects::fieldAverageItem::evolve(const objectRegistry& obr)
             const word fieldName = windowFieldNames_.pop();
 
             //Info<< "evolve: removing field: " << fieldName << endl;
-            obr.checkOut(*obr[fieldName]);
+            obr.checkOut(fieldName);
         }
     }
 }
@@ -164,22 +164,19 @@ void Foam::functionObjects::fieldAverageItem::clear
     bool fullClean
 )
 {
-    if (mean_ && obr.found(meanFieldName_))
+    if (mean_)
     {
-        obr.checkOut(*obr[meanFieldName_]);
+        obr.checkOut(meanFieldName_);
     }
 
-    if (prime2Mean_ && obr.found(prime2MeanFieldName_))
+    if (prime2Mean_)
     {
-        obr.checkOut(*obr[prime2MeanFieldName_]);
+        obr.checkOut(prime2MeanFieldName_);
     }
 
     for (const word& fieldName : windowFieldNames_)
     {
-        if (obr.found(fieldName))
-        {
-            obr.checkOut(*obr[fieldName]);
-        }
+        obr.checkOut(fieldName);
     }
 
     if (totalTime_ < 0 || fullClean)
diff --git a/src/functionObjects/field/momentum/momentum.C b/src/functionObjects/field/momentum/momentum.C
index 342b46eb9783b94b06c32d96c4a40e98b4e6b791..260253bf00b563f985b822aec58651f24d351226 100644
--- a/src/functionObjects/field/momentum/momentum.C
+++ b/src/functionObjects/field/momentum/momentum.C
@@ -46,11 +46,9 @@ namespace functionObjects
 
 void Foam::functionObjects::momentum::purgeFields()
 {
-    objectRegistry& obr = const_cast<objectRegistry&>(obr_);
-
-    obr.erase(scopedName("momentum"));
-    obr.erase(scopedName("angularMomentum"));
-    obr.erase(scopedName("angularVelocity"));
+    obr_.checkOut(scopedName("momentum"));
+    obr_.checkOut(scopedName("angularMomentum"));
+    obr_.checkOut(scopedName("angularVelocity"));
 }
 
 
diff --git a/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.C b/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.C
index 5cf3391d5da5b743694829056fcbfb063c93cfaa..42cc4509b680f78c1ad8bdc3da7b8b431a73c680 100644
--- a/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.C
+++ b/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.C
@@ -49,24 +49,6 @@ namespace Foam
 
 bool Foam::surfMeshSamplers::verbose_ = false;
 
-void Foam::surfMeshSamplers::checkOutNames
-(
-    const objectRegistry& registry,
-    const UList<word>& names
-)
-{
-    objectRegistry& reg = const_cast<objectRegistry&>(registry);
-
-    for (const word& fldName : names)
-    {
-        objectRegistry::iterator iter = reg.find(fldName);
-        if (iter.found())
-        {
-            registry.checkOut(*iter());
-        }
-    }
-}
-
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
@@ -297,7 +279,11 @@ bool Foam::surfMeshSamplers::execute()
         }
     }
 
-    checkOutNames(db, cleanup);
+    // Cleanup any locally introduced names
+    for (const word& fieldName : cleanup)
+    {
+        db.checkOut(fieldName);
+    }
 
     return true;
 }
diff --git a/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.H b/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.H
index 19cd1bb8fa46e1fd8e3060420409c5038d1f6467..ecd729dabee8230eba8ba4b20326a2b0ea85432c 100644
--- a/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.H
+++ b/src/sampling/surfMeshSample/surfMeshSamplers/surfMeshSamplers.H
@@ -157,14 +157,6 @@ class surfMeshSamplers
 
     // Private Member Functions
 
-        //- Remove items by name from objectRegistry
-        static void checkOutNames
-        (
-            const objectRegistry& registry,
-            const UList<word>& names
-        );
-
-
         //- Hard-coded derived field (rho * U)
         //  \return true if field did not previously exist
         bool add_rhoU(const word& derivedName);
diff --git a/src/thermophysicalModels/basic/basicThermo/basicThermo.C b/src/thermophysicalModels/basic/basicThermo/basicThermo.C
index 59425ecd3d3e6301abe46a604c1004ef28576126..bbd47800204ee4310773fd772fa97d0fc11d6273 100644
--- a/src/thermophysicalModels/basic/basicThermo/basicThermo.C
+++ b/src/thermophysicalModels/basic/basicThermo/basicThermo.C
@@ -160,15 +160,6 @@ Foam::volScalarField& Foam::basicThermo::lookupOrConstruct
 }
 
 
-void Foam::basicThermo::lookupAndCheckout(const char* name) const
-{
-    if (db().foundObject<volScalarField>(name))
-    {
-         db().checkOut(*db()[name]);
-    }
-}
-
-
 Foam::basicThermo::basicThermo
 (
     const fvMesh& mesh,
@@ -326,7 +317,7 @@ Foam::autoPtr<Foam::basicThermo> Foam::basicThermo::New
 
 Foam::basicThermo::~basicThermo()
 {
-    lookupAndCheckout("p");
+    db().checkOut("p");
 }
 
 
diff --git a/src/thermophysicalModels/basic/basicThermo/basicThermo.H b/src/thermophysicalModels/basic/basicThermo/basicThermo.H
index e8be30ec960eac623cdb192a3e1db98d9aebb114..337373c685bdff2ff4dfbf4e7dcfab3e75b23731 100644
--- a/src/thermophysicalModels/basic/basicThermo/basicThermo.H
+++ b/src/thermophysicalModels/basic/basicThermo/basicThermo.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2004-2010, 2017-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2017 OpenFOAM Foundation
@@ -105,9 +105,6 @@ protected:
             bool& isOwner
         );
 
-        //- Lookup and check out field
-        void lookupAndCheckout(const char* name) const;
-
         //- Return the enthalpy/internal energy field boundary types
         //  by interrogating the temperature field boundary types
         wordList heBoundaryTypes();
diff --git a/wmake/rules/General/general b/wmake/rules/General/general
index e9b10c18aa42d8f0ee90699fd20a29270652ad12..97253e62fd700bf1c06d76e1e3c239c5e8d1db55 100644
--- a/wmake/rules/General/general
+++ b/wmake/rules/General/general
@@ -1,5 +1,5 @@
 #-------------------------------*- makefile -*---------------------------------
-WM_VERSION = OPENFOAM=1812
+WM_VERSION = OPENFOAM=1901
 
 AR         = ar
 ARFLAGS    = cr