diff --git a/cmake/modules/DumuxMacros.cmake b/cmake/modules/DumuxMacros.cmake
index 33c474648b3ffd6db7e82301bb6d4b9ecc621f43..21299d9aa5d90cd6946be2de9580ddcf4ee64533 100644
--- a/cmake/modules/DumuxMacros.cmake
+++ b/cmake/modules/DumuxMacros.cmake
@@ -42,3 +42,49 @@ endif()
 
 find_package(OpenMP QUIET)
 include(AddOpenMPFlags)
+
+# test if we can use parallel algorithms
+check_cxx_symbol_exists(
+  "std::execution::par_unseq"
+  "execution"
+  DUMUX_HAVE_CXX_EXECUTION_POLICY
+)
+
+if(DUMUX_HAVE_CXX_EXECUTION_POLICY)
+  set(HAVE_CPP_PARALLEL_ALGORITHMS TRUE)
+endif()
+
+# setup multithreading backend
+if(NOT DUMUX_MULTITHREADING_BACKEND)
+  if(TBB_FOUND)
+    set(DUMUX_MULTITHREADING_BACKEND "TBB" CACHE STRING "The multithreading backend")
+    message(STATUS "Dumux multithreading backed: TBB")
+  elseif(OpenMP_FOUND)
+    set(DUMUX_MULTITHREADING_BACKEND "OpenMP" CACHE STRING "The multithreading backend")
+    message(STATUS "Dumux multithreading backed: OpenMP")
+  elseif(Kokkos_FOUND)
+    set(DUMUX_MULTITHREADING_BACKEND "Kokkos" CACHE STRING "The multithreading backend")
+    message(STATUS "Dumux multithreading backed: Kokkos")
+  elseif(DUMUX_HAVE_CXX_EXECUTION_POLICY)
+    set(DUMUX_MULTITHREADING_BACKEND "Cpp" CACHE STRING "The multithreading backend")
+    message(STATUS "Dumux multithreading backed: Cpp")
+  else()
+    set(DUMUX_MULTITHREADING_BACKEND "Serial" CACHE STRING "The multithreading backend")
+    message(STATUS "Dumux multithreading backed: Serial")
+  endif()
+
+# abort if a multithreading backend has been manually selected
+# but it is not available
+else()
+  if(DUMUX_MULTITHREADING_BACKEND STREQUAL "TBB" AND NOT TBB_FOUND)
+    message(FATAL_ERROR "Selected TBB as Dumux multithreading backed but TBB has not been found")
+  elseif(DUMUX_MULTITHREADING_BACKEND STREQUAL "OpenMP" AND NOT OpenMP_FOUND)
+    message(FATAL_ERROR "Selected OpenMP as Dumux multithreading backed but OpenMP has not been found")
+  elseif(DUMUX_MULTITHREADING_BACKEND STREQUAL "Kokkos" AND NOT Kokkos_FOUND)
+    message(FATAL_ERROR "Selected Kokkos as Dumux multithreading backed but Kokkos has not been found")
+  elseif(DUMUX_MULTITHREADING_BACKEND STREQUAL "Cpp" AND NOT DUMUX_HAVE_CXX_EXECUTION_POLICY)
+    message(FATAL_ERROR "Selected Cpp as Dumux multithreading backed but your compiler does not implement parallel STL")
+  else()
+    message(STATUS "Dumux multithreading backed: ${DUMUX_MULTITHREADING_BACKEND}")
+  endif()
+endif()
diff --git a/config.h.cmake b/config.h.cmake
index d552b8de607808776594b9af5143663df34637d3..199c9f972df03c8fc8d5075cc45435c0e97635c4 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -76,6 +76,14 @@
 /* Set if OpenMP was found */
 #cmakedefine HAVE_OPENMP ENABLE_OPENMP
 
+/* Set the DUMUX_MULTITHREADING_BACKEND */
+#ifndef DUMUX_MULTITHREADING_BACKEND
+#define DUMUX_MULTITHREADING_BACKEND ${DUMUX_MULTITHREADING_BACKEND}
+#endif
+
+/* Set HAVE_CPP_PARALLEL_ALGORITHMS if available */
+#cmakedefine HAVE_CPP_PARALLEL_ALGORITHMS 1
+
 /* end dumux
    Everything below here will be overwritten
 */
diff --git a/dumux/parallel/multithreading.hh b/dumux/parallel/multithreading.hh
index 7bea4cdb5140938ef86718aaf606dd734361edda..1efc82f8beda386001fb33f8cf1662255d335083 100644
--- a/dumux/parallel/multithreading.hh
+++ b/dumux/parallel/multithreading.hh
@@ -25,23 +25,8 @@
 #ifndef DUMUX_PARALLEL_MULTITHREADING_HH
 #define DUMUX_PARALLEL_MULTITHREADING_HH
 
-// clang doesn't implement this yet (April 2022) although technically a C++17 feature
-#define HAVE_CPP_PARALLEL_ALGORITHMS __cpp_lib_execution && __cpp_lib_execution >= 201603L && __cpp_lib_parallel_algorithm && __cpp_lib_parallel_algorithm >= 201603L
-
-// This variable can be set by the user
-// If not we select a default depending on what's available
 #ifndef DUMUX_MULTITHREADING_BACKEND
-    #if HAVE_TBB
-        #define DUMUX_MULTITHREADING_BACKEND TBB
-    #elif HAVE_OPENMP
-        #define DUMUX_MULTITHREADING_BACKEND OpenMP
-    #elif HAVE_KOKKOS
-        #define DUMUX_MULTITHREADING_BACKEND Kokkos
-    #elif HAVE_CPP_PARALLEL_ALGORITHMS
-        #define DUMUX_MULTITHREADING_BACKEND Cpp
-    #else
-        #define DUMUX_MULTITHREADING_BACKEND Serial
-    #endif
+#define DUMUX_MULTITHREADING_BACKEND Serial
 #endif
 
 namespace Dumux::Detail::Multithreading {