diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C
index 1a8ebe937a6ce362bb63416f86e4b5f19fcec050..546c3d1c98dc2afb8e48a1ad6efde01989ede031 100644
--- a/src/OpenFOAM/meshes/MeshObject/MeshObject.C
+++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.C
@@ -374,4 +374,32 @@ void Foam::meshObject::clear(objectRegistry& obr)
 }
 
 
+template
+<
+    class Mesh,
+    template<class> class FromType,
+    template<class> class ToType
+>
+void Foam::meshObject::clearUpto(objectRegistry& obr)
+{
+    HashTable<FromType<Mesh>*> meshObjects
+    (
+        obr.lookupClass<FromType<Mesh> >()
+    );
+
+    forAllIter(typename HashTable<FromType<Mesh>*>, meshObjects, iter)
+    {
+        if (!isA<ToType<Mesh> >(*iter()))
+        {
+            if (meshObject::debug)
+            {
+                Pout<< "meshObject::clearUpto(objectRegistry&) : destroying "
+                    << iter()->name() << endl;
+            }
+            obr.checkOut(*iter());
+        }
+    }
+}
+
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.H b/src/OpenFOAM/meshes/MeshObject/MeshObject.H
index b95c631e52fe1147c297d3d2645ad93130fe6d2a..bc844bd1eb1c05203394eb61b24e0a1414792780 100644
--- a/src/OpenFOAM/meshes/MeshObject/MeshObject.H
+++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.H
@@ -182,6 +182,16 @@ public:
 
         template<class Mesh, template<class> class MeshObjectType>
         static void clear(objectRegistry&);
+
+        //- Clear all meshObject derived from FromType up to (but not including)
+        //  ToType. Used to clear e.g. all non-updateable meshObjects
+        template
+        <
+            class Mesh,
+            template<class> class FromType,
+            template<class> class ToType
+        >
+        static void clearUpto(objectRegistry&);
 };