diff --git a/.gitignore b/.gitignore
index c44a98c0c4886536cecd72865d5fa0010efa8d69..881fb928cf2baf97c5d75e8b1c00ffadcef85010 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,5 @@ tests/test_repo*
 dist
 .token
 tmp
-.ipynb_checkpoints
\ No newline at end of file
+.ipynb_checkpoints
+/tests/non_rdm_repo/
diff --git a/cadetrdm/__init__.py b/cadetrdm/__init__.py
index 79c82684dbfc7b7b60a1bcf12c930067e2f27da2..32b67a7bfa545686669119b87766c6a3aac2bf63 100644
--- a/cadetrdm/__init__.py
+++ b/cadetrdm/__init__.py
@@ -1,6 +1,5 @@
-from .repositories import ProjectRepo, JupyterInterfaceRepo
-from .initialize_repo import initialize_repo, clone
 from .conda_env_utils import prepare_conda_env
-from .version import version
+from .initialize_repo import initialize_repo, clone
+from .repositories import ProjectRepo, JupyterInterfaceRepo
 
-__version__ = version
+__version__ = "0.0.19"
diff --git a/cadetrdm/initialize_repo.py b/cadetrdm/initialize_repo.py
index 927f821c32b3836d88fcba8b3caceea9e2ef083e..5d99595818c9a292665b27893e07f6fb5a8f6d97 100644
--- a/cadetrdm/initialize_repo.py
+++ b/cadetrdm/initialize_repo.py
@@ -1,5 +1,5 @@
-import os
 import json
+import os
 import uuid
 from pathlib import Path
 
diff --git a/cadetrdm/repositories.py b/cadetrdm/repositories.py
index 1b642265f253fb9348be564d344a38e8495941a6..af9d3a475b7b50d5dca86f836e4e95149fb671b1 100644
--- a/cadetrdm/repositories.py
+++ b/cadetrdm/repositories.py
@@ -12,10 +12,10 @@ from urllib.request import urlretrieve
 
 from tabulate import tabulate
 
+import cadetrdm
 from cadetrdm.io_utils import recursive_chmod, write_lines_to_file, wait_for_user, init_lfs
 from cadetrdm.jupyter_functionality import Notebook
 from cadetrdm.remote_integration import GitHubRemote, GitLabRemote
-from cadetrdm.version import version as cadetrdm_version
 
 try:
     import git
@@ -601,6 +601,7 @@ class ProjectRepo(BaseRepo):
         with open(repository_path / ".cadet-rdm-data.json", "r") as handle:
             metadata = json.load(handle)
             repo_version = metadata["cadet_rdm_version"]
+            cadetrdm_version = cadetrdm.__version__
             if cadetrdm_version != repo_version:
                 print(f"Repo version {repo_version} is outdated. Current CADET-RDM version is {cadetrdm_version}\n"
                       "Updating the repository now.")
diff --git a/cadetrdm/version.py b/cadetrdm/version.py
deleted file mode 100644
index adaa0773a125c45e4bc1a46891746f293533475f..0000000000000000000000000000000000000000
--- a/cadetrdm/version.py
+++ /dev/null
@@ -1 +0,0 @@
-version = "0.0.19"
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 433ef5683371cc523d2d069e3c7df9636a85aa90..5644d719686810372ea24ef0b6e2c3e9687f991c 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -13,6 +13,8 @@
 import os
 import sys
 
+import cadetrdm
+
 sys.path.insert(0, os.path.abspath('../..'))
 from datetime import date
 
@@ -22,10 +24,8 @@ project = 'CADET-RDM'
 copyright = f'2023-{date.today().year}'
 author = 'IBG-1 ModSim Group'
 
-import cadetrdm
-
 version = cadetrdm.__version__
-release = cadetrdm.__version__.replace("_", "")
+release = version.replace("_", "")
 
 # -- General configuration ---------------------------------------------------
 
diff --git a/pyproject.toml b/pyproject.toml
index 8cf32563a5afdece8ef19fd94f9295c6b29672dc..51101c50919772f11810c7ff179cdf5f2336e22c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,3 +1,80 @@
 [build-system]
 requires = ["setuptools>=61.0"]
-build-backend = "setuptools.build_meta"
\ No newline at end of file
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "CADET-RDM"
+dynamic = ["version"]
+authors = [
+    { name = "Ronald Jäpel", email = "r.jaepel@fz-juelich.de" },
+    { name = "Johannes Schmölder", email = "j.schmoelder@fz-juelich.de" },
+    { name = "Eric von Lieres", email = "e.von.lieres@fz-juelich.de" }
+]
+description = "A Python toolbox for research data management."
+readme = "README.md"
+requires-python = ">3.7"
+keywords = ["research data management"]
+license = { text = "GPLv3" }
+classifiers = [
+    "Programming Language :: Python :: 3",
+    "Operating System :: OS Independent",
+    "License :: OSI Approved :: GNU General Public License v3",
+    "Intended Audience :: Science/Research",
+]
+dependencies = [
+    "gitpython>=3.1",
+    "python-gitlab",
+    "pygithub",
+    "git-lfs",
+    "click",
+    "tabulate",
+    "keyring",
+]
+
+[project.scripts]
+rdm = "cadetrdm.cli_integration:cli"
+
+
+[project.urls]
+homepage = "https://jugit.fz-juelich.de/IBG-1/ModSim/cadet/CADET-RDM"
+documentation = "https://cadet-rdm.readthedocs.io/en/latest/index.html"
+"Bug Tracker" = "https://jugit.fz-juelich.de/IBG-1/ModSim/cadet/CADET-RDM/Issues"
+
+
+[project.optional-dependencies]
+testing = [
+    "setuptools",
+    "pytest",
+    "certifi", # tries to prevent certificate problems on windows
+    "pre-commit", # system tests run pre-commit
+    "flake8", # system tests run flake8
+    "matplotlib",
+    "numpy",
+    "build",
+]
+jupyter = [
+    "nbformat",
+    "nbconvert",
+    "ipylab",
+    "junix",
+    "jupytext",
+]
+docs = [
+    "sphinx>=5.3.0",
+    "sphinxcontrib-bibtex>=2.5.0",
+    "sphinx_book_theme>=1.0.0",
+    "sphinx_copybutton>=0.5.1",
+    "sphinx-sitemap>=2.5.0",
+    "numpydoc>=1.5.0",
+    "myst-nb>=0.17.1",
+]
+
+
+[tool.pytest.ini_options]
+markers = [
+    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
+    "server_api: marks tests as using the GitLab/GitHub API"
+]
+
+[tool.setuptools.dynamic]
+version = { attr = "cadetrdm.__version__" }
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 2fa3638b58523fa59c1c99572f688e94f5e20cd8..0000000000000000000000000000000000000000
--- a/setup.cfg
+++ /dev/null
@@ -1,68 +0,0 @@
-[metadata]
-name = CADET-RDM
-version = 0.0.19
-author = ModSim
-author_email = r.jaepel@fz-juelich.de
-description = A solution for research data management
-long_description = file: README.md
-long_description_content_type = text/markdown
-url = https://jugit.fz-juelich.de/IBG-1/ModSim/cadet/CADET-RDM
-project_urls =
-    Bug Tracker = https://jugit.fz-juelich.de/IBG-1/ModSim/cadet/CADET-RDM/Issues
-classifiers =
-    Programming Language :: Python :: 3
-    License :: OSI Approved :: GNU General Public License v3 (GPLv3)
-    Operating System :: OS Independent
-
-[options]
-packages = find:
-python_requires = >=3.8
-install_requires =
-    gitpython>=3.1
-    python-gitlab
-    pygithub
-    git-lfs
-    click
-    tabulate
-    keyring
-
-include_package_data = True
-
-[options.entry_points]
-console_scripts =
-    rdm = cadetrdm.cli_integration:cli
-
-[options.extras_require]
-testing =
-    setuptools
-    pytest
-    certifi     # tries to prevent certificate problems on windows
-    pre-commit  # system tests run pre-commit
-    flake8      # system tests run flake8
-    matplotlib
-    numpy
-    build
-
-jupyter =
-    nbformat
-    nbconvert
-    ipylab
-    junix
-    jupytext
-
-docs =
-    sphinx>=5.3.0
-    sphinxcontrib-bibtex>=2.5.0
-    sphinx_book_theme>=1.0.0
-    sphinx_copybutton>=0.5.1
-    sphinx-sitemap>=2.5.0
-    numpydoc>=1.5.0
-    myst-nb>=0.17.1
-
-[flake8]
-max_line_length = 88
-exclude =
-    build
-    dist
-    .eggs
-    docs/conf.py
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 45f160da695819ef6906f6dd332e8398cf419b8e..0000000000000000000000000000000000000000
--- a/setup.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env python
-
-import setuptools
-
-if __name__ == "__main__":
-    setuptools.setup()
\ No newline at end of file