diff --git a/reco/tasks/CMakeLists.txt b/reco/tasks/CMakeLists.txt
index 4ba1d455fc63b76d40a8742c20514eb8fb0e09b0..e98d6b0599cd7946f14f78bc9ba6d257d75135de 100644
--- a/reco/tasks/CMakeLists.txt
+++ b/reco/tasks/CMakeLists.txt
@@ -2,7 +2,6 @@
 # V. Friese,     2 June 2021
 
 
-
 # -----   Library name   ----------------------------------
 Set(LIBRARY_NAME CbmRecoTasks)
 # ---------------------------------------------------------
@@ -81,6 +80,25 @@ endif()
 set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
 # ---------------------------------------------------------
 
+# Check if the compiler supports std::execution in the respective STL
+# library
+CHECK_CXX_SOURCE_COMPILES("
+#include <numeric>
+#include <vector>
+#include <execution>
+
+int main(int argc, char *argv[])
+{
+    std::vector<double> v(10, 1);
+
+    auto result = std::reduce(std::execution::par, v.begin(), v.end());
+    return 0;
+}" HAS_STD_EXECUTION)
+
+if (HAS_STD_EXECUTION)
+  message("Execution is available in STL")
+  add_definitions(-DWITH_EXECUTION)
+endif()
 
 # -----  Let cmake do the job   ---------------------------
 include_directories( ${INCLUDE_DIRECTORIES})
diff --git a/reco/tasks/CbmTaskUnpack.cxx b/reco/tasks/CbmTaskUnpack.cxx
index 40eeb99a0bbfb2ba4193add4b2f6e259032c4d77..0d38ae69265e5060f1b30249fa6fb0e7beb1a60a 100644
--- a/reco/tasks/CbmTaskUnpack.cxx
+++ b/reco/tasks/CbmTaskUnpack.cxx
@@ -22,7 +22,9 @@
 #include <algorithm>
 #include <cassert>
 #include <cstdint>
+#ifdef WITH_EXECUTION
 #include <execution>
+#endif
 #include <iomanip>
 #include <iostream>
 #include <memory>
@@ -71,7 +73,7 @@ void CbmTaskUnpack::Exec(Option_t*)
   uint64_t numCompUsed = 0;
 
   // ---  Component loop
-#pragma omp parallel for schedule(dynamic) default(none) shared(timeslice) reduction(+: numMs, numBytes, numDigis, numCompUsed)
+#pragma omp parallel for schedule(dynamic) shared(timeslice) reduction(+ : numMs, numBytes, numDigis, numCompUsed)
   for (uint64_t comp = 0; comp < timeslice->num_components(); comp++) {
 
     auto systemId = static_cast<fles::SubsystemIdentifier>(timeslice->descriptor(comp, 0).sys_id);
@@ -124,9 +126,13 @@ void CbmTaskUnpack::Exec(Option_t*)
   }  //# component
 
   // --- Sorting of output digis. Is required by both digi trigger and event builder.
+#ifdef WITH_EXECUTION
   std::sort(std::execution::par_unseq, fTimeslice->fData.fSts.fDigis.begin(), fTimeslice->fData.fSts.fDigis.end(),
             [](CbmStsDigi digi1, CbmStsDigi digi2) { return digi1.GetTime() < digi2.GetTime(); });
-
+#else
+  std::sort(fTimeslice->fData.fSts.fDigis.begin(), fTimeslice->fData.fSts.fDigis.end(),
+            [](CbmStsDigi digi1, CbmStsDigi digi2) { return digi1.GetTime() < digi2.GetTime(); });
+#endif
 
   // --- Timeslice log
   timer.Stop();