diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a44474058c2ce51ba80bdd8651fc7d3ba8624a5..c9338c55001604a041d734ca58c67671458b7b51 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,6 @@
 ###############################################################################
 ##                                                                           ##
-##    Genral settings                                                        ##
+##    General settings                                                       ##
 ##                                                                           ##
 ###############################################################################
 
@@ -970,6 +970,71 @@ msvc-14.1_MpiOnly:
       - triggers
 
 
+###############################################################################
+##                                                                           ##
+##    macOS Builds                                                           ##
+##                                                                           ##
+###############################################################################
+
+
+.mac_build_template: &mac_build_definition
+   script:
+      - export NUM_CORES=$(system_profiler SPHardwareDataType | grep 'Total Number of Cores' | awk '{print $5}')
+      - export MAX_BUILD_CORES=$(( $(system_profiler SPHardwareDataType | grep 'Memory' | awk '{print $2}') / 4 ))
+      - "[[ $MAX_BUILD_CORES -lt $NUM_CORES ]] && export NUM_BUILD_CORES=$MAX_BUILD_CORES || export NUM_BUILD_CORES=$NUM_CORES"
+      - c++ --version
+      - cmake --version
+      - mpirun --version
+      - mkdir build
+      - cd build
+      - cmake .. -DWALBERLA_BUILD_TESTS=ON -DWALBERLA_BUILD_BENCHMARKS=ON -DWALBERLA_BUILD_TUTORIALS=ON -DWALBERLA_BUILD_TOOLS=ON -DWALBERLA_BUILD_WITH_MPI=$WALBERLA_BUILD_WITH_MPI -DWALBERLA_BUILD_WITH_PYTHON=$WALBERLA_BUILD_WITH_PYTHON -DWALBERLA_BUILD_WITH_OPENMP=$WALBERLA_BUILD_WITH_OPENMP -DWALBERLA_BUILD_WITH_CUDA=$WALBERLA_BUILD_WITH_CUDA -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -DWARNING_ERROR=ON
+      - cmake . -LAH
+      - make -j $NUM_BUILD_CORES -l $NUM_CORES
+      - ctest -LE $CTEST_EXCLUDE_LABELS -C $CMAKE_BUILD_TYPE --output-on-failure -j $NUM_CORES
+   tags:
+      - mac
+
+mac_Serial_Dbg:
+   <<: *mac_build_definition
+   variables:
+      CMAKE_BUILD_TYPE: "DebugOptimized"
+      CTEST_EXCLUDE_LABELS: "longrun|cuda"
+      WALBERLA_BUILD_WITH_MPI: "OFF"
+      WALBERLA_BUILD_WITH_OPENMP: "OFF"
+      WALBERLA_BUILD_WITH_PYTHON: "ON"
+      WALBERLA_BUILD_WITH_CUDA: "ON"
+
+mac_Serial:
+   <<: *mac_build_definition
+   variables:
+      CMAKE_BUILD_TYPE: "Release"
+      CTEST_EXCLUDE_LABELS: "longrun|cuda"
+      WALBERLA_BUILD_WITH_MPI: "OFF"
+      WALBERLA_BUILD_WITH_OPENMP: "OFF"
+      WALBERLA_BUILD_WITH_PYTHON: "ON"
+      WALBERLA_BUILD_WITH_CUDA: "ON"
+
+mac_MpiOnly_Dbg:
+   <<: *mac_build_definition
+   variables:
+      CMAKE_BUILD_TYPE: "DebugOptimized"
+      CTEST_EXCLUDE_LABELS: "longrun|cuda"
+      WALBERLA_BUILD_WITH_MPI: "ON"
+      WALBERLA_BUILD_WITH_OPENMP: "OFF"
+      WALBERLA_BUILD_WITH_PYTHON: "ON"
+      WALBERLA_BUILD_WITH_CUDA: "ON"
+
+mac_MpiOnly:
+   <<: *mac_build_definition
+   variables:
+      CMAKE_BUILD_TYPE: "Release"
+      CTEST_EXCLUDE_LABELS: "longrun|cuda"
+      WALBERLA_BUILD_WITH_MPI: "ON"
+      WALBERLA_BUILD_WITH_OPENMP: "OFF"
+      WALBERLA_BUILD_WITH_PYTHON: "ON"
+      WALBERLA_BUILD_WITH_CUDA: "ON"
+
+
 ###############################################################################
 ##                                                                           ##
 ##    Deploy jobs                                                            ##
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6ad1c28c18ca6f2b44b4f436bc654ab63d25b2c8..85125dcaf83ccf81a7ef108eb38f92b4b3ee89ed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -360,17 +360,6 @@ if( NOT WARNING_DEPRECATED)
    endif()
 endif()
 
-# Treat warnings as errors
-if ( WARNING_ERROR )
-   if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG )
-      add_flag ( CMAKE_CXX_FLAGS "-pedantic-errors -Werror" )
-   elseif( WALBERLA_CXX_COMPILER_IS_MSVC )
-      add_flag ( CMAKE_CXX_FLAGS "/WX" )
-   elseif ( WALBERLA_CXX_COMPILER_IS_CRAY )
-      add_flag ( CMAKE_CXX_FLAGS "-h error_on_warning" )
-   endif()
-endif ( )
-
 
 if ( WALBERLA_CXX_COMPILER_IS_CLANG )
     add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments" )
@@ -784,18 +773,16 @@ if ( WALBERLA_BUILD_WITH_MPI AND NOT WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER )
       if ( WIN32 )
          message ( STATUS "Enter Workaround Routine for Windows and OpenMPI: PRESS CONFIGURE ONE MORE TIME!" )
          string ( REGEX REPLACE "(.*)/bin/.*" "\\1" MPI_PATH ${MPI_CXX_COMPILER} )
-         find_path ( MPI_INCLUDE_PATH mpi.h
+         find_path ( MPI_C_INCLUDE_PATH mpi.h
             HINTS ${MPI_PATH}
             PATH_SUFFIXES include Inc)
-         set ( MPI_CXX_INCLUDE_PATH ${MPI_INCLUDE_PATH} CACHE FILEPATH "" FORCE )
-         set ( MPI_C_INCLUDE_PATH   ${MPI_INCLUDE_PATH} CACHE FILEPATH "" FORCE )
+         set ( MPI_CXX_INCLUDE_PATH ${MPI_C_INCLUDE_PATH} CACHE FILEPATH "" FORCE )
 
          set ( MPI_CXX_LIBRARIES "MPI_CXX_LIBRARIES-NOTFOUND" CACHE FILEPATH "Cleared" FORCE )
          find_library ( MPI_CXX_LIBRARIES
             NAMES         mpi++ mpicxx cxx mpi_cxx libmpi++ libmpicxx libcxx libmpi_cxx
             HINTS         ${MPI_PATH}
             PATH_SUFFIXES lib )
-         set ( MPI_LIBRARY "MPI_CXX_LIBRARIES" CACHE FILEPATH "" FORCE )
 
          if ( NOT MPI_CXX_LIBRARIES STREQUAL "MPI_CXX_LIBRARIES-NOTFOUND" )
             set ( MPI_CXX_FOUND ON FORCE )
@@ -806,7 +793,6 @@ if ( WALBERLA_BUILD_WITH_MPI AND NOT WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER )
            NAMES         mpi mpich mpich2 msmpi libmpi libmpich libmpich2 libmsmpi
            HINTS         ${MPI_PATH}
            PATH_SUFFIXES lib )
-         set ( MPI_EXTRA_LIBRARY "MPI_C_LIBRARIES" CACHE FILEPATH "" FORCE )
 
          if ( NOT MPI_C_LIBRARIES STREQUAL "MPI_C_LIBRARIES-NOTFOUND" )
             set ( MPI_C_FOUND ON FORCE )
@@ -823,23 +809,14 @@ if ( WALBERLA_BUILD_WITH_MPI AND NOT WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER )
    endif ( )
 
    if ( MPI_FOUND )
-       if ( MPI_CXX_FOUND )
-         include_directories ( SYSTEM ${MPI_CXX_INCLUDE_PATH} ${MPI_C_INCLUDE_PATH} )
-         foreach( LIB ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} )
-           if ( LIB )
-              list ( APPEND SERVICE_LIBS ${LIB} )
-           endif ( )
-         endforeach ( )
-         add_flag ( CMAKE_CXX_FLAGS "${MPI_CXX_COMPILE_FLAGS}" )
-         add_flag ( CMAKE_C_FLAGS   "${MPI_C_COMPILE_FLAGS}" )
-      else ( ) # For older CMake versions
-         include_directories ( SYSTEM ${MPI_INCLUDE_PATH} )
-         list ( APPEND SERVICE_LIBS ${MPI_LIBRARY} )
-         if ( MPI_EXTRA_LIBRARY )
-            list ( APPEND SERVICE_LIBS ${MPI_EXTRA_LIBRARY} )
+     include_directories ( SYSTEM ${MPI_CXX_INCLUDE_PATH} ${MPI_C_INCLUDE_PATH} )
+     foreach( LIB ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} )
+         if ( LIB )
+            list ( APPEND SERVICE_LIBS ${LIB} )
          endif ( )
-         add_flag ( CMAKE_C_FLAGS "${MPI_COMPILE_FLAGS}" )
-      endif ( )
+     endforeach ( )
+     add_flag ( CMAKE_CXX_FLAGS "${MPI_CXX_COMPILE_FLAGS}" )
+     add_flag ( CMAKE_C_FLAGS   "${MPI_C_COMPILE_FLAGS}" )
 
      add_flag ( CMAKE_MODULE_LINKER_FLAGS "${MPI_CXX_LINK_FLAGS}" )
      add_flag ( CMAKE_EXE_LINKER_FLAGS    "${MPI_CXX_LINK_FLAGS}" )
@@ -847,7 +824,7 @@ if ( WALBERLA_BUILD_WITH_MPI AND NOT WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER )
 
      # When using Intel MPI, mpi.h has to be included before including the standard library
      # therefore we use the -include flag to enforce this.
-     if ( MPI_INCLUDE_PATH MATCHES "intel" )
+     if ( MPI_C_INCLUDE_PATH MATCHES "intel" )
          message (STATUS "Activating IntelMPI include workaround for mpi.h" )
          add_flag ( CMAKE_CXX_FLAGS "-include mpi.h" )
          add_flag ( CMAKE_C_FLAGS   "-include mpi.h" )
@@ -1233,7 +1210,23 @@ if ( WALBERLA_BUILD_WITH_LTO  )
    endif( )
 
 endif ( )
+
 ############################################################################################################################
+##
+##  Some more compiler flags that need to happen after any try_compile (e.g. inside FindMPI)
+##
+############################################################################################################################
+
+# Treat warnings as errors
+if ( WARNING_ERROR )
+   if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG )
+      add_flag ( CMAKE_CXX_FLAGS "-pedantic-errors -Werror" )
+   elseif( WALBERLA_CXX_COMPILER_IS_MSVC )
+      add_flag ( CMAKE_CXX_FLAGS "/WX" )
+   elseif ( WALBERLA_CXX_COMPILER_IS_CRAY )
+      add_flag ( CMAKE_CXX_FLAGS "-h error_on_warning" )
+   endif()
+endif ( )
 
 ############################################################################################################################
 ##
diff --git a/src/python_coupling/Manager.cpp b/src/python_coupling/Manager.cpp
index 264ba49b6eaa356cac7579415bfea13c5bb01d24..9ccf4a597e06b5a80f0346702484112ecdbd41f1 100644
--- a/src/python_coupling/Manager.cpp
+++ b/src/python_coupling/Manager.cpp
@@ -75,11 +75,9 @@ void Manager::addPath( const std::string & path )
 {
    WALBERLA_ASSERT( initialized_ );
 
-   object main_module  = import("__main__");
-   dict globals = extract<dict>( main_module.attr( "__dict__" ) );
-   exec( "import sys", globals );
-   std::string pathCommand = std::string ( "sys.path.append( \"") + path + "\" ) ";
-   exec( str(pathCommand), globals );
+   object sys = import("sys");
+   list sys_path = extract<list>( sys.attr("path") );
+   sys_path.append(path);
 }
 
 void Manager::triggerInitialization()
@@ -116,10 +114,24 @@ void Manager::triggerInitialization()
 
    }
    catch ( boost::python::error_already_set & ) {
-      PyErr_Print();
+      PyObject *type_ptr = NULL, *value_ptr = NULL, *traceback_ptr = NULL;
+      PyErr_Fetch(&type_ptr, &value_ptr, &traceback_ptr);
+
+      if( type_ptr )
+      {
+         extract<std::string> type_str(( str( handle<>( type_ptr ) ) ));
+         if( type_str.check() )
+            WALBERLA_LOG_DEVEL( type_str() );
+      }
+      if(value_ptr)
+      {
+         extract<std::string> value_str(( str( handle<>( value_ptr ) ) ));
+         if ( value_str.check() )
+            WALBERLA_LOG_DEVEL( value_str() );
+      }
+
       WALBERLA_ABORT( "Error while initializing Python" );
    }
-
 }
 
 
@@ -159,4 +171,3 @@ int someSymbolSoThatLinkerDoesNotComplain=0;
 
 
 
-