diff --git a/Core/Algorithms/inc/Simulation.h b/Core/Algorithms/inc/Simulation.h
index 8ccef37e919c25a24908a9b16995fff382d1431b..3121f7c64aff2cd316c79ac2ca7f38cb2a43185b 100644
--- a/Core/Algorithms/inc/Simulation.h
+++ b/Core/Algorithms/inc/Simulation.h
@@ -51,7 +51,7 @@ public:
     //! Run a simulation, possibly averaged over parameter distributions
     void runSimulation();
 
-    //! runs OpenMPI simulation
+    //! Run an OpenMPI simulation
     void runOMPISimulation();
 
     //! Normalize the detector counts
diff --git a/Core/Algorithms/src/OMPISimulation.cpp b/Core/Algorithms/src/OMPISimulation.cpp
index 99b73f8c8b3293ecefcbce950a19aff9500df339..02acabd354c0e9fcd64bd679fde5fdcc25f35b4b 100644
--- a/Core/Algorithms/src/OMPISimulation.cpp
+++ b/Core/Algorithms/src/OMPISimulation.cpp
@@ -1,65 +1,76 @@
 #include "OMPISimulation.h"
 #include "Simulation.h"
 #include "OutputData.h"
-//#include <mpi.h>
+#include "Exceptions.h"
+
+#ifdef BORNAGAIN_OPENMPI
+
+#include <mpi.h>
 
 
 void OMPISimulation::runSimulation(const Simulation * /* simulation */)
 {
 
-//    //MPI_Init(&argc, &argv);
-//    MPI_Init(0, 0);
-
-//    MPI_Status st;
-
-//    int world_size;
-//    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
-
-//    // Get the rank of the process
-//    int world_rank;
-//    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
-
-//    // Get the name of the processor
-//    char processor_name[MPI_MAX_PROCESSOR_NAME];
-//    int name_len;
-//    MPI_Get_processor_name(processor_name, &name_len);
-
-//    // Print off a hello world message
-//    printf("Hello world from processor %s, rank %d"
-//           " out of %d processors\n",
-//           processor_name, world_rank, world_size);
-
-//    if(world_rank != 0) {
-//        std::cout << "XXX not a 0" << std::endl;
-//        Simulation *sim = simulation->clone();
-//        ThreadInfo threadInfo;
-//        threadInfo.n_batches = world_size - 1;
-//        threadInfo.current_batch = world_rank - 1;
-//        std::cout << " xxx preparing to run " << threadInfo.n_batches << " " << threadInfo.current_batch << std::endl;
-//        sim->setThreadInfo(threadInfo);
-//        sim->runSimulation();
-
-//        //std::vector<double> raw = sim->getOutputData()->getRawDataVector();
-//        std::vector<double> raw;
-//        raw.resize(1000000);
-//        std::cout << " xxx " << threadInfo.n_batches << " " << threadInfo.current_batch << " ... sending" << std::endl;
-//        MPI_Send(&raw[0], raw.size(), MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
-
-//    }
-//    if(world_rank==0) {
-//        std::cout << " preparing to receive" << std::endl;
-////        std::vector<double> raw = simulation->getOutputData()->getRawDataVector();
-//        std::vector<double> raw;
-//        raw.resize(1000000);
-//        for(int i=1; i<world_size; ++i) {
-//            std::cout << " ... receiving " << i << std::endl;
-//            MPI_Recv(&raw[0], raw.size(), MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &st);
-//        }
-
-//    }
-
-
-//    // Finalize the MPI environment.
-//    MPI_Finalize();
+    MPI_Status st;
+
+    int world_size;
+    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
+
+    // Get the rank of the process
+    int world_rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
+
+    // Get the name of the processor
+    char processor_name[MPI_MAX_PROCESSOR_NAME];
+    int name_len;
+    MPI_Get_processor_name(processor_name, &name_len);
+
+    // Print off a hello world message
+    printf("Hello world from processor %s, rank %d"
+           " out of %d processors\n",
+           processor_name, world_rank, world_size);
+
+    if(world_rank != 0) {
+        std::cout << "XXX not a 0" << std::endl;
+        Simulation *sim = simulation->clone();
+        ThreadInfo threadInfo;
+        threadInfo.n_batches = world_size - 1;
+        threadInfo.current_batch = world_rank - 1;
+        std::cout << " xxx preparing to run " << threadInfo.n_batches << " " << threadInfo.current_batch << std::endl;
+        sim->setThreadInfo(threadInfo);
+        sim->runSimulation();
+
+        //std::vector<double> raw = sim->getOutputData()->getRawDataVector();
+        std::vector<double> raw;
+        raw.resize(1000000);
+        std::cout << " xxx " << threadInfo.n_batches << " " << threadInfo.current_batch << " ... sending" << std::endl;
+        MPI_Send(&raw[0], raw.size(), MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
+
+    }
+    if(world_rank==0) {
+        std::cout << " preparing to receive" << std::endl;
+//        std::vector<double> raw = simulation->getOutputData()->getRawDataVector();
+        std::vector<double> raw;
+        raw.resize(1000000);
+        for(int i=1; i<world_size; ++i) {
+            std::cout << " ... receiving " << i << std::endl;
+            MPI_Recv(&raw[0], raw.size(), MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &st);
+        }
+
+    }
+
 
 }
+
+
+#else
+// -----------------------------------------------------------------------------
+// No OpenMPI support
+// -----------------------------------------------------------------------------
+
+void OMPISimulation::runSimulation(const Simulation * /* simulation */)
+{
+    throw RuntimeErrorException("OMPISimulation::runSimulation() -> Error! Can't run OpenMPI simulation. The package was compiled without OpenMPI support (compile with -DBORNAGAIN_OPENMPI=ON");
+}
+
+#endif
diff --git a/Core/Algorithms/src/Simulation.cpp b/Core/Algorithms/src/Simulation.cpp
index a3d7ecc6dcf366c84aac5819845a9f5bbe1886a1..46811ba17eb2a01015203efbd3c04f6e8b6c69ac 100644
--- a/Core/Algorithms/src/Simulation.cpp
+++ b/Core/Algorithms/src/Simulation.cpp
@@ -22,7 +22,7 @@
 #include "OutputDataFunctions.h"
 #include "BornAgainNamespace.h"
 #include "ProgressHandlerDWBA.h"
-//#include "OMPISimulation.h"
+#include "OMPISimulation.h"
 
 #include "Macros.h"
 GCC_DIAG_OFF(strict-aliasing);
@@ -172,8 +172,8 @@ void Simulation::runSimulation()
 
 void Simulation::runOMPISimulation()
 {
-//    OMPISimulation ompi;
-//    ompi.runSimulation(this);
+    OMPISimulation ompi;
+    ompi.runSimulation(this);
 }
 
 
diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index e712dd0011d0098b50062ae6faabfbc95a769566..5fd590eed9eaac937f68c6fd5dbaa252d68c0827 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -50,6 +50,11 @@ if(BORNAGAIN_PYTHON)
     add_definitions(-DBORNAGAIN_PYTHON)
 endif()
 
+if(BORNAGAIN_OPENMPI)
+    add_definitions(-DBORNAGAIN_OPENMPI)
+endif()
+
+
 # --- making library ---
 add_library(
     ${library_name}
diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index d8fa58266a14297cd38ea7fb8e6125609dbacf6d..ba6676b52897c19b884c35f85674c69feb5bf960 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -60,7 +60,7 @@ set(${library_name}_LIBRARY ${library_name} PARENT_SCOPE)
 include_directories(
     ${BornAgainCore_INCLUDE_DIRS}
     ${Boost_INCLUDE_DIRS}
-    ${EIGEN3_INCLUDE_DIR}
+    ${EIGEN3_INCLUDE_DIRS}
     ${RootMinimizers_INCLUDE_DIRS}
     ${GSL_INCLUDE_DIR}
 )
@@ -69,6 +69,7 @@ target_link_libraries(
     ${BornAgainCore_LIBRARY}
     ${Boost_LIBRARIES}
     ${RootMinimizers_LIBRARY}
+    ${GSL_LIBRARIES}
 )
 
 if(ROOT_FOUND)
diff --git a/Tests/UnitTests/TestFit/CMakeLists.txt b/Tests/UnitTests/TestFit/CMakeLists.txt
index d992cbb3a67a8b9222a4f9172ccdbd2cb87d45cd..c940629cfcf9b1cd4322fbd44a26cc1ed40cdf67 100644
--- a/Tests/UnitTests/TestFit/CMakeLists.txt
+++ b/Tests/UnitTests/TestFit/CMakeLists.txt
@@ -25,6 +25,7 @@ target_link_libraries(TestFit
     ${BornAgainCore_LIBRARY}
     ${BornAgainFit_LIBRARY}
     ${Boost_LIBRARIES}
+    ${GSL_LIBRARIES}
 )
 
 if(BORNAGAIN_OPENMPI)
diff --git a/Tests/UnitTests/TestGUI/CMakeLists.txt b/Tests/UnitTests/TestGUI/CMakeLists.txt
index b0c27401b90259ed0574e6ab64602b0638d7a967..9ad32fd7e29b721a85c524d5d00e939f1bcc5e9c 100644
--- a/Tests/UnitTests/TestGUI/CMakeLists.txt
+++ b/Tests/UnitTests/TestGUI/CMakeLists.txt
@@ -27,8 +27,6 @@ add_executable( TestGUI ${source_files} ${include_files})
 
 target_link_libraries(TestGUI
     ${BornAgainCore_LIBRARY}
-#    ${Boost_LIBRARIES}
-#    ${GSL_LIBRARIES}
     ${BornAgainGUI_LIBRARY}
 )
 
diff --git a/ThirdParty/RootMinimizers/CMakeLists.txt b/ThirdParty/RootMinimizers/CMakeLists.txt
index 486510dd0d39572059884fc1d79c7dd787b0d180..63debd104e53b7ab621388ee9b47a35ea468f572 100644
--- a/ThirdParty/RootMinimizers/CMakeLists.txt
+++ b/ThirdParty/RootMinimizers/CMakeLists.txt
@@ -38,7 +38,7 @@ set(${library_name}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE)
 set(${library_name}_LIBRARY ${library_name} PARENT_SCOPE)
 
 # --- external dependencies ---
-include_directories(${GSL_INCLUDE_DIRS})
+include_directories(${GSL_INCLUDE_DIR})
 target_link_libraries(${library_name} ${GSL_LIBRARIES})
 
 # --- installation ---
diff --git a/cmake/modules/FindGSL.cmake b/cmake/modules/FindGSL.cmake
index d6f7bec5407632754f57ab31b8c149856d838583..0b1cc679b2aace8fdee5d020311dc0f8247c3623 100644
--- a/cmake/modules/FindGSL.cmake
+++ b/cmake/modules/FindGSL.cmake
@@ -13,157 +13,288 @@
 #  GSL_LIBRARY_DIRS, the directory where the PLplot library is found.
 #  GSL_CFLAGS, additional c (c++) required
  
-set( GSL_FOUND OFF )
-set( GSL_CBLAS_FOUND OFF )
-
-if(GSL_INCLUDE_DIR OR GSL_CONFIG_EXECUTABLE)
-  set(GSL_FIND_QUIETLY 1)
-endif()
-
-# Windows, but not for Cygwin and MSys where gsl-config is available
-if( WIN32 AND NOT CYGWIN AND NOT MSYS )
-  # look for headers
-  find_path( GSL_INCLUDE_DIR
-    NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
-        PATHS 
-        $ENV{GSL_DIR}/include 
-        "C:/opt/local/include"
-    )
-#    message("XXXXX ${GSL_INCLUDE_DIR}")
+
+
+#FIXME check windows
+IF(WIN32)
+    # JW tested with gsl-1.8, Windows XP, MSVS 7.1
+    SET(GSL_POSSIBLE_ROOT_DIRS
+        ${GSL_ROOT_DIR}
+        $ENV{GSL_ROOT_DIR}
+        ${GSL_DIR}
+        ${GSL_HOME}
+        $ENV{GSL_DIR}
+        $ENV{GSL_HOME}
+        $ENV{EXTRA}
+        "C:/Program Files/GnuWin32")
+
+    FIND_PATH(GSL_INCLUDE_DIR
+        NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
+        PATHS ${GSL_POSSIBLE_ROOT_DIRS}
+        PATH_SUFFIXES include
+        DOC "GSL header include dir")
+
+    FIND_LIBRARY(GSL_GSL_LIBRARY
+        NAMES libgsl.dll.a gsl libgsl
+        PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+        PATH_SUFFIXES lib
+        DOC "GSL library")
+
+    if(NOT GSL_GSL_LIBRARY)
+        FIND_FILE(GSL_GSL_LIBRARY
+            NAMES libgsl.dll.a
+            PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+            PATH_SUFFIXES lib
+            DOC "GSL library")
+    endif(NOT GSL_GSL_LIBRARY)
+
+    FIND_LIBRARY(GSL_GSLCBLAS_LIBRARY
+        NAMES libgslcblas.dll.a gslcblas libgslcblas
+        PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+        PATH_SUFFIXES lib
+        DOC "GSL cblas library dir")
+
+    if(NOT GSL_GSLCBLAS_LIBRARY)
+        FIND_FILE(GSL_GSLCBLAS_LIBRARY
+            NAMES libgslcblas.dll.a
+            PATHS  ${GSL_POSSIBLE_ROOT_DIRS}
+            PATH_SUFFIXES lib
+            DOC "GSL library")
+    endif(NOT GSL_GSLCBLAS_LIBRARY)
+
+    SET(GSL_LIBRARIES ${GSL_GSL_LIBRARY})
+
+
+ELSE(WIN32)
+
+    IF(UNIX)
+        SET(GSL_CONFIG_PREFER_PATH
+            "$ENV{GSL_DIR}/bin"
+            "$ENV{GSL_DIR}"
+            "$ENV{GSL_HOME}/bin"
+            "$ENV{GSL_HOME}"
+            CACHE STRING "preferred path to GSL (gsl-config)")
+        FIND_PROGRAM(GSL_CONFIG gsl-config
+            ${GSL_CONFIG_PREFER_PATH}
+            /usr/bin/
+            /usr/local/bin/)
+
+        IF (GSL_CONFIG)
+            # set CXXFLAGS to be fed into CXX_FLAGS by the user:
+            SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
+
+            # set INCLUDE_DIRS to prefix+include
+            EXEC_PROGRAM(${GSL_CONFIG}
+                ARGS --prefix
+                OUTPUT_VARIABLE GSL_PREFIX)
+            SET(GSL_INCLUDE_DIR ${GSL_PREFIX}/include CACHE STRING INTERNAL)
+
+            # set link libraries and link flags
+            EXEC_PROGRAM(${GSL_CONFIG}
+                ARGS --libs
+                OUTPUT_VARIABLE GSL_LIBRARIES )
+
+            # extract link dirs for rpath
+            EXEC_PROGRAM(${GSL_CONFIG}
+                ARGS --libs
+                OUTPUT_VARIABLE GSL_CONFIG_LIBS )
+
+            # extract version
+            EXEC_PROGRAM(${GSL_CONFIG}
+                ARGS --version
+                OUTPUT_VARIABLE GSL_FULL_VERSION )
+
+            # split version as major/minor
+            STRING(REGEX MATCH "(.)\\..*" GSL_VERSION_MAJOR_ "${GSL_FULL_VERSION}")
+            SET(GSL_VERSION_MAJOR ${CMAKE_MATCH_1})
+            STRING(REGEX MATCH ".\\.(.*)" GSL_VERSION_MINOR_ "${GSL_FULL_VERSION}")
+            SET(GSL_VERSION_MINOR ${CMAKE_MATCH_1})
+
+            # split off the link dirs (for rpath)
+            # use regular expression to match wildcard equivalent "-L*<endchar>"
+            # with <endchar> is a space or a semicolon
+            STRING(REGEX MATCHALL "[-][L]([^ ;])+"
+                GSL_LINK_DIRECTORIES_WITH_PREFIX
+                "${GSL_CONFIG_LIBS}" )
+
+            # remove prefix -L because we need the pure directory for LINK_DIRECTORIES
+
+            IF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
+                STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} )
+            ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
+            SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL)
+
+            #      ADD_DEFINITIONS("-DHAVE_GSL")
+            #      SET(GSL_DEFINITIONS "-DHAVE_GSL")
+            MARK_AS_ADVANCED(
+                GSL_CXX_FLAGS
+                GSL_INCLUDE_DIR
+                GSL_LIBRARIES
+                GSL_LINK_DIRECTORIES
+                GSL_DEFINITIONS)
+            #MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
+            message( STATUS "Found GSL version ${GSL_FULL_VERSION}, GSL_INCLUDE_DIR=${GSL_INCLUDE_DIR} GSL_LIBRARIES=${GSL_LIBRARIES}" )
+
+        ELSE(GSL_CONFIG)
+            MESSAGE("FindGSL.cmake: gsl-config not found. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
+        ENDIF(GSL_CONFIG)
+
+    ENDIF(UNIX)
+ENDIF(WIN32)
+
+
+IF(GSL_LIBRARIES)
+  IF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
+    SET(GSL_FOUND 1)
+  ENDIF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
+ENDIF(GSL_LIBRARIES)
+
+
+
+
+
+#set( GSL_FOUND OFF )
+#set( GSL_CBLAS_FOUND OFF )
+
+#if(GSL_INCLUDE_DIR OR GSL_CONFIG_EXECUTABLE)
+#  set(GSL_FIND_QUIETLY 1)
+#endif()
+
+## Windows, but not for Cygwin and MSys where gsl-config is available
+#if( WIN32 AND NOT CYGWIN AND NOT MSYS )
+#  # look for headers
+#  find_path( GSL_INCLUDE_DIR
+#    NAMES gsl/gsl_cdf.h gsl/gsl_randist.h
+#        PATHS
+#        $ENV{GSL_DIR}/include
+#        "C:/opt/local/include"
+#    )
+##    message("XXXXX ${GSL_INCLUDE_DIR}")
   
-  if(MSVC)
-    set(gsl_library_name gsl)  
-    set(gslcblas_library_name cblas)  
-  else()
-    set(gsl_library_name libgsl-0)
-    set(gslcblas_library_name libgslcblas-0)
-  endif()
-    
-    
+#  if(MSVC)
+#    set(gsl_library_name gsl)
+#    set(gslcblas_library_name cblas)
+#  else()
+#    set(gsl_library_name libgsl-0)
+#    set(gslcblas_library_name libgslcblas-0)
+#  endif()
+        
   
-  if( GSL_INCLUDE_DIR )
-    # look for gsl library
-    find_library( GSL_LIBRARY
-      NAMES ${gsl_library_name}
-          PATHS 
-          #$ENV{GSL_DIR}/lib 
-          "C:/opt/local/lib"
-    )
-#    message("XXXXX ${GSL_LIBRARY}")
-    if( GSL_LIBRARY )
-      set( GSL_INCLUDE_DIRS ${GSL_INCLUDE_DIR} )
-      get_filename_component( GSL_LIBRARY_DIRS ${GSL_LIBRARY} PATH )
-      set( GSL_FOUND ON )
-    endif( GSL_LIBRARY )
+#  if( GSL_INCLUDE_DIR )
+#    # look for gsl library
+#    find_library( GSL_LIBRARY
+#      NAMES ${gsl_library_name}
+#          PATHS
+#          #$ENV{GSL_DIR}/lib
+#          "C:/opt/local/lib"
+#    )
+##    message("XXXXX ${GSL_LIBRARY}")
+#    if( GSL_LIBRARY )
+#      set( GSL_INCLUDE_DIRS ${GSL_INCLUDE_DIR} )
+#      get_filename_component( GSL_LIBRARY_DIRS ${GSL_LIBRARY} PATH )
+#      set( GSL_FOUND ON )
+#    endif( GSL_LIBRARY )
  
-    # look for gsl cblas library
-    find_library( GSL_CBLAS_LIBRARY
-        NAMES ${gslcblas_library_name}
-		PATHS $ENV{GSL_DIR}/lib
-          "C:/opt/local/lib"
-      )
-    if( GSL_CBLAS_LIBRARY )
-      set( GSL_CBLAS_FOUND ON )
-    endif( GSL_CBLAS_LIBRARY )
+#    # look for gsl cblas library
+#    find_library( GSL_CBLAS_LIBRARY
+#        NAMES ${gslcblas_library_name}
+#		PATHS $ENV{GSL_DIR}/lib
+#          "C:/opt/local/lib"
+#      )
+#    if( GSL_CBLAS_LIBRARY )
+#      set( GSL_CBLAS_FOUND ON )
+#    endif( GSL_CBLAS_LIBRARY )
  
-    set( GSL_LIBRARIES ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} )
-	set( GSL_CFLAGS "-DGSL_DLL")
-  endif( GSL_INCLUDE_DIR )
+#    set( GSL_LIBRARIES ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} )
+#	set( GSL_CFLAGS "-DGSL_DLL")
+#  endif( GSL_INCLUDE_DIR )
  
-  mark_as_advanced(
-    GSL_INCLUDE_DIR
-    GSL_LIBRARY
-    GSL_CBLAS_LIBRARY
-  )
-else( WIN32 AND NOT CYGWIN AND NOT MSYS )
-  if( UNIX OR MSYS )
-    find_program( GSL_CONFIG_EXECUTABLE gsl-config
-      /usr/bin/
-      /usr/local/bin
-      $ENV{GSL_DIR}/bin
-      ${GSL_DIR}/bin
-    )
+#  mark_as_advanced(
+#    GSL_INCLUDE_DIR
+#    GSL_LIBRARY
+#    GSL_CBLAS_LIBRARY
+#  )
+#else( WIN32 AND NOT CYGWIN AND NOT MSYS )
+#  if( UNIX OR MSYS )
+#    find_program( GSL_CONFIG_EXECUTABLE gsl-config
+#      /usr/bin/
+#      /usr/local/bin
+#      $ENV{GSL_DIR}/bin
+#      ${GSL_DIR}/bin
+#    )
  
-    if( GSL_CONFIG_EXECUTABLE )
-      set( GSL_FOUND ON )
+#    if( GSL_CONFIG_EXECUTABLE )
+#      set( GSL_FOUND ON )
  
-      # run the gsl-config program to get cxxflags
-      execute_process(
-        COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --cflags
-        OUTPUT_VARIABLE GSL_CFLAGS
-        RESULT_VARIABLE RET
-        ERROR_QUIET
-        )
-      if( RET EQUAL 0 )
-        string( STRIP "${GSL_CFLAGS}" GSL_CFLAGS )
-        separate_arguments( GSL_CFLAGS )
+#      # run the gsl-config program to get cxxflags
+#      execute_process(
+#        COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --cflags
+#        OUTPUT_VARIABLE GSL_CFLAGS
+#        RESULT_VARIABLE RET
+#        ERROR_QUIET
+#        )
+#      if( RET EQUAL 0 )
+#        string( STRIP "${GSL_CFLAGS}" GSL_CFLAGS )
+#        separate_arguments( GSL_CFLAGS )
  
-        # parse definitions from cflags; drop -D* from CFLAGS
-        string( REGEX MATCHALL "-D[^;]+"
-          GSL_DEFINITIONS  "${GSL_CFLAGS}" )
-        string( REGEX REPLACE "-D[^;]+;" ""
-          GSL_CFLAGS "${GSL_CFLAGS}" )
+#        # parse definitions from cflags; drop -D* from CFLAGS
+#        string( REGEX MATCHALL "-D[^;]+"
+#          GSL_DEFINITIONS  "${GSL_CFLAGS}" )
+#        string( REGEX REPLACE "-D[^;]+;" ""
+#          GSL_CFLAGS "${GSL_CFLAGS}" )
  
-        # parse include dirs from cflags; drop -I prefix
-        string( REGEX MATCHALL "-I[^;]+"
-          GSL_INCLUDE_DIRS "${GSL_CFLAGS}" )
-        string( REPLACE "-I" ""
-          GSL_INCLUDE_DIRS "${GSL_INCLUDE_DIRS}")
-        string( REGEX REPLACE "-I[^;]+;" ""
-          GSL_CFLAGS "${GSL_CFLAGS}")
-      else( RET EQUAL 0 )
-        set( GSL_FOUND FALSE )
-      endif( RET EQUAL 0 )
+#        # parse include dirs from cflags; drop -I prefix
+#        string( REGEX MATCHALL "-I[^;]+"
+#          GSL_INCLUDE_DIRS "${GSL_CFLAGS}" )
+#        string( REPLACE "-I" ""
+#          GSL_INCLUDE_DIRS "${GSL_INCLUDE_DIRS}")
+#        string( REGEX REPLACE "-I[^;]+;" ""
+#          GSL_CFLAGS "${GSL_CFLAGS}")
+#      else( RET EQUAL 0 )
+#        set( GSL_FOUND FALSE )
+#      endif( RET EQUAL 0 )
  
-      # run the gsl-config program to get the libs
-      execute_process(
-        COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --libs
-        OUTPUT_VARIABLE GSL_LIBRARIES
-        RESULT_VARIABLE RET
-        ERROR_QUIET
-        )
-      if( RET EQUAL 0 )
-        string(STRIP "${GSL_LIBRARIES}" GSL_LIBRARIES )
-        separate_arguments( GSL_LIBRARIES )
+#      # run the gsl-config program to get the libs
+#      execute_process(
+#        COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --libs
+#        OUTPUT_VARIABLE GSL_LIBRARIES
+#        RESULT_VARIABLE RET
+#        ERROR_QUIET
+#        )
+#      if( RET EQUAL 0 )
+#        string(STRIP "${GSL_LIBRARIES}" GSL_LIBRARIES )
+#        separate_arguments( GSL_LIBRARIES )
  
-        # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
-        string( REGEX MATCHALL "-L[^;]+"
-          GSL_LIBRARY_DIRS "${GSL_LIBRARIES}" )
-        string( REPLACE "-L" ""
-          GSL_LIBRARY_DIRS "${GSL_LIBRARY_DIRS}" )
-      else( RET EQUAL 0 )
-        set( GSL_FOUND FALSE )
-      endif( RET EQUAL 0 )
+#        # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
+#        string( REGEX MATCHALL "-L[^;]+"
+#          GSL_LIBRARY_DIRS "${GSL_LIBRARIES}" )
+#        string( REPLACE "-L" ""
+#          GSL_LIBRARY_DIRS "${GSL_LIBRARY_DIRS}" )
+#      else( RET EQUAL 0 )
+#        set( GSL_FOUND FALSE )
+#      endif( RET EQUAL 0 )
  
-      MARK_AS_ADVANCED(
-        GSL_CFLAGS
-      )
-      if(NOT GSL_FIND_QUIETLY)
-        execute_process(
-          COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --prefix
-          OUTPUT_VARIABLE GSL_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
-        message( STATUS "Using GSL from ${GSL_PREFIX}")
-      endif()
-    else( GSL_CONFIG_EXECUTABLE )
-      message( STATUS "FindGSL: gsl-config not found.")
-    endif( GSL_CONFIG_EXECUTABLE )
-  endif( UNIX OR MSYS )
-endif( WIN32 AND NOT CYGWIN AND NOT MSYS )
+#      MARK_AS_ADVANCED(
+#        GSL_CFLAGS
+#      )
+##      if(NOT GSL_FIND_QUIETLY)
+##        execute_process(
+##          COMMAND sh "${GSL_CONFIG_EXECUTABLE}" --prefix
+##          OUTPUT_VARIABLE GSL_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
+##        message( STATUS "Using GSL from ${GSL_PREFIX}")
+##      endif()
+#    else( GSL_CONFIG_EXECUTABLE )
+#      message( STATUS "FindGSL: gsl-config not found.")
+#    endif( GSL_CONFIG_EXECUTABLE )
+#  endif( UNIX OR MSYS )
+#endif( WIN32 AND NOT CYGWIN AND NOT MSYS )
  
-if( GSL_FOUND )
-  if( NOT GSL_FIND_QUIETLY )
-    message( STATUS "Found GSL: ${GSL_INCLUDE_DIRS} ${GSL_LIBRARIES}" )
-  endif( NOT GSL_FIND_QUIETLY )
-else( GSL_FOUND )
-  if( GSL_FIND_REQUIRED )
-    message( FATAL_ERROR "FindGSL: Could not find GSL headers or library" )
-  endif( GSL_FIND_REQUIRED )
-endif( GSL_FOUND )
-
-mark_as_advanced(
-  GSL_CONFIG_EXECUTABLE
-  GSL_INCLUDE_DIR
-  GSL_LIBRARY
-  GSL_CBLAS_LIBRARY
-)
+
+#if(GSL_FOUND)
+#    message( STATUS "Found GSL: GSL_INCLUDE_DIRS=${GSL_INCLUDE_DIRS} GSL_LIBRARIES=${GSL_LIBRARIES}" )
+#else(GSL_FOUND)
+#    if( GSL_FIND_REQUIRED )
+#        message( FATAL_ERROR "FindGSL: Could not find GSL headers or library" )
+#    endif( GSL_FIND_REQUIRED )
+#endif()
 
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
index 8256b0016c9748d709318e4aa6b448644fa090ff..e118d7cdb1c4c77601bccb07e4d6b934637054af 100644
--- a/cmake/modules/SearchInstalledSoftware.cmake
+++ b/cmake/modules/SearchInstalledSoftware.cmake
@@ -30,7 +30,7 @@ endif()
 if(BORNAGAIN_PYTHON OR BORNAGAIN_GUI)
     list(APPEND boost_libraries_required python)
 endif()
-find_package(Boost 1.47.0 COMPONENTS ${boost_libraries_required} REQUIRED)
+find_package(Boost 1.48.0 COMPONENTS ${boost_libraries_required} REQUIRED)
 message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
 message(STATUS "Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}")
 message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
diff --git a/dev-tools/openmpi/batest/batest.cpp b/dev-tools/openmpi/batest/batest.cpp
index e8278ecc421e24527a418599f5bc5c023aaeff10..50f8a3ebdd246c3bb760ec3ed718085ad6b04ba7 100644
--- a/dev-tools/openmpi/batest/batest.cpp
+++ b/dev-tools/openmpi/batest/batest.cpp
@@ -3,6 +3,8 @@
 
 int main()
 {
+    MPI_Init(&argc, &argv);
+
 
     std::cout << "Hello World" << std::endl;
     
diff --git a/dev-tools/openmpi/supermuc.sh b/dev-tools/openmpi/supermuc.sh
index 0a03e5123ea2310b4804f156fc760d10214316d6..c76733ddc41df334eca707b704641c21e17e73f7 100644
--- a/dev-tools/openmpi/supermuc.sh
+++ b/dev-tools/openmpi/supermuc.sh
@@ -2,10 +2,18 @@
 
 
 module load git
-module load gcc/4.5
-module load boost/1.47_gcc
+#module load gcc/4.5
+
+module load gcc/4.7
+module load cmake/2.8
+#module load boost/1.47_gcc
+module load fftw/mpi/3.3
+module load gsl
 
 #export FFTW3=/lrz/sys/libraries/fftw/3.3.3/avx/
-export FFTW3=$FFTW_INC
-export BOOST_ROOT=$BOOST_BASE
+export FFTW3=$FFTW_BASE
+export GSL_DIR=$GSL_BASE
+#export BOOST_ROOT=$BOOST_BASE
+export BOOST_ROOT=/home/hpc/pr87me/di29sok/software/boost_1_55_0.gcc47
+