diff --git a/README.rst b/README.rst
index 4284a71649448531e6fd7e6aae951ec5b3725ca2..2e4b44a97ae36da1a7b14f8c568e3b065bf6393f 100644
--- a/README.rst
+++ b/README.rst
@@ -37,14 +37,20 @@ Installation
 
 If you want to run simulations on the machine where you're installing,
 you will need to call `build` before installing.
+Before executing any command, please modify `machine_settings_py.py`
+appropriately for your machine (otherwise the `build` command will most
+likely fail).
+This file will be copied the first time you run `setup.py` into
+`$HOME/.config/bfps/machine_settings.py`, where it will be imported from
+afterwards.
+You may, obviously, edit it afterwards and rerun the build command as
+needed.
 
 .. code:: bash
 
     python setup.py build
     python setup.py install
 
-The `build` command will most likely fail unless you modify
-`machine_settings.py` appropriately for your machine.
 Also, in order to run the C++ code you need to have an MPI compiler
 installed, the HDF5 C library as well as FFTW 3 (at least 3.3 I think).
 
diff --git a/done.txt b/done.txt
index b85934d7f2287c90634f6700f0fca55c34a8ea1e..14afa7cd4dfa184999bb3084776733bf2968dc75 100644
--- a/done.txt
+++ b/done.txt
@@ -11,3 +11,4 @@ x 2016-01-07 FFTW interpolator doesn't need its own field
 x 2016-01-08 simplify tracer/field addition mechanism                                @design +v1.0 +particle_api
 x 2016-01-08 add stat choice parameter to add_particles                              @design +v1.0 +particle_api
 x 2016-01-15 particle output is broken when niter_part != 1                          @bugfix
+x 2016-01-19 clean up machine_settings mess                                          @design @documentation +v2.0
diff --git a/machine_settings.py b/machine_settings_py.py
similarity index 60%
rename from machine_settings.py
rename to machine_settings_py.py
index 3b299b0b1081c065ee948728dc9c64d0f2b71b0d..22123e391aa14151e2f1d4b4c8c0b5c8d6a1c435 100644
--- a/machine_settings.py
+++ b/machine_settings_py.py
@@ -27,13 +27,17 @@
 import os
 
 ########################################################################
-#### these you're supposed to adapt to your environment
+# these lists should be adapted for your different environment(s)
+# personally, I have access to setups where my home folder is shared
+# between different machines, including cluster and desktop, therefore
+# I check the host name when choosing libraries etc.
+# feel free to do your own thing to the copy of this file placed in
+# ./config/bfps
 ########################################################################
 
 hostname = os.getenv('HOSTNAME')
 
 extra_compile_args = ['-Wall', '-O2', '-g', '-mtune=native', '-ffast-math', '-std=c++11']
-#extra_compile_args = ['-Wall', '-O0', '-g', '-std=c++11']
 extra_libraries = ['hdf5']
 include_dirs = []
 library_dirs = []
@@ -45,44 +49,6 @@ if hostname == 'chichi-G':
                     '/usr/lib/mpich']
     extra_libraries += ['mpich']
 
-if hostname in ['frontend01', 'frontend02']:
-    include_dirs = ['/usr/nld/mvapich2-1.9a2-gcc/include',
-                    '/usr/nld/gcc-4.7.2/include',
-                    '/usr/nld/hdf5-1.8.9/include',
-                    '/usr/nld/fftw-3.3.3-mvapich2-1.9a2-gcc/include',
-                    '/usr/nld/fftw-3.3.3-float-mvapich2-1.9a2-gcc/include']
-
-    library_dirs = ['/usr/nld/mvapich2-1.9a2-gcc/lib',
-                    '/usr/nld/gcc-4.7.2/lib64',
-                    '/usr/nld/hdf5-1.8.9/lib',
-                    '/usr/nld/fftw-3.3.3-mvapich2-1.9a2-gcc/lib',
-                    '/usr/nld/fftw-3.3.3-float-mvapich2-1.9a2-gcc/lib']
-    extra_libraries += ['mpich']
-    extra_compile_args = ['-Wall',
-                          '-O2',
-                          '-g',
-                          '-m64',
-                          '-m80387',
-                          '-mabi=sysv',
-                          '-march=x86-64',
-                          '-masm=intel',
-                          '-masm=att',
-                          '-mfancy-math-387',
-                          '-mfpmath=sse+387',
-                          '-mglibc',
-                          '-mhard-float',
-                          '-mieee-fp',
-                          '-ffast-math',
-#                          '-mlarge-data-threshold=65536',
-                          '-mno-sse4',
-                          '-mpush-args',
-                          '-mred-zone',
-                          '-msse4.2',
-                          '-mstackrealign',
-                          '-mtls-direct-seg-refs',
-                          '-mtune=corei7',
-                          '-std=c++11']
-
 if hostname in ['tolima', 'misti']:
     local_install_dir = '/scratch.local/chichi/installs'
 
diff --git a/setup.py b/setup.py
index 898d32c8b0d0a83ba59d0478b37ecc6ebbc1a0aa..ab7e0ae5f8f3228a3326879513e0b32b2b2017c6 100644
--- a/setup.py
+++ b/setup.py
@@ -24,20 +24,36 @@
 
 
 
-from machine_settings import include_dirs, library_dirs, extra_compile_args, extra_libraries
-import pickle
-
-
 AUTHOR = 'Cristian C Lalescu'
 AUTHOR_EMAIL = 'Cristian.Lalescu@ds.mpg.de'
 
 import os
+import shutil
 import datetime
+import sys
 import subprocess
-from subprocess import CalledProcessError
+import pickle
+
 
-now = datetime.datetime.now()
 
+### compiler configuration
+# check if .config/bfps/machine_settings.py file exists, create it if not
+homefolder = os.path.expanduser('~')
+bfpsfolder = os.path.join(homefolder, '.config/', 'bfps')
+if not os.path.exists(os.path.join(bfpsfolder, 'machine_settings.py')):
+    if not os.path.isdir(bfpsfolder):
+        os.mkdir(bfpsfolder)
+    shutil.copyfile('./machine_settings_py.py', os.path.join(bfpsfolder, 'machine_settings.py'))
+sys.path.append(bfpsfolder)
+# import stuff required for compilation of static library
+from machine_settings import include_dirs, library_dirs, extra_compile_args, extra_libraries
+
+
+
+### package versioning
+# get current time
+now = datetime.datetime.now()
+# obtain version
 try:
     git_branch = subprocess.check_output(['git',
                                           'rev-parse',
@@ -49,7 +65,6 @@ except:
     git_revision = ''
     git_branch = ''
     git_date = now
-
 if git_branch == '':
     # there's no git available or something
     VERSION = '{0:0>4}{1:0>2}{2:0>2}.{3:0>2}{4:0>2}{5:0>2}'.format(
@@ -62,9 +77,11 @@ else:
         VERSION = subprocess.check_output(['git', 'describe', '--tags']).strip().decode()
     else:
         VERSION = subprocess.check_output(['git', 'describe', '--tags']).strip().decode().split('-')[0]
-
 print('This is bfps version ' + VERSION)
 
+
+
+### lists of files and MANIFEST.in
 src_file_list = ['field_descriptor',
                  'fluid_solver_base',
                  'fluid_solver',
@@ -89,13 +106,18 @@ with open('MANIFEST.in', 'w') as manifest_in_file:
     for fname in ['bfps/cpp/' + fname + '.cpp' for fname in src_file_list] + header_list:
         manifest_in_file.write('include {0}\n'.format(fname))
 
+
+
+### libraries
 libraries = ['fftw3_mpi',
              'fftw3',
              'fftw3f_mpi',
              'fftw3f']
-
 libraries += extra_libraries
 
+
+
+### save compiling information
 pickle.dump(
         {'include_dirs' : include_dirs,
          'library_dirs' : library_dirs,
@@ -107,6 +129,8 @@ pickle.dump(
         open('bfps/install_info.pickle', 'wb'),
         protocol = 2)
 
+
+
 def compile_bfps_library():
     if not os.path.isdir('obj'):
         os.makedirs('obj')
@@ -164,9 +188,9 @@ setup(
         packages = ['bfps'],
         install_requires = ['numpy>=1.8', 'h5py>=2.2.1'],
         cmdclass={'build' : CustomBuild},
-        package_data = {'bfps': header_list + ['../machine_settings.py',
-                                               'libbfps.a',
+        package_data = {'bfps': header_list + ['libbfps.a',
                                                'install_info.pickle']},
+        version = VERSION,
 ########################################################################
 # useless stuff folows
 ########################################################################
@@ -174,6 +198,5 @@ setup(
         long_description = open('README.rst', 'r').read(),
         author = AUTHOR,
         author_email = AUTHOR_EMAIL,
-        version = VERSION,
         license = 'GPL version 3.0')
 
diff --git a/todo.txt b/todo.txt
index 6e91a0605e14e5eb420ffde22c530b75513c9958..df1d0d9e011efe0a032b4db9a44d10b373a3ddba 100644
--- a/todo.txt
+++ b/todo.txt
@@ -4,7 +4,6 @@
 (B) set up mechanism for adding in new PDEs                                 @design +v2.0 +alternate_algorithms
 (B) tweak HDF5 settings                                                     @optimization @HDF5 +I/O
 (B) use less memory                                                         @optimization
-(C) clean up machine_settings mess                                          @design @documentation +v2.0
 (C) code overview                                                           @documentation
 (C) move stat I/O to cpp lib                                                @design @HDF5
 (C) test involving hydrodynamic similarity                                  @tests