diff --git a/algo/base/Definitions.h b/algo/base/Definitions.h
index 57e93adc48b6fd87b334df8f68a52a39ffc2044b..e77cbea124c2dd87a8f423b207a06f84b566d8ac 100644
--- a/algo/base/Definitions.h
+++ b/algo/base/Definitions.h
@@ -50,7 +50,8 @@ namespace cbm::algo
   enum class Setup
   {
     mCBM2022,
-    mCBM2024,
+    mCBM2024_03,
+    mCBM2024_05,
   };
 
 }  // namespace cbm::algo
@@ -95,7 +96,8 @@ CBM_ENUM_DICT(cbm::algo::RecoData,
 
 CBM_ENUM_DICT(cbm::algo::Setup,
   {"mCBM2022", cbm::algo::Setup::mCBM2022},
-  {"mCBM2024", cbm::algo::Setup::mCBM2024}
+  {"mCBM2024_03", cbm::algo::Setup::mCBM2024_03},
+  {"mCBM2024_05", cbm::algo::Setup::mCBM2024_05}
 );
 
 #endif
diff --git a/algo/detectors/tof/TrackingInterface.cxx b/algo/detectors/tof/TrackingInterface.cxx
index e8a6d0c9a9c6f19318866ecc906f1ff952dd2394..69db5638f0bef9bc9835aa621cd7e500268b839e 100644
--- a/algo/detectors/tof/TrackingInterface.cxx
+++ b/algo/detectors/tof/TrackingInterface.cxx
@@ -28,6 +28,7 @@ void TrackingInterface::Init()
   if (!this->GetContext()) {  // Default parameters for tests
     L_(info) << "TOF: TrackingInterface: no context found, using default setup";
     // Par: tof_v21j_mcbm.digibdf.par
+    // Hardcoded setup, required for DigiEventSelector unittest
     fvNofSm  = {5, 0, 1, 0, 0, 1, 1, 1, 0, 1};
     fvNofRpc = {5, 3, 5, 1, 1, 1, 2, 2, 1, 2};
     fvTrackingStationId.resize(fvNofSm.size());
@@ -42,21 +43,6 @@ void TrackingInterface::Init()
     fvTrackingStationId[8] = {};
     fvTrackingStationId[9] = {2, 2};
   }
-  else if (Opts().RunId() >= 2901) {  // mcbm_beam_2024_03_22_gold
-    fvNofSm  = {5, 0, 1, 0, 0, 1, 1, 0, 0, 2};
-    fvNofRpc = {5, 3, 5, 1, 1, 1, 2, 2, 1, 2};
-    fvTrackingStationId.resize(fvNofSm.size());
-    fvTrackingStationId[0] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    fvTrackingStationId[1] = {};
-    fvTrackingStationId[2] = {5, 5, 5, 5, 5};
-    fvTrackingStationId[3] = {};
-    fvTrackingStationId[4] = {};
-    fvTrackingStationId[5] = {-1};
-    fvTrackingStationId[6] = {1, 2};
-    fvTrackingStationId[7] = {};
-    fvTrackingStationId[8] = {};
-    fvTrackingStationId[9] = {1, 2, 3, 4};
-  }
   else {
     ParFiles parFiles(Opts().RunId());
     auto setup = yaml::ReadFromFile<HitfindSetup>(Opts().ParamsDir() / parFiles.tof.hitfinder);
diff --git a/algo/global/ParFiles.cxx b/algo/global/ParFiles.cxx
index 96285ba4f8d05150cb679d1a3914b8658eee3190..dc4b359db9b5d5be7a50b79c87d18abf91cc73d2 100644
--- a/algo/global/ParFiles.cxx
+++ b/algo/global/ParFiles.cxx
@@ -3,42 +3,75 @@
    Authors: Felix Weiglhofer [committer] */
 #include "ParFiles.h"
 
+#include "Exceptions.h"
+
 using namespace cbm::algo;
 
 ParFiles::ParFiles(uint32_t runId)
 {
-  bool is2024 = 2724 <= runId;
+  if (runId < 2724) {
+    setup = Setup::mCBM2022;
+  }
+  else if (runId < 2918) {
+    setup = Setup::mCBM2024_03;
+  }
+  else {
+    setup = Setup::mCBM2024_05;
+  }
 
-  if (is2024) {
-    sts.readout   = "StsReadout_mcbm2024.yaml";
-    sts.chanMask  = "StsChannelMaskSet_mcbm2024.yaml";
-    sts.walkMap   = "StsWalkMap_mcbm2024.yaml";
-    sts.hitfinder = "StsHitfinder_mcbm2024.yaml";
+  switch (setup) {
 
-    tof.calibrate = "TofCalibratePar_mcbm2024.yaml";
-    tof.hitfinder = "TofHitfinderPar_mcbm2024.yaml";
+    case Setup::mCBM2022:
+      sts.readout   = "StsReadout_mcbm2022.yaml";
+      sts.chanMask  = "StsChannelMaskSet_mcbm2022.yaml";
+      sts.walkMap   = "StsWalkMap_mcbm2022.yaml";
+      sts.hitfinder = "StsHitfinder_mcbm2022.yaml";
 
-    trd.readout     = "TrdReadoutSetup_mcbm2024.yaml";
-    trd.readout2d   = "TrdReadout2DSetup_mcbm2022.yaml";  // TODO: no new readout for TRD2D?
-    trd.hitfinder   = "TrdHitfinderPar_mcbm2024.yaml";
-    trd.hitfinder2d = "TrdHitfinder2DPar_mcbm2024.yaml";
+      tof.calibrate = "TofCalibratePar_mcbm2022.yaml";
+      tof.hitfinder = "TofHitfinderPar_mcbm2022.yaml";
 
-    ca.mainConfig = "TrackingChainConfig_mcbm2024.yaml";
-  }
-  else {  // Assume 2022 setup
-    sts.readout   = "StsReadout_mcbm2022.yaml";
-    sts.chanMask  = "StsChannelMaskSet_mcbm2022.yaml";
-    sts.walkMap   = "StsWalkMap_mcbm2022.yaml";
-    sts.hitfinder = "StsHitfinder_mcbm2022.yaml";
+      trd.readout     = "TrdReadoutSetup_mcbm2022.yaml";
+      trd.readout2d   = "TrdReadout2DSetup_mcbm2022.yaml";
+      trd.hitfinder   = "TrdHitfinderPar_mcbm2022.yaml";
+      trd.hitfinder2d = "TrdHitfinder2DPar_mcbm2022.yaml";
+
+      ca.mainConfig = "TrackingChainConfig_mcbm2022.yaml";
+      break;
+
+    case Setup::mCBM2024_03:
+      sts.readout   = "StsReadout_mcbm2024.yaml";
+      sts.chanMask  = "StsChannelMaskSet_mcbm2024.yaml";
+      sts.walkMap   = "StsWalkMap_mcbm2024.yaml";
+      sts.hitfinder = "StsHitfinder_mcbm2024.yaml";
+
+      tof.calibrate = "TofCalibratePar_mcbm2024.yaml";
+      tof.hitfinder = "TofHitfinderPar_mcbm2024.yaml";
+
+      trd.readout     = "TrdReadoutSetup_mcbm2024.yaml";
+      trd.readout2d   = "TrdReadout2DSetup_mcbm2022.yaml";  // TODO: no new readout for TRD2D?
+      trd.hitfinder   = "TrdHitfinderPar_mcbm2024.yaml";
+      trd.hitfinder2d = "TrdHitfinder2DPar_mcbm2024.yaml";
+
+      ca.mainConfig = "TrackingChainConfig_mcbm2024.yaml";
+      break;
+
+    case Setup::mCBM2024_05:
+      sts.readout   = "StsReadout_mcbm2024.yaml";
+      sts.chanMask  = "StsChannelMaskSet_mcbm2024.yaml";
+      sts.walkMap   = "StsWalkMap_mcbm2024.yaml";
+      sts.hitfinder = "mcbm2024_05/StsHitfinder.yaml";
+
+      tof.calibrate = "mcbm2024_05/TofCalibratePar.yaml";
+      tof.hitfinder = "mcbm2024_05/TofHitfinderPar.yaml";
 
-    tof.calibrate = "TofCalibratePar_mcbm2022.yaml";
-    tof.hitfinder = "TofHitfinderPar_mcbm2022.yaml";
+      trd.readout     = "TrdReadoutSetup_mcbm2024.yaml";
+      trd.readout2d   = "TrdReadout2DSetup_mcbm2022.yaml";  // TODO: no new readout for TRD2D?
+      trd.hitfinder   = "mcbm2024_05/TrdHitfinderPar.yaml";
+      trd.hitfinder2d = "mcbm2024_05/TrdHitfinder2DPar.yaml";
 
-    trd.readout     = "TrdReadoutSetup_mcbm2022.yaml";
-    trd.readout2d   = "TrdReadout2DSetup_mcbm2022.yaml";
-    trd.hitfinder   = "TrdHitfinderPar_mcbm2022.yaml";
-    trd.hitfinder2d = "TrdHitfinder2DPar_mcbm2022.yaml";
+      ca.mainConfig = "mcbm2024_05/TrackingChainConfig.yaml";
+      break;
 
-    ca.mainConfig = "TrackingChainConfig_mcbm2022.yaml";
+    default: throw FatalError("Unknown setup: {}", ToString(setup));
   }
 }
diff --git a/algo/global/ParFiles.h b/algo/global/ParFiles.h
index 877e06e000c78f960265375d78b910688680706a..6c93c908a83c770fec969bbce2518a2e3704161d 100644
--- a/algo/global/ParFiles.h
+++ b/algo/global/ParFiles.h
@@ -8,6 +8,7 @@
  * @brief This file contains the definition of the ParFiles class.
  */
 
+#include "Definitions.h"
 #include "compat/Filesystem.h"
 
 namespace cbm::algo
@@ -21,6 +22,8 @@ namespace cbm::algo
 
     ParFiles(uint32_t runId);
 
+    Setup setup;
+
     struct {
       fs::path readout;
       fs::path chanMask;
diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index fcfdc634aa98497e11e33d879d15ab4349aed62d..a52f9a5ac4f88050be6eb8af5e0f5a99c607fbf3 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -100,6 +100,7 @@ void Reco::Init(const Options& opts)
   fContext.recoParams = yaml::ReadFromFile<RecoParams>(opts.ParamsDir() / "RecoParams.yaml");
 
   ParFiles parFiles(opts.RunId());
+  L_(info) << "Using parameter files for setup " << parFiles.setup;
 
   // Unpackers
   if (Opts().Has(Subsystem::BMON) && Opts().Has(Step::Unpack)) {
diff --git a/external/InstallParameter.cmake b/external/InstallParameter.cmake
index 518fdb959bcb27cbad03411a141762bbb74610a9..aa41ecb0a5a3688443481cdf15a33b62c378ce32 100644
--- a/external/InstallParameter.cmake
+++ b/external/InstallParameter.cmake
@@ -1,4 +1,4 @@
-set(PARAMETER_VERSION b8cfe79ee4091e81d7978e0b889041ac3fc8a0b0) # 2024-05-09
+set(PARAMETER_VERSION 5a38133b717061a8a2c3d386c56d72a02634df12) # 2024-05-09
 
 set(PARAMETER_SRC_URL "https://git.cbm.gsi.de/CbmSoft/cbmroot_parameter.git")
 
diff --git a/reco/steer/CbmOnlineParWrite.cxx b/reco/steer/CbmOnlineParWrite.cxx
index 14a6d5bd8d51226850bbe38fc8fceadfdecaecb5..29c33293334e37bce1fe8a35166a17b486b5df18 100644
--- a/reco/steer/CbmOnlineParWrite.cxx
+++ b/reco/steer/CbmOnlineParWrite.cxx
@@ -91,23 +91,30 @@ void CbmOnlineParWrite::AddTof()
   Double_t dDeadtime = 50.;
 
   TString TofFileFolder = fSrcDir + "/parameters/mcbm/";
+  bool doCalibration    = false;
   TString cCalId        = "490.100.5.0";
   Int_t iCalSet         = 30040500;  // calibration settings
+  TString cFname        = "";
 
   switch (fConfig.setupType) {
     case Setup::mCBM2022:
+      doCalibration = true;
       cCalId  = "2391.5.000";
       iCalSet = 22002500;
       break;
-    case Setup::mCBM2024:
+    case Setup::mCBM2024_03:
+      doCalibration = true;
       cCalId  = "2912.1";
       iCalSet = 012032500;
       break;
+    case Setup::mCBM2024_05: doCalibration = false; break;
     default: throw std::runtime_error("TOF: Unknown setup type");
   }
 
-  TString cFname =
-    Form("%s/%s_set%09d_%02d_%01dtofClust.hst.root", TofFileFolder.Data(), cCalId.Data(), iCalSet, calMode, calSel);
+  if (cFname.IsNull() && doCalibration) {
+    cFname =
+      Form("%s/%s_set%09d_%02d_%01dtofClust.hst.root", TofFileFolder.Data(), cCalId.Data(), iCalSet, calMode, calSel);
+  }
 
   auto* tofCluster = new CbmTaskTofClusterizerParWrite("Task TOF Clusterizer", 0, 1);
   tofCluster->SetCalParFileName(cFname);
@@ -198,11 +205,8 @@ void CbmOnlineParWrite::AddSts()
     sensorParSet->SetParSensor(stsAddress09, sensor6cm);
     sensorParSet->SetParSensor(stsAddress10, sensor6cm);
     sensorParSet->SetParSensor(stsAddress11, sensor6cm);
-
-    // auto *setup = CbmStsSetup::Instance();
-    // setup->Init(); // reuse setup from global setup file
   }
-  else if (fConfig.setupType == Setup::mCBM2024) {
+  else if (fConfig.setupType == Setup::mCBM2024_03 || fConfig.setupType == Setup::mCBM2024_05) {
     uint32_t addr01 = 0x10008012;
     uint32_t addr02 = 0x10018012;
     uint32_t addr03 = 0x10008412;
@@ -241,11 +245,6 @@ void CbmOnlineParWrite::AddSts()
     sensorParSet->SetParSensor(addr10, sensor6cm);
     sensorParSet->SetParSensor(addr11, sensor6cm);
     sensorParSet->SetParSensor(addr00, sensor6cm);
-
-    // auto *setup = CbmStsSetup::Instance();
-    // HACK: wrong geometry in global setup file
-    // setup->Init("/home/weiglhofer/cbm/cbmroot/geometry/sts/sts_v24b_mcbm.geo.root");
-    // setup->Init();
   }
   else {
     throw std::runtime_error("STS: Unknown setup type");
@@ -289,14 +288,13 @@ void CbmOnlineParWrite::Run(const Config& config)
   // -----   In- and output file names   ------------------------------------
 
   // --- Load the geometry setup ----
-  // This is currently only required by the TRD (parameters)
-  cbm::mcbm::ToForceLibLoad dummy;  /// Needed to trigger loading of the library as no fct dict in ROOT6 and CLING
   TString geoSetupTag = "";
   try {
     uint64_t runId = -1;
     switch (fConfig.setupType) {
       case Setup::mCBM2022: runId = 2391; break;
-      case Setup::mCBM2024: runId = 2918; break;
+      case Setup::mCBM2024_03: runId = 2724; break;
+      case Setup::mCBM2024_05: runId = 2918; break;
       default: throw std::runtime_error("Unknown setup type");
     }
     geoSetupTag = cbm::mcbm::GetSetupFromRunId(runId);
@@ -306,6 +304,8 @@ void CbmOnlineParWrite::Run(const Config& config)
     return;
   }
 
+  LOG(info) << "Using geometry setup: " << geoSetupTag;
+
   TString geoFile = fSrcDir + "/macro/mcbm/data/" + geoSetupTag + ".geo.root";
   fSetup          = CbmSetup::Instance();
   fSetup->LoadSetup(geoSetupTag);