diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7d15cc55af127877043090f7342ebd7dca68928c..b7b453d09aad6ef7262b520e34237e52f1b67d8d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -68,11 +68,11 @@ include(GetFilenameComponent) # overwrite CMake command
 include(CheckCompiler)
 include(Dependences)
 if(ZERO_TOLERANCE)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wfatal-errors")
+    string(APPEND CMAKE_CXX_FLAGS " -Werror -Wfatal-errors")
 endif()
 if(BORNAGAIN_GUI)
     include(SearchQt)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_QT=ON")
+    string(APPEND CMAKE_CXX_FLAGS " -DHAVE_QT=ON")
 endif()
 include(BornAgainConfiguration)
 include(GeneratePythonDocs)
diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index a6cdd7d869dbf59833be88205d1c26f90eeb87ea..2c90cb7a7a1b07868d1b328a5a232010178caeb7 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -14,7 +14,7 @@ if((NOT Cerf_IS_CPP) AND (NOT WIN32)) # TEMPORARY
     list(APPEND source_files ${CMAKE_SOURCE_DIR}/ThirdParty/Core/cerf_wrapper/cerf_ptr.c)
 endif()
 if(${Cerf_IS_CPP})
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCERF_AS_CPP=ON")
+    string(APPEND CMAKE_CXX_FLAGS " -DCERF_AS_CPP=ON")
 endif()
 
 
@@ -87,7 +87,7 @@ endif(BORNAGAIN_PYTHON)
 # --- making library ---
 
 if(WIN32)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBA_CORE_BUILD_DLL")
+    string(APPEND CMAKE_CXX_FLAGS " -DBA_CORE_BUILD_DLL")
 endif()
 
 add_library(${lib} SHARED ${source_files})
diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index 7740e36b4ae58e38695578e5514fe83ad7290447..da0970c54be8289da6266b9a7ccd0086b0d59222 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -81,7 +81,7 @@ endif(BORNAGAIN_PYTHON)
 # --- making library ---
 
 if(WIN32)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBA_CORE_BUILD_DLL")
+    string(APPEND CMAKE_CXX_FLAGS " -DBA_CORE_BUILD_DLL")
 endif()
 
 add_library(${lib} SHARED ${source_files})
diff --git a/GUI/coregui/CMakeLists.txt b/GUI/coregui/CMakeLists.txt
index 503528b98fdc61012b9a645d996c8eea1b0f156b..965d4b8b2dc308dffe9c56556e9ec375dd6f65b2 100644
--- a/GUI/coregui/CMakeLists.txt
+++ b/GUI/coregui/CMakeLists.txt
@@ -77,7 +77,7 @@ if(BORNAGAIN_CRASHHANDLER)
 endif()
 
 if(WIN32)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBA_CORE_BUILD_DLL")
+    string(APPEND CMAKE_CXX_FLAGS " -DBA_CORE_BUILD_DLL")
 endif()
 
 
diff --git a/Tests/UnitTests/Numeric/CMakeLists.txt b/Tests/UnitTests/Numeric/CMakeLists.txt
index dcf378af198be025a4f0b606cb18bf1f977541d3..66bdd0c0fa8060787581a34cdf65c4859433b585 100644
--- a/Tests/UnitTests/Numeric/CMakeLists.txt
+++ b/Tests/UnitTests/Numeric/CMakeLists.txt
@@ -3,7 +3,7 @@ include(GoogleTest) # provides gtest_discover_tests
 set(test UnitTestNumeric)
 
 if(MSVC)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_LINKED_AS_SHARED_LIBRARY=1")
+    string(APPEND CMAKE_CXX_FLAGS " -DGTEST_LINKED_AS_SHARED_LIBRARY=1")
 endif()
 
 file(GLOB source_files "*.cpp" ${CMAKE_SOURCE_DIR}/Tests/GTestWrapper/TestAll.cpp)
diff --git a/cmake/extensions/CoverageFunction.cmake b/cmake/extensions/CoverageFunction.cmake
index 96ae3108af41982c1122a4e8e7f75cc57de1aee6..17f3aaebdec671fe0bd9dfae5741a48e9954985d 100644
--- a/cmake/extensions/CoverageFunction.cmake
+++ b/cmake/extensions/CoverageFunction.cmake
@@ -38,13 +38,13 @@ else()
 endif()
 
 if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -coverage")
+    string(APPEND CMAKE_C_FLAGS " -coverage")
 else()
     message(ERROR "C compiler is not GNU; don't know how to set code coverage flags!")
 endif()
 
 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -coverage")
+    string(APPEND CMAKE_CXX_FLAGS " -coverage")
 else()
     message(ERROR "CXX compiler is not GNU; don't know how to set code coverage flags!")
 endif()
diff --git a/cmake/extensions/DebugOptimization.cmake b/cmake/extensions/DebugOptimization.cmake
index 0a19de98457f72f5a71a9695bce94ccdb618d0d9..6683d7172d323bc240e6816913b4fae36637da69 100644
--- a/cmake/extensions/DebugOptimization.cmake
+++ b/cmake/extensions/DebugOptimization.cmake
@@ -17,13 +17,13 @@
 #
 
 if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og")
+  string(APPEND CMAKE_C_FLAGS " -Og")
 else()
   message(WARNING "C compiler is not GNU; debug optimization has no effect")
 endif()
 
 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
+  string(APPEND CMAKE_CXX_FLAGS " -Og")
 else()
   message(WARNING "C compiler is not GNU; debug optimization has no effect")
 endif()
diff --git a/cmake/modules/BornAgainConfiguration.cmake b/cmake/modules/BornAgainConfiguration.cmake
index 38e37a2c9e351665405c649b1560596844d92c69..b2731756514ec2f393df46fca6da842c36feb4dd 100644
--- a/cmake/modules/BornAgainConfiguration.cmake
+++ b/cmake/modules/BornAgainConfiguration.cmake
@@ -117,7 +117,7 @@ endif()
 configure_file(${CONFIGURABLES_DIR}/BAVersion.h.in  ${BUILD_INC_DIR}/BAVersion.h @ONLY)
 configure_file(${CONFIGURABLES_DIR}/BABuild.h.in  ${BUILD_INC_DIR}/BABuild.h @ONLY)
 configure_file(${CONFIGURABLES_DIR}/BATesting.h.in  ${BUILD_INC_DIR}/BATesting.h @ONLY)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${BUILD_INC_DIR}")
+string(APPEND CMAKE_CXX_FLAGS " -I${BUILD_INC_DIR}")
 
 configure_file(${CMAKE_SOURCE_DIR}/Examples/python/utils/plot_intensity_data.py
     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plot_intensity_data.py COPYONLY)
diff --git a/cmake/modules/CheckCompiler.cmake b/cmake/modules/CheckCompiler.cmake
index 8a0c88c44b025cf136e5d726914d9ea62a19cf3e..1d6bd9de095e34075b21a30c3d68d927b5f9aa13 100644
--- a/cmake/modules/CheckCompiler.cmake
+++ b/cmake/modules/CheckCompiler.cmake
@@ -32,11 +32,11 @@ message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
 
 set(all_cxx_flags ${CMAKE_CXX_FLAGS})
 if(CMAKE_BUILD_TYPE STREQUAL "Release")
-    set(all_cxx_flags "${all_cxx_flags} ${CMAKE_CXX_FLAGS_RELEASE}")
+    string(APPEND all_cxx_flags " ${CMAKE_CXX_FLAGS_RELEASE}")
 elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
-    set(all_cxx_flags "${all_cxx_flags} ${CMAKE_CXX_FLAGS_DEBUG}")
+    string(APPEND all_cxx_flags " ${CMAKE_CXX_FLAGS_DEBUG}")
 elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
-    set(all_cxx_flags "${all_cxx_flags} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+    string(APPEND all_cxx_flags " ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
 endif()
 
 message(STATUS "Compiler Flags: ${all_cxx_flags}")
diff --git a/cmake/modules/SetUpLinux.cmake b/cmake/modules/SetUpLinux.cmake
index aeaa68e225788f2681a63ec5f1b23988b9096972..2f482eea00075e9c0b7430db478bb8cd8b962ea3 100644
--- a/cmake/modules/SetUpLinux.cmake
+++ b/cmake/modules/SetUpLinux.cmake
@@ -19,6 +19,6 @@ set(CMAKE_C_FLAGS_RELWITHDEBINFO   "-O2 -g")
 set(CMAKE_C_FLAGS_RELEASE          "-O3")
 set(CMAKE_C_FLAGS_DEBUG            "-g")
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SOURCE_DIR}/Wrap -pipe ${BIT_ENVIRONMENT} -Wall -W -Woverloaded-virtual -Wno-unknown-pragmas -fPIC")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe ${BIT_ENVIRONMENT} -Wall -W -fPIC")
+string(APPEND CMAKE_CXX_FLAGS " -I${CMAKE_SOURCE_DIR}/Wrap -pipe ${BIT_ENVIRONMENT} -Wall -W -Woverloaded-virtual -Wno-unknown-pragmas -fPIC")
+string(APPEND CMAKE_C_FLAGS " -pipe ${BIT_ENVIRONMENT} -Wall -W -fPIC")
 set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined")
diff --git a/cmake/modules/SetUpMacOS.cmake b/cmake/modules/SetUpMacOS.cmake
index 485649d818a0ea4eb80561b8b904cf55abafbb73..6e6867d0d4e531d77716c343866f15c32b1a04f8 100644
--- a/cmake/modules/SetUpMacOS.cmake
+++ b/cmake/modules/SetUpMacOS.cmake
@@ -21,16 +21,16 @@ if (CMAKE_SYSTEM_NAME MATCHES Darwin)
        MESSAGE(STATUS "Found a 64bit system")
        set(BORNAGAIN_ARCHITECTURE macosx64)
        SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
-       SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -m64")
-       SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -m64")
-       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
-       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
-       SET(CMAKE_FORTRAN_FLAGS "${CMAKE_FORTRAN_FLAGS} -m64")
+       string(APPEND CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS " -m64")
+       string(APPEND CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS " -m64")
+       string(APPEND CMAKE_CXX_FLAGS " -m64")
+       string(APPEND CMAKE_C_FLAGS " -m64")
+       string(APPEND CMAKE_FORTRAN_FLAGS " -m64")
     else(${SYSCTL_OUTPUT} MATCHES 64)
        MESSAGE(STATUS "Found a 32bit system")
-       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
-       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
-       SET(CMAKE_FORTRAN_FLAGS "${CMAKE_FORTRAN_FLAGS} -m32")
+       string(APPEND CMAKE_CXX_FLAGS " -m32")
+       string(APPEND CMAKE_C_FLAGS " -m32")
+       string(APPEND CMAKE_FORTRAN_FLAGS " -m32")
     endif(${SYSCTL_OUTPUT} MATCHES 64)
   endif()
 
@@ -38,17 +38,17 @@ if (CMAKE_SYSTEM_NAME MATCHES Darwin)
      message(STATUS "Found GNU compiler collection")
      execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common")
-     SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -fsigned-char -fno-common")
+     string(APPEND CMAKE_CXX_FLAGS " -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common")
+     string(APPEND CMAKE_C_FLAGS " -pipe -W -Wall -fsigned-char -fno-common")
      SET(CMAKE_Fortran_FLAGS "${CMAKE_FORTRAN_FLAGS} -std=legacy")
      SET(CINT_CXX_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION")
      SET(CINT_C_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION")
 
-     SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
-     SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
+     string(APPEND CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS " -flat_namespace -single_module -undefined dynamic_lookup")
+     string(APPEND CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS " -flat_namespace -single_module -undefined dynamic_lookup")
 
-     set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -bind_at_load -m64")
-     set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -bind_at_load -m64")
+     string(APPEND CMAKE_C_LINK_FLAGS " -bind_at_load -m64")
+     string(APPEND CMAKE_CXX_LINK_FLAGS " -bind_at_load -m64")
 
      # Select flags.
      set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
@@ -73,17 +73,17 @@ if (CMAKE_SYSTEM_NAME MATCHES Darwin)
      message(STATUS "Found LLVM compiler collection")
      execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common")
-     SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -fsigned-char -fno-common")
+     string(APPEND CMAKE_CXX_FLAGS " -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common")
+     string(APPEND CMAKE_C_FLAGS " -pipe -W -Wall -fsigned-char -fno-common")
 #     SET(CMAKE_Fortran_FLAGS "${CMAKE_FORTRAN_FLAGS} -std=legacy")
 #     SET(CINT_CXX_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION")
 #     SET(CINT_C_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION")
 
-     SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
-     SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup")
+     string(APPEND CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS " -flat_namespace -single_module -undefined dynamic_lookup")
+     string(APPEND CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS " -flat_namespace -single_module -undefined dynamic_lookup")
 
-     set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -bind_at_load -m64")
-     set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -bind_at_load -m64")
+     string(APPEND CMAKE_C_LINK_FLAGS " -bind_at_load -m64")
+     string(APPEND CMAKE_CXX_LINK_FLAGS " -bind_at_load -m64")
 
      # Select flags.
      set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
@@ -106,7 +106,7 @@ if (CMAKE_SYSTEM_NAME MATCHES Darwin)
     MESSAGE(FATAL_ERROR "There is no setup for this compiler up to now. Don't know waht to do. Stop cmake at this point.")
   endif()
 
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_SOURCE_DIR}/Wrap")
+  string(APPEND CMAKE_CXX_FLAGS " -I${CMAKE_SOURCE_DIR}/Wrap")
 
 else (CMAKE_SYSTEM_NAME MATCHES Darwin)
   MESSAGE(FATAL_ERROR "There is no setup for this this Apple system up to now. Don't know waht to do. Stop cmake at this point.")
diff --git a/cmake/modules/SetUpWindows.cmake b/cmake/modules/SetUpWindows.cmake
index 84c23c986d376fb3259b25c5e69a0bb080e58d56..632aea5b8bdf0c9eaa93bc28a4543d5b870d6998 100644
--- a/cmake/modules/SetUpWindows.cmake
+++ b/cmake/modules/SetUpWindows.cmake
@@ -11,5 +11,5 @@ endif()
 add_definitions(-DEIGEN_DONT_ALIGN_STATICALLY=1)
 message(STATUS "Disabling static align for Eigen")
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /D_USE_MATH_DEFINES /wd4005 /wd4244 -I${CMAKE_SOURCE_DIR}/Wrap -FIw32pragma.h")
-set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:libcmtd.lib")
+string(APPEND CMAKE_CXX_FLAGS " /MP /D_USE_MATH_DEFINES /wd4005 /wd4244 -I${CMAKE_SOURCE_DIR}/Wrap -FIw32pragma.h")
+string(APPEND CMAKE_SHARED_LINKER_FLAGS " /NODEFAULTLIB:libcmtd.lib")