diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40d3181bd3886af7cea7b1f875c08304f0e2e92a..13040a15040fc6bd97336034777d1c51ebc54c8f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,7 +39,8 @@ set(CMAKE_MODULE_PATH "${FAIRROOTPATH}/share/fairbase/cmake/modules_old" ${CMAKE
 set(CMAKE_MODULE_PATH "${FAIRROOTPATH}/share/fairbase/cmake/modules"  ${CMAKE_MODULE_PATH})
 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
 
-set(CMAKE_PREFIX_PATH "$ENV{SIMPATH}/share/cmake/ZeroMQ" ${CMAKE_PREFIX_PATH})
+#set(CMAKE_PREFIX_PATH "$ENV{SIMPATH}/share/cmake/ZeroMQ" ${CMAKE_PREFIX_PATH})
+set(CMAKE_PREFIX_PATH $ENV{SIMPATH} ${CMAKE_PREFIX_PATH})
 
 # Check if the compiler support specific C++11 features
 # Up to now this is only a check since the code does not use
@@ -87,7 +88,13 @@ EndIf()
 Execute_process(COMMAND $ENV{SIMPATH}/bin/fairsoft-config --cxxflags OUTPUT_VARIABLE _res_fairsoft_config OUTPUT_STRIP_TRAILING_WHITESPACE)
 String(FIND ${_res_fairsoft_config} "-std=c++11" POS_C++11)
 If(${POS_C++11} EQUAL -1)
-  Message(FATAL_ERROR "FairSoft wasn't compiled with c++11 support. Please recompile FairSoft with a compiler which supports c++11.")
+  String(FIND ${_res_fairsoft_config} "-std=c++14" POS_C++11)
+  If(${POS_C++11} EQUAL -1)
+    String(FIND ${_res_fairsoft_config} "-std=c++17" POS_C++11)
+    If(${POS_C++11} EQUAL -1)
+      Message(FATAL_ERROR "FairSoft wasn't compiled with support for c++11 or above. Please recompile FairSoft with a compiler which supports c++11, c++14 or c++17.")
+    EndIf()
+  EndIf()
 EndIf()
 
 Execute_process(COMMAND $ENV{SIMPATH}/bin/fairsoft-config --root-version OUTPUT_VARIABLE _res_root_version OUTPUT_STRIP_TRAILING_WHITESPACE)
@@ -174,6 +181,9 @@ If(CMAKE_BUILD_TYPE MATCHES CONTINUOUS)
   Message("C_FLAGS: ${CMAKE_C_FLAGS_CONTINUOUS}")
 EndIf()
 Check_Compiler()
+if(APPLE)
+  SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -single_module -undefined dynamic_lookup")
+endif()
 set(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} "CONTINUOUS" "FullWarnings")
 #Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wshadow -Weffc++ -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare -Wno-ignored-qualifiers -Wno-overloaded-virtual")
 #Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything -Wno-padded -Wno-global-constructors")
@@ -236,6 +246,18 @@ if(CBMROOT_MINIMAL)
   find_package(ROOT 6.00.00 REQUIRED)
 else(CBMROOT_MINIMAL)
   find_package(ROOT 6.00.00 REQUIRED)
+  if("${ROOT_VERSION_MAJOR}.${ROOT_VERSION_MINOR}" VERSION_GREATER 6.16)
+    Execute_Process(COMMAND ${ROOT_CONFIG_EXECUTABLE} --has-vmc
+                    OUTPUT_VARIABLE ROOT_vmc_FOUND
+                   )
+    String(STRIP ${ROOT_vmc_FOUND} ROOT_vmc_FOUND)
+    If(NOT ROOT_vmc_FOUND)
+      find_package2(PUBLIC VMC REQUIRED)
+      message("VMC_INCLUDE_DIRS: ${VMC_INCLUDE_DIRS}")
+      set(VMCLIB VMCLibrary)
+    endif()
+  endif()
+
   find_package(GEANT3 REQUIRED)
   find_package(GEANT4)
   find_package(GEANT4DATA)
@@ -266,9 +288,23 @@ else(CBMROOT_MINIMAL)
 
   Message("-- Looking for GSL ...")
   find_package(GSL)
+  if(NOT GSL_FOUND)
+    if(APPLE)
+      set(GSL_DIR /usr/local)
+    else()
+      unset(GSL_DIR)
+    endif()
+    find_package(GSL)
+  endif()
   Find_Package(FairLogger)
   Find_Package(FairMQ)
-
+  if(FAIRMQ_FOUND)
+    if(EXISTS ${FAIRMQ_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}FairMQStateMachine${CMAKE_SHARED_LIBRARY_SUFFIX})
+      set(FairMQ_HAS_StateMachine TRUE)
+    else()
+      set(FairMQ_HAS_StateMachine FALSE)
+    endif()
+  endif()
 endif(CBMROOT_MINIMAL)
 
 # set a variable which should be used in all CMakeLists.txt
@@ -284,6 +320,7 @@ Set(BASE_INCLUDE_DIRECTORIES
 ${BASE_INCLUDE_DIRECTORIES}
 ${SYSTEM_INCLUDE_DIRECTORIES}
 ${FAIRLOGGER_INCLUDE_DIR}
+${VMC_INCLUDE_DIRS}
 )
 
 # Set the library version in the main CMakeLists.txt
@@ -321,9 +358,15 @@ If(BUILD_UNITTESTS)
   Message("Build the unit tests.")
 
   Set(GTEST_ROOT ${SIMPATH})
-  Find_Package(GTest)
-
-EndIf(BUILD_UNITTESTS)
+    find_package2(PRIVATE GTest VERSION 1.7.0)
+    if(NOT GTEST_FOUND)
+      Message(STATUS "No gtest installation found, build our internal one.")
+      Include(external/InstallGtest.cmake)
+      set(CBM_LOCAL_GTEST TRUE)
+    else()
+      set(CBM_LOCAL_GTEST FALSE)
+    endif()
+endif()
 
 ### Subdirectories to be compiled #####
 
diff --git a/MQ/CMakeLists.txt b/MQ/CMakeLists.txt
index 0062e61c1bc1492d0b18143426a3d9b0e1486ff1..9e0a8c039dd2db110b1d97007c7f62d23683e40c 100644
--- a/MQ/CMakeLists.txt
+++ b/MQ/CMakeLists.txt
@@ -2,6 +2,13 @@ If(FairSoft_VERSION VERSION_LESS 18.6.0)
   Add_Definitions(-DHAVE_FAIRMQSTATEMACHINE)
 EndIf()
 
+
+if(FairMQ_HAS_StateMachine)
+  Set(FAIRMQ_LIBS FairMQStateMachine FairMQ)
+else()
+  Set(FAIRMQ_LIBS FairMQ)
+EndIf()
+
 add_subdirectory(base)
 add_subdirectory(source)
 add_subdirectory(sink)
diff --git a/MQ/hitbuilder/CMakeLists.txt b/MQ/hitbuilder/CMakeLists.txt
index e20c7ecf367a96d418d98dd2f6d31f0559359bd1..6fcd79e8f98a0d767dfb48cd041b3c38b80e7392 100644
--- a/MQ/hitbuilder/CMakeLists.txt
+++ b/MQ/hitbuilder/CMakeLists.txt
@@ -18,6 +18,7 @@ Set(SYSTEM_INCLUDE_DIRECTORIES
     ${FAIRROOT_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}/options
+    ${VMC_INCLUDE_DIRS}
 
     ${IPC_INCLUDE_DIRECTORY}
     ${CBMROOT_SOURCE_DIR}/external/cppzmq        
@@ -50,7 +51,7 @@ EndIf()
 set(FAIR_LIBS
   Base
   ParBase
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 
diff --git a/MQ/mcbm/CMakeLists.txt b/MQ/mcbm/CMakeLists.txt
index ec451731599835268773defde97a5456ca4c4986..3d0afdd0c4a00ddd1fdc68d92274bddd1bddc08f 100644
--- a/MQ/mcbm/CMakeLists.txt
+++ b/MQ/mcbm/CMakeLists.txt
@@ -33,6 +33,7 @@ Set(SYSTEM_INCLUDE_DIRECTORIES
     ${FAIRROOT_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}/options
+    ${VMC_INCLUDE_DIRS}
 
     ${IPC_INCLUDE_DIRECTORY}
     ${CBMROOT_SOURCE_DIR}/external/cppzmq
@@ -63,7 +64,7 @@ If(UNIX AND NOT APPLE)
 EndIf()
 
 set(FAIR_LIBS
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/MQ/monitor/CMakeLists.txt b/MQ/monitor/CMakeLists.txt
index a1d5fbd18171ad9938d99dae59b884ee4c7c1bee..d4b12b308c51c29c1d2950a8cf5ab805f480b962 100644
--- a/MQ/monitor/CMakeLists.txt
+++ b/MQ/monitor/CMakeLists.txt
@@ -53,7 +53,7 @@ If(UNIX AND NOT APPLE)
 EndIf()
 
 set(FAIR_LIBS
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/MQ/parmq/CMakeLists.txt b/MQ/parmq/CMakeLists.txt
index 831a2404ede4cdb108b9ecb88155c3c5a092a20f..c1de1a42c6b3b20170ef89d7bb1f06bb52629b7b 100644
--- a/MQ/parmq/CMakeLists.txt
+++ b/MQ/parmq/CMakeLists.txt
@@ -39,7 +39,7 @@ EndIf()
 set(FAIR_LIBS
   Base
   ParBase
-  FairMQ
+  ${FAIRMQ_LIBS}
   Gen
 )
 
diff --git a/MQ/sink/CMakeLists.txt b/MQ/sink/CMakeLists.txt
index d0e18c433e41b9ae5c04cd00e12c958ad9545ae1..0a4294d30f866cd484ba2934abe3444aca1abb4f 100644
--- a/MQ/sink/CMakeLists.txt
+++ b/MQ/sink/CMakeLists.txt
@@ -41,7 +41,7 @@ If(UNIX AND NOT APPLE)
 EndIf()
 
 set(FAIR_LIBS
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/MQ/source/CMakeLists.txt b/MQ/source/CMakeLists.txt
index f095b40e90ca1d7133eb5ee678378c1cde6be06b..f421ef36894c8c83eed66245c59b3b16635c0b13 100644
--- a/MQ/source/CMakeLists.txt
+++ b/MQ/source/CMakeLists.txt
@@ -24,6 +24,7 @@ Set(SYSTEM_INCLUDE_DIRECTORIES
     ${FAIRROOT_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}
     ${FAIRMQ_INCLUDE_DIR}/options
+    ${VMC_INCLUDE_DIRS}
 
     ${IPC_INCLUDE_DIRECTORY}
     ${CBMROOT_SOURCE_DIR}/external/cppzmq
@@ -56,7 +57,7 @@ If(UNIX AND NOT APPLE)
 EndIf()
 
 set(FAIR_LIBS
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/MQ/sts/CMakeLists.txt b/MQ/sts/CMakeLists.txt
index 34f8d1d32b09b2ca413426b7abb8da3b25eb0e5b..4ef2cb396c7254f4d72b652fb2a119e2c672e029 100644
--- a/MQ/sts/CMakeLists.txt
+++ b/MQ/sts/CMakeLists.txt
@@ -43,7 +43,7 @@ If(UNIX AND NOT APPLE)
 EndIf()
 
 set(FAIR_LIBS
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/MQ/unpacker/CMakeLists.txt b/MQ/unpacker/CMakeLists.txt
index a7ededc4ca46400cf78897b6ad2cde8a5c163bb5..4d2da7356a8ec4af597c65a109636ab040f837cc 100644
--- a/MQ/unpacker/CMakeLists.txt
+++ b/MQ/unpacker/CMakeLists.txt
@@ -51,7 +51,7 @@ EndIf()
 set(FAIR_LIBS
   Base
   ParBase
-  FairMQ
+  ${FAIRMQ_LIBS}
 )
 
 If(FAIRLOGGER_FOUND)
diff --git a/cmake/modules/CbmMacros.cmake b/cmake/modules/CbmMacros.cmake
index 4f00a684f9baab6ff408648bccd60b892b02b746..bc3de5b8661dea909bf08ad3a217301caaf266c3 100644
--- a/cmake/modules/CbmMacros.cmake
+++ b/cmake/modules/CbmMacros.cmake
@@ -120,7 +120,7 @@ EndMacro(Gen_Exe_Script)
 
 function(download_project_if_needed)
   include(DownloadProject)
-  set(oneValueArgs PROJECT GIT_REPOSITORY GIT_TAG GIT_STASH SOURCE_DIR TEST_FILE)
+  set(oneValueArgs PROJECT GIT_REPOSITORY GIT_TAG GIT_STASH SOURCE_DIR TEST_FILE PATCH_COMMAND)
   cmake_parse_arguments(MY "" "${oneValueArgs}"
                        "" ${ARGN} )
 
@@ -131,6 +131,7 @@ function(download_project_if_needed)
                      GIT_REPOSITORY  ${MY_GIT_REPOSITORY}
                      GIT_TAG         ${MY_GIT_TAG}
                      SOURCE_DIR      ${MY_SOURCE_DIR}
+                     PATCH_COMMAND   ${MY_PATCH_COMMAND}
                     )
   Else()
     Execute_process(COMMAND git rev-parse HEAD
@@ -147,6 +148,7 @@ function(download_project_if_needed)
                        GIT_REPOSITORY  ${MY_GIT_REPOSITORY}
                        GIT_TAG         ${MY_GIT_TAG}
                        SOURCE_DIR      ${MY_SOURCE_DIR}
+                       PATCH_COMMAND   ${MY_PATCH_COMMAND}
                       )
       Set(ProjectUpdated TRUE PARENT_SCOPE)
     EndIf()
diff --git a/core/data/test/CMakeLists.txt b/core/data/test/CMakeLists.txt
index e6227412df60ef88569349c0558f29fce3e8542a..cfac7db73dc8d7124a7e0358f465fc99cd3e6f85 100644
--- a/core/data/test/CMakeLists.txt
+++ b/core/data/test/CMakeLists.txt
@@ -4,6 +4,9 @@ Macro(CreateGTestExeAndAddTest _testname _includeDirs _linkDirs _sources _depend
   Link_Directories(${_linkDirs})
 
   Add_Executable(${_testname} ${_sources})
+  if(CBM_LOCAL_GTEST)
+    Add_Dependencies(${_testname} GTEST)
+  endif()
   Target_Link_Libraries(${_testname} ${_dependencies})
   Gen_Exe_Script(${_testname})
   string(REPLACE ${PROJECT_SOURCE_DIR}
@@ -27,6 +30,7 @@ Set(INCLUDE_DIRECTORIES
   ${CBMDATA_DIR}/rich
   ${CBMDATA_DIR}/much
   ${BASE_INCLUDE_DIRECTORIES}
+  ${GTEST_INCLUDE_DIR}
 )
 
 MESSAGE("FAIRROOT_LIBRARY_DIR: ${FAIRROOT_LIBRARY_DIR}")
diff --git a/core/data/test/psd/CMakeLists.txt b/core/data/test/psd/CMakeLists.txt
index 5875aa26a46279f2812d9a36bb20b4b9aaa83f1e..db9e7061bd97ab4568c962a38f39df2b3149b7fb 100644
--- a/core/data/test/psd/CMakeLists.txt
+++ b/core/data/test/psd/CMakeLists.txt
@@ -3,6 +3,7 @@ Set(INCLUDE_DIRECTORIES
   ${CBMDATA_DIR}/psd
   ${CBMDATA_DIR}/test
   ${BASE_INCLUDE_DIRECTORIES}
+  ${GTEST_INCLUDE_DIR}
 )
 
 MESSAGE("FAIRROOT_LIBRARY_DIR: ${FAIRROOT_LIBRARY_DIR}")
diff --git a/core/data/test/trd/CMakeLists.txt b/core/data/test/trd/CMakeLists.txt
index 27c4b726be7c6ce0afcc7159447a8221c1954af9..f036e8aabd9742dc4c88344fc4b66597f21caf59 100644
--- a/core/data/test/trd/CMakeLists.txt
+++ b/core/data/test/trd/CMakeLists.txt
@@ -3,6 +3,7 @@ Set(INCLUDE_DIRECTORIES
   ${CBMDATA_DIR}/trd
   ${CBMDATA_DIR}/test
   ${BASE_INCLUDE_DIRECTORIES}
+  ${GTEST_INCLUDE_DIR}
 )
 
 MESSAGE("FAIRROOT_LIBRARY_DIR: ${FAIRROOT_LIBRARY_DIR}")
diff --git a/external/.gitignore b/external/.gitignore
index b33bb370cdaa1529c38754b3563e7ccc13a7841e..46ed7f281609d69afe247127d2ba51a44562b7f2 100644
--- a/external/.gitignore
+++ b/external/.gitignore
@@ -10,4 +10,5 @@ ipc/ipc
 ipc_legacy/ipc
 jsroot
 spadic/spadic
+googletest
 
diff --git a/external/InstallGtest.cmake b/external/InstallGtest.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e5482efb5c852c5413d71db3fff3be053361279a
--- /dev/null
+++ b/external/InstallGtest.cmake
@@ -0,0 +1,59 @@
+# Build GTEST as external project
+set(_LIBDIR_DEFAULT "lib")
+
+set(Gtest_DESTDIR "${CMAKE_BINARY_DIR}/GTEST-prefix")
+set(Gtest_ROOTDIR "${Gtest_DESTDIR}/${CMAKE_BINARY_DIR}")
+set(Gtest_LIBNAME "${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set(Gtest_LIBRARY "${Gtest_ROOTDIR}/${_LIBDIR_DEFAULT}/${Gtest_LIBNAME}")
+
+set(Gtest_VERSION 870a6b5563e065b4b9fc3b633c4015ee17d2cbaa) # Hash
+set(Gtest_SRC_URL "https://github.com/google/googletest")
+
+download_project_if_needed(PROJECT         gtest_source
+                           GIT_REPOSITORY  ${Gtest_SRC_URL}
+                           GIT_TAG         ${Gtest_VERSION}
+                           SOURCE_DIR      ${CMAKE_SOURCE_DIR}/external/googletest
+                           TEST_FILE       CMakeLists.txt
+                          )
+If(ProjectUpdated)
+  File(REMOVE_RECURSE ${Gtest_DESTDIR})
+  Message("GTEST source directory was changed so build directory was deleted")
+EndIf()
+
+ExternalProject_Add(GTEST
+  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/googletest
+  BUILD_IN_SOURCE 0
+  BUILD_BYPRODUCTS ${Gtest_LIBRARY}
+  LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1
+  CMAKE_ARGS -G ${CMAKE_GENERATOR}
+             -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+             -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+             -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+             -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+             -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+             -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
+  INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
+)
+
+add_library(Gtest STATIC IMPORTED)
+set_target_properties(Gtest PROPERTIES IMPORTED_LOCATION ${Gtest_LIBRARY})
+add_dependencies(Gtest GTEST)
+
+set(GTEST_LIBRARIES gtest)
+set(GTEST_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
+set(GTEST_LIBRARY  ${CMAKE_BINARY_DIR}/${_LIBDIR_DEFAULT}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX})
+set(GTEST_MAIN_LIBRARY ${CMAKE_BINARY_DIR}/${_LIBDIR_DEFAULT}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
+set(GTEST_BOTH_LIBRARIES "${GTEST_LIBRARY};${GTEST_MAIN_LIBRARY}")
+
+Include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GTEST
+  FOUND_VAR GTEST_FOUND
+  REQUIRED_VARS GTEST_INCLUDE_DIR GTEST_LIBRARY GTEST_MAIN_LIBRARY GTEST_BOTH_LIBRARIES
+)
+
+install(DIRECTORY ${Gtest_ROOTDIR}/ DESTINATION ".")
+
+#if(GTEST_FOUND)
+#  set(GTEST_INCLUDE_DIRS ${Gtest_INCLUDE_DIR})
+#  set(GTEST_LIB_DIR ${Gtest_ROOTDIR}/${_LIBDIR_DEFAULT})
+#endif()
diff --git a/external/InstallNicaFemto.cmake b/external/InstallNicaFemto.cmake
index d80028c235cf7dc3a78046839c28247351b283fb..0b96c1f9fa5925e580292c14366640ea2fa9cc12 100644
--- a/external/InstallNicaFemto.cmake
+++ b/external/InstallNicaFemto.cmake
@@ -13,6 +13,7 @@ download_project_if_needed(PROJECT         NicaFemto_source
                            GIT_REPOSITORY  ${NICAFEMTO_SRC_URL}
                            GIT_TAG         ${NICAFEMTO_VERSION}
                            SOURCE_DIR      ${CMAKE_CURRENT_SOURCE_DIR}/NicaFemto
+                           PATCH_COMMAND   "patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/NicaFemto.patch"
                           )
 
 If(ProjectUpdated)
diff --git a/external/NicaFemto.patch b/external/NicaFemto.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9ba0a9d75ff2f050ce65b55d70154efaf5fc22cc
--- /dev/null
+++ b/external/NicaFemto.patch
@@ -0,0 +1,26 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 60ab7e6..b70ab36 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -52,7 +52,11 @@ if(NOT DEFINED NICAFEMTO_SUBDIR_BUILD)
+ 	If(NOT _HAS_CXX11_FLAG)
+ 	  Message(FATAL_ERROR "The used C++ compiler (${CMAKE_CXX_COMPILER}) does not support C++11. NicaFemto can only be compiled with compilers supporting C++11. Please install such an compiler.")
+ 	EndIf()
+-	
++
++        if(APPLE)
++          SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -single_module -undefined dynamic_lookup")
++        endif()
++
+         Execute_process(COMMAND $ENV{SIMPATH}/bin/fairsoft-config --cxxflags OUTPUT_VARIABLE _res_fairsoft_config OUTPUT_STRIP_TRAILING_WHITESPACE)
+         String(FIND ${_res_fairsoft_config} "-std=c++11" POS_C++11)
+         If(${POS_C++11} EQUAL -1)
+@@ -131,7 +135,7 @@ if(NOT DEFINED NICAFEMTO_SUBDIR_BUILD)
+           if(APPLE)
+             set(GSL_DIR /usr/local)
+           else()
+-            unset(GSL_DIR)
++            set(GSL_DIR /usr)
+           endif()
+           find_package(GSL REQUIRED)
+         endif()
diff --git a/tutorials/TaskToAlgo/CMakeLists.txt b/tutorials/TaskToAlgo/CMakeLists.txt
index 17db4e8e77164a99187c6513d3f809688f2d305e..a10bb2af7fba9dbfbdf156345b9126dca3cdc1a4 100644
--- a/tutorials/TaskToAlgo/CMakeLists.txt
+++ b/tutorials/TaskToAlgo/CMakeLists.txt
@@ -82,9 +82,11 @@ If(UNIX AND NOT APPLE)
   List(APPEND BOOST_LIBS pthread)
 EndIf()
 
-set(FAIR_LIBS
-  FairMQ
-)
+if(FairMQ_HAS_StateMachine)
+  Set(FAIR_LIBS FairMQStateMachine FairMQ)
+else()
+  Set(FAIR_LIBS FairMQ)
+EndIf()
 
 If(FAIRLOGGER_FOUND)
   set(FAIR_LIBS