diff --git a/nomad/datamodel/metainfo/eln/openbis.py b/nomad/datamodel/metainfo/eln/openbis.py
index bb47176bb3a1a38bf36c41a9fc2303bac5c2a843..8f6380862478969eca16b7a838aec90fd83cdf01 100644
--- a/nomad/datamodel/metainfo/eln/openbis.py
+++ b/nomad/datamodel/metainfo/eln/openbis.py
@@ -138,76 +138,67 @@ class OpenbisEntry(EntryData):
         else:
             # Initializing pybis object
             try:
-                from pybis import Openbis
+                from nomad_openbis.openbis import OpenbisHandler
 
-                openbis = Openbis(self.project_url, verify_certificates=False)
-            except Exception:
-                self._clear_login_info(archive)
-                raise OpenbisImportError(
-                    'Failed to connect to the openbis server. Check the project url to be correct.'
-                )
-
-            try:
-                openbis.login(self.username, self.password, save_token=True)
-            except Exception:
-                self._clear_login_info(archive)
-                raise OpenbisImportError(
-                    'Failed to login to the openbis server. Check the username and password to be correct.'
-                )
-
-            # remove potential old content
-            self.spaces.clear()
-
-            try:
-                spaces = openbis.get_spaces()
-            except Exception:
-                self._clear_login_info(archive)
-                raise OpenbisImportError(
-                    'Failed to fetch spaces. The pybis package might have been changed.'
-                )
-
-            # parsing the content in the spaces
-            for space in spaces:
-                space_element = OpenbisSpace()
-                space_element.m_update_from_dict(space.attrs.all())
-
-                try:
-                    projects = space.get_projects()
-                except Exception:
-                    self._clear_login_info(archive)
-                    raise OpenbisImportError(
-                        'Failed to fetch projects. The pybis package might have been changed.'
-                    )
-                for project in projects:
-                    project_element = OpenbisProject()
-                    project_element.m_update_from_dict(project.attrs.all())
-                    space_element.projects.append(project_element)
+                with OpenbisHandler(
+                    self.project_url, self.username, self.password, archive, logger
+                ) as handler:
+                    # remove potential old content
+                    self.spaces.clear()
 
                     try:
-                        experiments = project.get_experiments()
+                        spaces = handler.openbis.get_spaces()
                     except Exception:
                         self._clear_login_info(archive)
                         raise OpenbisImportError(
-                            'Failed to fetch experiments. The pybis package might have been changed.'
+                            'Failed to fetch spaces. The pybis package might have been changed.'
                         )
-                    for experiment in experiments:
-                        experiment_element = OpenbisExperiment()
-                        experiment_element.m_update_from_dict(experiment.attrs.all())
-                        try:
-                            experiment_element.download_files(
-                                experiment, archive, logger
-                            )
-                        except Exception as e:
-                            logger.error('Failed to download attachments.', exec_info=e)
-
-                        project_element.experiments.append(experiment_element)
 
-                self.spaces.append(space_element)
+                    # parsing the content in the spaces
+                    for space in spaces:
+                        space_element = OpenbisSpace()
+                        space_element.m_update_from_dict(space.attrs.all())
 
-            openbis.logout()
+                        try:
+                            projects = space.get_projects()
+                        except Exception:
+                            self._clear_login_info(archive)
+                            raise OpenbisImportError(
+                                'Failed to fetch projects. The pybis package might have been changed.'
+                            )
+                        for project in projects:
+                            project_element = OpenbisProject()
+                            project_element.m_update_from_dict(project.attrs.all())
+                            space_element.projects.append(project_element)
+
+                            try:
+                                experiments = project.get_experiments()
+                            except Exception:
+                                self._clear_login_info(archive)
+                                raise OpenbisImportError(
+                                    'Failed to fetch experiments. The pybis package might have been changed.'
+                                )
+                            for experiment in experiments:
+                                experiment_element = OpenbisExperiment()
+                                experiment_element.m_update_from_dict(
+                                    experiment.attrs.all()
+                                )
+                                try:
+                                    experiment_element.download_files(
+                                        experiment, archive, logger
+                                    )
+                                except Exception as e:
+                                    logger.error(
+                                        'Failed to download attachments.', exec_info=e
+                                    )
+
+                                project_element.experiments.append(experiment_element)
+
+                        self.spaces.append(space_element)
+            except Exception as e:
+                raise OpenbisImportError(e)
 
             self._clear_login_info(archive)
-
             logger.info('Transferring openbis data is finished.')
 
 
diff --git a/pyproject.toml b/pyproject.toml
index fa2eb4608da33fb5b41572a4f4896eec37156d59..3feaa2d5c768b7894593b4154dec5297ffce6575 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -65,7 +65,7 @@ parsing = [
     'asr==0.4.1',
     'h5py==3.11.0',
     'netCDF4==1.6.5',
-    'pybis@git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370',
+    'nomad-openbis',
     'pynxtools[convert]==0.3.1',
     'quippy-ase==0.9.14',
     'rdkit==2023.9.5',
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 71a25d4c4561c7f2700418af6ee639cbfe483a6f..8dd1e510d41f0616f4819b8f83941e169200fa66 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -54,7 +54,7 @@ contourpy==1.2.1          # via matplotlib, -r requirements.txt
 coverage==7.5.3           # via pytest-cov
 cryptography==42.0.8      # via jwcrypto, pyjwt, pyopenssl, rfc3161ng, secretstorage, -r requirements.txt
 cycler==0.12.1            # via matplotlib, -r requirements.txt
-dask==2024.6.0            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio, -r requirements.txt
+dask==2024.6.1            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio, -r requirements.txt
 debugpy==1.8.1            # via ipykernel, -r requirements.txt
 decorator==5.1.1          # via ipyparallel, ipython, validators, -r requirements.txt
 defusedxml==0.7.1         # via nbconvert, -r requirements.txt
@@ -207,6 +207,7 @@ nionswift==16.11.0        # via pynxtools-em, -r requirements.txt
 nionswift-io==15.2.1      # via nionswift, -r requirements.txt
 nionui==7.1.1             # via nionswift, -r requirements.txt
 nionutils==4.11.0         # via niondata, nionswift, nionswift-io, nionui, -r requirements.txt
+nomad-openbis==1.0.0      # via -r requirements.txt, nomad-lab (pyproject.toml)
 notebook==7.1.3           # via jupyter, -r requirements.txt
 notebook-shim==0.2.4      # via jupyterlab, notebook, -r requirements.txt
 nptyping==1.4.4           # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -225,7 +226,7 @@ packaging==24.1           # via build, dask, deprecation, f90wrap, gunicorn, hyp
 paginate==0.5.6           # via mkdocs-material
 palettable==3.3.3         # via pymatgen, -r requirements.txt
 pamela==1.1.0             # via jupyterhub, -r requirements.txt
-pandas==1.5.3             # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, -r requirements.txt, nomad-lab (pyproject.toml)
+pandas==1.5.3             # via ifes-apt-tc-data-modeling, nomad-openbis, panedr, pymatgen, pynxtools, radioactivedecay, xarray, -r requirements.txt, nomad-lab (pyproject.toml)
 pandocfilters==1.5.1      # via nbconvert, -r requirements.txt
 panedr==0.8.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 parmed==4.2.2             # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -251,7 +252,6 @@ pure-eval==0.2.2          # via stack-data, -r requirements.txt
 py-cpuinfo==9.0.0         # via blosc2, tables, -r requirements.txt
 pyasn1==0.6.0             # via pyasn1-modules, rfc3161ng, -r requirements.txt
 pyasn1-modules==0.4.0     # via rfc3161ng, -r requirements.txt
-pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370  # via -r requirements.txt, nomad-lab (pyproject.toml)
 pybtex==0.24.0            # via pymatgen, -r requirements.txt
 pycifrw==4.4.6            # via diffpy-structure, -r requirements.txt
 pycodestyle==2.12.0       # via nomad-lab (pyproject.toml)
@@ -283,7 +283,7 @@ pytest-split==0.8.2       # via nomad-lab (pyproject.toml)
 pytest-timeout==2.3.1     # via nomad-lab (pyproject.toml)
 pytest-xdist==3.6.1       # via nomad-lab (pyproject.toml)
 python-box==6.1.0         # via rosettasciio, -r requirements.txt
-python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, pandas, pybis, rfc3161ng, rosettasciio, -r requirements.txt
+python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, nomad-openbis, pandas, rfc3161ng, rosettasciio, -r requirements.txt
 python-dotenv==1.0.1      # via uvicorn, -r requirements.txt
 python-gitlab==2.10.1     # via nomad-lab (pyproject.toml)
 python-json-logger==2.0.2  # via jupyter-events, jupyter-telemetry, -r requirements.txt, nomad-lab (pyproject.toml)
@@ -306,7 +306,7 @@ rdkit==2023.9.5           # via -r requirements.txt, nomad-lab (pyproject.toml)
 readme-renderer==43.0     # via twine
 recommonmark==0.7.1       # via -r requirements.txt, nomad-lab (pyproject.toml)
 regex==2024.5.15          # via mkdocs-material
-requests==2.31.0          # via docker, hyperspy, jupyterhub, jupyterlab-server, mkdocs-material, oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml)
+requests==2.31.0          # via docker, hyperspy, jupyterhub, jupyterlab-server, mkdocs-material, nomad-openbis, oauthenticator, optimade, pooch, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml)
 requests-toolbelt==1.0.0  # via python-gitlab, python-keycloak, twine, -r requirements.txt
 rfc3161ng==2.1.3          # via -r requirements.txt, nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via jsonschema, -r requirements.txt
@@ -325,7 +325,7 @@ scipy==1.13.1             # via ase, diffsims, findiff, griddataformats, hypersp
 secretstorage==3.3.3      # via keyring
 send2trash==1.8.3         # via jupyter-server, -r requirements.txt
 sentinels==1.0.0          # via mongomock, -r requirements.txt
-setuptools==70.0.0        # via radioactivedecay, -r requirements.txt
+setuptools==70.1.0        # via radioactivedecay, -r requirements.txt
 silx==2.1.0               # via pyfai, -r requirements.txt
 six==1.16.0               # via anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators, -r requirements.txt
 smmap==5.0.1              # via gitdb, -r requirements.txt
@@ -347,11 +347,11 @@ starlette==0.27.0         # via fastapi, -r requirements.txt
 structlog==24.2.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
 sympy==1.12.1             # via findiff, hyperspy, pymatgen, radioactivedecay, -r requirements.txt
 tables==3.9.2             # via ifes-apt-tc-data-modeling, -r requirements.txt
-tabulate==0.8.9           # via pybis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml)
+tabulate==0.8.9           # via nomad-openbis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml)
 tenacity==8.4.1           # via plotly, -r requirements.txt
 termcolor==2.4.0          # via mkdocs-macros-plugin
 terminado==0.18.1         # via jupyter-server, jupyter-server-terminals, -r requirements.txt
-texttable==1.7.0          # via pybis, -r requirements.txt
+texttable==1.7.0          # via nomad-openbis, -r requirements.txt
 threadpoolctl==3.5.0      # via mdanalysis, scikit-learn, -r requirements.txt
 tifffile==2024.6.18       # via h5grove, hyperspy, scikit-image, -r requirements.txt
 tinycss2==1.3.0           # via nbconvert, -r requirements.txt
@@ -373,8 +373,8 @@ tzlocal==5.2              # via nionswift, pynxtools-em, -r requirements.txt
 uncertainties==3.2.1      # via lmfit, pymatgen, -r requirements.txt
 unidecode==1.3.2          # via -r requirements.txt, nomad-lab (pyproject.toml)
 uri-template==1.3.0       # via jsonschema, -r requirements.txt
-urllib3==1.26.19          # via docker, elasticsearch, pybis, requests, -r requirements.txt
-uv==0.2.13                # via nomad-lab (pyproject.toml)
+urllib3==1.26.19          # via docker, elasticsearch, nomad-openbis, requests, -r requirements.txt
+uv==0.2.18                # via nomad-lab (pyproject.toml)
 uvicorn==0.30.1           # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
 uvloop==0.19.0            # via uvicorn, -r requirements.txt
 validators==0.18.2        # via -r requirements.txt, nomad-lab (pyproject.toml)
diff --git a/requirements.txt b/requirements.txt
index 4322291cec7eb257315e8f485bb2d10f086e1901..03f266c39d1061ba36214bdf58a0c005c5ea1708 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -47,7 +47,7 @@ commonmark==0.9.1         # via recommonmark
 contourpy==1.2.1          # via matplotlib
 cryptography==42.0.8      # via jwcrypto, pyjwt, pyopenssl, rfc3161ng
 cycler==0.12.1            # via matplotlib
-dask==2024.6.0            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio
+dask==2024.6.1            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio
 debugpy==1.8.1            # via ipykernel
 decorator==5.1.1          # via ipyparallel, ipython, validators
 defusedxml==0.7.1         # via nbconvert
@@ -175,6 +175,7 @@ nionswift==16.11.0        # via pynxtools-em
 nionswift-io==15.2.1      # via nionswift
 nionui==7.1.1             # via nionswift
 nionutils==4.11.0         # via niondata, nionswift, nionswift-io, nionui
+nomad-openbis==1.0.0      # via nomad-lab (pyproject.toml)
 notebook==7.1.3           # via jupyter
 notebook-shim==0.2.4      # via jupyterlab, notebook
 nptyping==1.4.4           # via nomad-lab (pyproject.toml)
@@ -192,7 +193,7 @@ orjson==3.10.5            # via h5grove, nomad-lab (pyproject.toml)
 packaging==24.1           # via dask, deprecation, f90wrap, gunicorn, hyperspy, ipykernel, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mongomock, nbconvert, pint, plotly, pooch, qtconsole, qtpy, scikit-image, silx, sphinx, tables, xarray, xraydb
 palettable==3.3.3         # via pymatgen
 pamela==1.1.0             # via jupyterhub
-pandas==1.5.3             # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
+pandas==1.5.3             # via ifes-apt-tc-data-modeling, nomad-openbis, panedr, pymatgen, pynxtools, radioactivedecay, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
 pandocfilters==1.5.1      # via nbconvert
 panedr==0.8.0             # via nomad-lab (pyproject.toml)
 parmed==4.2.2             # via nomad-lab (pyproject.toml)
@@ -215,7 +216,6 @@ pure-eval==0.2.2          # via stack-data
 py-cpuinfo==9.0.0         # via blosc2, tables
 pyasn1==0.6.0             # via pyasn1-modules, rfc3161ng
 pyasn1-modules==0.4.0     # via rfc3161ng
-pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370  # via nomad-lab (pyproject.toml)
 pybtex==0.24.0            # via pymatgen
 pycifrw==4.4.6            # via diffpy-structure
 pycparser==2.22           # via cffi
@@ -238,7 +238,7 @@ pyopenssl==24.1.0         # via certipy
 pyparsing==3.1.2          # via matplotlib, rdflib
 pyrsistent==0.20.0        # via jsonschema
 python-box==6.1.0         # via rosettasciio
-python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, pandas, pybis, rfc3161ng, rosettasciio
+python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, nomad-openbis, pandas, rfc3161ng, rosettasciio
 python-dotenv==1.0.1      # via uvicorn
 python-json-logger==2.0.2  # via jupyter-events, jupyter-telemetry, nomad-lab (pyproject.toml)
 python-keycloak==4.1.0    # via nomad-lab (pyproject.toml)
@@ -257,7 +257,7 @@ radioactivedecay==0.5.1   # via ifes-apt-tc-data-modeling
 rdflib==5.0.0             # via nomad-lab (pyproject.toml)
 rdkit==2023.9.5           # via nomad-lab (pyproject.toml)
 recommonmark==0.7.1       # via nomad-lab (pyproject.toml)
-requests==2.31.0          # via docker, hyperspy, jupyterhub, jupyterlab-server, oauthenticator, optimade, pooch, pybis, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
+requests==2.31.0          # via docker, hyperspy, jupyterhub, jupyterlab-server, nomad-openbis, oauthenticator, optimade, pooch, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
 requests-toolbelt==1.0.0  # via python-keycloak
 rfc3161ng==2.1.3          # via nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via jsonschema
@@ -272,7 +272,7 @@ scikit-learn==1.5.0       # via kikuchipy, matid, pyxem, nomad-lab (pyproject.to
 scipy==1.13.1             # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse, xraydb, nomad-lab (pyproject.toml)
 send2trash==1.8.3         # via jupyter-server
 sentinels==1.0.0          # via mongomock
-setuptools==70.0.0        # via radioactivedecay
+setuptools==70.1.0        # via radioactivedecay
 silx==2.1.0               # via pyfai
 six==1.16.0               # via anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators
 smmap==5.0.1              # via gitdb
@@ -294,10 +294,10 @@ starlette==0.27.0         # via fastapi
 structlog==24.2.0         # via nomad-lab (pyproject.toml)
 sympy==1.12.1             # via findiff, hyperspy, pymatgen, radioactivedecay
 tables==3.9.2             # via ifes-apt-tc-data-modeling
-tabulate==0.8.9           # via pybis, pymatgen, nomad-lab (pyproject.toml)
+tabulate==0.8.9           # via nomad-openbis, pymatgen, nomad-lab (pyproject.toml)
 tenacity==8.4.1           # via plotly
 terminado==0.18.1         # via jupyter-server, jupyter-server-terminals
-texttable==1.7.0          # via pybis
+texttable==1.7.0          # via nomad-openbis
 threadpoolctl==3.5.0      # via mdanalysis, scikit-learn
 tifffile==2024.6.18       # via h5grove, hyperspy, scikit-image
 tinycss2==1.3.0           # via nbconvert
@@ -317,7 +317,7 @@ tzlocal==5.2              # via nionswift, pynxtools-em
 uncertainties==3.2.1      # via lmfit, pymatgen
 unidecode==1.3.2          # via nomad-lab (pyproject.toml)
 uri-template==1.3.0       # via jsonschema
-urllib3==1.26.19          # via docker, elasticsearch, pybis, requests
+urllib3==1.26.19          # via docker, elasticsearch, nomad-openbis, requests
 uvicorn==0.30.1           # via h5grove, nomad-lab (pyproject.toml)
 uvloop==0.19.0            # via uvicorn
 validators==0.18.2        # via nomad-lab (pyproject.toml)
diff --git a/tests/datamodel/metainfo/eln/test_openbis.py b/tests/datamodel/metainfo/eln/test_openbis.py
index cfc4f14fae408e5b094accfe1e6d736fa0cc1e6f..ae9f3712d6451143a9be229d8aeea40f8812df10 100644
--- a/tests/datamodel/metainfo/eln/test_openbis.py
+++ b/tests/datamodel/metainfo/eln/test_openbis.py
@@ -20,7 +20,7 @@ from urllib.parse import urlparse
 
 import pytest
 import json
-import pybis
+from nomad_openbis import openbis
 
 from nomad.datamodel import ServerContext
 from nomad.datamodel.metainfo.eln.openbis import OpenbisEntry, OpenbisImportError
@@ -151,7 +151,7 @@ def test_openbis(
         return mock_response
 
     # patching openbis attrs
-    monkeypatch.setattr(pybis, 'Openbis', mock_openbis_response)
+    monkeypatch.setattr(openbis, 'Openbis', mock_openbis_response)
 
     data = ExampleData(main_author=user1)
     data.create_upload(upload_id='test_upload_id', published=False)