diff --git a/common/python/nomadcore/caching_backend.py b/common/python/nomadcore/caching_backend.py
index acf7f94c3bb5adbf47cdbe12b460c9f5ddede884..4f29cae9e9025ded41fb9fea647eee00596ac9fe 100644
--- a/common/python/nomadcore/caching_backend.py
+++ b/common/python/nomadcore/caching_backend.py
@@ -149,7 +149,7 @@ class CachingSection(object):
 
 class CachingSectionManager(object):
 
-    def __init__(self, metaInfo, parentSectionNames, lastSectionGIndex = -1, openSections = {}, onClose = [], onOpen = [], storeInSuper = False, forwardOpenClose = True):
+    def __init__(self, metaInfo, parentSectionNames, lastSectionGIndex = -1, openSections = {}, onClose = [], onOpen = [], storeInSuper = False, forwardOpenClose = True, preOpened = False):
         self.metaInfo = metaInfo
         self.parentSectionNames = parentSectionNames
         self.lastSectionGIndex = lastSectionGIndex
@@ -158,6 +158,7 @@ class CachingSectionManager(object):
         self.onOpen = list(onOpen)
         self.storeInSuper = storeInSuper
         self.forwardOpenClose = forwardOpenClose
+        self.preOpened = preOpened
 
     def setSectionInfo(self, gIndex, references):
         self.openSections[gIndex].references = [reference[x] for x in self.parentSectionNames]
@@ -281,6 +282,7 @@ class ActiveBackend(object):
                     parentSectionNames = parentS,
                     storeInSuper       = (cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache),
                     forwardOpenClose   = (cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache),
+                    preOpened = (cachingLevel == CachingLevel.PreOpenedCache or cachingLevel == CachingLevel.PreOpenedIgnore),
                     onClose = onClose.get(ik.name, []),
                     onOpen = onOpen.get(ik.name, []))
         dataManagers = {}
@@ -294,7 +296,7 @@ class ActiveBackend(object):
                                     (ik.name, superSectionNames))
                 sectionManager = sectionManagers[superSectionNames[0]]
                 dataManagers[ik.name] = CachingDataManager(ik, sectionManager,
-                                                           CachingLevel.restrict(cachingLevelForMetaName.get(ik.name, defaultDataCachingLevel), CachingLevel.Forward if sectionManager.forwardOpenClose else CachingLevel.Ignore))
+                                                           CachingLevel.restrict(cachingLevelForMetaName.get(ik.name, defaultDataCachingLevel), CachingLevel.Forward if sectionManager.forwardOpenClose or sectionManager.preOpened else CachingLevel.Ignore))
         return ActiveBackend(metaInfoEnv, sectionManagers, dataManagers, superBackend, propagateStartFinishParsing, default_units, metainfo_units)
 
     def appendOnClose(self, sectionName, onClose):
@@ -402,7 +404,7 @@ class ActiveBackend(object):
         """
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
             if self.superBackend:
                 self.superBackend.addValue(metaName, value, gIndex)
         if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
@@ -418,11 +420,11 @@ class ActiveBackend(object):
 
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
             if self.superBackend:
                 self.superBackend.addRealValue(metaName, value, gIndex)
-        if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache:
-            dataManager.superSectionManager.addValue(dataManager.metaInfo, value, gIndex)
+        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):
         """adds a new array value of the given size corresponding to metaName
@@ -431,7 +433,7 @@ class ActiveBackend(object):
         the array is unitialized"""
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
             if self.superBackend:
                 self.superBackend.addArray(metaName, shape, gIndex)
         if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache:
@@ -460,7 +462,7 @@ class ActiveBackend(object):
 
         dataManager = self.dataManagers[metaName]
         cachingLevel = dataManager.cachingLevel
-        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.PreOpenedCache:
+        if cachingLevel == CachingLevel.Forward or cachingLevel == CachingLevel.ForwardAndCache:
             if self.superBackend:
                 self.superBackend.addArrayValues(metaName, values, gIndex)
         if cachingLevel == CachingLevel.ForwardAndCache or cachingLevel == CachingLevel.Cache or cachingLevel == CachingLevel.PreOpenedCache: