diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.H b/src/OpenFOAM/db/regIOobject/regIOobject.H
index 9f60d99eb3c9816ba6dcf1113706da4c3a66811d..d4505e6cc847c210868d891c257e7af42c3ec349 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobject.H
+++ b/src/OpenFOAM/db/regIOobject/regIOobject.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2018-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2017 OpenFOAM Foundation
@@ -133,19 +133,19 @@ public:
 
     // Constructors
 
-        //- Construct from IOobject. Optional flag for if IOobject is the
-        //  top level regIOobject.
+        //- Construct from IOobject with optional flag if IOobject is the
+        //- top-level regIOobject.
         regIOobject(const IOobject&, const bool isTime = false);
 
-        //- Construct as copy
+        //- Copy construct
         regIOobject(const regIOobject&);
 
-        //- Construct as copy, transferring registry registration to copy
-        //  if registerCopy is true
+        //- Copy construct, transferring registry registration to the copy
+        //- if registerCopy is true
         regIOobject(const regIOobject&, bool registerCopy);
 
-        //- Construct as copy with new name, transferring registry registration
-        //  to copy as specified
+        //- Copy construct with new name, transferring registry registration
+        //- to the copy f registerCopy is true
         regIOobject(const word& newName, const regIOobject&, bool registerCopy);
 
         //- Construct as copy with new IO parameters
@@ -163,7 +163,8 @@ public:
             //- Add object to registry
             bool checkIn();
 
-            //- Remove object from registry
+            //- Remove all file watches and remove object from registry
+            //  \return true if object was registered and was removed
             bool checkOut();
 
             //- Add file watch on object (if registered and READ_IF_MODIFIED)
@@ -191,7 +192,8 @@ public:
             inline static Type& store(autoPtr<Type>&& aptr);
 
             //- Release ownership of this object from its registry
-            inline void release();
+            //  \param unregister optionally set as non-registered
+            inline void release(const bool unregister = false);
 
 
         // Dependency checking
diff --git a/src/OpenFOAM/db/regIOobject/regIOobjectI.H b/src/OpenFOAM/db/regIOobject/regIOobjectI.H
index 1f9e82f9739c9a0f5d842d8665db81dfa4cb7f28..3418a60888041ca5aad3558b19f9357d45cf4971 100644
--- a/src/OpenFOAM/db/regIOobject/regIOobjectI.H
+++ b/src/OpenFOAM/db/regIOobject/regIOobjectI.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2018-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2015 OpenFOAM Foundation
@@ -69,9 +69,13 @@ inline Type& Foam::regIOobject::store(autoPtr<Type>&& aptr)
 }
 
 
-inline void Foam::regIOobject::release()
+inline void Foam::regIOobject::release(const bool unregister)
 {
     ownedByRegistry_ = false;
+    if (unregister)
+    {
+        registered_ = false;
+    }
 }