diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2b11b5f42e8259cc8949c0405bb07a9482d6f81f..0823bb4773d0f7edce475c765392341195cae258 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,12 +43,9 @@ option(OGS_USE_PYTHON "Interface with Python" ON)
 option(OGS_USE_POETRY
        "Enables automatic Python virtual environment handling with poetry." ON
 )
-if(WIN32)
-    option(OGS_BUILD_SWMM "Should the SWMM interface be built?" ON)
-endif()
-if(NOT WIN32 AND OGS_BUILD_SWMM)
-    message(FATAL_ERROR "OGS_BUILD_SWMM requires Windows!")
-endif()
+cmake_dependent_option(
+    OGS_BUILD_SWMM "Should the SWMM interface be built?" ON "WIN32" OFF
+)
 
 if(OGS_USE_PETSC)
     set(OGS_USE_MPI ON CACHE BOOL "Use MPI" FORCE)
@@ -228,12 +225,8 @@ include(UnityBuildSettings)
 if(POETRY)
     file(STRINGS ${PROJECT_BINARY_DIR}/.python_packages OGS_PYTHON_PACKAGES)
     list(REMOVE_DUPLICATES OGS_PYTHON_PACKAGES)
-    # Hack for tespy requirement
-    if(${Python3_VERSION} VERSION_LESS 3.10)
-        set(_python_arg --python <3.9)
-    endif()
     execute_process(
-        COMMAND ${_CMD_COMMAND} poetry add ${_python_arg} ${OGS_PYTHON_PACKAGES}
+        COMMAND ${_CMD_COMMAND} poetry add ${OGS_PYTHON_PACKAGES}
         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
     )
 endif()
@@ -246,5 +239,4 @@ check_header_compilation()
 include(scripts/cmake/MarkVariablesAdvanced.cmake)
 unset(PRE_INSTALL_RUN CACHE)
 
-include(FeatureSummary)
-feature_summary(WHAT ALL)
+include(Features)
diff --git a/CMakePresets.json b/CMakePresets.json
index 6a2b0af8b59d3d95c143db6eea7d6539a29b5426..9c01a59c4a5dca157d204935d8d83cfad7aa8afa 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -1,8 +1,8 @@
 {
-  "version": 2,
+  "version": 3,
   "cmakeMinimumRequired": {
     "major": 3,
-    "minor": 20,
+    "minor": 21,
     "patch": 0
   },
   "configurePresets": [
@@ -35,7 +35,12 @@
     {
       "name": "_msvc",
       "hidden": true,
-      "generator": "Visual Studio 16 2019"
+      "generator": "Visual Studio 16 2019",
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
+      }
     },
     {
       "name": "_gui",
@@ -52,12 +57,16 @@
       "cacheVariables": {
         "OGS_USE_PYTHON": "OFF",
         "BUILD_SHARED_LIBS": "ON",
-        "OGS_USE_CONAN": "OFF",
         "OGS_USE_PETSC": "ON"
       },
       "environment": {
         "CC": "mpicc",
         "CXX": "mpic++"
+      },
+      "condition": {
+        "type": "notEquals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
       }
     },
     {
@@ -168,12 +177,29 @@
       "cacheVariables": {
         "OGS_BUILD_UTILS": "OFF",
         "OGS_USE_PYTHON": "OFF",
-        "OGS_USE_CONAN": "OFF",
         "OGS_USE_POETRY": "OFF"
       }
+    },
+    {
+      "name": "ci-no-unity",
+      "inherits": "release-all",
+      "cacheVariables": {
+        "OGS_USE_PYTHON": "OFF",
+        "OGS_USE_POETRY": "OFF",
+        "OGS_USE_UNITY_BUILDS": "OFF"
+      }
     }
   ],
   "buildPresets": [
+    {
+      "name": "_win",
+      "hidden": true,
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
+      }
+    },
     {
       "name": "release",
       "configurePreset": "release"
@@ -206,14 +232,17 @@
     },
     {
       "name": "msvc-release",
+      "inherits": "_win",
       "configurePreset": "msvc-release"
     },
     {
       "name": "msvc-debug",
+      "inherits": "_win",
       "configurePreset": "msvc-debug"
     },
     {
       "name": "msvc-release-gui",
+      "inherits": "_win",
       "configurePreset": "msvc-release-gui",
       "targets": [
         "DataExplorer"
@@ -221,43 +250,66 @@
     },
     {
       "name": "msvc-debug-gui",
+      "inherits": "_win",
       "configurePreset": "msvc-debug-gui",
       "targets": [
         "DataExplorer"
       ]
+    },
+    {
+      "name": "release-all",
+      "configurePreset": "release-all"
+    },
+    {
+      "name": "coverage",
+      "configurePreset": "coverage"
+    },
+    {
+      "name": "ci-simplest",
+      "configurePreset": "ci-simplest"
+    },
+    {
+      "name": "ci-no-unity",
+      "configurePreset": "ci-no-unity"
     }
   ],
   "testPresets": [
     {
-      "name": "_release",
+      "name": "release",
       "configurePreset": "release",
-      "hidden": true,
       "output": {
         "outputOnFailure": true
-      }
-    },
-    {
-      "name": "release",
-      "inherits": [
-        "_release"
-      ],
+      },
       "filter": {
-        "exclude": {
-          "label": "large"
+        "include": {
+          "label": "default"
+        }
+      },
+      "execution": {
+        "repeat": {
+          "mode": "until-pass",
+          "count": 2
         }
       }
     },
     {
       "name": "release-large",
       "inherits": [
-        "_release"
+        "release"
       ],
       "filter": {
         "include": {
-          "label": "large"
+          "label": "default|large"
         }
       }
     },
+    {
+      "name": "release-all-large",
+      "configurePreset": "release-all",
+      "inherits": [
+        "release-large"
+      ]
+    },
     {
       "name": "release-petsc",
       "configurePreset": "release-petsc",
@@ -285,6 +337,20 @@
       "inherits": [
         "release-large"
       ]
+    },
+    {
+      "name": "release-gui",
+      "configurePreset": "release-gui",
+      "inherits": [
+        "release"
+      ]
+    },
+    {
+      "name": "release-all",
+      "configurePreset": "release-all",
+      "inherits": [
+        "release"
+      ]
     }
   ]
 }
diff --git a/ProcessLib/LiquidFlow/Tests.cmake b/ProcessLib/LiquidFlow/Tests.cmake
index a302aca454319a6fdada998be8a693b33b576a9d..d2a4af6a0e19496a88d306ea61f7fca26013d5ab 100644
--- a/ProcessLib/LiquidFlow/Tests.cmake
+++ b/ProcessLib/LiquidFlow/Tests.cmake
@@ -482,7 +482,9 @@ AddTest(
     WRAPPER time
     TESTER xdmfdiff
     # See https://gitlab.opengeosys.org/ogs/ogs/-/merge_requests/3184#note_85104
-    REQUIREMENTS NOT OGS_USE_MPI AND NOT COMPILER_IS_APPLE_CLANG
+    # TODO: re-enable this, see #3177.
+    # REQUIREMENTS NOT OGS_USE_MPI AND NOT COMPILER_IS_APPLE_CLANG
+    REQUIREMENTS OFF
     DIFF_DATA
     square_5x5_tris_32.xdmf square_5x5_tris_32.xdmf pressure pressure 1e-7 1e-13
     square_5x5_tris_32.xdmf square_5x5_tris_32.xdmf HydraulicFlow HydraulicFlow 1e-7 1e-13
diff --git a/ProcessLib/RichardsComponentTransport/Tests.cmake b/ProcessLib/RichardsComponentTransport/Tests.cmake
index fb78a7cfa0b072aad85273b2cb5ae976ba5ed0fc..152024f48324c4285255683fe385869479b06a76 100644
--- a/ProcessLib/RichardsComponentTransport/Tests.cmake
+++ b/ProcessLib/RichardsComponentTransport/Tests.cmake
@@ -1,5 +1,15 @@
-if (NOT OGS_USE_MPI)
-    OgsTest(PROJECTFILE Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj RUNTIME 7)
-    OgsTest(PROJECTFILE Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj RUNTIME 7)
-    OgsTest(PROJECTFILE Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj RUNTIME 13)
+if(NOT OGS_USE_MPI)
+    # TODO: re-enable this, see #3178. OgsTest(PROJECTFILE
+    # Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj
+    # RUNTIME 7)
+    OgsTest(
+        PROJECTFILE
+            Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj
+        RUNTIME 7
+    )
+    OgsTest(
+        PROJECTFILE
+            Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj
+        RUNTIME 13
+    )
 endif()
diff --git a/ThirdParty/container-maker b/ThirdParty/container-maker
index 5324b5c126e6ca4951bcfb109d7fca8fae4ad218..429744741d92f12647196b76185bfecd9063ff99 160000
--- a/ThirdParty/container-maker
+++ b/ThirdParty/container-maker
@@ -1 +1 @@
-Subproject commit 5324b5c126e6ca4951bcfb109d7fca8fae4ad218
+Subproject commit 429744741d92f12647196b76185bfecd9063ff99
diff --git a/scripts/ci/extends/template-build-linux.yml b/scripts/ci/extends/template-build-linux.yml
index 3c97410f1e3d70094990b8c86847e196eeae2757..2a6c3abbe476c568ee781db941b3843d15e28c82 100644
--- a/scripts/ci/extends/template-build-linux.yml
+++ b/scripts/ci/extends/template-build-linux.yml
@@ -6,44 +6,42 @@
 
   before_script:
     - 'echo "For debugging run: docker run --rm -it -v $CI_BUILDS_DIR:/builds -w=$CI_PROJECT_DIR $CI_JOB_IMAGE"'
-    - build_dir=${BUILD_DIR:-$CMAKE_PRESET}
-    - build_dir_full=../build/${build_dir}
+    - build_dir_full=../build/${CMAKE_PRESET}
+    - log_file=$build_dir_full/make.output
     - rm -rf $build_dir_full
-    - mkdir -p $build_dir_full
-    - mkdir build
+    - mkdir -p $build_dir_full build
     - if [[ "$OSTYPE" == "darwin"* ]] ; then readlink_cmd=greadlink; else readlink_cmd=readlink; fi
-    - ln -s `$readlink_cmd -f $build_dir_full` build/${build_dir}
+    - ln -s `$readlink_cmd -f $build_dir_full` build/${CMAKE_PRESET}
     - ([ "${CONAN_USER_HOME}" == "${CI_PROJECT_DIR}/.conan" ]) && conan remove --system-reqs '*'
     - ([[ $BUILD_CTEST_LARGE_ON_MASTER && "${CI_COMMIT_BRANCH}" == "master" && "${CMAKE_ARGS}" == *"USE_PYTHON=ON"* ]]) && export BUILD_CTEST_LARGE=true
   script:
-    - cmake -S . -B $build_dir_full --preset=$CMAKE_PRESET $CMAKE_ARGS -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES
-    - cd $build_dir_full
+    - cmake -S . --preset=$CMAKE_PRESET -Wno-dev $CMAKE_ARGS -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES
     - |
       if [[ -z "$TARGETS" ]]; then
 
-        $BUILD_CMD_PREFIX cmake --build . --target package > >(tee make.output)
+        $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target package > >(tee $log_file)
 
-        if [ "$BUILD_TESTS" = true ]; then $BUILD_CMD_PREFIX cmake --build . --target tests ; fi
+        if [ "$BUILD_TESTS" = true ]; then $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target tests ; fi
 
         if [ "$BUILD_CTEST" = true ]; then
-
-          ctest_labels="default"
           ctest_timeout=15
+          preset_postfix=""
           if [ "$BUILD_CTEST_LARGE" = true ]; then
-            ctest_labels="large|$ctest_labels"
             ctest_timeout=90
+            preset_postfix="-large"
           fi
 
           if [[ "$OSTYPE" == "darwin"* ]]; then alias date=gdate ; fi
 
-          ctest -T Test --no-compress-output -L "$ctest_labels" --repeat until-pass:2 --stop-time `date -d "today + ${ctest_timeout} minutes" +'%H:%M:%S'`
-          cp Testing/**/Test.xml Tests/ctest.xml
-
+          ctest --preset=${CMAKE_PRESET}${preset_postfix} --output-junit Tests/ctest.xml --no-compress-output --stop-time `date -d "today + ${ctest_timeout} minutes" +'%H:%M:%S'`
         fi
+
       else
-        $BUILD_CMD_PREFIX cmake --build . --target ${TARGETS} > >(tee make.output)
+
+        $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target ${TARGETS} > >(tee $log_file)
+
       fi
     - |
       if [[ "$CHECK_WARNINGS" = true ]] ; then
-        if [[ $(cat make.output | grep warning -i | grep -v 'WARNING: no license files found') ]]; then printf 'There were compiler warnings:\n\n'; cat make.output | grep warning -i | grep -v 'WARNING: no license files found'; exit 1; fi
+        if [[ $(cat $log_file | grep warning -i | grep -v 'WARNING: no license files found') ]]; then printf 'There were compiler warnings:\n\n'; cat $log_file | grep warning -i | grep -v 'WARNING: no license files found'; exit 1; fi
       fi
diff --git a/scripts/ci/extends/template-build-win.yml b/scripts/ci/extends/template-build-win.yml
index 4c952c1459514b35affa5503d8eacf74061965b6..55c4fe9c953c8e613344abbb9eb2cee20c187a52 100644
--- a/scripts/ci/extends/template-build-win.yml
+++ b/scripts/ci/extends/template-build-win.yml
@@ -8,27 +8,24 @@
   needs: [meta]
   variables:
   script:
-    - $build_directory = if ($env:BUILD_DIR) { $env:BUILD_DIR } else { $env:CMAKE_PRESET }
-    - $build_directory_full = "..\build\" + $build_directory
+    - $build_directory_full = "..\build\" + $env:CMAKE_PRESET
+    - $log_file = $build_directory_full + "\make.output"
     - (rm -r -fo $build_directory_full)
     - cmd /c if not exist $build_directory_full mkdir $build_directory_full
     - mkdir build
     # Create symlink https://stackoverflow.com/a/34905638/80480
-    - cmd /c mklink /D build\$build_directory $env:CI_PROJECT_DIR\$build_directory_full
-    - $cmake_cmd = "cmake -S . -B $build_directory_full --preset=$env:CMAKE_PRESET
-      $env:CMAKE_ARGS
+    - cmd /c mklink /D build\$env:CMAKE_PRESET $env:CI_PROJECT_DIR\$build_directory_full
+    - $cmake_cmd = "cmake -S . --preset=$env:CMAKE_PRESET -Wno-dev $env:CMAKE_ARGS
       -DOGS_BUILD_PROCESSES=$env:BUILD_PROCESSES"
     - $cmake_cmd
     - Invoke-Expression $cmake_cmd
-    - cd $build_directory_full
-    - cmake --build . --target package | Tee-Object -FilePath make.output
-    - if($env:BUILD_TESTS -eq "true") { cmake --build . --target tests }
-    - if($env:BUILD_CTEST -eq "true") { cmake --build . --target ctest }
-        cp Testing/**/Test.xml Tests/ctest.xml
+    - cmake --build --preset=$env:CMAKE_PRESET --target package | Tee-Object -FilePath $log_file
+    - if($env:BUILD_TESTS -eq "true") { cmake --build --preset=$env:CMAKE_PRESET --target tests }
+    - if($env:BUILD_CTEST -eq "true") { ctest --preset=$env:CMAKE_PRESET --output-junit Tests/ctest.xml }
     - |
-      if($env:CHECK_WARNINGS -eq "true" -and (cat make.output | Select-String -Pattern ': warning') )
+      if($env:CHECK_WARNINGS -eq "true" -and (cat $log_file | Select-String -Pattern ': warning') )
       {
           Write-Output 'There were compiler warnings:\n'
-          cat make.output | Select-String -Pattern ': warning'
+          cat $log_file | Select-String -Pattern ': warning'
           exit 1
       }
diff --git a/scripts/ci/extends/test-artifacts.yml b/scripts/ci/extends/test-artifacts.yml
index 96f2a07bbe8102bbf7a359f14d1c810018ec80d7..ffe88323e809a4010c257ebc27e0b053ace36216 100644
--- a/scripts/ci/extends/test-artifacts.yml
+++ b/scripts/ci/extends/test-artifacts.yml
@@ -3,7 +3,7 @@
     when: always
     paths:
       - build/*/logs/*.log
-      - build/*/Tests/ctest.xml
+      - build/*/Tests/ctest-junit.xml
       - build/*/Tests/testrunner.xml
       - build/*/make.output
       - build/*/*.zip
@@ -12,3 +12,4 @@
     reports:
       junit:
         - build/*/Tests/testrunner.xml
+        - build/*/Tests/ctest.xml
diff --git a/scripts/ci/jobs/build-docs.yml b/scripts/ci/jobs/build-docs.yml
index a268fbbf7d4d3268ede168c7447e4425dd6fec9b..d773fe630cd25c56db4473a448c65c176ff5edbd 100644
--- a/scripts/ci/jobs/build-docs.yml
+++ b/scripts/ci/jobs/build-docs.yml
@@ -33,7 +33,7 @@ build docs:
     - python /opt/lizard/lizard.py -EWordCount -x "./ThirdParty/*" -x "./Tests/*" || true # word-cloud
     # build
     - cd build
-    - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_USE_CONAN=OFF -DOGS_USE_POETRY=OFF
+    - cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DOGS_USE_POETRY=OFF -DOGS_BUILD_PROCESSES=SteadyStateDiffusion
     - cmake . --graphviz=cmake-dependencies.dot && dot -Tsvg cmake-dependencies.dot -o cmake-dependencies.svg
     - cmake . -DOGS_BUILD_PROCESSES=SteadyStateDiffusion
     - cmake --build . --target doc > >(tee make-docs.output)
diff --git a/scripts/ci/jobs/build-linux-frontend.yml b/scripts/ci/jobs/build-linux-frontend.yml
index ff068ee51937b4c353679121c268c4b102068f4d..97452aa7dd512e94a49422723c7cc71d597c7130 100644
--- a/scripts/ci/jobs/build-linux-frontend.yml
+++ b/scripts/ci/jobs/build-linux-frontend.yml
@@ -10,7 +10,7 @@ build linux frontend:
   variables:
     CCACHE_DIR: "/data/ogs/.ccache"
     CMAKE_PRESET: release
-    CMAKE_ARGS: "-DOGS_USE_CONAN=OFF -DOGS_USE_PYTHON=OFF -DOGS_CPU_ARCHITECTURE=generic"
+    CMAKE_ARGS: "-DOGS_USE_PYTHON=OFF -DOGS_CPU_ARCHITECTURE=generic"
   before_script:
     - !reference [.template-build-linux, before_script]
     - source scripts/env/eve/cli.sh
diff --git a/scripts/ci/jobs/build-linux.yml b/scripts/ci/jobs/build-linux.yml
index 8a1dcf52956729ed41a84de58fe8be35c6d4a72d..24ebb7be38d603b817fc97ff3d1fbec7d3c1a0a3 100644
--- a/scripts/ci/jobs/build-linux.yml
+++ b/scripts/ci/jobs/build-linux.yml
@@ -8,10 +8,8 @@ build linux:
   timeout: 2h
   variables:
     BUILD_CTEST_LARGE_ON_MASTER: "true"
-    CMAKE_PRESET: release
+    CMAKE_PRESET: release-all
     CMAKE_ARGS: >-
-      -DOGS_USE_CONAN=OFF
-      -DOGS_USE_MFRONT=ON
       -DOGS_$USE_PYTHON
       -DOGS_INSTALL_DEPENDENCIES=ON
   parallel:
@@ -29,11 +27,10 @@ linux ctest large:
       allow_failure: true
   timeout: 2h
   variables:
-    TARGETS: ctest-large
-    CMAKE_PRESET: release
+    BUILD_TESTS: "false"
+    BUILD_CTEST_LARGE: "true"
+    CMAKE_PRESET: release-all
     CMAKE_ARGS: >-
-      -DOGS_USE_CONAN=OFF
-      -DOGS_USE_MFRONT=ON
       -DOGS_USE_PYTHON=ON
 
 build linux (no unity):
@@ -45,16 +42,10 @@ build linux (no unity):
   needs: [meta, ci_images]
   timeout: 1h
   variables:
-    BUILD_DIR: "no-unity"
     BUILD_TESTS: "false"
     BUILD_CTEST: "false"
     CHECK_WARNINGS: "true"
-    CMAKE_PRESET: release
-    CMAKE_ARGS: >-
-      -DOGS_USE_PYTHON=OFF
-      -DOGS_USE_CONAN=OFF
-      -DOGS_USE_MFRONT=ON
-      -DOGS_USE_UNITY_BUILDS=OFF
+    CMAKE_PRESET: ci-no-unity
 
 build linux (no deps, no procs):
   image: $CONTAINER_GCC_IMAGE
@@ -78,7 +69,6 @@ build linux arch:
     CMAKE_PRESET: release-all
     CMAKE_ARGS: >-
       -DBUILD_SHARED_LIBS=ON
-      -DOGS_USE_CONAN=OFF
       -DOGS_USE_POETRY=OFF
 
 build linux ubuntu:
@@ -90,5 +80,3 @@ build linux ubuntu:
   needs: [meta]
   variables:
     CMAKE_PRESET: release-all
-    CMAKE_ARGS: >-
-      -DOGS_USE_CONAN=OFF
diff --git a/scripts/ci/jobs/build-mac.yml b/scripts/ci/jobs/build-mac.yml
index 5c46c156f61eb87cf62b412c3fc0a3e877027a7b..ddc9de0c07c355804aa8f5025e71703d187f36ba 100644
--- a/scripts/ci/jobs/build-mac.yml
+++ b/scripts/ci/jobs/build-mac.yml
@@ -6,7 +6,6 @@ build mac:
     - .test-artifacts
   needs: [meta]
   variables:
-    BUILD_DIR: "mac-release"
     CHECK_WARNINGS: "true"
     CMAKE_PRESET: release
     CMAKE_ARGS: >-
diff --git a/scripts/ci/jobs/build-win.yml b/scripts/ci/jobs/build-win.yml
index ce3ca3d0946315016c64556da598dd5dbedf2354..fa6314ee51a083eca02473610a5dc44ff79b18a0 100644
--- a/scripts/ci/jobs/build-win.yml
+++ b/scripts/ci/jobs/build-win.yml
@@ -7,13 +7,11 @@ build win:
     - when: manual
       allow_failure: true
   variables:
-    BUILD_DIR: win-release
     CHECK_WARNINGS: "true"
     CMAKE_PRESET: release
     CMAKE_ARGS: >-
       -DOGS_CI_TESTRUNNER_REPEAT=1
       -DOGS_$USE_PYTHON
-      -DOGS_USE_CONAN=AUTO
   parallel:
     matrix:
       - USE_PYTHON: ["USE_PYTHON=ON", "USE_PYTHON=OFF"]
diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake
index 763b6f4bc0dcec982c889c9a225736ac2853ace4..5bea088560a764dbec14df183b01b1b7628d7b67 100644
--- a/scripts/cmake/CMakeSetup.cmake
+++ b/scripts/cmake/CMakeSetup.cmake
@@ -37,6 +37,7 @@ include(GNUInstallDirs)
 include(ProcessorCount)
 ProcessorCount(NUM_PROCESSORS)
 set(NUM_PROCESSORS ${NUM_PROCESSORS} CACHE STRING "Processor count")
+include(CMakeDependentOption)
 
 # Check if this project is included in another
 if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index 95b79c392ac3a9c1033b0637e841bb2d718be917..4f60c7a636a6bfd723cccd03d8d3f61eeff74c29 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -1,4 +1,4 @@
-if(NOT OGS_USE_CONAN OR (NOT OGS_USE_LIS AND NOT OGS_USE_NETCDF))
+if(NOT OGS_USE_CONAN OR NOT OGS_USE_NETCDF)
     return()
 endif()
 string(TOLOWER ${OGS_USE_CONAN} OGS_USE_CONAN_lower)
diff --git a/scripts/cmake/Dependencies.cmake b/scripts/cmake/Dependencies.cmake
index 9cc8727c2505a6c0528df7c56c047f6b37bc469e..c39a29fc823ca242893a9e9056e4b2d18eecd16b 100644
--- a/scripts/cmake/Dependencies.cmake
+++ b/scripts/cmake/Dependencies.cmake
@@ -321,7 +321,8 @@ if(OGS_BUILD_GUI)
         CPMAddPackage(
             NAME Shapelib
             GITHUB_REPOSITORY OSGeo/shapelib
-            VERSION 1.5.0
+            VERSION 1.5.0-dev
+            GIT_TAG 21ae8fc16afa15a1b723077b6cec3a9abc592f6a
             EXCLUDE_FROM_ALL YES
         )
         target_include_directories(
diff --git a/scripts/cmake/Features.cmake b/scripts/cmake/Features.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f9a4b89bb3ee56252dbae2172ff8d84e00230cf8
--- /dev/null
+++ b/scripts/cmake/Features.cmake
@@ -0,0 +1,28 @@
+include(FeatureSummary)
+add_feature_info(OGS OGS_BUILD_CLI "The OGS simulator (OGS_BUILD_CLI)")
+add_feature_info(
+    Utilities OGS_BUILD_UTILS "Command line tools (OGS_BUILD_UTILS)"
+)
+add_feature_info(
+    DataExplorer OGS_BUILD_GUI
+    "Graphical data exploration and processing (OGS_BUILD_GUI)"
+)
+add_feature_info(
+    MFront OGS_USE_MFRONT "MFront material models (OGS_USE_MFRONT)"
+)
+add_feature_info(
+    Python-interface OGS_USE_PYTHON
+    "Python boundary conditions and source terms (OGS_USE_PYTHON)"
+)
+add_feature_info(PETSc OGS_USE_PETSC "Parallel processing (OGS_USE_PETSC)")
+add_feature_info(
+    Tests OGS_BUILD_TESTING "Unit and benchmarks tests (OGS_BUILD_TESTING)"
+)
+add_feature_info(
+    build-shared BUILD_SHARED_LIBS "Shared libraries (BUILD_SHARED_LIBS)"
+)
+add_feature_info(
+    build-unity OGS_USE_UNITY_BUILDS "Unity build (OGS_USE_UNITY_BUILDS)"
+)
+
+feature_summary(WHAT PACKAGES_FOUND ENABLED_FEATURES)
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 80e22723bc6d4ad094dfa3a4c3cb9d339cb2261c..5e914f0d29350ec551da89241f8ff64eeb391965 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -71,10 +71,6 @@ if(OGS_USE_MFRONT)
         set(HAVE_PTHREADS TRUE)
         add_definitions(-DHAVE_PTHREADS)
     endif()
-    if(OGS_USE_CONAN)
-        # cmake-lint: disable=C0103
-        set(TFELHOME ${CONAN_TFEL_ROOT} CACHE INTERNAL "")
-    endif()
 endif()
 
 find_package(OpenMP)
@@ -94,6 +90,7 @@ if(OGS_BUILD_GUI)
     endif()
     find_package(Qt5 ${ogs.minimum_version.qt} REQUIRED ${QT_MODULES})
     cmake_policy(SET CMP0020 NEW)
+    list(APPEND CMAKE_INSTALL_RPATH ${Qt5_DIR}/../..)
 endif()
 
 if(OGS_USE_NETCDF)
diff --git a/scripts/cmake/PythonSetup.cmake b/scripts/cmake/PythonSetup.cmake
index 73c66c856f914f992dcd2ed4391b2480aa8e54b8..8b2b26b567ee40817e1f08f8ffc53b358053ba6a 100644
--- a/scripts/cmake/PythonSetup.cmake
+++ b/scripts/cmake/PythonSetup.cmake
@@ -1,7 +1,14 @@
 # cmake-lint: disable=C0103
+
+# prefer unix location over frameworks (Apple-only)
+set(Python3_FIND_FRAMEWORK LAST)
 if(OGS_USE_POETRY)
     find_program(POETRY poetry)
     if(POETRY)
+        find_package(
+            Python3 ${ogs.minimum_version.python} COMPONENTS Interpreter
+            REQUIRED
+        )
         configure_file(
             ${PROJECT_SOURCE_DIR}/scripts/python/poetry.in.toml
             ${PROJECT_BINARY_DIR}/poetry.toml COPYONLY
diff --git a/scripts/env/eve/cli.sh b/scripts/env/eve/cli.sh
index bfaefcee40998ced52aadfe01e84376eed03e3e3..109c13883615bdf86d255632dba574ed4cb5df88 100644
--- a/scripts/env/eve/cli.sh
+++ b/scripts/env/eve/cli.sh
@@ -8,7 +8,7 @@ fi
 module use /global/apps/modulefiles
 
 module load foss/2020b
-module load cmake/3.20.2-1
+module load cmake/3.21.1-1
 module load Ninja/1.10.1
 
 # Tools
diff --git a/scripts/python/pyproject.in.toml b/scripts/python/pyproject.in.toml
index 0adfb1eeb9b51a59e67beb61ef7e21f89423aada..f1e79914dd2f0aea3c3c5aea114326556f0efb62 100644
--- a/scripts/python/pyproject.in.toml
+++ b/scripts/python/pyproject.in.toml
@@ -1,11 +1,11 @@
 [tool.poetry]
 name = "ogs-build"
-version = "@OGS_VERSION@" # is written just once, maybe outdated
+version = "@OGS_VERSION@"            # is written just once, maybe outdated
 description = "CMake auto-generated"
 authors = [""]
 
 [tool.poetry.dependencies]
-python = ">=@ogs.minimum_version.python@"
+python = "@Python3_VERSION@"
 
 [tool.poetry.dev-dependencies]