diff --git a/common/python/nomadcore/caching_backend.py b/common/python/nomadcore/caching_backend.py
index 8652a0e09b0b7dd0e917d5d00173acb1b9ea6c84..e0f85954ebba20f155d5cfd8c0f602ad8843f928 100644
--- a/common/python/nomadcore/caching_backend.py
+++ b/common/python/nomadcore/caching_backend.py
@@ -15,6 +15,8 @@ class CachingLevel(object):
     Cache = 2
     ForwardAndCache = 3
     Ignore = 4
+    PreOpenedCache = 5
+    PreOpenedIgnore = 6
 
     @classmethod
     def toText(cls, cl):
@@ -26,6 +28,10 @@ class CachingLevel(object):
             return "Cache"
         elif cl == cls.Ignore:
             return "Ignore"
+        elif cl == cls.PreOpenedIgnore:
+            return "PreOpenedIgnore"
+        elif cl == cls.PreOpenedCache:
+            return "PreOpenedIgnore"
         else:
             return "CachingLevel(%s)" % cl
 
@@ -273,7 +279,7 @@ class ActiveBackend(object):
                 sectionManagers[ik.name] = CachingSectionManager(
                     metaInfo           = ik,
                     parentSectionNames = parentS,
-                    storeInSuper       = (cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache),
+                    storeInSuper       = (cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache),
                     forwardOpenClose   = (cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache),
                     onClose = onClose.get(ik.name, []),
                     onOpen = onOpen.get(ik.name, []))
@@ -395,10 +401,10 @@ class ActiveBackend(object):
         a gIndex of -1 means the latest section"""
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
             if self.superBackend:
                 self.superBackend.addValue(metaName, value, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
+        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
             dataManager.superSectionManager.addValue(dataManager.metaInfo, value, gIndex)
 
     def addRealValue(self, metaName, value, gIndex = -1, unit=None):
@@ -410,10 +416,10 @@ class ActiveBackend(object):
 
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
             if self.superBackend:
                 self.superBackend.addRealValue(metaName, value, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
+        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
             dataManager.superSectionManager.addRealValue(dataManager.metaInfo, value, gIndex)
 
     def addArray(self, metaName, shape, gIndex = -1):
@@ -423,10 +429,10 @@ class ActiveBackend(object):
         the array is unitialized"""
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
             if self.superBackend:
                 self.superBackend.addArray(metaName, shape, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
+        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
             dataManager.superSectionManager.addArray(dataManager.metaInfo, shape, gIndex)
 
     def setArrayValues(self, metaName, values, offset = None, gIndex = -1, unit=None):
@@ -436,10 +442,10 @@ class ActiveBackend(object):
 
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
             if self.superBackend:
                 self.superBackend.setArrayValues(metaName, values, offset, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
+        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
             dataManager.superSectionManager.setArrayValues(dataManager.metaInfo, values, offset, gIndex)
 
     def addArrayValues(self, metaName, values, gIndex = -1, unit=None):
@@ -449,10 +455,10 @@ class ActiveBackend(object):
         values = self.convert_unit(metaName, values, unit)
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
             if self.superBackend:
                 self.superBackend.addArrayValues(metaName, values, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
+        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
             dataManager.superSectionManager.addArrayValues(dataManager.metaInfo, values, gIndex)
 
     def convertScalarStringValue(self, metaName, strValue):