diff --git a/ThirdParty/vtkdiff b/ThirdParty/vtkdiff
index bc683ea5cc89717aef513c73b87b63b7d008c829..099e83e7a1b94dc9901e6875acadbb3b5464ab75 160000
--- a/ThirdParty/vtkdiff
+++ b/ThirdParty/vtkdiff
@@ -1 +1 @@
-Subproject commit bc683ea5cc89717aef513c73b87b63b7d008c829
+Subproject commit 099e83e7a1b94dc9901e6875acadbb3b5464ab75
diff --git a/scripts/cmake/CCacheSetup.cmake b/scripts/cmake/CCacheSetup.cmake
index 9e2f080ac6ce92a184901e940d39b776f6de4516..a6f982ab13107adc8e3bc4b3dbbc065199fc4b6e 100644
--- a/scripts/cmake/CCacheSetup.cmake
+++ b/scripts/cmake/CCacheSetup.cmake
@@ -20,7 +20,7 @@ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
 
 if(COMPILER_IS_CLANG)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments")
+    add_compile_options(-Qunused-arguments)
 endif()
 
 if($ENV{TRAVIS})
diff --git a/scripts/cmake/ClangSanitizer.cmake b/scripts/cmake/ClangSanitizer.cmake
index ef9b7b29f039c02a25a43b526b3fddba6fb72671..fc94bb039f74a6b465873626f1beec26263f9c72 100644
--- a/scripts/cmake/ClangSanitizer.cmake
+++ b/scripts/cmake/ClangSanitizer.cmake
@@ -15,5 +15,5 @@ if(OGS_UNDEFINED_BEHAVIOR_SANITIZER)
 endif()
 
 if(DEFINED SANITIZE_FLAG_VALUE)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS}")
+    add_compile_options(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS})
 endif()
diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake
index 047de1148f7b8deb0a2e63c5ea7162e9073502bc..fe6a9672d88884cbcf509b343863ef8ae9704f44 100644
--- a/scripts/cmake/CompilerSetup.cmake
+++ b/scripts/cmake/CompilerSetup.cmake
@@ -1,8 +1,3 @@
-include(ResetConfigurations)        # To Debug, Release, RelWithDebInfo
-include(DisableCompilerFlag)
-include(MSVCMultipleProcessCompile) # /MP switch (multi processor) for VS
-set(CMAKE_OSX_ARCHITECTURES "x86_64")
-
 # C++ standard setup
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -16,7 +11,6 @@ if(OGS_USE_PCH)
 endif()
 
 # Set compiler helper variables
-
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
     set(COMPILER_IS_CLANG TRUE CACHE INTERNAL "")
 elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
@@ -36,129 +30,99 @@ if(BUILD_SHARED_LIBS)
     set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
 endif()
 
-if(OGS_ENABLE_AVX2)
-    set(CPU_FLAGS "-mavx2 -march=core-avx2")
-elseif(OGS_CPU_ARCHITECTURE STREQUAL "generic")
-    set(CPU_FLAGS "-mtune=generic")
-else()
-    set(CPU_FLAGS "-march=${OGS_CPU_ARCHITECTURE}")
-endif()
-
-### GNU C/CXX compiler
-if(COMPILER_IS_GCC)
-    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9")
-        message(FATAL_ERROR "GCC minimum required version is 4.9! You are \
-            using ${CMAKE_CXX_COMPILER_VERSION}.")
-    endif()
+### GNU-like compiler
+if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
     if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
-        message(STATUS "Set GCC release flags")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
-    else()
+        message(STATUS "Set release compiler flags")
+        add_compile_options(-O3)
+    elseif(NOT STL_NO_DEBUG)
         # Enable assertions in STL in debug mode.
-        if(NOT STL_NO_DEBUG)
-            set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
-                -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \
-                -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY")
-        endif()
-    endif()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wno-deprecated -Wall \
-        -Wextra -fext-numeric-literals")
-endif() # COMPILER_IS_GCC
-
-### Clang
-if(COMPILER_IS_CLANG)
-    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5")
-        message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version \
-            ${CMAKE_CXX_COMPILER_VERSION}")
+        add_compile_options(
+            -D_GLIBCXX_DEBUG
+            -D_GLIBCXX_DEBUG_ASSERT
+            -D_GLIBCXX_DEBUG_PEDASSERT
+            -D_GLIBCXX_DEBUG_VERIFY
+        )
     endif()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wall \
-        -Wno-c++98-compat-pedantic")
-    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-        # Enable assertions in STL in debug mode.
-        if(NOT STL_NO_DEBUG)
-            set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
-                -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \
-                -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY")
+    add_compile_options(
+        -Wall
+        -Wextra
+        -Wno-c++98-compat-pedantic
+        -DOPENMP_LOOP_TYPE=unsigned
+    )
+
+    # Profiling
+    if(OGS_PROFILE)
+        if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
+            message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \
+                to Release.")
         endif()
+        set(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG")
+        # clang compiler does not know the following flags
+        if(NOT COMPILER_IS_CLANG)
+            set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once \
+                -fno-optimize-sibling-calls")
+        endif()
+        add_compile_options(${PROFILE_ARGS})
     endif()
 
-    include(ClangSanitizer)
-endif() # COMPILER_IS_CLANG
-
-### Intel compiler
-if(COMPILER_IS_INTEL)
-    if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
-        message(STATUS "Set Intel release flags")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
+    if(OGS_ENABLE_AVX2)
+        set(CPU_FLAGS "-mavx2 -march=core-avx2")
+    elseif(OGS_CPU_ARCHITECTURE STREQUAL "generic")
+        set(CPU_FLAGS "-mtune=generic")
+    else()
+        set(CPU_FLAGS "-march=${OGS_CPU_ARCHITECTURE}")
     endif()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHOST")
-endif() # COMPILER_IS_INTEL
 
-# Profiling
-if(OGS_PROFILE)
-    if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
-        message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \
-            to Release.")
-    endif()
-    set(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG")
-    # clang compiler does not know the following flags
-    if(NOT COMPILER_IS_CLANG)
-        set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once \
-            -fno-optimize-sibling-calls")
+    if(COMPILER_IS_GCC)
+        if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9")
+            message(FATAL_ERROR "GCC minimum required version is 4.9! You are \
+                using ${CMAKE_CXX_COMPILER_VERSION}.")
+        endif()
+        add_compile_options(-fext-numeric-literals)
     endif()
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}")
-endif()
 
-### Windows
-if(WIN32)
-    ## For Visual Studio compiler
-    if(MSVC)
-        if(OGS_CPU_ARCHITECTURE STREQUAL "native")
-            set(CPU_FLAGS "/favor:blend")
-        else()
-            set(CPU_FLAGS "/favor:${OGS_CPU_ARCHITECTURE}")
+    if(COMPILER_IS_CLANG)
+        if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5")
+            message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version \
+                ${CMAKE_CXX_COMPILER_VERSION}")
         endif()
-        if(OGS_ENABLE_AVX2)
-            set(CPU_FLAGS "${CPU_FLAGS} /arch:AVX2")
-        endif()
-        add_definitions(
-            -D_CRT_SECURE_NO_WARNINGS
-            -D_CRT_NONSTDC_NO_WARNINGS
-            -D_CRT_XNONSTDC_NO_WARNINGS
-            -D__restrict__=__restrict   # this fixes #5
-            # This fixes compile errors with
-            # std::numeric_limits<T>::min() / max()
-            -DNOMINMAX
-        )
-        # Sets warning level 3 and ignores some warnings
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} /W3 /wd4290 \
-            /wd4267 /wd4996 /bigobj")
-        set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
-            /ZI /Od /Ob0")
-        set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}  /ignore:4099")
+        include(ClangSanitizer)
+    endif()
 
-        DisableCompilerFlag(DEBUG /RTC1)
-    # cygwin
-    else()
-        if(CMAKE_CROSSCOMPILING)
-            message(STATUS "Crosscompiling for Windows with MinGW.")
-        else()
-            message(STATUS "Might be GCC under cygwin.")
-        endif()
+    if(COMPILER_IS_INTEL)
+        # Use highest instruction set available on the compilation host processor
+        add_compile_options(-xHOST)
     endif()
 endif()
 
-# Missing OpenMP 3.0 implementation fix for Windows, this fixes #6
 if(MSVC)
-    add_definitions(-DOPENMP_LOOP_TYPE=int)
-else()
-    add_definitions(-DOPENMP_LOOP_TYPE=unsigned)
+    if(OGS_CPU_ARCHITECTURE STREQUAL "native")
+        set(CPU_FLAGS "/favor:blend")
+    else()
+        set(CPU_FLAGS "/favor:${OGS_CPU_ARCHITECTURE}")
+    endif()
+    if(OGS_ENABLE_AVX2)
+        set(CPU_FLAGS "${CPU_FLAGS} /arch:AVX2")
+    endif()
+    add_compile_options(
+        /MP # multi-core compilation
+        /W3
+        /wd4290 /wd4267 /wd4996
+        /bigobj
+        -DOPENMP_LOOP_TYPE=int # Missing OpenMP 3.0 implementation fix for Windows, this fixes #6
+        -D_CRT_SECURE_NO_WARNINGS
+        -D_CRT_NONSTDC_NO_WARNINGS
+        -D_CRT_XNONSTDC_NO_WARNINGS
+        -D__restrict__=__restrict   # this fixes #5
+        # This fixes compile errors with
+        # std::numeric_limits<T>::min() / max()
+        -DNOMINMAX
+    )
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099")
 endif()
 
-# Set additional user-given compiler flags. The given flags must follow the
-# preceding cxx flags definition in order to override earlier flags, e.g. for
-# optimization.
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OGS_CXX_FLAGS}")
-
-# Copy CXX to C flags. To have these flags in C libraries (e.g. metis) too.
-set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
+add_compile_options(
+    ${OGS_CXX_FLAGS} # user-given, CMake-option
+    ${CPU_FLAGS}
+)
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 9c1491e33ad39fff9d499a1e0266ce9e26eeac5e..0aa57a7b1bf7226764b053cfbe297953e6744b79 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -88,8 +88,7 @@ endif() # OGS_NO_EXTERNAL_LIBS
 
 find_package(OpenMP QUIET)
 if(OPENMP_FOUND)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    add_compile_options(${OpenMP_CXX_FLAGS})
     message(STATUS "OpenMP enabled.")
 endif()