diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7bf9c04b65389e37779e1e1e7430ebbf0ac6712e..2877199eac098638ab2e385537d727b0ee47fc1a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -120,3 +120,7 @@ export(TARGETS bfps FILE "${PROJECT_BINARY_DIR}/BFPSLibraryDepends.cmake")
 install(EXPORT BFPS_EXPORT DESTINATION lib/)
 
 
+#####################################################################################
+## Install the python wrapper
+install(CODE "execute_process(COMMAND python setup.py install --force --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})")
+
diff --git a/cpp_build.py b/cpp_build.py
deleted file mode 100644
index 39371214bab4e2ac3ee9f5b064f5532811448765..0000000000000000000000000000000000000000
--- a/cpp_build.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#######################################################################
-#                                                                     #
-#  Copyright 2015 Max Planck Institute                                #
-#                 for Dynamics and Self-Organization                  #
-#                                                                     #
-#  This file is part of bfps.                                         #
-#                                                                     #
-#  bfps is free software: you can redistribute it and/or modify       #
-#  it under the terms of the GNU General Public License as published  #
-#  by the Free Software Foundation, either version 3 of the License,  #
-#  or (at your option) any later version.                             #
-#                                                                     #
-#  bfps is distributed in the hope that it will be useful,            #
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of     #
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
-#  GNU General Public License for more details.                       #
-#                                                                     #
-#  You should have received a copy of the GNU General Public License  #
-#  along with bfps.  If not, see <http://www.gnu.org/licenses/>       #
-#                                                                     #
-# Contact: Cristian.Lalescu@ds.mpg.de                                 #
-#                                                                     #
-#######################################################################
-
-
-
-import os
-import subprocess
-
-src_file_list = ['hdf5_tools',
-                 'full_code/get_rfields',
-                 'full_code/NSVE_field_stats',
-                 'full_code/native_binary_to_hdf5',
-                 'full_code/postprocess',
-                 'full_code/code_base',
-                 'full_code/direct_numerical_simulation',
-                 'full_code/NSVE',
-                 'full_code/NSVEparticles',
-                 'field_binary_IO',
-                 'vorticity_equation',
-                 'field',
-                 'kspace',
-                 'field_layout',
-                 'field_descriptor',
-                 'rFFTW_distributed_particles',
-                 'distributed_particles',
-                 'particles',
-                 'particles_base',
-                 'rFFTW_interpolator',
-                 'interpolator',
-                 'interpolator_base',
-                 'fluid_solver',
-                 'fluid_solver_base',
-                 'fftw_tools',
-                 'spline_n1',
-                 'spline_n2',
-                 'spline_n3',
-                 'spline_n4',
-                 'spline_n5',
-                 'spline_n6',
-                 'spline_n7',
-                 'spline_n8',
-                 'spline_n9',
-                 'spline_n10',
-                 'Lagrange_polys',
-                 'scope_timer']
-
-def get_file_dependency_list(src_file):
-    p = subprocess.Popen(
-            ['g++', '-Ibfps/cpp', '-MM', 'bfps/cpp/' + src_file + '.cpp'],
-            stdout = subprocess.PIPE)
-    out, err = p.communicate()
-    p.terminate()
-    deps = str(out, 'ASCII').replace('\\\n', '')
-    return deps
-
-def get_dependency_list():
-    ofile = open('dependencies.txt', 'w')
-    for src_file in src_file_list:
-        p = subprocess.Popen(
-                ['g++', '-Ibfps/cpp', '-MM', 'bfps/cpp/' + src_file + '.cpp'],
-                stdout = subprocess.PIPE)
-        out, err = p.communicate()
-        p.terminate()
-        deps = str(out, 'ASCII').replace('\\\n', '')
-        print(deps.split()[0])
-        ofile.write(' '.join(deps.split()[1:]) + '\n')
-    ofile.close()
-    return None
-
-if __name__ == '__main__':
-    #pass
-    get_dependency_list()
-
diff --git a/setup.py b/setup.py
index 23f9c266050ce9fae23470b7331260a53f1a6bf1..2a03151867dc483e6026755e7ec6d0f25850830a 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 #######################################################################
 #                                                                     #
-#  Copyright 2015 Max Planck Institute                                #
-#                 for Dynamics and Self-Organization                  #
+#  Copyright 2015-2019 Max Planck Institute                           #
+#                      for Dynamics and Self-Organization             #
 #                                                                     #
 #  This file is part of bfps.                                         #
 #                                                                     #
@@ -86,97 +86,6 @@ else:
 print('This is bfps version ' + VERSION)
 
 
-
-### lists of files and MANIFEST.in
-src_file_list = [
-                 'full_code/code_base',
-                 'full_code/direct_numerical_simulation',
-                 'full_code/NSVE',
-                 'full_code/joint_acc_vel_stats',
-                 'full_code/test',
-                 'full_code/filter_test',
-                 'full_code/field_test',
-                 'full_code/symmetrize_test',
-                 'full_code/field_output_test',
-                 'full_code/get_rfields',
-                 'full_code/field_single_to_double',
-                 'full_code/resize',
-                 'full_code/NSVE_field_stats',
-                 'full_code/native_binary_to_hdf5',
-                 'full_code/postprocess',
-                 'field',
-                 'kspace',
-                 'field_layout',
-                 'hdf5_tools',
-                 'fftw_tools',
-                 'vorticity_equation',
-                 'field_binary_IO',
-                 'spline_n1',
-                 'spline_n2',
-                 'spline_n3',
-                 'spline_n4',
-                 'spline_n5',
-                 'spline_n6',
-                 'spline_n7',
-                 'spline_n8',
-                 'spline_n9',
-                 'spline_n10',
-                 'Lagrange_polys',
-                 'scope_timer',
-                 'full_code/test_interpolation',
-                 'full_code/NSVEparticles',
-                 'full_code/NSVEcomplex_particles',
-                 'full_code/NSVEp_extra_sampling',
-                 'particles/particles_inner_computer']
-
-particle_headers = [
-        'cpp/particles/abstract_particles_input.hpp',
-        'cpp/particles/abstract_particles_output.hpp',
-        'cpp/particles/abstract_particles_system.hpp',
-        'cpp/particles/alltoall_exchanger.hpp',
-        'cpp/particles/env_utils.hpp',
-        'cpp/particles/lock_free_bool_array.hpp',
-        'cpp/particles/p2p_computer_empty.hpp',
-        'cpp/particles/p2p_computer.hpp',
-        'cpp/particles/p2p_distr_mpi.hpp',
-        'cpp/particles/p2p_tree.hpp',
-        'cpp/particles/particles_adams_bashforth.hpp',
-        'cpp/particles/particles_distr_mpi.hpp',
-        'cpp/particles/particles_field_computer.hpp',
-        'cpp/particles/particles_generic_interp.hpp',
-        'cpp/particles/particles_inner_computer_empty.hpp',
-        'cpp/particles/particles_input_hdf5.hpp',
-        'cpp/particles/particles_output_hdf5.hpp',
-        'cpp/particles/particles_output_mpiio.hpp',
-        'cpp/particles/particles_output_sampling_hdf5.hpp',
-        'cpp/particles/particles_sampling.hpp',
-        'cpp/particles/particles_system_builder.hpp',
-        'cpp/particles/particles_system.hpp',
-        'cpp/particles/particles_utils.hpp']
-
-full_code_headers = ['cpp/full_code/main_code.hpp',
-                     'cpp/full_code/codes_with_no_output.hpp',
-                     'cpp/full_code/NSVE_no_output.hpp',
-                     'cpp/full_code/NSVEparticles_no_output.hpp']
-
-header_list = (['cpp/base.hpp'] +
-               ['cpp/fftw_interface.hpp'] +
-               ['cpp/bfps_timer.hpp'] +
-               ['cpp/omputils.hpp'] +
-               ['cpp/shared_array.hpp'] +
-               ['cpp/spline.hpp'] +
-               ['cpp/' + fname + '.hpp'
-                for fname in src_file_list] +
-               particle_headers +
-               full_code_headers)
-
-with open('MANIFEST.in', 'w') as manifest_in_file:
-    for fname in (['bfps/cpp/' + ff + '.cpp' for ff in src_file_list] +
-                  ['bfps/' + ff for ff in header_list]):
-        manifest_in_file.write('include {0}\n'.format(fname))
-
-
-
 ### libraries
 libraries = extra_libraries
 
@@ -204,66 +113,6 @@ class CompileLibCommand(distutils.cmd.Command):
         self.disable_fftw_omp = (int(self.disable_fftw_omp) == 1)
         return None
     def run(self):
-        if not os.path.isdir('obj'):
-            os.makedirs('obj')
-            need_to_compile = True
-        if not os.path.isdir('obj/full_code'):
-            os.makedirs('obj/full_code')
-            need_to_compile = True
-        if not os.path.isdir('obj/particles'):
-            os.makedirs('obj/particles')
-            need_to_compile = True
-        if not os.path.isfile('bfps/libbfps.a'):
-            need_to_compile = True
-        else:
-            need_to_compile = False
-            ofile = 'bfps/libbfps.a'
-            libtime = datetime.datetime.fromtimestamp(os.path.getctime(ofile))
-            latest = libtime
-        eca = extra_compile_args
-        eca += ['-fPIC']
-        if self.timing_output:
-            eca += ['-DUSE_TIMINGOUTPUT']
-        if self.split_fftw_many:
-            eca += ['-DSPLIT_FFTW_MANY']
-        if self.fftw_estimate:
-            eca += ['-DUSE_FFTWESTIMATE']
-        if self.disable_fftw_omp:
-            eca += ['-DNO_FFTWOMP']
-        os.makedirs('cmake_build_dir', exist_ok = True)
-        os.chdir('cmake_build_dir')
-        subprocess.check_call(['cmake', '..'])
-        subprocess.check_call(['make', '-j4'])
-        os.chdir('..')
-        subprocess.check_call(['cp', 'cmake_build_dir/libbfps.a', 'bfps/'])
-        #for fname in src_file_list:
-        #    ifile = 'bfps/cpp/' + fname + '.cpp'
-        #    ofile = 'obj/' + fname + '.o'
-        #    if not os.path.exists(ofile):
-        #        need_to_compile_file = True
-        #    else:
-        #        need_to_compile_file = False
-        #        if not need_to_compile:
-        #            latest = libtime
-        #            dependency_list = get_file_dependency_list(fname)
-        #            for depname in dependency_list.split()[1:]:
-        #                latest = max(latest,
-        #                             datetime.datetime.fromtimestamp(os.path.getctime(depname)))
-        #        need_to_compile_file = (latest > libtime)
-        #    if need_to_compile_file:
-        #        command_strings = [compiler, '-c']
-        #        command_strings += ['bfps/cpp/' + fname + '.cpp']
-        #        command_strings += ['-o', 'obj/' + fname + '.o']
-        #        command_strings += eca
-        #        command_strings += ['-I' + idir for idir in include_dirs]
-        #        command_strings.append('-Ibfps/cpp/')
-        #        print(' '.join(command_strings))
-        #        subprocess.check_call(command_strings)
-        #command_strings = ['ar', 'rvs', 'bfps/libbfps.a']
-        #command_strings += ['obj/' + fname + '.o' for fname in src_file_list]
-        #print(' '.join(command_strings))
-        #subprocess.check_call(command_strings)
-
         ### save compiling information
         pickle.dump(
                 {'include_dirs' : include_dirs,
@@ -278,26 +127,13 @@ class CompileLibCommand(distutils.cmd.Command):
                 protocol = 2)
         return None
 
-def get_file_dependency_list(src_file):
-    p = subprocess.Popen(
-            ['g++', '-std=c++11', '-Ibfps/cpp', '-MM', 'bfps/cpp/' + src_file + '.cpp'],
-            stdout = subprocess.PIPE)
-    out, err = p.communicate()
-    p.terminate()
-    deps = str(out, 'ASCII').replace('\\\n', '')
-    return deps
-
 from setuptools import setup
 
 setup(
         name = 'bfps',
         packages = ['bfps', 'bfps/test'],
         install_requires = ['numpy>=1.8', 'h5py>=2.2.1'],
-        cmdclass={'compile_library' : CompileLibCommand},
-        package_data = {'bfps': header_list +
-                                ['libbfps.a',
-                                 'install_info.pickle'] +
-                                ['test/B32p1e4_checkpoint_0.h5']},
+        package_data = {'bfps': ['test/B32p1e4_checkpoint_0.h5']},
         entry_points = {
             'console_scripts': [
                 'bfps = bfps.__main__:main',