diff --git a/parser/parser-gaussian/parser_gaussian.py b/parser/parser-gaussian/parser_gaussian.py
index 017d15e13260c8740ca1a5756421fb579e8761d9..985f9af7f3f97ed0545bdd8f760ac6b078888eb0 100644
--- a/parser/parser-gaussian/parser_gaussian.py
+++ b/parser/parser-gaussian/parser_gaussian.py
@@ -1,24 +1,25 @@
 import setup_paths
-from nomadcore.simple_parser import SimpleMatcher, mainFunction
+from nomadcore.simple_parser import mainFunction, SimpleMatcher as SM
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
 import os, sys, json
 
 # description of the input
-mainFileDescription = SimpleMatcher(name = 'root',
-              weak = True,
-              startReStr = "",
-              subMatchers = [
-  SimpleMatcher(name = 'newRun',
-                startReStr = r"\s*# SampleParser #\s*",
-                repeats = True,
-                required = True,
-                forwardMatch = True,
-                sections   = ['section_run'],
-                subMatchers = [
-    SimpleMatcher(name = 'header',
+mainFileDescription = SM(
+    name = 'root',
+    weak = True,
+    startReStr = "",
+    subMatchers = [
+        SM(name = 'newRun',
+           startReStr = r"\s*# SampleParser #\s*",
+           repeats = True,
+           required = True,
+           forwardMatch = True,
+           sections   = ['section_run'],
+           subMatchers = [
+               SM(name = 'header',
                   startReStr = r"\s*# SampleParser #\s*")
-                ])
-              ])
+           ])
+])
 
 # loading metadata from nomad-meta-info/meta_info/nomad_meta_info/gaussian.nomadmetainfo.json
 metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/gaussian.nomadmetainfo.json"))
@@ -29,8 +30,29 @@ parserInfo = {
   "version": "1.0"
 }
 
-# default unit conversions (actually it might be better to use the sourceUnits argument of the SimpleMatcher)
-defaultSourceUnits = {}
+class GaussianParserContext(object):
+    """main place to keep the parser status, open ancillary files,..."""
+    def __init__(self):
+        self.scfIterNr = 0
+
+    # just examples, you probably want to remove the following two triggers
+
+    def onClose_section_single_point_evaluation(self, backend, gIndex, section):
+        """trigger called when section_single_point_evaluation is closed"""
+        #backend.addValue("", self.scfIterNr)
+        logging.getLogger("nomadcore.parsing").info("closing section_single_point_evaluation gIndex %d %s", gIndex, section.simpleValues)
+        self.scfIterNr = 0
+
+    def onClose_section_scf_iteration(self, backend, gIndex, section):
+        """trigger called when section_scf_iteration is closed"""
+        logging.getLogger("nomadcore.parsing").info("closing section_scf_iteration bla gIndex %d %s", gIndex, section.simpleValues)
+        self.scfIterNr += 1
+
+# which values to cache or forward (mapping meta name -> CachingLevel)
+cachingLevelForMetaName = {}
 
 if __name__ == "__main__":
-    mainFunction(mainFileDescription, metaInfoEnv, parserInfo, defaultSourceUnits = defaultSourceUnits)
+    mainFunction(mainFileDescription, metaInfoEnv, parserInfo,
+                 cachingLevelForMetaName = cachingLevelForMetaName,
+                 superContext = GaussianParserContext(),
+    )