diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40aa7e182..47afbbc11 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,7 @@ mark_as_advanced(STORM_COMPILE_WITH_CCACHE)
 option(STORM_LOG_DISABLE_DEBUG "Disable log and trace message support" OFF)
 option(STORM_USE_CLN_NUMBERS "Sets whether CLN or GMP numbers should be used" ON)
 option(BUILD_SHARED_LIBS "Build the Storm library dynamically" OFF)
+option(CONFIGURE_STORMPY "Generate setup.cfg for stormpy" ON)
 set(BOOST_ROOT "" CACHE STRING "A hint to the root directory of Boost (optional).")
 set(GUROBI_ROOT "" CACHE STRING "A hint to the root directory of Gurobi (optional).")
 set(Z3_ROOT "" CACHE STRING "A hint to the root directory of Z3 (optional).")
@@ -335,8 +336,27 @@ set(STORM_GENERATED_SOURCES "${PROJECT_BINARY_DIR}/src/storm/utility/storm-versi
 include_directories("${PROJECT_BINARY_DIR}/include")
 
 include(CTest)
-
+# Configure python binding setup file
+if(CONFIGURE_STORMPY)
+    if(STORM_HAVE_CLN)
+        set(STORMPY_USE_CLN 1)
+    else()
+        set(STORMPY_USE_CLN 0)
+    endif()
+    get_directory_property(STORMPY_INCLUDE_DIRS_PROP INCLUDE_DIRECTORIES)
+    foreach(arg ${STORMPY_INCLUDE_DIRS_PROP})
+        set(STORMPY_INCLUDE_DIRS "${STORMPY_INCLUDE_DIRS}${sep}${arg}")
+        set(sep ":")
+    endforeach()
+    set(STORMPY_LIBRARY_DIRS "${PROJECT_BINARY_DIR}/src")
+    set(STORMPY_RPATH "${PROJECT_BINARY_DIR}/src")
+configure_file (
+	"${PROJECT_SOURCE_DIR}/stormpy/setup.cfg.in"
+	"${PROJECT_SOURCE_DIR}/stormpy/setup.cfg"
+)
+endif()
 
 add_subdirectory(src)
+add_subdirectory(test)
 
 include(StormCPackConfig.cmake)
diff --git a/stormpy/setup.cfg b/stormpy/setup.cfg
deleted file mode 100644
index ce16455c6..000000000
--- a/stormpy/setup.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[build_ext]
-use-cln=0
-carl_src=../../carl/src/
diff --git a/stormpy/setup.cfg.in b/stormpy/setup.cfg.in
new file mode 100644
index 000000000..c52aa8ac7
--- /dev/null
+++ b/stormpy/setup.cfg.in
@@ -0,0 +1,5 @@
+[build_ext]
+use-cln=@STORMPY_USE_CLN@
+include_dirs=@STORMPY_INCLUDE_DIRS@
+library_dirs=@STORMPY_LIBRARY_DIRS@
+rpath=@STORMPY_RPATH@
diff --git a/stormpy/setup.py b/stormpy/setup.py
index 6e9504a74..81e38b8eb 100755
--- a/stormpy/setup.py
+++ b/stormpy/setup.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 from setuptools import setup
 from distutils.core import Extension
-from distutils.command.build_ext import build_ext
+from distutils.command.build_ext import build_ext as orig_build_ext
 import os.path
 import platform
 from glob import glob
@@ -15,36 +15,13 @@ logic_sources = glob(os.path.join('src', 'logic', '*.cpp'))
 storage_sources = glob(os.path.join('src', 'storage', '*.cpp'))
 
 # Configuration shared between external modules follows
-
-# To help along, if storm and/or pybind is not system installed, retrieve from storm distribution
-include_dirs = ['.', 'src', 'resources/pybind11/include/']
-# Add more include dirs
-# TODO handle by cmake
-include_dirs.extend(['../build/include/', '../resources/3rdparty/sylvan/src/', '../resources/3rdparty/exprtk/', '../resources/3rdparty/gmm-5.0/include/'])
-boost_dir = '/usr/local/include/'
-include_dirs.append(boost_dir)
-cudd_dirs = ['../resources/3rdparty/cudd-3.0.0/cplusplus/', '../resources/3rdparty/cudd-3.0.0/mtr/', '../resources/3rdparty/cudd-3.0.0/cudd/']
-include_dirs.extend(cudd_dirs)
-log4cplus_dirs = ['../resources/3rdparty/log4cplus-1.1.3-rc1/include/', '../build/resources/3rdparty/log4cplus-1.1.3-rc1/include/']
-include_dirs.extend(log4cplus_dirs)
-
-local_storm_path = os.path.join(PROJECT_DIR, '..')
-if os.path.exists(local_storm_path):
-    include_dirs.append(local_storm_path)
-
-# Like includes, also add local path for library, assuming made in 'build'
+include_dirs = [PROJECT_DIR, os.path.join(PROJECT_DIR, 'src'),
+                os.path.join(PROJECT_DIR, 'resources', 'pybind11', 'include')]
 library_dirs = []
-local_storm_lib_path = os.path.join(PROJECT_DIR, '..', 'build/src')
-if os.path.exists(local_storm_lib_path):
-    library_dirs.append(local_storm_lib_path)
-
 libraries = ['storm']
 extra_compile_args = ['-std=c++11']
 define_macros = []
-
 extra_link_args = []
-if platform.system() == 'Darwin':
-    extra_link_args.append('-Wl,-rpath,'+library_dirs[0])
 
 ext_core = Extension(
     name='core',
@@ -101,27 +78,22 @@ ext_storage = Extension(
     extra_link_args=extra_link_args
 )
 
-class stormpy_build_ext(build_ext):
+class build_ext(orig_build_ext):
     """Extend build_ext to provide CLN toggle option
     """
-    user_options = build_ext.user_options + [
+    user_options = orig_build_ext.user_options + [
         ('use-cln', None,
          "use cln numbers instead of gmpxx"),
-        ('carl_src', None,
-         "path to src directory of CaRL"),
-
         ]
 
-    def __init__(self, *args, **kwargs):
-        build_ext.__init__(self, *args, **kwargs)
+    boolean_options = orig_build_ext.boolean_options + ['use-cln']
 
     def initialize_options (self):
-        build_ext.initialize_options(self)
+        super(build_ext, self).initialize_options()
         self.use_cln = None
-        self.carl_src = None
 
     def finalize_options(self):
-        build_ext.finalize_options(self)
+        super(build_ext, self).finalize_options()
 
         if self.use_cln:
             self.libraries += ['cln']
@@ -136,12 +108,14 @@ class stormpy_build_ext(build_ext):
                 self.undef = []
             self.undef += ['STORMPY_USE_CLN']
 
-        if library_dirs:
+        if self.library_dirs:
             # Makes local storm library lookup that much easier
-            self.rpath += library_dirs
+            self.rpath += self.library_dirs
 
-        print("Add carl_src: {}".format(self.carl_src))
-        include_dirs.append(self.carl_src)
+        if platform.system() == 'Darwin' and len(self.rpath) > 0:
+            for e in self.extensions:
+                # If rpath is used on OS X, set this option
+                e.extra_link_args.append('-Wl,-rpath,'+self.rpath[0])
 
 setup(name="stormpy",
       version="0.9",
@@ -157,6 +131,6 @@ setup(name="stormpy",
       ext_modules=[ext_core, ext_info, ext_expressions, ext_logic, ext_storage
                    ],
       cmdclass={
-        'build_ext': stormpy_build_ext,
+        'build_ext': build_ext,
       }
 )