diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 11ca0c7eea2a5ac4ac83ed38f753aa5177f13e2d..6da592a30a5bce5383f63157c1509e2086b36933 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -147,6 +147,22 @@ check python dependencies:
     - when: manual
       allow_failure: true
 
+check helm chart:
+  stage: test
+  image: ${CI_REGISTRY_IMAGE}/dev_python:${DOCKER_TAG}
+  script:
+    - scripts/check_helm_chart.sh
+  after_script:
+    - >
+      if [ $CI_JOB_STATUS == 'failed' ]; then
+        echo 'Make sure that the helm chart values.yaml has been updated and committed by running'
+        echo './scripts/update_hem_chart.sh'
+      fi
+  rules:
+    - if: $CI_COMMIT_TAG
+      when: never
+    - when: on_success
+
 check gui artifacts:
   stage: test
   image: ${CI_REGISTRY_IMAGE}/dev_python:${DOCKER_TAG}
diff --git a/docs/howto/oasis/migrate.md b/docs/howto/oasis/migrate.md
index 6ef3acfaf055cc6b28011688d047133918d1eb1b..e893eab11faec69e4ab9682815e650bae56b05ca 100644
--- a/docs/howto/oasis/migrate.md
+++ b/docs/howto/oasis/migrate.md
@@ -66,6 +66,30 @@ For changing the minor or major version, please check the [migration steps](#mig
 
 ## Migration steps
 
+### to 1.2.2
+
+We upgraded the Jupyterhub version used for NORTH from 1.0.2 to 4.0.2. By default the
+Jupyterhub database is persisted in the `nomad_oasis_north` container. If you want to
+keep the database (e.g. to not loose any open tools), you will have to upgrade the database.
+Update the NOMAD docker image version and restart the Oasis like this:
+
+```
+docker compose down
+docker compose pull
+docker copmose run north python -m jupyterhub upgrade
+docker compose up -d
+```
+
+Alternatively, you can delete the `nomad_oasis_north` container and start with a fresh
+database. Make sure that all north tools are stopped and removed.
+
+```
+docker compose down
+docker rm nomad_oasis_north
+docker compose pull
+docker compose up -d
+```
+
 ### to 1.2.0
 
 - We introduced the plugin mechanism. There are now more options to control which schemas
diff --git a/gui/public/pyiron_logo.png b/gui/public/pyiron_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3fb087817bdf45cd7fdcfc3f3d7687c47f5e279
Binary files /dev/null and b/gui/public/pyiron_logo.png differ
diff --git a/gui/tests/artifacts.js b/gui/tests/artifacts.js
index bafe358be1f5862297ad81a63efa529828dd4529..e985fbd18e8d099ef451ed0aba8066e289b88372 100644
--- a/gui/tests/artifacts.js
+++ b/gui/tests/artifacts.js
@@ -103273,58 +103273,56 @@ window.nomadArtifacts = {
   },
   "northTools": {
     "jupyter": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:prod",
-      "description": "### **Jupyter Notebook**: The Classic Notebook Interface\n\nThe Jupyter Notebook is the original web application for creating and sharing computational documents. It offers a simple, streamlined, document-centric experience.",
       "short_description": "Basic jupyter run with an empty notebook or on given notebook file.",
+      "description": "### **Jupyter Notebook**: The Classic Notebook Interface\n\nThe Jupyter Notebook is the original web application for creating and sharing computational documents. It offers a simple, streamlined, document-centric experience.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/north/jupyter:latest",
       "cmd": null,
-      "with_path": true,
+      "image_pull_policy": "Always",
+      "privileged": false,
       "path_prefix": "lab/tree",
-      "mount_path": "/home/jovyan",
-      "icon": "jupyter_logo.svg",
+      "with_path": true,
       "file_extensions": [
         "ipynb"
       ],
+      "mount_path": "/home/jovyan",
+      "icon": "jupyter_logo.svg",
       "maintainer": [
         {
           "name": "Markus Scheidgen",
           "email": "markus.scheidgen@physik.hu-berlin.de"
-        },
-        {
-          "name": "Some-one Else",
-          "email": "markus.scheidgen@physik.hu-berlin.de"
         }
       ],
-      "privileged": false,
       "external_mounts": []
     },
     "nionswift": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop",
-      "description": "Run Nion Swift to analyze data.",
       "short_description": "Run NionSwift to analyze data as well as prepare focus series reconstructions",
+      "description": "Run Nion Swift to analyze data.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": null,
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Sherjeel Shabih",
           "email": "sherjeel.shabih@hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "nexustools": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop",
-      "description": "Includes multiple NeXus tools for visualization and analysis.",
       "short_description": null,
+      "description": "Includes multiple NeXus tools for visualization and analysis.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
-      "mount_path": "/config",
-      "icon": null,
+      "with_path": false,
       "file_extensions": [
         "nxs",
         "nx",
@@ -103335,28 +103333,31 @@ window.nomadArtifacts = {
         "hdf",
         "ipynb"
       ],
+      "mount_path": "/config",
+      "icon": null,
       "maintainer": [
         {
           "name": "Sandor Brockhauser",
           "email": "sandor.brockhauser@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "ellips": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/ellips-jupyter",
-      "description": "This example presents the capabilities of the NOMAD platform to store and standardize ellipsometry data. It shows the generation of a NeXus file according to the [NXellipsometry](https://manual.nexusformat.org/classes/contributed_definitions/NXellipsometry.html#nxellipsometry) application definition and a successive analysis of a SiO2 on Si Psi/Delta measurement.",
       "short_description": "An example for analyzing ellipsometric data.",
+      "description": "This example presents the capabilities of the NOMAD platform to store and standardize ellipsometry data. It shows the generation of a NeXus file according to the [NXellipsometry](https://manual.nexusformat.org/classes/contributed_definitions/NXellipsometry.html#nxellipsometry) application definition and a successive analysis of a SiO2 on Si Psi/Delta measurement.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/ellips-jupyter",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": false,
       "path_prefix": "lab/tree",
-      "mount_path": "/home/jovyan",
-      "icon": "jupyter_logo.svg",
+      "with_path": false,
       "file_extensions": [
         "ipynb",
         "nxs"
       ],
+      "mount_path": "/home/jovyan",
+      "icon": "jupyter_logo.svg",
       "maintainer": [
         {
           "name": "Florian Dobener",
@@ -103367,48 +103368,50 @@ window.nomadArtifacts = {
           "email": "emminger.carola@physik.hu-berlin.de"
         }
       ],
-      "privileged": false,
       "external_mounts": []
     },
     "mpes": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/north/mpes/webtop",
-      "description": "This example presents the capabilities of the NOMAD platform to store and standardize multi photoemission spectroscopy (MPES) experimental data. It contains three major examples:\n\n- Taking a pre-binned file, here stored in a h5 file, and converting it into the standardized MPES NeXus format. There exists a [NeXus application definition for MPES](https://manual.nexusformat.org/classes/contributed_definitions/NXmpes.html#nxmpes) which details the internal structure of such a file.\n- Binning of raw data (see [here](https://www.nature.com/articles/s41597-020-00769-8) for additional resources) into a h5 file and consecutively generating a NeXus file from it.\n- An analysis example using data in the NeXus format and employing the [pyARPES](https://github.com/chstan/arpes) analysis tool to reproduce the main findings of [this paper](https://arxiv.org/pdf/2107.07158.pdf).",
       "short_description": "An example for analyzing mpes data.",
+      "description": "This example presents the capabilities of the NOMAD platform to store and standardize multi photoemission spectroscopy (MPES) experimental data. It contains three major examples:\n\n- Taking a pre-binned file, here stored in a h5 file, and converting it into the standardized MPES NeXus format. There exists a [NeXus application definition for MPES](https://manual.nexusformat.org/classes/contributed_definitions/NXmpes.html#nxmpes) which details the internal structure of such a file.\n- Binning of raw data (see [here](https://www.nature.com/articles/s41597-020-00769-8) for additional resources) into a h5 file and consecutively generating a NeXus file from it.\n- An analysis example using data in the NeXus format and employing the [pyARPES](https://github.com/chstan/arpes) analysis tool to reproduce the main findings of [this paper](https://arxiv.org/pdf/2107.07158.pdf).",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/north/mpes/webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
-      "mount_path": "/config",
-      "icon": null,
+      "with_path": false,
       "file_extensions": [
         "ipynb",
         "nxs",
         "h5",
         "hdf5"
       ],
+      "mount_path": "/config",
+      "icon": null,
       "maintainer": [
         {
           "name": "Florian Dobener",
           "email": "florian.dobener@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "xps": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/north/xps/jupyter",
-      "description": "Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS SLE files into NeXus.",
       "short_description": "An example for analyzing XPS data.",
+      "description": "Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS SLE files into NeXus.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/north/xps/jupyter:master",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": false,
       "path_prefix": "lab/tree",
-      "mount_path": "/home/jovyan",
-      "icon": "jupyter_logo.svg",
+      "with_path": false,
       "file_extensions": [
         "ipynb",
         "nxs",
         "h5",
         "hdf5"
       ],
+      "mount_path": "/home/jovyan",
+      "icon": "jupyter_logo.svg",
       "maintainer": [
         {
           "name": "Florian Dobener",
@@ -103423,126 +103426,131 @@ window.nomadArtifacts = {
           "email": "rubel.mozumder@physik.hu-berlin.de"
         }
       ],
-      "privileged": false,
       "external_mounts": []
     },
     "sts": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter",
-      "description": "This example is for two types of experiments: Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy. It can transform the data from files generated by a the nanonis software into the NeXus application definition NXsts. The example contains data files from the two specific nanonis software versions generic 5e and generic 4.5.",
       "short_description": "An example for analyzing SPM (STM / STS) experiment.",
+      "description": "This example is for two types of experiments: Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy. It can transform the data from files generated by a the nanonis software into the NeXus application definition NXsts. The example contains data files from the two specific nanonis software versions generic 5e and generic 4.5.",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": false,
       "path_prefix": "lab/tree",
-      "mount_path": "/home/jovyan",
-      "icon": "jupyter_logo.svg",
+      "with_path": false,
       "file_extensions": [
         "ipynb",
         "nxs",
         "h5",
         "hdf5"
       ],
+      "mount_path": "/home/jovyan",
+      "icon": "jupyter_logo.svg",
       "maintainer": [
         {
           "name": "Rubel Mozumder",
           "email": "rubel.mozumder@physik.hu-berlin.de"
         }
       ],
-      "privileged": false,
       "external_mounts": []
     },
     "webtop": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop",
-      "description": "Baseline webtop image for test",
       "short_description": null,
+      "description": "Baseline webtop image for test",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": null,
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Sherjeel Shabih",
           "email": "sherjeel.shabih@hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "apmtools": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop",
-      "description": "Miscellaneous tools from the atom probe community:\nCurrently APTyzer, paraprobe-toolbox, and APAV",
       "short_description": "An example for analyzing atom probe data.",
+      "description": "Miscellaneous tools from the atom probe community:\nCurrently APTyzer, paraprobe-toolbox, and APAV",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": "jupyter_logo.svg",
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Markus K\u00fchbach",
           "email": "markus.kuehbach@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "fiji": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/fiji-webtop",
-      "description": "ImageJ and Fiji with amongst others several electron-microscopy specific plug-ins",
       "short_description": "ImageJ and Fiji for image processing",
+      "description": "ImageJ and Fiji with amongst others several electron-microscopy specific plug-ins",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/fiji-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": "jupyter_logo.svg",
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Markus K\u00fchbach",
           "email": "markus.kuehbach@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "frwr": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/frwr-webtop",
-      "description": "FRWR3 in-line holography/focus series reconstruction code",
       "short_description": "Inline electron holography by C. Koch",
+      "description": "FRWR3 in-line holography/focus series reconstruction code",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/frwr-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": "jupyter_logo.svg",
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Markus K\u00fchbach",
           "email": "markus.kuehbach@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     },
     "abtem": {
-      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/abtem-webtop",
-      "description": "VESTA, GPAW, and abTEM configured in one container for simulating images and diffraction patterns in transmission electron microscopy",
       "short_description": "Electronic structure supported image simulation for transmission electron microscopy.",
+      "description": "VESTA, GPAW, and abTEM configured in one container for simulating images and diffraction patterns in transmission electron microscopy",
+      "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/abtem-webtop",
       "cmd": null,
-      "with_path": false,
+      "image_pull_policy": "Always",
+      "privileged": true,
       "path_prefix": null,
+      "with_path": false,
+      "file_extensions": [],
       "mount_path": "/config",
       "icon": "jupyter_logo.svg",
-      "file_extensions": [],
       "maintainer": [
         {
           "name": "Markus K\u00fchbach",
           "email": "markus.kuehbach@physik.hu-berlin.de"
         }
       ],
-      "privileged": true,
       "external_mounts": []
     }
   },
diff --git a/nomad/app/v1/routers/north.py b/nomad/app/v1/routers/north.py
index be57d7eab21fca13596818e7d5118e6b70543ce8..7df361a9958e0223fc335e95b48790166b2754c6 100644
--- a/nomad/app/v1/routers/north.py
+++ b/nomad/app/v1/routers/north.py
@@ -29,6 +29,7 @@ from nomad import config
 from nomad.config.north import NORTHTool
 from nomad.utils import strip, get_logger, slugify
 from nomad.processing import Upload
+from nomad.app.v1.routers.auth import generate_simple_token
 from .auth import create_user_dependency, oauth2_scheme
 from ..models import User, HTTPExceptionModel
 from ..utils import create_responses
@@ -159,7 +160,6 @@ async def get_tool(
 )
 async def start_tool(
     tool: ToolModel = Depends(tool),
-    access_token: str = Depends(oauth2_scheme),
     user: User = Depends(create_user_dependency(required=True)),
     upload_id: Optional[str] = None,
 ):
@@ -238,6 +238,9 @@ async def start_tool(
         )
 
     url = f'{config.hub_url()}/api/users/{user.username}/servers/{tool.name}'
+    access_token = generate_simple_token(
+        user_id=user.user_id, expires_in=config.north.nomad_access_token_expiry_time
+    )
     body = {
         'tool': {'image': tool.image, 'cmd': tool.cmd, 'privileged': tool.privileged},
         'environment': {
diff --git a/nomad/config/north.py b/nomad/config/north.py
index 43ab0144425761dbf83b6eabe2901d9bc44fde64..3aa5aa7201d38702dedac21c49ba114b535344af 100644
--- a/nomad/config/north.py
+++ b/nomad/config/north.py
@@ -46,18 +46,60 @@ class NORTHExternalMount(BaseModel):
 
 
 class NORTHTool(BaseModel):
-    image: str
-    description: str = None
-    short_description: str = None
-    cmd: str = None
-    with_path: bool = False
-    path_prefix: str = None
-    mount_path: str = None
-    icon: str = None
-    file_extensions: List[str] = []
-    maintainer: List[NORTHToolMaintainer] = []
-    privileged: bool = False
-    external_mounts: List[NORTHExternalMount] = []
+    short_description: str = Field(
+        None,
+        description='A short description of the tool, e.g. shown in the NOMAD GUI.',
+    )
+    description: str = Field(
+        None, description='A description of the tool, e.g. shown in the NOMAD GUI.'
+    )
+    image: str = Field(
+        None, description='The docker image (incl. tags) to use for the tool.'
+    )
+    cmd: str = Field(
+        None, description='The container cmd that is passed to the spawner.'
+    )
+    image_pull_policy: str = Field(
+        'Always', description='The image pull policy used in k8s deployments.'
+    )
+    privileged: bool = Field(
+        False, description='Whether the tool needs to run in privileged mode.'
+    )
+    path_prefix: str = Field(
+        None,
+        description=(
+            'An optional path prefix that is added to the container URL to '
+            'reach the tool, e.g. "lab/tree" for jupyterlab.'
+        ),
+    )
+    with_path: bool = Field(
+        False,
+        description=(
+            'Whether the tool supports a path to a file or directory. '
+            'This also enables tools to be launched from files in the NOMAD UI.'
+        ),
+    )
+    file_extensions: List[str] = Field(
+        [],
+        description='The file extensions of files that this tool should be launchable for.',
+    )
+    mount_path: str = Field(
+        None,
+        description=(
+            'The path in the container where uploads and work directories will be mounted, '
+            'e.g. /home/jovyan for Jupyter containers.'
+        ),
+    )
+    icon: str = Field(
+        None,
+        description='A URL to an icon that is used to represent the tool in the NOMAD UI.',
+    )
+    maintainer: List[NORTHToolMaintainer] = Field(
+        [], description='The maintainers of the tool.'
+    )
+    external_mounts: List[NORTHExternalMount] = Field(
+        [], description='Additional mounts to be added to tool containers.'
+    )
 
 
 class NORTHTools(Options):
@@ -107,14 +149,25 @@ class NORTH(NomadSettings):
         None, description='The NOMAD app host name that spawned containers use.'
     )
     windows = Field(True, description='Enable windows OS hacks.')
+    nomad_access_token_expiry_time: int = Field(
+        24 * 3600,
+        description=(
+            'All tools are run with an access token for the NOMAD api in the NOMAD_CLIENT_ACCESS_TOKEN '
+            'environment variable. This token will be automatically used by the nomad-lab Python package, '
+            'e.g. if you use the ArchiveQuery to access data. '
+            'This option sets the amount of seconds that this token is valid for.'
+        ),
+    )
 
     tools: NORTHTools = Field(
         NORTHTools(
+            include=None,
+            exclude=['pyiron'],
             options={
                 'jupyter': NORTHTool(
                     short_description='Basic jupyter run with an empty notebook or on given notebook file.',
                     description='### **Jupyter Notebook**: The Classic Notebook Interface\n\nThe Jupyter Notebook is the original web application for creating and sharing computational documents. It offers a simple, streamlined, document-centric experience.',
-                    image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:prod',
+                    image='gitlab-registry.mpcdf.mpg.de/nomad-lab/north/jupyter:latest',
                     path_prefix='lab/tree',
                     with_path=True,
                     mount_path='/home/jovyan',
@@ -124,11 +177,23 @@ class NORTH(NomadSettings):
                         NORTHToolMaintainer(
                             name='Markus Scheidgen',
                             email='markus.scheidgen@physik.hu-berlin.de',
-                        ),
+                        )
+                    ],
+                ),
+                'pyiron': NORTHTool(
+                    short_description='Jupyterlab with pyiron installed.',
+                    description='## Pyiron: Complex workflows made easy\n\nFrom rapid prototyping to high performance computing in material science. [Homepage](https://pyiron.org/).',
+                    image='pyiron/pyiron:latest',
+                    path_prefix='lab/tree',
+                    with_path=True,
+                    mount_path='/home/jovyan',
+                    icon='pyiron_logo.png',
+                    file_extensions=['ipynb'],
+                    maintainer=[
                         NORTHToolMaintainer(
-                            name='Some-one Else',
+                            name='Markus Scheidgen',
                             email='markus.scheidgen@physik.hu-berlin.de',
-                        ),
+                        )
                     ],
                 ),
                 'nionswift': NORTHTool(
@@ -201,7 +266,7 @@ class NORTH(NomadSettings):
                 'xps': NORTHTool(
                     short_description='An example for analyzing XPS data.',
                     description='Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS SLE files into NeXus.',
-                    image='gitlab-registry.mpcdf.mpg.de/nomad-lab/north/xps/jupyter',
+                    image='gitlab-registry.mpcdf.mpg.de/nomad-lab/north/xps/jupyter:master',
                     path_prefix='lab/tree',
                     icon='jupyter_logo.svg',
                     mount_path='/home/jovyan',
@@ -303,7 +368,7 @@ class NORTH(NomadSettings):
                         )
                     ],
                 ),
-            }
+            },
         ),
         description='The available north tools. Either the tools definitions as dict or a path to a .json file.',
     )
diff --git a/nomad/jupyterhub_config.py b/nomad/jupyterhub_config.py
index c023eb62e21030a086c2b79d31225bbbf2834f0e..418b75afc3774c7aaaaba5160c5c400d6c39617c 100644
--- a/nomad/jupyterhub_config.py
+++ b/nomad/jupyterhub_config.py
@@ -77,13 +77,13 @@ def pre_spawn(spawner):
 c.Spawner.pre_spawn_hook = pre_spawn
 
 # configure nomad service
-c.JupyterHub.services = [
+c.JupyterHub.services.append(
     {
         'name': 'nomad-service',
         'admin': True,
         'api_token': config.north.hub_service_api_token,
     }
-]
+)
 
 # Allow named single-user servers per user (Default: False)
 c.JupyterHub.allow_named_servers = True
@@ -117,6 +117,7 @@ c.GenericOAuthenticator.username_key = 'preferred_username'
 c.GenericOAuthenticator.scope = ['openid', 'profile']
 c.Authenticator.auto_login = True
 c.Authenticator.enable_auth_state = True
+c.Ahtenticator.allow_all = True
 
 
 # configure docker spawner
diff --git a/ops/kubernetes/nomad-prod-develop.yaml b/ops/kubernetes/nomad-prod-develop.yaml
index 52e600b2d05638b355a537091919e74b28a64034..565cf041f9e6228bf513641643d774ebfc1d6c78 100644
--- a/ops/kubernetes/nomad-prod-develop.yaml
+++ b/ops/kubernetes/nomad-prod-develop.yaml
@@ -41,7 +41,7 @@ nomad:
         memory: "8Gi"
 
 jupyterhub:
-  fullnameOverride: "nomad-prod-staging-north"
+  fullnameOverride: "nomad-prod-develop-north"
   hub:
     baseUrl: "/prod/v1/develop/north"
     config:
diff --git a/ops/kubernetes/nomad/Chart.lock b/ops/kubernetes/nomad/Chart.lock
index c79e2d604f329394c58607d48f1406950fa31e0c..ca21ee2e9c5a86a58143822d20db2476a7ba537a 100644
--- a/ops/kubernetes/nomad/Chart.lock
+++ b/ops/kubernetes/nomad/Chart.lock
@@ -10,6 +10,6 @@ dependencies:
   version: 14.0.4
 - name: jupyterhub
   repository: https://jupyterhub.github.io/helm-chart/
-  version: 1.2.0
-digest: sha256:75cf4c73a86fb9a6ca46cbfd7676d20600c64932659c30b36d4b494170a7b6d0
-generated: "2024-02-08T20:14:29.044024+01:00"
+  version: 3.2.1
+digest: sha256:f77e87c16f5417c9ba3d30143451035d6b570c5eb9d736589069e31e26ab5adf
+generated: "2024-02-26T13:51:48.48639+01:00"
diff --git a/ops/kubernetes/nomad/Chart.yaml b/ops/kubernetes/nomad/Chart.yaml
index 22860c0caeaddb7d2f7e167c33d8d664b0976b05..e7adb99ecfc6c950a41f6f39b7fc4b253f478863 100644
--- a/ops/kubernetes/nomad/Chart.yaml
+++ b/ops/kubernetes/nomad/Chart.yaml
@@ -37,7 +37,7 @@ dependencies:
   version: 14.0.4
   repository: oci://registry-1.docker.io/bitnamicharts
 - name: jupyterhub
-  version: "1.2.0"
+  version: "3.2.1"
   repository: "https://jupyterhub.github.io/helm-chart/"
   condition: nomad.config.north.enabled
 
diff --git a/ops/kubernetes/nomad/updatevalues.py b/ops/kubernetes/nomad/updatevalues.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a4ba1e04cbb611021e9cc435059a3ec5b0cd637
--- /dev/null
+++ b/ops/kubernetes/nomad/updatevalues.py
@@ -0,0 +1,74 @@
+# Updates the values.yaml file based on the nomad configuration. Currently this
+# includes the following:
+# - populating jupyterhub.singleUser.profileList with NORTH tools
+
+from typing import Any, Dict
+import os
+from sys import stdout, argv
+from ruamel.yaml import YAML
+from nomad import config
+
+dir_path = os.path.dirname(os.path.realpath(__file__))
+file_path = os.path.join(dir_path, 'values.yaml')
+
+yaml = YAML()
+yaml.allow_duplicate_keys = True
+with open(file_path, 'r') as file:
+    data = yaml.load(file)
+
+# Profiles currently break how NOMAD interacts with JupyterHub, so we're only using
+# the extraImages to feed the prePuller
+generate_profiles = False
+
+if generate_profiles:
+    profile_list = (
+        data.setdefault('jupyterhub', {})
+        .setdefault('singleuser', {})
+        .setdefault('profileList', [])
+    )
+    for name, tool in config.north.tools.filtered_items():
+        profile = next(
+            (profile for profile in profile_list if profile['display_name'] == name),
+            None,
+        )
+        if profile is None:
+            profile = dict()
+            profile_list.append(profile)
+
+        profile.update(
+            dict(
+                display_name=name,
+                description=tool.description,
+                kubespawner_override=dict(
+                    image=tool.image,
+                    image_pull_policy=tool.image_pull_policy,
+                ),
+            )
+        )
+
+        if tool.path_prefix:
+            profile['kubespawner_override']['default_url'] = tool.path_prefix
+        if tool.cmd:
+            profile['kubespawner_override']['cmd'] = tool.cmd
+        if tool.privileged:
+            profile['kubespawner_override']['privileged'] = tool.privileged
+
+else:
+    pre_puller = data.setdefault('jupyterhub', {}).setdefault('prePuller', {})
+    extra_images: Dict[str, Any] = {}
+    pre_puller['extraImages'] = extra_images
+
+    for name, tool in config.north.tools.filtered_items():
+        try:
+            image_name, image_tag = tool.image.rsplit(':', 1)
+        except ValueError:
+            image_name, image_tag = tool.image, 'latest'
+
+        extra_images[name] = dict(name=image_name, tag=image_tag)
+
+
+if len(argv) == 2:
+    with open(argv[1], 'w') as file:
+        yaml.dump(data, file)
+else:
+    yaml.dump(data, stdout)
diff --git a/ops/kubernetes/nomad/values.yaml b/ops/kubernetes/nomad/values.yaml
index ac2cba4fee1aa8045b283998904535d7a5fad996..6835cc20f3358a58f5cdb53db476dba9bcf58efd 100644
--- a/ops/kubernetes/nomad/values.yaml
+++ b/ops/kubernetes/nomad/values.yaml
@@ -2,8 +2,8 @@
 # This is a YAML-formatted file.
 # Declare variables to be passed into your templates.
 roll: false
-nameOverride: ""
-fullnameOverride: ""
+nameOverride: ''
+fullnameOverride: ''
 
 serviceAccount:
   # Specifies whether a service account should be created
@@ -14,42 +14,33 @@ serviceAccount:
   annotations: {}
   # The name of the service account to use.
   # If not set and create is true, a name is generated using the fullname template
-  name: ""
+  name: ''
 
 nomad:
   enabled: true
   image:
     repository: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair
-    tag: "latest"
+    tag: latest
     pullPolicy: Always
 
   imagePullSecrets: []
-
-  # Default values for nomad.
-  # This is a YAML-formatted file.
-  # Declare variables to be passed into your templates.
-
-  # GLOBAL parameters
-  enabled: false
-
-  ## Default values for nomad@FAIRDI
   config:
     version:
-      label: "latest"
+      label: latest
       isTest: false
       isBeta: false
       usesBetaData: false
-      officialUrl: "https://nomad-lab.eu/prod/v1/gui"
+      officialUrl: https://nomad-lab.eu/prod/v1/gui
 
     meta:
-      service: "app"
-      homepage: "https://nomad-lab.eu"
-      source_url: "https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR"
-      maintainer_email: "markus.scheidgen@physik.hu-berlin.de"
+      service: app
+      homepage: https://nomad-lab.eu
+      source_url: https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR
+      maintainer_email: markus.scheidgen@physik.hu-berlin.de
 
     api:
       ## Secret used as cryptographic seed
-      secret: "defaultApiSecret"
+      secret: defaultApiSecret
       ## Limit of unpublished uploads per user, except admin user
       uploadLimit: 10
 
@@ -63,15 +54,15 @@ nomad:
       ## There are two routing modes "queue" and "worker". The "queue" routing will use a general
       # task queue and spread calc processing task over worker instances. The "worker" routing
       # will send all tasks related to an upload to the same worker
-      routing: "queue"
+      routing: queue
       timeout: 7200
       acks_late: false
 
     mail:
       enabled: false
-      host: "localhost"
+      host: localhost
       port: 25
-      from: "support@nomad-lab.eu"
+      from: support@nomad-lab.eu
 
     client:
       username: admin
@@ -93,17 +84,17 @@ nomad:
 
     datacite:
       enabled: false
-      prefix: "10.17172"
+      prefix: '10.17172'
 
     ## A common name/prefix for all dbs and indices.
     dbname: fairdi_nomad_latest
 
     mongo:
-      host: ""
+      host: ''
       port: 27017
 
     elastic:
-      host: ""
+      host: ''
       port: 9200
       timeout: 60
       bulkTimeout: 600
@@ -113,16 +104,16 @@ nomad:
     logstash:
       enabled: true
       port: 5000
-      host: ""
+      host: ''
 
     keycloak:
-      serverExternalUrl: "https://nomad-lab.eu/fairdi/keycloak/auth/"
-      serverUrl: "https://nomad-lab.eu/keycloak/auth/"
-      realmName: "fairdi_nomad_test"
-      username: "admin"
-      clientId: "nomad_public"
-      guiClientId: "nomad_public"
-      admin_user_id: "00000000-0000-0000-0000-000000000000"
+      serverExternalUrl: https://nomad-lab.eu/fairdi/keycloak/auth/
+      serverUrl: https://nomad-lab.eu/keycloak/auth/
+      realmName: fairdi_nomad_test
+      username: admin
+      clientId: nomad_public
+      guiClientId: nomad_public
+      admin_user_id: 00000000-0000-0000-0000-000000000000
 
     ## Everything concerning the data that is used by the service
     volumes:
@@ -140,7 +131,7 @@ nomad:
 
     north:
       enabled: false
-      hubServiceApiToken: "secret-token"
+      hubServiceApiToken: secret-token
 
     gui:
       ## This variable is used in the GUI to show or hide additional information
@@ -148,16 +139,27 @@ nomad:
       ## automatically gz based on header
       gzip: true
 
+    proxy:
+      # Set a nodePort to create a NodePort service instead of ClusterIP. Also set a nodeIP for the externalIP.
+      timeout: 120
+      editTimeout: 1800
+      external:
+        host: nomad-lab.eu
+        port: 80
+        path: /fairdi/nomad/latest
+        https: true
+
+
   ingress:
     enabled: false
     limitConnections: 32
     limitConnectionsApi: 8
     hosts:
-      - nomad-lab.eu
-    className: ""
+    - nomad-lab.eu
+    className: ''
     annotations:
-      nginx.ingress.kubernetes.io/ssl-redirect: "false"
-      nginx.ingress.kubernetes.io/proxy-body-size: "32g"
+      nginx.ingress.kubernetes.io/ssl-redirect: 'false'
+      nginx.ingress.kubernetes.io/proxy-body-size: 32g
     tls: []
 
   # Additional volumes on the output Deployment definition.
@@ -182,7 +184,7 @@ nomad:
   ## Everything concerning the nginx that serves the gui, proxies the api
   #  It is run via NodePort service
   proxy:
-    path: "/fairdi/nomad/latest"
+    path: /fairdi/nomad/latest
     timeout: 60
     editTimeout: 60
     connectionTimeout: 10
@@ -196,8 +198,8 @@ nomad:
       tag: 1.13.9-alpine
       pullPolicy: IfNotPresent
 
-    command: ["nginx"]
-    args: ["-g", "daemon off;"]
+    command: [nginx]
+    args: [-g, daemon off;]
 
     imagePullSecrets: []
 
@@ -379,7 +381,7 @@ jupyterhub:
       type: ClusterIP
   singleuser:
     image:
-      pullPolicy: "Always"
+      pullPolicy: Always
     storage:
       type: none
   hub:
@@ -416,13 +418,13 @@ jupyterhub:
         hub_service_api_token = os.getenv('NOMAD_NORTH_HUB_SERVICE_API_TOKEN')
 
         # configure nomad service
-        c.JupyterHub.services = [
+        c.JupyterHub.services.append(
             {
                 "name": "nomad-service",
                 "admin": True,
                 "api_token": hub_service_api_token,
             }
-        ]
+        )
 
         async def pre_spawn_hook(spawner):
             await spawner.load_user_options()
@@ -433,10 +435,6 @@ jupyterhub:
 
             if spawner.handler.current_user.name != 'nomad-service':
                 # Do nothing, will only launch the default image with no volumes.
-                # Only the nomad-service can launch specialized tools with mounted volumes
-                if spawner.name:
-                    spawner.log.error(f'The {spawner.name} server is not allowed to start this way, raise an error')
-                    raise NotImplementedError('Only the nomad-service can launch specialized tools.')
                 return
 
             user_home = spawner.user_options.get('user_home')
@@ -479,10 +477,11 @@ jupyterhub:
                     spawner.uid = 0
 
         c.Spawner.pre_spawn_hook = pre_spawn_hook
+        c.OAuthenticator.allow_all = True
 
   cull:
     enabled: true
-    timeout: 3600
+    timeout: 86400  # 24 hours
     every: 600
     removeNamedServers: true
 
@@ -490,10 +489,46 @@ jupyterhub:
     hook:
       enabled: true
       image:
-        pullPolicy: "Always"
+        pullPolicy: Always
     continuous:
       enabled: false
-
+    extraImages:
+      jupyter:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/north/jupyter
+        tag: latest
+      nionswift:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop
+        tag: latest
+      nexustools:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop
+        tag: latest
+      ellips:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/ellips-jupyter
+        tag: latest
+      mpes:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/north/mpes/webtop
+        tag: latest
+      xps:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/north/xps/jupyter
+        tag: master
+      sts:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter
+        tag: latest
+      webtop:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop
+        tag: latest
+      apmtools:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop
+        tag: latest
+      fiji:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/fiji-webtop
+        tag: latest
+      frwr:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/frwr-webtop
+        tag: latest
+      abtem:
+        name: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/abtem-webtop
+        tag: latest
   scheduling:
     userScheduler:
       enabled: false
diff --git a/ops/kubernetes/values.yaml b/ops/kubernetes/values.yaml
index 8a5de798558488c1e8a1d854c91e525148a14fe6..4bd569c4d8e9ca2e8f015ea6a3305303048855e3 100644
--- a/ops/kubernetes/values.yaml
+++ b/ops/kubernetes/values.yaml
@@ -85,7 +85,7 @@ nomad:
   ingress:
     enabled: true
     limitConnections: 32
-    limitConnectionsApi: 8
+    limitConnectionsApi: 16
     className: "nginx"
     annotations:
       cert-manager.io/cluster-issuer: "letsencrypt-production"
diff --git a/pyproject.toml b/pyproject.toml
index d3dcfb2c8131bf9f77bb7bfe8a1317588c34bcf1..5ec11c8d4a78f26b87474c0b867405b8fab02f82 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -102,7 +102,7 @@ infrastructure = [
     'fastapi==0.92.0',
     'uvicorn[standard]',
     'python-multipart==0.0.5',
-    'jupyterhub==1.4.2',
+    'jupyterhub==4.0.2',
     'dockerspawner==12.1.0',
     'oauthenticator==15.1.0',
     'validators==0.18.2',
@@ -140,7 +140,8 @@ dev = [
     'mkdocs-click==0.8.0',
     'mkdocs-redirects==1.2.0',
     'mkdocs-git-revision-date-localized-plugin==1.2.1',
-    'ruff==0.1.8'
+    'ruff==0.1.8',
+    'ruamel.yaml==0.17.21'
 ]
 
 
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 5be4fda0fcb64af24d4e7d85f8d85aa0f8fd1cf6..292843e01e8ae44348dc4a8bd8f36132fc824784 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -2,18 +2,19 @@
 # This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
-#    pip-compile --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt --resolver=backtracking pyproject.toml requirements.txt
+#    pip-compile --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt --pip-args='--prefer-binary' pyproject.toml requirements.txt
 #
 aiosmtpd==1.4.4.post2     # via nomad-lab (pyproject.toml)
 alabaster==0.7.12         # via -r requirements.txt, sphinx
 alembic==1.9.1            # via -r requirements.txt, jupyterhub
 amqp==5.1.1               # via -r requirements.txt, kombu
-aniso8601==7.0.0          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+aniso8601==7.0.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
 anyio==3.6.2              # via -r requirements.txt, httpcore, starlette, watchfiles
+appnope==0.1.4            # via -r requirements.txt, ipykernel, ipython
 arrow==1.2.3              # via -r requirements.txt, isoduration
 asciitree==0.3.3          # via -r requirements.txt, zarr
-ase==3.19.0               # via -r requirements.txt, asr, ifes-apt-tc-data-modeling, matid, nomad-lab, nomad-lab (pyproject.toml), quippy-ase
-asgiref==3.6.0            # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+ase==3.19.0               # via -r requirements.txt, asr, ifes-apt-tc-data-modeling, matid, nomad-lab (pyproject.toml), quippy-ase
+asgiref==3.6.0            # via -r requirements.txt, nomad-lab (pyproject.toml)
 asr==0.4.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
 asteval==0.9.31           # via -r requirements.txt, lmfit
 astroid==2.11.7           # via nomad-lab (pyproject.toml), pylint
@@ -24,25 +25,25 @@ atpublic==3.1.1           # via aiosmtpd
 attrs==22.2.0             # via -r requirements.txt, aiosmtpd, cattrs, jsonschema, pytest, requests-cache
 babel==2.11.0             # via -r requirements.txt, mkdocs-git-revision-date-localized-plugin, sphinx
 backcall==0.2.0           # via -r requirements.txt, ipython
-bagit==1.8.1              # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-basicauth==0.4.1          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-bcrypt==3.2.0             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+bagit==1.8.1              # via -r requirements.txt, nomad-lab (pyproject.toml)
+basicauth==0.4.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
+bcrypt==3.2.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 beautifulsoup4==4.11.1    # via -r requirements.txt, bs4
 billiard==3.6.4.0         # via -r requirements.txt, celery
 biopython==1.80           # via -r requirements.txt, mdanalysis
-bitarray==2.3.5           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+bitarray==2.3.5           # via -r requirements.txt, nomad-lab (pyproject.toml)
 bleach==5.0.1             # via readme-renderer
-bs4==0.0.1                # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+bs4==0.0.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
 build==0.9.0              # via nomad-lab (pyproject.toml), pip-tools
-cachetools==4.2.4         # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+cachetools==4.2.4         # via -r requirements.txt, nomad-lab (pyproject.toml)
 cattrs==22.2.0            # via -r requirements.txt, requests-cache
-celery[redis]==5.2.7      # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+celery[redis]==5.2.7      # via -r requirements.txt, nomad-lab (pyproject.toml)
 certifi==2022.12.7        # via -r requirements.txt, elasticsearch, httpcore, httpx, requests
 certipy==0.1.3            # via -r requirements.txt, jupyterhub
 cffi==1.15.1              # via -r requirements.txt, bcrypt, cryptography
 cftime==1.6.2             # via -r requirements.txt, netcdf4
 charset-normalizer==2.0.12  # via -r requirements.txt, requests
-click==8.1.3              # via -r requirements.txt, asr, celery, click-didyoumean, click-plugins, click-repl, flask, mkdocs, mkdocs-click, nomad-lab, nomad-lab (pyproject.toml), pip-tools, uvicorn
+click==8.1.3              # via -r requirements.txt, asr, celery, click-didyoumean, click-plugins, click-repl, flask, mkdocs, mkdocs-click, nomad-lab (pyproject.toml), pip-tools, uvicorn
 click-didyoumean==0.3.0   # via -r requirements.txt, celery
 click-plugins==1.1.1      # via -r requirements.txt, celery
 click-repl==0.2.0         # via -r requirements.txt, celery
@@ -51,7 +52,7 @@ colorama==0.4.6           # via twine
 comm==0.1.4               # via -r requirements.txt, ipywidgets
 commonmark==0.9.1         # via -r requirements.txt, recommonmark
 coverage==6.5.0           # via pytest-cov
-cryptography==39.0.0      # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng, secretstorage
+cryptography==39.0.0      # via -r requirements.txt, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng
 cycler==0.11.0            # via -r requirements.txt, matplotlib
 dask[array]==2022.2.0     # via -r requirements.txt, hyperspy, kikuchipy, orix, pyxem
 debugpy==1.6.5            # via -r requirements.txt, ipykernel
@@ -62,14 +63,14 @@ diffsims==0.5.2           # via -r requirements.txt, kikuchipy, pyxem
 dill==0.3.6               # via -r requirements.txt, hyperspy, pylint
 dnspython==2.2.1          # via -r requirements.txt, email-validator, pymongo
 docker==6.0.1             # via -r requirements.txt, dockerspawner
-dockerspawner==12.1.0     # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-docstring-parser==0.12    # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+dockerspawner==12.1.0     # via -r requirements.txt, nomad-lab (pyproject.toml)
+docstring-parser==0.12    # via -r requirements.txt, nomad-lab (pyproject.toml)
 docutils==0.19            # via -r requirements.txt, m2r, readme-renderer, recommonmark, sphinx
 ecdsa==0.18.0             # via -r requirements.txt, python-jose
-elasticsearch==7.17.1     # via -r requirements.txt, elasticsearch-dsl, nomad-lab, nomad-lab (pyproject.toml)
-elasticsearch-dsl==7.4.0  # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+elasticsearch==7.17.1     # via -r requirements.txt, elasticsearch-dsl, nomad-lab (pyproject.toml)
+elasticsearch-dsl==7.4.0  # via -r requirements.txt, nomad-lab (pyproject.toml)
 email-validator==1.3.0    # via -r requirements.txt, optimade
-entrypoints==0.4          # via -r requirements.txt, ipyparallel, jupyter-client, jupyterhub, numcodecs
+entrypoints==0.4          # via -r requirements.txt, ipyparallel, jupyter-client, numcodecs
 escapism==1.0.1           # via -r requirements.txt, dockerspawner
 essential-generators==1.0  # via nomad-lab (pyproject.toml)
 et-xmlfile==1.1.0         # via -r requirements.txt, openpyxl
@@ -78,9 +79,9 @@ execnet==1.9.0            # via pytest-xdist
 executing==0.10.0         # via devtools
 f90wrap==0.2.13           # via -r requirements.txt, quippy-ase
 fabio==2023.6.0           # via -r requirements.txt, pyfai, silx
-fastapi==0.92.0           # via -r requirements.txt, h5grove, nomad-lab, nomad-lab (pyproject.toml)
+fastapi==0.92.0           # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
 fasteners==0.18           # via -r requirements.txt, mdanalysis, zarr
-filelock==3.3.1           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+filelock==3.3.1           # via -r requirements.txt, nomad-lab (pyproject.toml)
 flask==2.2.2              # via -r requirements.txt, asr
 flatdict==4.0.1           # via -r requirements.txt
 fonttools==4.38.0         # via -r requirements.txt, matplotlib
@@ -89,26 +90,26 @@ fsspec==2022.11.0         # via -r requirements.txt, dask, hyperspy
 future==0.18.2            # via -r requirements.txt, uncertainties
 ghp-import==2.1.0         # via mkdocs
 gitdb==4.0.10             # via -r requirements.txt, gitpython
-gitpython==3.1.24         # via -r requirements.txt, mkdocs-git-revision-date-localized-plugin, nomad-lab, nomad-lab (pyproject.toml)
+gitpython==3.1.24         # via -r requirements.txt, mkdocs-git-revision-date-localized-plugin, nomad-lab (pyproject.toml)
 greenlet==2.0.1           # via -r requirements.txt, sqlalchemy
 griddataformats==0.7.0    # via -r requirements.txt, mdanalysis
 gsd==2.7.0                # via -r requirements.txt, mdanalysis
-gunicorn==21.2.0          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+gunicorn==21.2.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
 h11==0.14.0               # via -r requirements.txt, httpcore, uvicorn
-h5grove[fastapi]==1.3.0   # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-h5py==3.6.0               # via -r requirements.txt, h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab, nomad-lab (pyproject.toml), orix, phonopy, pyfai, silx
-hjson==3.0.2              # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-html5lib==1.1             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+h5grove[fastapi]==1.3.0   # via -r requirements.txt, nomad-lab (pyproject.toml)
+h5py==3.6.0               # via -r requirements.txt, h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, silx
+hjson==3.0.2              # via -r requirements.txt, nomad-lab (pyproject.toml)
+html5lib==1.1             # via -r requirements.txt, nomad-lab (pyproject.toml)
 httpcore==0.16.3          # via -r requirements.txt, httpx
 httptools==0.5.0          # via -r requirements.txt, uvicorn
-httpx==0.23.3             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+httpx==0.23.3             # via -r requirements.txt, nomad-lab (pyproject.toml)
 hyperspy==1.7.5           # via -r requirements.txt, kikuchipy, pyxem
 idna==3.4                 # via -r requirements.txt, anyio, email-validator, jsonschema, requests, rfc3986
 ifes-apt-tc-data-modeling==0.0.9  # via -r requirements.txt
 imageio==2.24.0           # via -r requirements.txt, hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image
 imagesize==1.4.1          # via -r requirements.txt, sphinx
-importlib-metadata==4.13.0  # via -r requirements.txt, flask, hyperspy, keyring, markdown, mkdocs, nomad-lab, nomad-lab (pyproject.toml), sphinx, twine
-inflection==0.5.1         # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+importlib-metadata==4.13.0  # via -r requirements.txt, flask, hyperspy, jupyterhub, keyring, markdown, mkdocs, nomad-lab (pyproject.toml), sphinx, twine
+inflection==0.5.1         # via -r requirements.txt, nomad-lab (pyproject.toml)
 ipykernel==6.16.2         # via -r requirements.txt, ipyparallel
 ipyparallel==8.4.1        # via -r requirements.txt, hyperspy
 ipython==7.34.0           # via -r requirements.txt, hyperspy, ipykernel, ipyparallel, ipywidgets
@@ -116,19 +117,18 @@ ipywidgets==8.1.1         # via -r requirements.txt, pyxem
 isodate==0.6.1            # via -r requirements.txt, rdflib
 isoduration==20.11.0      # via -r requirements.txt, jsonschema
 isort==4.3.21             # via pylint
-itsdangerous==2.1.2       # via -r requirements.txt, flask, nomad-lab, nomad-lab (pyproject.toml)
+itsdangerous==2.1.2       # via -r requirements.txt, flask, nomad-lab (pyproject.toml)
 jaraco-classes==3.2.3     # via keyring
 jedi==0.18.2              # via -r requirements.txt, ipython
-jeepney==0.8.0            # via keyring, secretstorage
 jinja2==3.0.3             # via -r requirements.txt, flask, hyperspy, jupyterhub, mkdocs, mkdocs-macros-plugin, mkdocs-material, sphinx
-jmespath==0.10.0          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-joblib==1.1.0             # via -r requirements.txt, mdanalysis, nomad-lab, pymatgen, scikit-learn
+jmespath==0.10.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
+joblib==1.1.0             # via -r requirements.txt, mdanalysis, pymatgen, scikit-learn
 jsonpointer==2.3          # via -r requirements.txt, jsonschema
-jsonschema[format]==4.17.3  # via -r requirements.txt, jupyter-telemetry, nomad-lab, nomad-lab (pyproject.toml), oauthenticator
+jsonschema[format]==4.17.3  # via -r requirements.txt, jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator
 jupyter-client==7.4.8     # via -r requirements.txt, ipykernel, ipyparallel
 jupyter-core==4.12.0      # via -r requirements.txt, jupyter-client
 jupyter-telemetry==0.1.0  # via -r requirements.txt, jupyterhub
-jupyterhub==1.4.2         # via -r requirements.txt, dockerspawner, nomad-lab, nomad-lab (pyproject.toml), oauthenticator
+jupyterhub==4.0.2         # via -r requirements.txt, dockerspawner, nomad-lab (pyproject.toml), oauthenticator
 jupyterlab-widgets==3.0.9  # via -r requirements.txt, ipywidgets
 keyring==23.11.0          # via twine
 kikuchipy==0.8.7          # via -r requirements.txt
@@ -140,18 +140,18 @@ lazy-object-proxy==1.9.0  # via astroid
 llvmlite==0.39.1          # via -r requirements.txt, numba
 lmfit==1.2.2              # via -r requirements.txt, pyxem
 locket==1.0.0             # via -r requirements.txt, partd
-lxml==4.7.1               # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-m2r==0.2.1                # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+lxml==4.7.1               # via -r requirements.txt, nomad-lab (pyproject.toml)
+m2r==0.2.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
 mako==1.2.4               # via -r requirements.txt, alembic
 markdown==3.4.1           # via mkdocs, mkdocs-click, mkdocs-material, pymdown-extensions
 markupsafe==2.1.1         # via -r requirements.txt, jinja2, mako, nomad-lab (pyproject.toml), werkzeug
-matid==2.0.0.dev2         # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+matid==2.0.0.dev2         # via -r requirements.txt, nomad-lab (pyproject.toml)
 matplotlib==3.5.3         # via -r requirements.txt, ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay
 matplotlib-inline==0.1.6  # via -r requirements.txt, ipykernel, ipython
 matplotlib-scalebar==0.8.1  # via -r requirements.txt, orix
 mccabe==0.6.1             # via pylint
-mdanalysis==2.5.0         # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-memoization==0.4.0        # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+mdanalysis==2.5.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
+memoization==0.4.0        # via -r requirements.txt, nomad-lab (pyproject.toml)
 mergedeep==1.3.4          # via -r requirements.txt, mkdocs
 mistune==2.0.4            # via -r requirements.txt, m2r
 mkdocs==1.3.0             # via mkdocs-git-revision-date-localized-plugin, mkdocs-macros-plugin, mkdocs-material, mkdocs-redirects, nomad-lab (pyproject.toml)
@@ -163,55 +163,52 @@ mkdocs-material==8.2.8    # via nomad-lab (pyproject.toml)
 mkdocs-material-extensions==1.3.1  # via mkdocs-material, nomad-lab (pyproject.toml)
 mkdocs-redirects==1.2.0   # via nomad-lab (pyproject.toml)
 mmtf-python==1.1.3        # via -r requirements.txt, mdanalysis
-mongoengine==0.25.0       # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+mongoengine==0.25.0       # via -r requirements.txt, nomad-lab (pyproject.toml)
 mongomock==4.1.2          # via -r requirements.txt, optimade
 monty==2022.9.9           # via -r requirements.txt, pymatgen
 more-itertools==9.0.0     # via jaraco-classes, pytest
 mpmath==1.2.1             # via -r requirements.txt, sympy
 mrcfile==1.4.3            # via -r requirements.txt, griddataformats
-msgpack==1.0.4            # via -r requirements.txt, mmtf-python, nomad-lab, nomad-lab (pyproject.toml)
+msgpack==1.0.4            # via -r requirements.txt, mmtf-python, nomad-lab (pyproject.toml)
 mypy==1.0.1               # via nomad-lab (pyproject.toml)
 mypy-extensions==0.4.3    # via mypy
 names==0.3.0              # via nomad-lab (pyproject.toml)
 natsort==8.2.0            # via -r requirements.txt, hyperspy
 nest-asyncio==1.5.6       # via -r requirements.txt, ipykernel, jupyter-client
 netcdf4==1.5.4            # via -r requirements.txt, nomad-lab (pyproject.toml)
-networkx==2.6.3           # via -r requirements.txt, matid, mdanalysis, nomad-lab, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
+networkx==2.6.3           # via -r requirements.txt, matid, mdanalysis, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
 niondata==0.15.5          # via -r requirements.txt, nionswift, nionswift-io
 nionswift==0.16.8         # via -r requirements.txt
 nionswift-io==0.15.1      # via -r requirements.txt, nionswift
 nionui==0.6.11            # via -r requirements.txt, nionswift
 nionutils==0.4.8          # via -r requirements.txt, niondata, nionswift, nionswift-io, nionui
-nomad-lab @ git+https://github.com/nomad-coe/nomad.git@develop  # via -r requirements.txt, nomad-schema-plugin-run, nomad-schema-plugin-simulation-workflow, simulationparsers
-nomad-schema-plugin-run @ git+https://github.com/nomad-coe/nomad-schema-plugin-run.git@develop  # via -r requirements.txt, nomad-schema-plugin-simulation-workflow, simulationparsers
-nomad-schema-plugin-simulation-workflow @ git+https://github.com/nomad-coe/nomad-schema-plugin-simulation-workflow.git@develop  # via -r requirements.txt
-nptyping==1.4.4           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+nptyping==1.4.4           # via -r requirements.txt, nomad-lab (pyproject.toml)
 numba==0.56.4             # via -r requirements.txt, diffsims, hyperspy, kikuchipy, orix, pyxem, sparse
 numcodecs==0.10.2         # via -r requirements.txt, zarr
 numexpr==2.8.4            # via -r requirements.txt, hyperspy, pyfai
-numpy==1.22.4             # via -r requirements.txt, ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr
+numpy==1.22.4             # via -r requirements.txt, ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr
 numpy-quaternion==2022.4.3  # via -r requirements.txt, orix
-oauthenticator==15.1.0    # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+oauthenticator==15.1.0    # via -r requirements.txt, nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via -r requirements.txt, jupyterhub
-openpyxl==3.1.2           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-optimade[mongo]==0.22.1   # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+openpyxl==3.1.2           # via -r requirements.txt, nomad-lab (pyproject.toml)
+optimade[mongo]==0.22.1   # via -r requirements.txt, nomad-lab (pyproject.toml)
 orix==0.11.1              # via -r requirements.txt, diffsims, kikuchipy, pyxem
-orjson==3.9.4             # via -r requirements.txt, h5grove, nomad-lab, nomad-lab (pyproject.toml)
-packaging==24.0           # via -r requirements.txt, build, dask, docker, gunicorn, hyperspy, ipykernel, matplotlib, mdanalysis, mkdocs, mongomock, pint, pooch, pytest, scikit-image, sphinx
+orjson==3.9.4             # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
+packaging==23.0           # via -r requirements.txt, build, dask, docker, gunicorn, hyperspy, ipykernel, jupyterhub, matplotlib, mdanalysis, mkdocs, mongomock, pint, pooch, pytest, scikit-image, sphinx
 palettable==3.3.0         # via -r requirements.txt, pymatgen
 pamela==1.0.0             # via -r requirements.txt, jupyterhub
-pandas==1.3.5             # via -r requirements.txt, ifes-apt-tc-data-modeling, nomad-lab, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, xarray
-panedr==0.2               # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-parmed==3.0.0             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+pandas==1.3.5             # via -r requirements.txt, ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, xarray
+panedr==0.2               # via -r requirements.txt, nomad-lab (pyproject.toml)
+parmed==3.0.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 parso==0.8.3              # via -r requirements.txt, jedi
 partd==1.3.0              # via -r requirements.txt, dask
-passlib==1.7.4            # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+passlib==1.7.4            # via -r requirements.txt, nomad-lab (pyproject.toml)
 pep517==0.13.0            # via build
 pexpect==4.8.0            # via -r requirements.txt, ipython
 phonopy==2.11.0           # via -r requirements.txt, asr
 pickleshare==0.7.5        # via -r requirements.txt, ipython
 pillow==9.4.0             # via -r requirements.txt, imageio, matplotlib, nionswift, scikit-image
-pint==0.17                # via -r requirements.txt, hyperspy, nomad-lab, nomad-lab (pyproject.toml)
+pint==0.17                # via -r requirements.txt, hyperspy, nomad-lab (pyproject.toml)
 pip-tools==6.13.0         # via nomad-lab (pyproject.toml)
 pkginfo==1.8.3            # via twine
 platformdirs==3.1.1       # via -r requirements.txt, pooch, pylint, requests-cache
@@ -231,16 +228,16 @@ pybtex==0.24.0            # via -r requirements.txt, pymatgen
 pycifrw==4.4.5            # via -r requirements.txt, diffpy-structure
 pycodestyle==2.8.0        # via nomad-lab (pyproject.toml)
 pycparser==2.21           # via -r requirements.txt, cffi
-pydantic==1.10.9          # via -r requirements.txt, fastapi, nomad-lab, nomad-lab (pyproject.toml), optimade
+pydantic==1.10.9          # via -r requirements.txt, fastapi, nomad-lab (pyproject.toml), optimade
 pyfai==2023.9.0           # via -r requirements.txt, pyxem
 pygments==2.14.0          # via -r requirements.txt, ipython, mkdocs-material, readme-renderer, sphinx
-pyjwt[crypto]==2.6.0      # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+pyjwt[crypto]==2.6.0      # via -r requirements.txt, nomad-lab (pyproject.toml)
 pylint==2.13.9            # via nomad-lab (pyproject.toml), pylint-mongoengine, pylint-plugin-utils
 pylint-mongoengine==0.4.0  # via nomad-lab (pyproject.toml)
 pylint-plugin-utils==0.7  # via nomad-lab (pyproject.toml), pylint-mongoengine
-pymatgen==2023.9.25       # via -r requirements.txt, asr, nomad-lab, nomad-lab (pyproject.toml)
+pymatgen==2023.9.25       # via -r requirements.txt, asr, nomad-lab (pyproject.toml)
 pymdown-extensions==9.7   # via mkdocs-material
-pymongo==4.3.3            # via -r requirements.txt, mongoengine, nomad-lab, nomad-lab (pyproject.toml), optimade
+pymongo==4.3.3            # via -r requirements.txt, mongoengine, nomad-lab (pyproject.toml), optimade
 pyopenssl==23.0.0         # via -r requirements.txt, certipy
 pyparsing==3.0.9          # via -r requirements.txt, matplotlib, rdflib
 pyrsistent==0.19.3        # via -r requirements.txt, jsonschema
@@ -253,45 +250,43 @@ python-dateutil==2.8.2    # via -r requirements.txt, arrow, elasticsearch-dsl, g
 python-dotenv==0.21.0     # via -r requirements.txt, uvicorn
 python-gitlab==2.10.1     # via nomad-lab (pyproject.toml)
 python-jose==3.3.0        # via -r requirements.txt, python-keycloak
-python-json-logger==2.0.2  # via -r requirements.txt, jupyter-telemetry, nomad-lab, nomad-lab (pyproject.toml)
-python-keycloak==0.26.1   # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-python-logstash==0.4.6    # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-python-magic==0.4.24      # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-python-multipart==0.0.5   # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
-pytz==2022.7.1            # via -r requirements.txt, babel, celery, mkdocs-git-revision-date-localized-plugin, nionswift, nomad-lab, nomad-lab (pyproject.toml), pandas
+python-json-logger==2.0.2  # via -r requirements.txt, jupyter-telemetry, nomad-lab (pyproject.toml)
+python-keycloak==0.26.1   # via -r requirements.txt, nomad-lab (pyproject.toml)
+python-logstash==0.4.6    # via -r requirements.txt, nomad-lab (pyproject.toml)
+python-magic==0.4.24      # via -r requirements.txt, nomad-lab (pyproject.toml)
+python-multipart==0.0.5   # via -r requirements.txt, nomad-lab (pyproject.toml)
+pytz==2022.7.1            # via -r requirements.txt, babel, celery, mkdocs-git-revision-date-localized-plugin, nionswift, nomad-lab (pyproject.toml), pandas
 pytz-deprecation-shim==0.1.0.post0  # via -r requirements.txt, tzlocal
 pywavelets==1.3.0         # via -r requirements.txt, scikit-image
 pyxem==0.15.1             # via -r requirements.txt
-pyyaml==6.0               # via -r requirements.txt, dask, hyperspy, kikuchipy, mkdocs, mkdocs-macros-plugin, nomad-lab, nomad-lab (pyproject.toml), phonopy, pybtex, pyyaml-env-tag, uvicorn
+pyyaml==6.0               # via -r requirements.txt, dask, hyperspy, kikuchipy, mkdocs, mkdocs-macros-plugin, nomad-lab (pyproject.toml), phonopy, pybtex, pyyaml-env-tag, uvicorn
 pyyaml-env-tag==0.1       # via mkdocs
 pyzeo==0.1.4              # via -r requirements.txt, nomad-lab (pyproject.toml)
 pyzmq==25.0.0             # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client
 quippy-ase==0.9.14        # via -r requirements.txt, nomad-lab (pyproject.toml)
 radioactivedecay==0.4.17  # via -r requirements.txt, ifes-apt-tc-data-modeling
-rdflib==5.0.0             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+rdflib==5.0.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 readme-renderer==37.3     # via twine
-recommonmark==0.7.1       # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+recommonmark==0.7.1       # via -r requirements.txt, nomad-lab (pyproject.toml)
 redis==4.4.2              # via -r requirements.txt, celery
-requests==2.28.2          # via -r requirements.txt, docker, hyperspy, jupyterhub, nomad-lab, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-cache, requests-toolbelt, rfc3161ng, sphinx, twine
+requests==2.28.2          # via -r requirements.txt, docker, hyperspy, jupyterhub, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-cache, requests-toolbelt, rfc3161ng, sphinx, twine
 requests-cache==1.0.1     # via -r requirements.txt
 requests-toolbelt==0.10.1  # via python-gitlab, twine
-rfc3161ng==2.1.3          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+rfc3161ng==2.1.3          # via -r requirements.txt, nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via -r requirements.txt, jsonschema
 rfc3986[idna2008]==1.5.0  # via -r requirements.txt, httpx, twine
 rfc3987==1.3.8            # via -r requirements.txt, jsonschema
 rope==0.21.0              # via nomad-lab (pyproject.toml)
 rsa==4.9                  # via -r requirements.txt, python-jose
-ruamel-yaml==0.17.21      # via -r requirements.txt, jupyter-telemetry, oauthenticator, pymatgen
+ruamel-yaml==0.17.21      # via -r requirements.txt, jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator, pymatgen
 ruamel-yaml-clib==0.2.7   # via -r requirements.txt, ruamel-yaml
 ruff==0.1.8               # via nomad-lab (pyproject.toml)
-runstats==2.0.0           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+runstats==2.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via -r requirements.txt, hyperspy, kikuchipy, pyxem
-scikit-learn==1.0.2       # via -r requirements.txt, kikuchipy, matid, nomad-lab, nomad-lab (pyproject.toml), pyxem
-scipy==1.7.1              # via -r requirements.txt, ase, diffsims, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse
-secretstorage==3.3.3      # via keyring
+scikit-learn==1.0.2       # via -r requirements.txt, kikuchipy, matid, nomad-lab (pyproject.toml), pyxem
+scipy==1.7.1              # via -r requirements.txt, ase, diffsims, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse
 sentinels==1.0.0          # via -r requirements.txt, mongomock
 silx==1.1.2               # via -r requirements.txt, pyfai
-simulationparsers @ git+https://github.com/nomad-coe/simulation-parsers.git@develop  # via -r requirements.txt
 six==1.16.0               # via -r requirements.txt, asttokens, basicauth, bcrypt, bleach, click-repl, diffpy-structure, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, pytest-xdist, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators
 smmap==5.0.0              # via -r requirements.txt, gitdb
 sniffio==1.3.0            # via -r requirements.txt, anyio, httpcore, httpx
@@ -308,9 +303,9 @@ sphinxcontrib-qthelp==1.0.3  # via -r requirements.txt, sphinx
 sphinxcontrib-serializinghtml==1.1.5  # via -r requirements.txt, sphinx
 sqlalchemy==1.4.46        # via -r requirements.txt, alembic, jupyterhub
 starlette==0.25.0         # via -r requirements.txt, fastapi
-structlog==22.3.0         # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+structlog==22.3.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
 sympy==1.10.1             # via -r requirements.txt, hyperspy, pymatgen, radioactivedecay
-tabulate==0.8.9           # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml), pybis, pymatgen
+tabulate==0.8.9           # via -r requirements.txt, nomad-lab (pyproject.toml), pybis, pymatgen
 tenacity==8.1.0           # via -r requirements.txt, plotly
 termcolor==2.1.0          # via mkdocs-macros-plugin
 texttable==1.7.0          # via -r requirements.txt, pybis
@@ -318,7 +313,7 @@ threadpoolctl==3.1.0      # via -r requirements.txt, mdanalysis, scikit-learn
 tifffile==2021.11.2       # via -r requirements.txt, h5grove, hyperspy, scikit-image
 tomli==2.0.1              # via build, mypy, pep517, pylint
 toolz==0.12.0             # via -r requirements.txt, dask, hyperspy, partd
-toposort==1.9             # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+toposort==1.9             # via -r requirements.txt, nomad-lab (pyproject.toml)
 tornado==6.2              # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyterhub
 tqdm==4.64.1              # via -r requirements.txt, diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pymatgen, twine
 traitlets==5.8.1          # via -r requirements.txt, comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-core, jupyter-telemetry, jupyterhub, matplotlib-inline
@@ -331,13 +326,13 @@ typish==1.9.3             # via -r requirements.txt, nptyping
 tzdata==2023.3            # via -r requirements.txt, pytz-deprecation-shim
 tzlocal==4.3              # via -r requirements.txt, nionswift
 uncertainties==3.1.7      # via -r requirements.txt, lmfit, pymatgen
-unidecode==1.3.2          # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+unidecode==1.3.2          # via -r requirements.txt, nomad-lab (pyproject.toml)
 uri-template==1.2.0       # via -r requirements.txt, jsonschema
 url-normalize==1.4.3      # via -r requirements.txt, requests-cache
 urllib3==1.26.14          # via -r requirements.txt, docker, elasticsearch, pybis, requests, requests-cache
-uvicorn[standard]==0.20.0  # via -r requirements.txt, h5grove, nomad-lab, nomad-lab (pyproject.toml)
+uvicorn[standard]==0.20.0  # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
 uvloop==0.17.0            # via -r requirements.txt, uvicorn
-validators==0.18.2        # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+validators==0.18.2        # via -r requirements.txt, nomad-lab (pyproject.toml)
 vine==5.0.0               # via -r requirements.txt, amqp, celery, kombu
 watchdog==2.1.9           # via mkdocs
 watchfiles==0.18.1        # via -r requirements.txt, uvicorn
@@ -349,12 +344,12 @@ websockets==10.4          # via -r requirements.txt, uvicorn
 werkzeug==2.2.2           # via -r requirements.txt, flask
 wheel==0.38.4             # via pip-tools
 widgetsnbextension==4.0.9  # via -r requirements.txt, ipywidgets
-wrapt==1.12.1             # via -r requirements.txt, astroid, nomad-lab, nomad-lab (pyproject.toml)
-xarray==0.20.2            # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+wrapt==1.12.1             # via -r requirements.txt, astroid, nomad-lab (pyproject.toml)
+xarray==0.20.2            # via -r requirements.txt, nomad-lab (pyproject.toml)
 zarr==2.12.0              # via -r requirements.txt, hyperspy
 zipfile37==0.1.3          # via -r requirements.txt
 zipp==3.11.0              # via -r requirements.txt, importlib-metadata
-zipstream-new==1.1.5      # via -r requirements.txt, nomad-lab, nomad-lab (pyproject.toml)
+zipstream-new==1.1.5      # via -r requirements.txt, nomad-lab (pyproject.toml)
 
 # The following packages are considered to be unsafe in a requirements file:
 # pip
diff --git a/requirements.txt b/requirements.txt
index 6761ecddc37b3039890e3d087c4c86394929537c..8c69d3eff21f189aa76e64894df3083e55b79021 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,48 +2,49 @@
 # This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
-#    pip-compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt --resolver=backtracking dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/atomistic/pyproject.toml dependencies/parsers/database/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/electronic/pyproject.toml dependencies/parsers/nexus/pyproject.toml dependencies/parsers/workflow/pyproject.toml pyproject.toml
+#    pip-compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt --pip-args='--prefer-binary' dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/nexus/pyproject.toml pyproject.toml
 #
 alabaster==0.7.12         # via sphinx
 alembic==1.9.1            # via jupyterhub
 amqp==5.1.1               # via kombu
-aniso8601==7.0.0          # via nomad-lab, nomad-lab (pyproject.toml)
+aniso8601==7.0.0          # via nomad-lab (pyproject.toml)
 anyio==3.6.2              # via httpcore, starlette, watchfiles
+appnope==0.1.4            # via ipykernel, ipython
 arrow==1.2.3              # via isoduration
 asciitree==0.3.3          # via zarr
-ase==3.19.0               # via asr, ifes-apt-tc-data-modeling, matid, nomad-lab, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), quippy-ase
-asgiref==3.6.0            # via nomad-lab, nomad-lab (pyproject.toml)
-asr==0.4.1                # via nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml)
+ase==3.19.0               # via asr, ifes-apt-tc-data-modeling, matid, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), quippy-ase
+asgiref==3.6.0            # via nomad-lab (pyproject.toml)
+asr==0.4.1                # via nomad-lab (pyproject.toml)
 asteval==0.9.31           # via lmfit
 async-generator==1.10     # via jupyterhub
 async-timeout==4.0.2      # via redis
 attrs==22.2.0             # via cattrs, jsonschema, requests-cache
 babel==2.11.0             # via sphinx
 backcall==0.2.0           # via ipython
-bagit==1.8.1              # via nomad-lab, nomad-lab (pyproject.toml)
-basicauth==0.4.1          # via nomad-lab, nomad-lab (pyproject.toml)
-bcrypt==3.2.0             # via nomad-lab, nomad-lab (pyproject.toml)
+bagit==1.8.1              # via nomad-lab (pyproject.toml)
+basicauth==0.4.1          # via nomad-lab (pyproject.toml)
+bcrypt==3.2.0             # via nomad-lab (pyproject.toml)
 beautifulsoup4==4.11.1    # via bs4
 billiard==3.6.4.0         # via celery
 biopython==1.80           # via mdanalysis
-bitarray==2.3.5           # via nomad-lab, nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml)
-bs4==0.0.1                # via nomad-lab, nomad-lab (pyproject.toml)
-cachetools==4.2.4         # via nomad-lab, nomad-lab (pyproject.toml)
+bitarray==2.3.5           # via nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml)
+bs4==0.0.1                # via nomad-lab (pyproject.toml)
+cachetools==4.2.4         # via nomad-lab (pyproject.toml)
 cattrs==22.2.0            # via requests-cache
-celery[redis]==5.2.7      # via nomad-lab, nomad-lab (pyproject.toml)
+celery[redis]==5.2.7      # via nomad-lab (pyproject.toml)
 certifi==2022.12.7        # via elasticsearch, httpcore, httpx, requests
 certipy==0.1.3            # via jupyterhub
 cffi==1.15.1              # via bcrypt, cryptography
 cftime==1.6.2             # via netcdf4
 charset-normalizer==2.0.12  # via requests
-click==8.1.3              # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, nomad-lab, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), uvicorn
+click==8.1.3              # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), uvicorn
 click-didyoumean==0.3.0   # via celery
 click-plugins==1.1.1      # via celery
 click-repl==0.2.0         # via celery
 cloudpickle==2.2.0        # via dask
 comm==0.1.4               # via ipywidgets
 commonmark==0.9.1         # via recommonmark
-cryptography==39.0.0      # via nomad-lab, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng
+cryptography==39.0.0      # via nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng
 cycler==0.11.0            # via matplotlib
 dask[array]==2022.2.0     # via hyperspy, kikuchipy, orix, pyxem
 debugpy==1.6.5            # via ipykernel
@@ -53,22 +54,22 @@ diffsims==0.5.2           # via kikuchipy, pyxem
 dill==0.3.6               # via hyperspy
 dnspython==2.2.1          # via email-validator, pymongo
 docker==6.0.1             # via dockerspawner
-dockerspawner==12.1.0     # via nomad-lab, nomad-lab (pyproject.toml)
-docstring-parser==0.12    # via nomad-lab, nomad-lab (pyproject.toml)
+dockerspawner==12.1.0     # via nomad-lab (pyproject.toml)
+docstring-parser==0.12    # via nomad-lab (pyproject.toml)
 docutils==0.19            # via m2r, recommonmark, sphinx
 ecdsa==0.18.0             # via python-jose
-elasticsearch==7.17.1     # via elasticsearch-dsl, nomad-lab, nomad-lab (pyproject.toml)
-elasticsearch-dsl==7.4.0  # via nomad-lab, nomad-lab (pyproject.toml)
+elasticsearch==7.17.1     # via elasticsearch-dsl, nomad-lab (pyproject.toml)
+elasticsearch-dsl==7.4.0  # via nomad-lab (pyproject.toml)
 email-validator==1.3.0    # via optimade
-entrypoints==0.4          # via ipyparallel, jupyter-client, jupyterhub, numcodecs
+entrypoints==0.4          # via ipyparallel, jupyter-client, numcodecs
 escapism==1.0.1           # via dockerspawner
 et-xmlfile==1.1.0         # via openpyxl
 exceptiongroup==1.2.0     # via cattrs
 f90wrap==0.2.13           # via quippy-ase
 fabio==2023.6.0           # via pyfai, silx
-fastapi==0.92.0           # via h5grove, nomad-lab, nomad-lab (pyproject.toml)
+fastapi==0.92.0           # via h5grove, nomad-lab (pyproject.toml)
 fasteners==0.18           # via mdanalysis, zarr
-filelock==3.3.1           # via nomad-lab, nomad-lab (pyproject.toml)
+filelock==3.3.1           # via nomad-lab (pyproject.toml)
 flask==2.2.2              # via asr
 flatdict==4.0.1           # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 fonttools==4.38.0         # via matplotlib
@@ -76,43 +77,43 @@ fqdn==1.5.1               # via jsonschema
 fsspec==2022.11.0         # via dask, hyperspy
 future==0.18.2            # via uncertainties
 gitdb==4.0.10             # via gitpython
-gitpython==3.1.24         # via nomad-lab, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml)
+gitpython==3.1.24         # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml)
 greenlet==2.0.1           # via sqlalchemy
 griddataformats==0.7.0    # via mdanalysis
 gsd==2.7.0                # via mdanalysis
-gunicorn==21.2.0          # via nomad-lab, nomad-lab (pyproject.toml)
+gunicorn==21.2.0          # via nomad-lab (pyproject.toml)
 h11==0.14.0               # via httpcore, uvicorn
-h5grove[fastapi]==1.3.0   # via nomad-lab, nomad-lab (pyproject.toml)
-h5py==3.6.0               # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab, nomad-lab (pyproject.toml), orix, phonopy, pyfai, silx
-hjson==3.0.2              # via nomad-lab, nomad-lab (pyproject.toml)
-html5lib==1.1             # via nomad-lab, nomad-lab (pyproject.toml)
+h5grove[fastapi]==1.3.0   # via nomad-lab (pyproject.toml)
+h5py==3.6.0               # via h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, pynxtools (dependencies/parsers/nexus/pyproject.toml), silx
+hjson==3.0.2              # via nomad-lab (pyproject.toml)
+html5lib==1.1             # via nomad-lab (pyproject.toml)
 httpcore==0.16.3          # via httpx
 httptools==0.5.0          # via uvicorn
-httpx==0.23.3             # via nomad-lab, nomad-lab (pyproject.toml)
+httpx==0.23.3             # via nomad-lab (pyproject.toml)
 hyperspy==1.7.5           # via kikuchipy, pynxtools (dependencies/parsers/nexus/pyproject.toml), pyxem
 idna==3.4                 # via anyio, email-validator, jsonschema, requests, rfc3986
 ifes-apt-tc-data-modeling==0.0.9  # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 imageio==2.24.0           # via hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image
 imagesize==1.4.1          # via sphinx
-importlib-metadata==4.13.0  # via flask, hyperspy, nomad-lab, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), sphinx
-inflection==0.5.1         # via nomad-lab, nomad-lab (pyproject.toml)
+importlib-metadata==4.13.0  # via flask, hyperspy, jupyterhub, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), sphinx
+inflection==0.5.1         # via nomad-lab (pyproject.toml)
 ipykernel==6.16.2         # via ipyparallel
 ipyparallel==8.4.1        # via hyperspy
 ipython==7.34.0           # via hyperspy, ipykernel, ipyparallel, ipywidgets
 ipywidgets==8.1.1         # via pyxem
 isodate==0.6.1            # via rdflib
 isoduration==20.11.0      # via jsonschema
-itsdangerous==2.1.2       # via flask, nomad-lab, nomad-lab (pyproject.toml)
+itsdangerous==2.1.2       # via flask, nomad-lab (pyproject.toml)
 jedi==0.18.2              # via ipython
 jinja2==3.0.3             # via flask, hyperspy, jupyterhub, sphinx
-jmespath==0.10.0          # via nomad-lab, nomad-lab (pyproject.toml)
-joblib==1.1.0             # via mdanalysis, nomad-lab, pymatgen, scikit-learn
+jmespath==0.10.0          # via nomad-lab (pyproject.toml)
+joblib==1.1.0             # via mdanalysis, pymatgen, scikit-learn
 jsonpointer==2.3          # via jsonschema
-jsonschema[format]==4.17.3  # via jupyter-telemetry, nomad-lab, nomad-lab (pyproject.toml), oauthenticator
+jsonschema[format]==4.17.3  # via jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator
 jupyter-client==7.4.8     # via ipykernel, ipyparallel
 jupyter-core==4.12.0      # via jupyter-client
 jupyter-telemetry==0.1.0  # via jupyterhub
-jupyterhub==1.4.2         # via dockerspawner, nomad-lab, nomad-lab (pyproject.toml), oauthenticator
+jupyterhub==4.0.2         # via dockerspawner, nomad-lab (pyproject.toml), oauthenticator
 jupyterlab-widgets==3.0.9  # via ipywidgets
 kikuchipy==0.8.7          # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 kiwisolver==1.4.4         # via matplotlib
@@ -122,63 +123,60 @@ latexcodec==2.0.1         # via pybtex
 llvmlite==0.39.1          # via numba
 lmfit==1.2.2              # via pyxem
 locket==1.0.0             # via partd
-lxml==4.7.1               # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab, nomad-lab (pyproject.toml)
-m2r==0.2.1                # via nomad-lab, nomad-lab (pyproject.toml)
+lxml==4.7.1               # via nomad-lab (pyproject.toml)
+m2r==0.2.1                # via nomad-lab (pyproject.toml)
 mako==1.2.4               # via alembic
 markupsafe==2.1.1         # via jinja2, mako, werkzeug
-matid==2.0.0.dev2         # via nomad-lab, nomad-lab (pyproject.toml)
+matid==2.0.0.dev2         # via nomad-lab (pyproject.toml)
 matplotlib==3.5.3         # via ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay
 matplotlib-inline==0.1.6  # via ipykernel, ipython
 matplotlib-scalebar==0.8.1  # via orix
-mdanalysis==2.5.0         # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab, nomad-lab (pyproject.toml)
-memoization==0.4.0        # via nomad-lab, nomad-lab (pyproject.toml)
+mdanalysis==2.5.0         # via nomad-lab (pyproject.toml)
+memoization==0.4.0        # via nomad-lab (pyproject.toml)
 mergedeep==1.3.4          # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 mistune==2.0.4            # via m2r
 mmtf-python==1.1.3        # via mdanalysis
-mongoengine==0.25.0       # via nomad-lab, nomad-lab (pyproject.toml)
+mongoengine==0.25.0       # via nomad-lab (pyproject.toml)
 mongomock==4.1.2          # via optimade
 monty==2022.9.9           # via pymatgen
 mpmath==1.2.1             # via sympy
 mrcfile==1.4.3            # via griddataformats
-msgpack==1.0.4            # via mmtf-python, nomad-lab, nomad-lab (pyproject.toml)
+msgpack==1.0.4            # via mmtf-python, nomad-lab (pyproject.toml)
 natsort==8.2.0            # via hyperspy
 nest-asyncio==1.5.6       # via ipykernel, jupyter-client
-netcdf4==1.5.4            # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml)
-networkx==2.6.3           # via matid, mdanalysis, nomad-lab, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
+netcdf4==1.5.4            # via nomad-lab (pyproject.toml)
+networkx==2.6.3           # via matid, mdanalysis, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
 niondata==0.15.5          # via nionswift, nionswift-io
 nionswift==0.16.8         # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 nionswift-io==0.15.1      # via nionswift
 nionui==0.6.11            # via nionswift
 nionutils==0.4.8          # via niondata, nionswift, nionswift-io, nionui
-nomad-lab @ git+https://github.com/nomad-coe/nomad.git@develop  # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-schema-plugin-run, nomad-schema-plugin-simulation-workflow, simulationparsers, workflowparsers (dependencies/parsers/workflow/pyproject.toml)
-nomad-schema-plugin-run @ git+https://github.com/nomad-coe/nomad-schema-plugin-run.git@develop  # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-schema-plugin-simulation-workflow, simulationparsers, workflowparsers (dependencies/parsers/workflow/pyproject.toml)
-nomad-schema-plugin-simulation-workflow @ git+https://github.com/nomad-coe/nomad-schema-plugin-simulation-workflow.git@develop  # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml)
-nptyping==1.4.4           # via nomad-lab, nomad-lab (pyproject.toml)
+nptyping==1.4.4           # via nomad-lab (pyproject.toml)
 numba==0.56.4             # via diffsims, hyperspy, kikuchipy, orix, pyxem, sparse
 numcodecs==0.10.2         # via zarr
 numexpr==2.8.4            # via hyperspy, pyfai
-numpy==1.22.4             # via ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab, nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr
+numpy==1.22.4             # via ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pynxtools (dependencies/parsers/nexus/pyproject.toml), pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr
 numpy-quaternion==2022.4.3  # via orix
-oauthenticator==15.1.0    # via nomad-lab, nomad-lab (pyproject.toml)
+oauthenticator==15.1.0    # via nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via jupyterhub
-openpyxl==3.1.2           # via nomad-lab, nomad-lab (pyproject.toml)
-optimade[mongo]==0.22.1   # via nomad-lab, nomad-lab (pyproject.toml)
+openpyxl==3.1.2           # via nomad-lab (pyproject.toml)
+optimade[mongo]==0.22.1   # via nomad-lab (pyproject.toml)
 orix==0.11.1              # via diffsims, kikuchipy, pyxem
-orjson==3.9.4             # via h5grove, nomad-lab, nomad-lab (pyproject.toml)
-packaging==24.0           # via dask, docker, gunicorn, hyperspy, ipykernel, matplotlib, mdanalysis, mongomock, pint, pooch, scikit-image, sphinx
+orjson==3.9.4             # via h5grove, nomad-lab (pyproject.toml)
+packaging==23.0           # via dask, docker, gunicorn, hyperspy, ipykernel, jupyterhub, matplotlib, mdanalysis, mongomock, pint, pooch, scikit-image, sphinx
 palettable==3.3.0         # via pymatgen
 pamela==1.0.0             # via jupyterhub
-pandas==1.3.5             # via eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), ifes-apt-tc-data-modeling, nomad-lab, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, xarray
-panedr==0.2               # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab, nomad-lab (pyproject.toml)
-parmed==3.0.0             # via nomad-lab, nomad-lab (pyproject.toml)
+pandas==1.3.5             # via eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, pynxtools (dependencies/parsers/nexus/pyproject.toml), xarray
+panedr==0.2               # via nomad-lab (pyproject.toml)
+parmed==3.0.0             # via nomad-lab (pyproject.toml)
 parso==0.8.3              # via jedi
 partd==1.3.0              # via dask
-passlib==1.7.4            # via nomad-lab, nomad-lab (pyproject.toml)
+passlib==1.7.4            # via nomad-lab (pyproject.toml)
 pexpect==4.8.0            # via ipython
-phonopy==2.11.0           # via asr, workflowparsers (dependencies/parsers/workflow/pyproject.toml)
+phonopy==2.11.0           # via asr
 pickleshare==0.7.5        # via ipython
 pillow==9.4.0             # via imageio, matplotlib, nionswift, scikit-image
-pint==0.17                # via hyperspy, nomad-lab, nomad-lab (pyproject.toml)
+pint==0.17                # via hyperspy, nomad-lab (pyproject.toml)
 platformdirs==3.1.1       # via pooch, requests-cache
 plotly==5.11.0            # via asr, pymatgen
 pooch==1.7.0              # via kikuchipy, orix
@@ -193,51 +191,50 @@ pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git  # via nomad-lab (
 pybtex==0.24.0            # via pymatgen
 pycifrw==4.4.5            # via diffpy-structure
 pycparser==2.21           # via cffi
-pydantic==1.10.9          # via fastapi, nomad-lab, nomad-lab (pyproject.toml), optimade
+pydantic==1.10.9          # via fastapi, nomad-lab (pyproject.toml), optimade
 pyfai==2023.9.0           # via pyxem
 pygments==2.14.0          # via ipython, sphinx
-pyjwt[crypto]==2.6.0      # via nomad-lab, nomad-lab (pyproject.toml)
-pymatgen==2023.9.25       # via asr, nomad-lab, nomad-lab (pyproject.toml)
-pymongo==4.3.3            # via mongoengine, nomad-lab, nomad-lab (pyproject.toml), optimade
+pyjwt[crypto]==2.6.0      # via nomad-lab (pyproject.toml)
+pymatgen==2023.9.25       # via asr, nomad-lab (pyproject.toml)
+pymongo==4.3.3            # via mongoengine, nomad-lab (pyproject.toml), optimade
 pyopenssl==23.0.0         # via certipy
 pyparsing==3.0.9          # via matplotlib, rdflib
 pyrsistent==0.19.3        # via jsonschema
 python-dateutil==2.8.2    # via arrow, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, pandas, pybis, rfc3161ng
 python-dotenv==0.21.0     # via uvicorn
 python-jose==3.3.0        # via python-keycloak
-python-json-logger==2.0.2  # via jupyter-telemetry, nomad-lab, nomad-lab (pyproject.toml)
-python-keycloak==0.26.1   # via nomad-lab, nomad-lab (pyproject.toml)
-python-logstash==0.4.6    # via nomad-lab, nomad-lab (pyproject.toml)
-python-magic==0.4.24      # via nomad-lab, nomad-lab (pyproject.toml)
-python-multipart==0.0.5   # via nomad-lab, nomad-lab (pyproject.toml)
-pytz==2022.7.1            # via babel, celery, nionswift, nomad-lab, nomad-lab (pyproject.toml), pandas, pynxtools (dependencies/parsers/nexus/pyproject.toml)
+python-json-logger==2.0.2  # via jupyter-telemetry, nomad-lab (pyproject.toml)
+python-keycloak==0.26.1   # via nomad-lab (pyproject.toml)
+python-logstash==0.4.6    # via nomad-lab (pyproject.toml)
+python-magic==0.4.24      # via nomad-lab (pyproject.toml)
+python-multipart==0.0.5   # via nomad-lab (pyproject.toml)
+pytz==2022.7.1            # via babel, celery, nionswift, nomad-lab (pyproject.toml), pandas, pynxtools (dependencies/parsers/nexus/pyproject.toml)
 pytz-deprecation-shim==0.1.0.post0  # via tzlocal
 pywavelets==1.3.0         # via scikit-image
 pyxem==0.15.1             # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
-pyyaml==6.0               # via dask, electronicparsers (dependencies/parsers/electronic/pyproject.toml), hyperspy, kikuchipy, nomad-lab, nomad-lab (pyproject.toml), phonopy, pybtex, uvicorn
+pyyaml==6.0               # via dask, hyperspy, kikuchipy, nomad-lab (pyproject.toml), phonopy, pybtex, pynxtools (dependencies/parsers/nexus/pyproject.toml), uvicorn
 pyzeo==0.1.4              # via nomad-lab (pyproject.toml)
 pyzmq==25.0.0             # via ipykernel, ipyparallel, jupyter-client
 quippy-ase==0.9.14        # via nomad-lab (pyproject.toml)
 radioactivedecay==0.4.17  # via ifes-apt-tc-data-modeling
-rdflib==5.0.0             # via nomad-lab, nomad-lab (pyproject.toml)
-recommonmark==0.7.1       # via nomad-lab, nomad-lab (pyproject.toml)
+rdflib==5.0.0             # via nomad-lab (pyproject.toml)
+recommonmark==0.7.1       # via nomad-lab (pyproject.toml)
 redis==4.4.2              # via celery
-requests==2.28.2          # via docker, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), hyperspy, jupyterhub, nomad-lab, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, python-keycloak, requests-cache, rfc3161ng, sphinx
+requests==2.28.2          # via docker, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), hyperspy, jupyterhub, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, pynxtools (dependencies/parsers/nexus/pyproject.toml), python-keycloak, requests-cache, rfc3161ng, sphinx
 requests-cache==1.0.1     # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
-rfc3161ng==2.1.3          # via nomad-lab, nomad-lab (pyproject.toml)
+rfc3161ng==2.1.3          # via nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via jsonschema
 rfc3986[idna2008]==1.5.0  # via httpx
 rfc3987==1.3.8            # via jsonschema
 rsa==4.9                  # via python-jose
 ruamel-yaml==0.17.21      # via jupyter-telemetry, oauthenticator, pymatgen
 ruamel-yaml-clib==0.2.7   # via ruamel-yaml
-runstats==2.0.0           # via nomad-lab, nomad-lab (pyproject.toml)
+runstats==2.0.0           # via nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via hyperspy, kikuchipy, pyxem
-scikit-learn==1.0.2       # via kikuchipy, matid, nomad-lab, nomad-lab (pyproject.toml), pyxem
-scipy==1.7.1              # via ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), diffsims, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse
+scikit-learn==1.0.2       # via kikuchipy, matid, nomad-lab (pyproject.toml), pyxem
+scipy==1.7.1              # via ase, diffsims, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pynxtools (dependencies/parsers/nexus/pyproject.toml), pyxem, radioactivedecay, scikit-image, scikit-learn, sparse
 sentinels==1.0.0          # via mongomock
 silx==1.1.2               # via pyfai
-simulationparsers @ git+https://github.com/nomad-coe/simulation-parsers.git@develop  # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), electronicparsers (dependencies/parsers/electronic/pyproject.toml)
 six==1.16.0               # via basicauth, bcrypt, click-repl, diffpy-structure, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators
 smmap==5.0.0              # via gitdb
 sniffio==1.3.0            # via anyio, httpcore, httpx
@@ -254,15 +251,15 @@ sphinxcontrib-qthelp==1.0.3  # via sphinx
 sphinxcontrib-serializinghtml==1.1.5  # via sphinx
 sqlalchemy==1.4.46        # via alembic, jupyterhub
 starlette==0.25.0         # via fastapi
-structlog==22.3.0         # via nomad-lab, nomad-lab (pyproject.toml)
+structlog==22.3.0         # via nomad-lab (pyproject.toml)
 sympy==1.10.1             # via hyperspy, pymatgen, radioactivedecay
-tabulate==0.8.9           # via nomad-lab, nomad-lab (pyproject.toml), pybis, pymatgen
+tabulate==0.8.9           # via nomad-lab (pyproject.toml), pybis, pymatgen
 tenacity==8.1.0           # via plotly
 texttable==1.7.0          # via pybis
 threadpoolctl==3.1.0      # via mdanalysis, scikit-learn
 tifffile==2021.11.2       # via h5grove, hyperspy, scikit-image
 toolz==0.12.0             # via dask, hyperspy, partd
-toposort==1.9             # via nomad-lab, nomad-lab (pyproject.toml)
+toposort==1.9             # via nomad-lab (pyproject.toml)
 tornado==6.2              # via ipykernel, ipyparallel, jupyter-client, jupyterhub
 tqdm==4.64.1              # via diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pymatgen
 traitlets==5.8.1          # via comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-core, jupyter-telemetry, jupyterhub, matplotlib-inline
@@ -273,13 +270,13 @@ typish==1.9.3             # via nptyping
 tzdata==2023.3            # via pytz-deprecation-shim
 tzlocal==4.3              # via nionswift, pynxtools (dependencies/parsers/nexus/pyproject.toml)
 uncertainties==3.1.7      # via lmfit, pymatgen
-unidecode==1.3.2          # via nomad-lab, nomad-lab (pyproject.toml)
+unidecode==1.3.2          # via nomad-lab (pyproject.toml)
 uri-template==1.2.0       # via jsonschema
 url-normalize==1.4.3      # via requests-cache
 urllib3==1.26.14          # via docker, elasticsearch, pybis, requests, requests-cache
-uvicorn[standard]==0.20.0  # via h5grove, nomad-lab, nomad-lab (pyproject.toml)
+uvicorn[standard]==0.20.0  # via h5grove, nomad-lab (pyproject.toml)
 uvloop==0.17.0            # via uvicorn
-validators==0.18.2        # via nomad-lab, nomad-lab (pyproject.toml)
+validators==0.18.2        # via nomad-lab (pyproject.toml)
 vine==5.0.0               # via amqp, celery, kombu
 watchfiles==0.18.1        # via uvicorn
 wcwidth==0.2.5            # via prettytable, prompt-toolkit
@@ -289,12 +286,12 @@ websocket-client==1.4.2   # via docker
 websockets==10.4          # via uvicorn
 werkzeug==2.2.2           # via flask
 widgetsnbextension==4.0.9  # via ipywidgets
-wrapt==1.12.1             # via nomad-lab, nomad-lab (pyproject.toml)
-xarray==0.20.2            # via nomad-lab, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml)
+wrapt==1.12.1             # via nomad-lab (pyproject.toml)
+xarray==0.20.2            # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml)
 zarr==2.12.0              # via hyperspy
 zipfile37==0.1.3          # via pynxtools (dependencies/parsers/nexus/pyproject.toml)
 zipp==3.11.0              # via importlib-metadata
-zipstream-new==1.1.5      # via nomad-lab, nomad-lab (pyproject.toml)
+zipstream-new==1.1.5      # via nomad-lab (pyproject.toml)
 
 # The following packages are considered to be unsafe in a requirements file:
 # setuptools
diff --git a/scripts/check_helm_chart.sh b/scripts/check_helm_chart.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f840fd21217b23593dbc7412fb37745a05b47557
--- /dev/null
+++ b/scripts/check_helm_chart.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -e
+set -x # echo on
+
+working_dir=$(pwd)
+project_dir=$(dirname $(dirname $(realpath $0)))
+
+cd $project_dir
+
+mkdir tmp
+
+python ops/kubernetes/nomad/updatevalues.py > tmp/helm-values.yaml
+diff ops/kubernetes/nomad/values.yaml tmp/helm-values.yaml
+
+# cleanup
+rm -rf tmp
diff --git a/scripts/check_python_dependencies.sh b/scripts/check_python_dependencies.sh
index b6680a822c1b76a66881b6375e4a0fc5068d1a87..fb033199c1f90b6eae2f6b73afe37f8cef5f23cb 100755
--- a/scripts/check_python_dependencies.sh
+++ b/scripts/check_python_dependencies.sh
@@ -1,5 +1,12 @@
 #!/bin/sh
 
+# For now we exclude the following dependencies, because they import an older version
+# of nomad-lab causing inevitable conflicts.
+#    dependencies/parsers/atomistic/pyproject.toml \
+#    dependencies/parsers/database/pyproject.toml \
+#    dependencies/parsers/electronic/pyproject.toml \
+#    dependencies/parsers/workflow/pyproject.toml \
+
 set -e
 
 working_dir=$(pwd)
@@ -7,28 +14,30 @@ project_dir=$(dirname $(dirname $(realpath $0)))
 
 cd $project_dir
 
-set -x # echo on
+# backup
+cp requirements.txt requirements.txt.tmp
+cp requirements-dev.txt requirements-dev.txt.tmp
 
-pip-compile --resolver=backtracking --quiet --annotation-style=line \
+pip-compile --resolver=backtracking --annotation-style=line \
     --extra=infrastructure --extra=parsing \
-    --output-file=requirements.txt.tmp \
+    --output-file=requirements.txt \
+    --pip-args="--prefer-binary" \
     dependencies/nomad-dos-fingerprints/pyproject.toml \
-    dependencies/parsers/atomistic/pyproject.toml \
-    dependencies/parsers/database/pyproject.toml \
     dependencies/parsers/eelsdb/pyproject.toml \
-    dependencies/parsers/electronic/pyproject.toml \
     dependencies/parsers/nexus/pyproject.toml \
-    dependencies/parsers/workflow/pyproject.toml pyproject.toml
+    pyproject.toml
 
-diff requirements.txt requirements.txt.tmp
+diff requirements.txt.tmp requirements.txt
 
-pip-compile --resolver=backtracking --quiet --annotation-style=line \
+pip-compile --resolver=backtracking --annotation-style=line \
     --extra=dev --extra=infrastructure --extra=parsing \
-    --output-file=requirements-dev.txt.tmp \
+    --output-file=requirements-dev.txt \
+    --pip-args="--prefer-binary" \
     requirements.txt \
     pyproject.toml
 
-diff requirements-dev.txt requirements-dev.txt.tmp
+diff requirements-dev.txt.tmp requirements-dev.txt
 
 # cleanup
-rm requirements.txt.tmp requirements-dev.txt.tmp
+mv requirements.txt.tmp requirements.txt
+mv requirements-dev.txt.tmp requirements-dev.txt
diff --git a/scripts/generate_python_dependencies.sh b/scripts/generate_python_dependencies.sh
index df678273e99d0139a2a75c528fbf846cd0335ae7..91de80c94df001abd8b50e73dd7386723c12a2fa 100755
--- a/scripts/generate_python_dependencies.sh
+++ b/scripts/generate_python_dependencies.sh
@@ -1,5 +1,12 @@
 #!/bin/sh
 
+# For now we exclude the following dependencies, because they import an older version
+# of nomad-lab causing inevitable conflicts.
+#    dependencies/parsers/atomistic/pyproject.toml \
+#    dependencies/parsers/database/pyproject.toml \
+#    dependencies/parsers/electronic/pyproject.toml \
+#    dependencies/parsers/workflow/pyproject.toml \
+
 set -e
 
 working_dir=$(pwd)
@@ -10,18 +17,16 @@ cd $project_dir
 pip-compile --resolver=backtracking --annotation-style=line \
     --extra=infrastructure --extra=parsing \
     --output-file=requirements.txt \
+    --pip-args="--prefer-binary" \
     dependencies/nomad-dos-fingerprints/pyproject.toml \
-    dependencies/parsers/atomistic/pyproject.toml \
-    dependencies/parsers/database/pyproject.toml \
     dependencies/parsers/eelsdb/pyproject.toml \
-    dependencies/parsers/electronic/pyproject.toml \
     dependencies/parsers/nexus/pyproject.toml \
-    dependencies/parsers/workflow/pyproject.toml pyproject.toml
-
+    pyproject.toml
 
 pip-compile --resolver=backtracking --annotation-style=line \
     --extra=dev --extra=infrastructure --extra=parsing \
     --output-file=requirements-dev.txt \
+    --pip-args="--prefer-binary" \
     requirements.txt \
     pyproject.toml
 
diff --git a/scripts/update_helm_chart.sh b/scripts/update_helm_chart.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a58bff4d03443aff3f9f5d82ed26951f75b39551
--- /dev/null
+++ b/scripts/update_helm_chart.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+working_dir=$(pwd)
+project_dir=$(dirname $(dirname $(realpath $0)))
+
+cd $project_dir
+
+python ops/kubernetes/nomad/updatevalues.py ops/kubernetes/nomad/values.yaml