diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..31ed4b56681c41d8af518a9baf2933d43fc5fa2a
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,2 @@
+[build-system]
+requires = ["setuptools", "wheel", "Cython", "numpy", "scipy"]
\ No newline at end of file
diff --git a/setup.py b/setup.py
index f9ea8ae748e6b30f4b4b43da078d05c0574e4921..44cb103916f31a8461e6c773645231362cbf0243 100644
--- a/setup.py
+++ b/setup.py
@@ -3,6 +3,9 @@
 '''
 from setuptools import setup as setup_stools
 from setuptools import find_packages
+from Cython.Build import cythonize
+import numpy
+
 import sys
 
 if sys.version_info < (3, 5):
@@ -15,12 +18,6 @@ install_requires = [
                     'matplotlib',
 ]
 
-setup_requires = [
-		          'Cython',
-                  'numpy',
-                  'scipy'
-]
-
 setup_stools(
       name='poisson',
       description='Poisson solver using finite volume',
@@ -31,14 +28,8 @@ setup_stools(
           'Programming Language :: Python :: 3.6',],
       packages=find_packages('.'),
       install_requires=install_requires,
-      setup_requires=setup_requires
-)
-
-from distutils.core import setup as setup_cy
-from Cython.Build import cythonize
-import numpy
-
-setup_cy(ext_modules = cythonize(['poisson/discrete/_finite_volume.pyx',
+      ext_modules = cythonize(['poisson/discrete/_finite_volume.pyx',
                                'poisson/discrete/_discrete_poisson.pyx',
                                'poisson/discrete/_linear_problem.pyx']),
-         include_dirs=[numpy.get_include()])
+      include_dirs=[numpy.get_include()]
+)