diff --git a/requirements-dev.txt b/requirements/dev.txt
similarity index 100%
rename from requirements-dev.txt
rename to requirements/dev.txt
diff --git a/requirements/extras.txt b/requirements/extras.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/requirements.txt b/requirements/install.txt
similarity index 100%
rename from requirements.txt
rename to requirements/install.txt
diff --git a/setup.py b/setup.py
index e7c6f7346c1fc9555b83fbf9a46ebe3d6f4c19e4..02c36a6f4082e4141c9fec52cf86cb2fffa29c55 100644
--- a/setup.py
+++ b/setup.py
@@ -15,11 +15,11 @@ DESCRIPTION = 'GiBUU tools for KM3NeT'
 __author__ = 'Johannes Schumann'
 __email__ = 'jschumann@km3net.de'
 
-with open('requirements.txt') as fobj:
-    REQUIREMENTS = [l.strip() for l in fobj.readlines()]
 
-with open('requirements-dev.txt') as fobj:
-    DEV_REQUIREMENTS = [l.strip() for l in fobj.readlines()]
+def read_requirements(kind):
+    with open(os.path.join('requirements', kind + '.txt')) as fobj:
+        requirements = [l.strip() for l in fobj.readlines()]
+    return requirements
 
 setup(
     name=PACKAGE_NAME,
@@ -35,8 +35,11 @@ setup(
         'write_to': '{}/version.txt'.format(PACKAGE_NAME),
         'tag_regex': r'^(?P<prefix>v)?(?P<version>[^\+]+)(?P<suffix>.*)?$',
     },
-    install_requires=REQUIREMENTS,
-    extras_require={'dev': DEV_REQUIREMENTS},
+    install_requires=read_requirements("install"),
+    extras_require={
+        kind: read_requirements(kind)
+        for kind in ["dev", "extras"]
+    },
     python_requires='>=3.0',
     entry_points={'console_scripts': ['km3buu=km3buu.cmd:main']},
     classifiers=[