diff --git a/nomad/metainfo/nexus.py b/nomad/metainfo/nexus.py
index 64c5b3aff063c96804362fcdb9a5b4fb143a6168..fa5fc1f3dedce32929016b514d1193d16ddb4905 100644
--- a/nomad/metainfo/nexus.py
+++ b/nomad/metainfo/nexus.py
@@ -23,12 +23,9 @@ import sys
 
 # noinspection PyPep8Naming
 import xml.etree.ElementTree as ET
-from typing import Dict, List, Optional, Union, Set
+from typing import Dict, List, Optional, Set, Union
 
 import numpy as np
-from toposort import toposort_flatten
-
-from pynxtools.nexus import nexus  # pylint: disable=import-error
 from nomad.datamodel import EntryArchive
 from nomad.metainfo import (
     Attribute,
@@ -43,6 +40,9 @@ from nomad.metainfo import (
     SubSection,
 )
 from nomad.utils import get_logger, strip
+from toposort import toposort_flatten
+
+from pynxtools.nexus import nexus  # pylint: disable=import-error
 
 # __URL_REGEXP from
 # https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url
@@ -673,6 +673,25 @@ def __create_package_from_nxdl_directories(nexus_section: Section) -> Package:
 
 nexus_metainfo_package: Optional[Package] = None  # pylint: disable=C0103
 
+import pickle
+import traceback
+
+
+def save_nexus_schema(suf):
+    nexus_metainfo_package
+    sch_dict = nexus_metainfo_package.m_to_dict()
+    filehandler = open('nexus.obj' + suf, 'wb')
+    pickle.dump(sch_dict, filehandler)
+    filehandler.close()
+
+
+def load_nexus_schema(suf):
+    global nexus_metainfo_package
+    file = open('nexus.obj' + suf, 'rb')
+    sch_dict = pickle.load(file)
+    file.close()
+    nexus_metainfo_package = Package().m_from_dict(sch_dict)
+
 
 def init_nexus_metainfo():
     """
@@ -687,7 +706,14 @@ def init_nexus_metainfo():
     # to include nexus in an EntryArchive.
     nexus_section = Section(validate=VALIDATE, name='NeXus')
 
-    nexus_metainfo_package = __create_package_from_nxdl_directories(nexus_section)
+    try:
+        load_nexus_schema('')
+    except Exception:
+        nexus_metainfo_package = __create_package_from_nxdl_directories(nexus_section)
+        try:
+            save_nexus_schema('')
+        except Exception:
+            pass
 
     EntryArchive.nexus = SubSection(name='nexus', section_def=nexus_section)
     EntryArchive.nexus.init_metainfo()