diff --git a/CHANGELOG b/CHANGELOG
index f8d232f1c36852666d780e4473cc79420c4e9084..c14374f2cad9cede24eac20e6bdbf5d00cb8b561 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,42 @@
+BornAgain-1.4.0, released 2015.10.30
+  > No API changes
+  > Summary:
+    1) Improved usability of IntensityData objects (slicing, histogram filling, ...)
+    2) GUI: export of simulation results into tiff or ascii file
+    3) Core: rectangular detector added (not yet in GUI)
+    4) Documentation: extra fitting examples on website
+    5) Various bugfixes
+  > Details of Sprint #29 (see http://apps.jcns.fz-juelich.de/redmine/projects/bornagain/issues)
+  * Bug #1083: Trivial MultiLayer samples (no roughness, no particles) cause simulation crash.
+  * Bug #1130: Validate form factor of truncated sphere for absorption case
+  * Bug #1136: Numerical instability at phi_f=0 on MacOS for Pyramid based form factors
+  * Bug #1152: In Real Time Activity view, negative positions cannot be achieved
+  * Bug #1157: Qt dependency is not mentioned in INSTALL
+  * Bug #1158: many checks fail (1.3.0)
+  * Bug #1167: GUI crash when showing projection
+  * Bug #1170: GUI: InstrumentView alignment problem in detector parameters
+  * Bug #1171: GUI: make thickness disabled for air and substrate layers
+  * Bug #1173: Revise ParticleDistribution base class
+  * Bug #1174: GUI: color of layer does not change if color of material has been changed
+  * Bug #1198: GUI: fix simulation for particle distributions and negative z coordinate
+  * Bug #1212: Windows: modify installer to prepend BornAgain location to system PATH instead of appending to it
+  * Bug #1215: Repair wrong usage of double_epsilon in Core
+  * Bug #1216: GUI: normalization of intensity
+  * Bug #1223: FormFactorTruncatedCube instability under MacOS
+  * Feature #922: Add slicing to IntensityDataFunctions
+  * Feature #948: Implement new IntensityData object with improved usability
+  * Feature #1055: Implement Genetic minimizer to get rid from ROOT dependency
+  * Feature #1081: GUI: provide export of simulation results into tiff file
+  * Feature #1095: Implement rectangular (real space) detector
+  * Feature #1099: Repair fitting with masks
+  * Feature #1179: GUI: provide export of simulation results into text file (*.int)
+  * Feature #1186: Implement tiff import/export in kernel
+  * Documentation #1176: Drupal: update installation instructions, tutorials for coming release 1.4
+  * Documentation #1181: Drupal: provide fitting example along slices
+  * Documentation #1182: Drupal: provide fitting example with simultaneous fit of two datasets
+  * Refactoring #619: Masked simulation doesn't use all threads all the time
+  * Refactoring #1064: Get rid of "pylab" in Python scripts
+
 BornAgain-1.3.0, released 2015.07.30
   > API Changes:
     1) Removed 'depth' from ParticleLayout::addParticle: new interface provides for abundance, position and possible rotation
diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index 970d691ac3f5017de94a56d976e2e30421944fa0..14be4a4e3f3e7635b3588edcfcd96d0bc64a1150 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -194,7 +194,11 @@ else()
 endif()
 
 if(NOT BORNAGAIN_APPLE_BUNDLE)
-    # installing bornagain/__init__.py
+    # installing bornagain/__init__.py and utilites
     install (DIRECTORY ${CMAKE_SOURCE_DIR}/dev-tools/python-setup/bornagain DESTINATION ${destination_lib} COMPONENT Libraries)
+    install (FILES "${destination_runtime_configs}/__init__.py" DESTINATION ${destination_lib}/bornagain COMPONENT Libraries)
+else()
+    install (DIRECTORY ${CMAKE_SOURCE_DIR}/dev-tools/python-setup/bornagain DESTINATION ${destination_libexec} COMPONENT Libraries)
+    install (FILES "${destination_runtime_configs}/__init__.py" DESTINATION ${destination_libexec}/bornagain COMPONENT Libraries)
 endif()
 
diff --git a/Core/Samples/inc/BAVersion.h b/Core/Samples/inc/BAVersion.h
index 95740aa1ca915a1eb98e57bbe9f4211f7edc7052..de40bd97620795c5a63ee3868a42ed84bcfa1ea8 100644
--- a/Core/Samples/inc/BAVersion.h
+++ b/Core/Samples/inc/BAVersion.h
@@ -22,7 +22,7 @@
 
 namespace BornAgain {
     const int major_version_number = 1;
-    const int minor_version_number = 3;
+    const int minor_version_number = 4;
     const int patch_version_number = 0;
 
     inline int GetMajorVersionNumber() { return major_version_number; }
diff --git a/Core/Tools/src/PyGenVisitor.cpp b/Core/Tools/src/PyGenVisitor.cpp
index 962b3c11ea8ac072aa4fb7d2f57ea95173fd388b..e353ef86816dc23f39a416d2882f720e53aa0d8b 100644
--- a/Core/Tools/src/PyGenVisitor.cpp
+++ b/Core/Tools/src/PyGenVisitor.cpp
@@ -268,8 +268,8 @@ std::string PyGenVisitor::definePreamble() const
     std::ostringstream result;
     result << "import numpy\n";
     result << "#NOTE: Uncomment the next import statements for plotting\n";
-    result << "#import pylab\n";
     result << "#import matplotlib\n";
+    result << "#from matplotlib import pyplot as plt\n";
     result << "from bornagain import *\n\n\n";
     //    result << "#NOTE: All the ANGLES are displayed in RADIANS\n\n";
     //    result << "#NOTE: Running this Script by default will write output data"
@@ -1339,10 +1339,9 @@ std::string PyGenVisitor::definePlotting(const GISASSimulation *simulation) cons
     //    result << "#NOTE: Uncomment the next function for plotting\n";
     //    result << "#NOTE: This requires the presence of matplotlib library\n";
     result << "def plotSimulation(simulation):\n";
-    result << "" << indent() << "result = simulation.getIntensityData().getArray()"
-           << "+ 1 # +1 for log scale\n";
-    result << "" << indent() << "im = pylab.imshow(result, "
-           << "norm=matplotlib.colors.LogNorm(), extent=[";
+    result << "" << indent() << "result = simulation.getIntensityData()\n";
+    result << "" << indent() << "im = plt.imshow(result.getArray(), "
+           << "norm=matplotlib.colors.LogNorm(1, result.getMaximum()), extent=[";
     size_t index = 0;
     size_t numberOfDetectorDimensions = simulation->getInstrument().getDetectorDimension();
     while (index < numberOfDetectorDimensions) {
@@ -1356,8 +1355,8 @@ std::string PyGenVisitor::definePlotting(const GISASSimulation *simulation) cons
         index++;
     }
     result << "]) \n";
-    result << indent() << "pylab.colorbar(im)\n";
-    result << indent() << "pylab.show()\n\n\n";
+    result << indent() << "plt.colorbar(im)\n";
+    result << indent() << "plt.show()\n\n\n";
     return result.str();
 }
 
diff --git a/Doc/Doxygen/Doxyfile b/Doc/Doxygen/Doxyfile
index cda121287b3ad55bff61a0f99f3fa44e6e42c193..361e2f225ce2c949a109fdd42a80f1ac31f2d5a2 100644
--- a/Doc/Doxygen/Doxyfile
+++ b/Doc/Doxygen/Doxyfile
@@ -38,7 +38,7 @@ PROJECT_NAME           = "BornAgain"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.3.0
+PROJECT_NUMBER         = 1.4.0
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff --git a/Doc/UserManual/UserManualVersion.tex b/Doc/UserManual/UserManualVersion.tex
index 07fea37e47c07d9fbff4adc2aadd88a3ef196a88..bc3f52ccc9de455fadb4dfe4e5efb1daaf7e7d9d 100644
--- a/Doc/UserManual/UserManualVersion.tex
+++ b/Doc/UserManual/UserManualVersion.tex
@@ -4,4 +4,4 @@
 % using cmake/scripts/UserManualVersion.tex.in
 
 \newcommand{\UserManualVersionNumber}
-{1.3.0}
+{1.4.0}
diff --git a/Examples/cpp/CylindersAndPrisms/modules/FindBornAgain.cmake b/Examples/cpp/CylindersAndPrisms/modules/FindBornAgain.cmake
index 0b03f6482ddd6e8e4f43e594ab6a4c72a78e93f5..6af50792b0c544362b47550d5b5d460404674667 100644
--- a/Examples/cpp/CylindersAndPrisms/modules/FindBornAgain.cmake
+++ b/Examples/cpp/CylindersAndPrisms/modules/FindBornAgain.cmake
@@ -6,8 +6,8 @@
 set(BORNAGAINSYS $ENV{BORNAGAINSYS})
 
 if(BORNAGAINSYS)
-    set(BORNAGAIN_LIBRARY_DIR ${BORNAGAINSYS}/lib/BornAgain-1.3)
-    set(BORNAGAIN_INCLUDE_DIR ${BORNAGAINSYS}/include/BornAgain-1.3)
+    set(BORNAGAIN_LIBRARY_DIR ${BORNAGAINSYS}/lib/BornAgain-1.4)
+    set(BORNAGAIN_INCLUDE_DIR ${BORNAGAINSYS}/include/BornAgain-1.4)
 endif()
 
 find_library (BORNAGAIN_CORE BornAgainCore
diff --git a/Examples/python/fitting/ex01_SampleParametersIntro/SampleParametersIntro.py b/Examples/python/fitting/ex01_SampleParametersIntro/SampleParametersIntro.py
index dde849c24d826431c0a2bd041eb129cd345e6cb0..6b7c9369d86cac50cd2b9b1eb66a7034a5d7f5aa 100644
--- a/Examples/python/fitting/ex01_SampleParametersIntro/SampleParametersIntro.py
+++ b/Examples/python/fitting/ex01_SampleParametersIntro/SampleParametersIntro.py
@@ -1,10 +1,5 @@
 """
-Mixture of cylinders and prisms without interference.
-
-This example shows how to create a sample with fixed parameters and then
-change this parameters on the fly during runtime.
-The example doesn't contain any fitting and serve as a gentle introduction
-to other fitting examples.
+Working with sample parameters
 """
 
 import matplotlib
diff --git a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms.py b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms.py
index ac97a24e75c7f33a45bd4c55c9db9c421ad5b557..aef9adb63ba3770127c38adf34e890fba3b74085 100644
--- a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms.py
+++ b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms.py
@@ -1,22 +1,5 @@
 """
-Fitting example
-In this example we use a simple geometry: cylinders and prisms in
-air layer, deposited on a substrate layer, with no interference. 
-There are 4 fitting parameters:
-1) radius of cylinders
-2) height of cylinders
-3) side length of prisms
-4) height of prisms
-
-Our reference data is 2D intensity map obtained from the simulation of
-the same geometry with fixed values cylinder_height = prism3_height
- = cylinder_radius = prism3_half_side = 5nm.
- 
-Then we run our minimization using default minizer settings, with starting values of fit parameters
-cylinder_height = 4nm, cylinder_radius = 6nm
-prism3_height = 4nm, prism3_length = 12nm
-
-See example FitCylindersPrisms_detailed.py for more details & graphical output
+Fitting example: 4 parameters fit with simple output
 """
 from bornagain import *
 
diff --git a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
index cd9c39cd7c55e67ac8f1e31867187b4726a43d8a..9492aa54929a132f4e589cce6648df3eea352dd8 100644
--- a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
+++ b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
@@ -1,8 +1,6 @@
 """
-Fitting example
-This is more detailed version of FitCylindersPrisms.py.
-We show how to generate "real" data and how to draw fit progress.
-
+Fitting example: 4 parameters fit with simple output
+This is more detailed version of FitCylindersPrisms.py. We show how to generate "real" data and how to draw fit progress.
 Please take a note, that performance here is determined by poor performance of matplotlib drawing routines.
 """
 
diff --git a/Examples/python/simulation/ex01_BasicParticles/CylindersWithSizeDistribution.py b/Examples/python/simulation/ex01_BasicParticles/CylindersWithSizeDistribution.py
index c768872a2aabb12374f6615646f56a2d74597c59..e32738a8591801e6445b262cde83ee1eda1dc681 100644
--- a/Examples/python/simulation/ex01_BasicParticles/CylindersWithSizeDistribution.py
+++ b/Examples/python/simulation/ex01_BasicParticles/CylindersWithSizeDistribution.py
@@ -1,5 +1,5 @@
 """
-Cylinder formfactor in BA with size distribution
+Cylinders with size distribution
 """
 import numpy
 import matplotlib
diff --git a/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py b/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
index e0e9261a64be497ac4b2e7939ef32c1311d4d574..36eedd285a657e9113b34d61a4a2465be7a7d5b6 100644
--- a/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
+++ b/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
@@ -62,7 +62,7 @@ def run_simulation():
     simulation = get_simulation()
     simulation.setSample(sample)
     simulation.runSimulation()
-    result = simulation.getIntensityData().getArray()
+    result = simulation.getIntensityData()
 
     # showing the result
     im = plt.imshow(result.getArray(),
diff --git a/Examples/python/simulation/ex05_BeamAndDetector/DetectorResolutionFunction.py b/Examples/python/simulation/ex05_BeamAndDetector/DetectorResolutionFunction.py
index 662b1711cd955a45cdcd64f29fe01d496098522c..19336324b42343ad5fe9f189d78ea97135ee20cc 100644
--- a/Examples/python/simulation/ex05_BeamAndDetector/DetectorResolutionFunction.py
+++ b/Examples/python/simulation/ex05_BeamAndDetector/DetectorResolutionFunction.py
@@ -1,5 +1,5 @@
 """
-Cylinder form factor in DWBA with beam divergence
+Cylinder form factor in DWBA with detector resolution function applied
 """
 import numpy
 import matplotlib
diff --git a/GUI/main/CMakeLists.txt b/GUI/main/CMakeLists.txt
index 74721d64dea1e311035c3e045712e0619f23270d..5ba8390b85408ea7d9a1186e11a36e7a0fcaf369 100644
--- a/GUI/main/CMakeLists.txt
+++ b/GUI/main/CMakeLists.txt
@@ -134,6 +134,18 @@ if(UNIX)
         install(DIRECTORY "$ENV{QTDIR}/plugins/platforms" DESTINATION ${plugin_dest_dir} COMPONENT Runtime)
 
         set(fixup_path @rpath)
+
+        # FIXME handling the case when cmake prefix path contains more than one entry FIXME
+        # the problem here is FixAppleBundle is working in install phase and doesn't see some cmake variables
+        set(cmake_prefix_path_to_parse ${CMAKE_PREFIX_PATH})
+        list(LENGTH cmake_prefix_path_to_parse len)
+        list(GET cmake_prefix_path_to_parse 0 cmake_prefix_path1)
+        set(cmake_prefix_path2 "undefined_cmake_prefix_path2")
+        if(len EQUAL 2)
+        list(GET cmake_prefix_path_to_parse 1 cmake_prefix_path2)
+        endif()
+message(INFO "XXX ${cmake_prefix_path1} ${cmake_prefix_path2}")
+
         configure_file(${CMAKE_SOURCE_DIR}/cmake/modules/FixAppleBundle.cmake.in ${destination_runtime_configs}/FixAppleBundle.cmake @ONLY)
         install(SCRIPT ${destination_runtime_configs}/FixAppleBundle.cmake COMPONENT Runtime)
     elseif(NOT BUILD_DEBIAN)
diff --git a/VERSION.cmake b/VERSION.cmake
index 6af1536943dda35d627eedcc5852928456a5f5ce..a07b1258e405dc4208f9ff16b24010b8a3328c90 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,3 +1,3 @@
 set(BornAgain_VERSION_MAJOR 1)
-set(BornAgain_VERSION_MINOR 3)
+set(BornAgain_VERSION_MINOR 4)
 set(BornAgain_VERSION_PATCH 0)
diff --git a/cmake/modules/BornAgainConfiguration.cmake b/cmake/modules/BornAgainConfiguration.cmake
index bdec08be2e11e13125faaa88d570b459fe64b4b7..275f3c8b765d95b6fe1bc8c263ad9e32349ca67f 100644
--- a/cmake/modules/BornAgainConfiguration.cmake
+++ b/cmake/modules/BornAgainConfiguration.cmake
@@ -104,6 +104,14 @@ set(this_libdir $BORNAGAINSYS/lib/${destination_suffix})
 configure_file("${CMAKE_SOURCE_DIR}/cmake/scripts/thisbornagain.sh.in" "${destination_runtime_configs}/frombin_setup_paths.sh" @ONLY)
 configure_file("${CMAKE_SOURCE_DIR}/cmake/scripts/thisbornagain.csh.in" "${destination_runtime_configs}/frombin_setup_paths.csh" @ONLY)
 
+# -- configure BornAgain init module ---
+set(BA_MODULES_IMPORT_PATH "..")
+if(BORNAGAIN_APPLE_BUNDLE)
+    set(BA_MODULES_IMPORT_PATH lib/BornAgain-${BornAgain_VERSION_MAJOR}.${BornAgain_VERSION_MINOR})
+endif()
+configure_file("${CMAKE_SOURCE_DIR}/cmake/scripts/__init__.py.in" "${destination_runtime_configs}/__init__.py" @ONLY)
+execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${destination_runtime_configs}/__init__.py" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/bornagain)
+
 
 # --- configure C++ source code ---------
 configure_file("${CMAKE_SOURCE_DIR}/cmake/scripts/BAConfigure.h.in" "${destination_runtime_configs}/BAConfigure.h" @ONLY)
diff --git a/cmake/modules/FindNumpy.cmake b/cmake/modules/FindNumpy.cmake
index 1f1dd84c53ad4cd637590319461637fabd3e6658..04c7b8e0cd701ef8aa5fb80dc769b7d2f4ff9ca5 100644
--- a/cmake/modules/FindNumpy.cmake
+++ b/cmake/modules/FindNumpy.cmake
@@ -25,12 +25,16 @@ else()
     else()
         set (NUMPY_FOUND TRUE)
         set (NUMPY_INCLUDE_DIR ${NUMPY_INCLUDE_DIR} CACHE STRING "Numpy include path")
+        EXEC_PROGRAM ("${PYTHON_EXECUTABLE}"
+        ARGS "-c \"import numpy; print numpy.__version__\""
+        OUTPUT_VARIABLE numpy_version_number
+        RETURN_VALUE numpy_return_value)
     endif()
 endif()
 
 if (NUMPY_FOUND)
     if (NOT Numpy_FIND_QUIETLY)
-        message (STATUS "Numpy headers found at ${NUMPY_INCLUDE_DIR}")
+        message (STATUS "Numpy headers found at ${NUMPY_INCLUDE_DIR}, version ${numpy_version_number}.")
     endif()
 else()
     if (Numpy_FIND_REQUIRED)
diff --git a/cmake/modules/FixAppleBundle.cmake.in b/cmake/modules/FixAppleBundle.cmake.in
index 69e08c2868d7768ac17418c928089c582e27dfa8..5d68c90d3a41738f9bfa64b212da8be00c114ea7 100644
--- a/cmake/modules/FixAppleBundle.cmake.in
+++ b/cmake/modules/FixAppleBundle.cmake.in
@@ -1,7 +1,6 @@
 set(bundle ${CMAKE_INSTALL_PREFIX}/BornAgain.app )
 set(bornagain_libs ${CMAKE_INSTALL_PREFIX}/@destination_lib@)
 set(thirdparty_libs ${bundle}/Contents/lib/ThirdParty)
-set(cmake_prefix_path @CMAKE_PREFIX_PATH@ )
 
 set(BU_CHMOD_BUNDLE_ITEMS True)
 set(BU_COPY_FULL_FRAMEWORK_CONTENTS False)
@@ -25,7 +24,11 @@ function(gp_resolved_file_type_override resolved_file type_var)
         message("XXX_Python  resolving file as system : ${file}")
         set(${type_var} system PARENT_SCOPE)
 
-    elseif(file MATCHES "@CMAKE_PREFIX_PATH@")
+    elseif(file MATCHES "@cmake_prefix_path1@")
+        message("XXX_PREFFIX  resolving file as _embedded : ${file}")
+        set(${type_var} embedded PARENT_SCOPE)
+
+    elseif(file MATCHES "@cmake_prefix_path2@")
         message("XXX_PREFFIX  resolving file as _embedded : ${file}")
         set(${type_var} embedded PARENT_SCOPE)
 
diff --git a/cmake/scripts/__init__.py.in b/cmake/scripts/__init__.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..79fb2939c019db4f72a07e44ac3caddcc6828b0b
--- /dev/null
+++ b/cmake/scripts/__init__.py.in
@@ -0,0 +1,10 @@
+import sys
+import os
+
+sys.path.append(os.path.abspath(
+                os.path.join(os.path.split(__file__)[0], '@BA_MODULES_IMPORT_PATH@')))
+
+from libBornAgainCore import *
+from libBornAgainFit import *
+from plot_utils import *
+
diff --git a/dev-tools/python-setup/bornagain/__init__.py b/dev-tools/python-setup/bornagain/plot_utils.py
similarity index 91%
rename from dev-tools/python-setup/bornagain/__init__.py
rename to dev-tools/python-setup/bornagain/plot_utils.py
index 66642d8b7e747a75e6ca397a04f772d546e6e1b7..9ce5066d04fc35262d77bb0aebca19ee48a2a875 100644
--- a/dev-tools/python-setup/bornagain/__init__.py
+++ b/dev-tools/python-setup/bornagain/plot_utils.py
@@ -1,12 +1,6 @@
-import sys
-import os
-
-sys.path.append(os.path.abspath(
-                os.path.join(os.path.split(__file__)[0],
-                '..')))
-
-from libBornAgainCore import *
-from libBornAgainFit import *
+'''
+BornAgain plot utils
+'''
 
 try:
     import matplotlib
@@ -14,6 +8,8 @@ try:
 except ImportError:
     print "bornagain/__init__.py -> Error. Can't import matplotlib."
 
+from bornagain import deg as deg
+from bornagain import IFitObserver as IFitObserver
 
 class DefaultFitObserver(IFitObserver):
     """
diff --git a/dev-tools/python-setup/bornagain_python_install.py b/dev-tools/python-setup/bornagain_python_install.py
index 3bb696ce3b07a225db738d2d1af1dad018207286..f9f13ae708dc9459c8f90b6c3e327521aa964efb 100644
--- a/dev-tools/python-setup/bornagain_python_install.py
+++ b/dev-tools/python-setup/bornagain_python_install.py
@@ -165,9 +165,18 @@ from libBornAgainFit import *
     pass
 
 
+def prepare_init_module(app_dir, bundle_dir):
+    source_dir = os.path.join(app_dir, "Contents", "libexec")
+    libexec_dir = os.path.join(source_dir, "BornAgain-"+BORNAGAIN_VERSION, "bornagain")    
+    package_dir = os.path.join(bundle_dir, "bornagain")
+    print "--> Copying modules from '{0}' to '{1}'".format(libexec_dir, package_dir)
+    shutil.copytree(libexec_dir, package_dir)
+    return package_dir
+    
+
 def copy_libraries(app_dir, destination_dir):
     """
-    Coopy libraries from BornAgain.app into corresponding BornAgain Python package directory
+    Copy libraries from BornAgain.app into corresponding BornAgain Python package directory
     """
     print "--> Copying libraries from '{0}'".format(app_dir)
     source_dir = os.path.join(app_dir, "Contents", "lib")
@@ -212,8 +221,7 @@ def create_bundle(app_dir):
     
     generate_setup_py(bundle_dir)
     
-    package_dir = create_package_dir(bundle_dir)
-    generate_init_py(package_dir)
+    package_dir = prepare_init_module(app_dir, bundle_dir)
     
     library_dir = create_library_dir(package_dir)
     copy_libraries(app_dir, library_dir)
diff --git a/dev-tools/release/utils/prepare_release.py b/dev-tools/release/utils/prepare_release.py
index d879d16e21187f23dee8c4b805054a84847e0e4a..194d0b4456d9f7a7088916fee88387cf5e5627a7 100644
--- a/dev-tools/release/utils/prepare_release.py
+++ b/dev-tools/release/utils/prepare_release.py
@@ -34,8 +34,7 @@ def download_from_app_server():
 
 def cmake_release():
     print "\nRunning cmake ...", get_build_dir()
-    # cmd = "cd %s; cmake -DBORNAGAIN_APP=ON -DBORNAGAIN_GUI=ON -DBORNAGAIN_USERMANUAL=ON -DBORNAGAIN_RELEASE=ON -DCMAKE_INSTALL_PREFIX=%s %s" % (get_build_dir(), get_install_dir(), get_source_dir() )
-    cmd = "cd %s; cmake -DBORNAGAIN_RELEASE=ON -DCMAKE_INSTALL_PREFIX=%s %s" % (get_build_dir(), get_install_dir(), get_source_dir() )
+    cmd = "cd %s; cmake -DBORNAGAIN_USERMANUAL=ON -DBORNAGAIN_RELEASE=ON -DCMAKE_INSTALL_PREFIX=%s %s" % (get_build_dir(), get_install_dir(), get_source_dir() )
     run_command(cmd)