diff --git a/JugAlgo/CMakeLists.txt b/JugAlgo/CMakeLists.txt
index 1426c14840f55704af22317f9fa2b80429540e56..32f06aa01610dd31cfc60aaedf1f27caf78a97a7 100644
--- a/JugAlgo/CMakeLists.txt
+++ b/JugAlgo/CMakeLists.txt
@@ -7,7 +7,7 @@
 
 gaudi_add_header_only_library(JugAlgo
   LINK
-  Gaudi::GaudiKernel Gaudi::GaudiAlgLib
+  Gaudi::GaudiKernel
   algorithms::core
   JugBase
 )
@@ -17,7 +17,7 @@ gaudi_add_module(JugAlgoPlugins
   SOURCES
   ${JugAlgoPlugins_sources}
   LINK
-  Gaudi::GaudiKernel Gaudi::GaudiAlgLib
+  Gaudi::GaudiKernel
   JugBase
   JugAlgo
   algorithms::core
diff --git a/JugAlgo/include/JugAlgo/Algorithm.h b/JugAlgo/include/JugAlgo/Algorithm.h
index 0e17e9c7138076983a5a0bd0294626a108ee29ce..ccbe65ddfbe95c3382950fe76f96aba108dc7552 100644
--- a/JugAlgo/include/JugAlgo/Algorithm.h
+++ b/JugAlgo/include/JugAlgo/Algorithm.h
@@ -7,7 +7,7 @@
 #include <algorithms/algorithm.h>
 #include <algorithms/type_traits.h>
 
-#include <GaudiAlg/GaudiAlgorithm.h>
+#include <Gaudi/Algorithm.h>
 #include <GaudiKernel/Service.h>
 #include <JugAlgo/IAlgoServiceSvc.h>
 #include <JugAlgo/detail/DataProxy.h>
@@ -23,7 +23,7 @@
 
 namespace Jug::Algo {
 
-template <class AlgoImpl> class Algorithm : public GaudiAlgorithm {
+template <class AlgoImpl> class Algorithm : public Gaudi::Algorithm {
 public:
   using algo_type   = AlgoImpl;
   using input_type  = typename algo_type::input_type;
@@ -32,7 +32,7 @@ public:
   using Output      = typename algo_type::Output;
 
   Algorithm(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc)
+      : Gaudi::Algorithm(name, svcLoc)
       , m_algo{name}
       , m_output{this, m_algo.outputNames()}
       , m_input{this, m_algo.inputNames()} {
@@ -80,7 +80,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     try {
       m_algo.process(m_input.get(), m_output.get());
     } catch (const std::exception& e) {
diff --git a/JugAlgo/include/JugAlgo/detail/DataProxy.h b/JugAlgo/include/JugAlgo/detail/DataProxy.h
index 8b0677f394e5bb0507246b78125af3a4c707ed2b..92810f0654c1e5e26b39f7b305c57608a9f1e0e5 100644
--- a/JugAlgo/include/JugAlgo/detail/DataProxy.h
+++ b/JugAlgo/include/JugAlgo/detail/DataProxy.h
@@ -7,7 +7,7 @@
 #include <algorithms/algorithm.h>
 #include <algorithms/type_traits.h>
 
-#include <GaudiAlg/GaudiAlgorithm.h>
+#include <Gaudi/Algorithm.h>
 #include <k4FWCore/DataHandle.h>
 
 namespace Jug::Algo::detail {
@@ -135,7 +135,7 @@ public:
   constexpr static size_t kSize = Data::kSize;
   using names_type              = typename Data::key_type;
   using elements_type =
-      decltype(createElements<kMode>(std::declval<GaudiAlgorithm*>(), names_type(), data_type(),
+      decltype(createElements<kMode>(std::declval<Gaudi::Algorithm*>(), names_type(), data_type(),
                                      std::make_index_sequence<kSize>()));
 
   template <class Owner>
diff --git a/JugBase/CMakeLists.txt b/JugBase/CMakeLists.txt
index 0d1d09b2ebfa167c7e1042634c9af559f9c8628b..7a3f0118b394f11a4b57b415308136112b1b9ed3 100644
--- a/JugBase/CMakeLists.txt
+++ b/JugBase/CMakeLists.txt
@@ -7,7 +7,7 @@
 
 gaudi_add_header_only_library(JugBase
   LINK
-  Gaudi::GaudiKernel Gaudi::GaudiAlgLib
+  Gaudi::GaudiKernel
   podio::podioRootIO
   ROOT::Core ROOT::RIO ROOT::Tree
   DD4hep::DDRec
@@ -20,7 +20,7 @@ gaudi_add_module(JugBasePlugins
   SOURCES
   ${JugBasePlugins_sources}
   LINK
-  Gaudi::GaudiKernel Gaudi::GaudiAlgLib
+  Gaudi::GaudiKernel
   ROOT::Core ROOT::RIO ROOT::Tree
   JugBase
   EDM4HEP::edm4hep
diff --git a/JugDigi/CMakeLists.txt b/JugDigi/CMakeLists.txt
index 35d84729659696a7f6bda429029e42942851268f..4d35260ffbcfae5517471543c6823e7b23fe4ba1 100644
--- a/JugDigi/CMakeLists.txt
+++ b/JugDigi/CMakeLists.txt
@@ -10,7 +10,7 @@ gaudi_add_module(JugDigiPlugins
   SOURCES
   ${JugDigiPlugins_sources}
   LINK
-  Gaudi::GaudiAlgLib Gaudi::GaudiKernel
+  Gaudi::GaudiKernel
   JugBase
   ROOT::Core ROOT::RIO ROOT::Tree
   EDM4HEP::edm4hep
diff --git a/JugDigi/src/components/CalorimeterBirksCorr.cpp b/JugDigi/src/components/CalorimeterBirksCorr.cpp
index b29f56414d2191e3e2af0bfcd27b0ad19107c949..9e50b13f839360f0d5632d0124ff6b5e5c177df1 100644
--- a/JugDigi/src/components/CalorimeterBirksCorr.cpp
+++ b/JugDigi/src/components/CalorimeterBirksCorr.cpp
@@ -10,9 +10,7 @@
 #include <algorithm>
 #include <cmath>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "Gaudi/Property.h"
 #include "GaudiKernel/RndmGenerators.h"
@@ -33,24 +31,24 @@ namespace Jug::Digi {
    * \ingroup digi
    * \ingroup calorimetry
    */
-  class CalorimeterBirksCorr : public GaudiAlgorithm {
+  class CalorimeterBirksCorr : public Gaudi::Algorithm {
   public:
 
     // digitization settings
     Gaudi::Property<double> m_birksConstant{this, "birksConstant", 0.126*mm/MeV};
 
-    DataHandle<edm4hep::SimCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+    mutable DataHandle<edm4hep::SimCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                       this};
-    DataHandle<edm4hep::SimCalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+    mutable DataHandle<edm4hep::SimCalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                        this};
 
     SmartIF<IParticleSvc> m_pidSvc;
     // unitless conterpart of arguments
     double birksConstant{0};
 
-    //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
+    //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
     CalorimeterBirksCorr(const std::string& name, ISvcLocator* svcLoc) 
-      : GaudiAlgorithm(name, svcLoc)
+      : Gaudi::Algorithm(name, svcLoc)
     {
       declareProperty("inputHitCollection", m_inputHitCollection, "");
       declareProperty("outputHitCollection", m_outputHitCollection, "");
@@ -58,7 +56,7 @@ namespace Jug::Digi {
 
     StatusCode initialize() override
     {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
 
@@ -76,7 +74,7 @@ namespace Jug::Digi {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override
+    StatusCode execute(const EventContext&) const override
     {
       auto& ohits = *m_outputHitCollection.createAndPut();
       for (const auto& hit : *m_inputHitCollection.get()) {
diff --git a/JugDigi/src/components/CalorimeterHitDigi.cpp b/JugDigi/src/components/CalorimeterHitDigi.cpp
index e71d03bda03128e39e384eff41cbca304978d282..21dc57e240d16868485befb653459dc5ab1bf175 100644
--- a/JugDigi/src/components/CalorimeterHitDigi.cpp
+++ b/JugDigi/src/components/CalorimeterHitDigi.cpp
@@ -14,9 +14,7 @@
 #include <cmath>
 #include <unordered_map>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "Gaudi/Property.h"
 #include "GaudiKernel/RndmGenerators.h"
@@ -44,7 +42,7 @@ namespace Jug::Digi {
    * \ingroup digi
    * \ingroup calorimetry
    */
-  class CalorimeterHitDigi : public GaudiAlgorithm {
+  class CalorimeterHitDigi : public Gaudi::Algorithm {
   public:
     // additional smearing resolutions
     Gaudi::Property<std::vector<double>> u_eRes{this, "energyResolutions", {}}; // a/sqrt(E/GeV) + b + c/(E/GeV)
@@ -80,25 +78,25 @@ namespace Jug::Digi {
     SmartIF<IGeoSvc> m_geoSvc;
     uint64_t         id_mask{0}, ref_mask{0};
 
-    DataHandle<edm4hep::SimCalorimeterHitCollection> m_inputHitCollection{
+    mutable DataHandle<edm4hep::SimCalorimeterHitCollection> m_inputHitCollection{
       "inputHitCollection", Gaudi::DataHandle::Reader, this};
-    DataHandle<edm4hep::RawCalorimeterHitCollection> m_outputHitCollection{
+    mutable DataHandle<edm4hep::RawCalorimeterHitCollection> m_outputHitCollection{
       "outputHitCollection", Gaudi::DataHandle::Writer, this};
 
-    //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
+    //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
     CalorimeterHitDigi(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputHitCollection", m_inputHitCollection, "");
       declareProperty("outputHitCollection", m_outputHitCollection, "");
     }
 
     StatusCode initialize() override
     {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
       // random number generator from service
-      auto randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+      auto randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
       auto sc      = m_normDist.initialize(randSvc, Rndm::Gauss(0.0, 1.0));
       if (!sc.isSuccess()) {
         return StatusCode::FAILURE;
@@ -154,7 +152,7 @@ namespace Jug::Digi {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override
+    StatusCode execute(const EventContext&) const override
     {
       if (!u_fields.value().empty()) {
         signal_sum_digi();
@@ -165,7 +163,7 @@ namespace Jug::Digi {
     }
 
   private:
-    void single_hits_digi() {
+    void single_hits_digi() const {
       // input collections
       const auto* const simhits = m_inputHitCollection.get();
       // Create output collections
@@ -202,7 +200,7 @@ namespace Jug::Digi {
       }
     }
 
-    void signal_sum_digi() {
+    void signal_sum_digi() const {
       const auto* const simhits = m_inputHitCollection.get();
       auto* rawhits = m_outputHitCollection.createAndPut();
 
diff --git a/JugDigi/src/components/PhotoMultiplierDigi.cpp b/JugDigi/src/components/PhotoMultiplierDigi.cpp
index daf42e6aed3ad3fcc5cff8a503142c18b89b0d02..bc63b6f0e63fd81bec4a98c692acbe2c47341daa 100644
--- a/JugDigi/src/components/PhotoMultiplierDigi.cpp
+++ b/JugDigi/src/components/PhotoMultiplierDigi.cpp
@@ -15,9 +15,7 @@
 #include <unordered_map>
 #include <cmath>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 
@@ -38,12 +36,12 @@ namespace Jug::Digi {
  *
  * \ingroup digi
  */
-class PhotoMultiplierDigi : public GaudiAlgorithm
+class PhotoMultiplierDigi : public Gaudi::Algorithm
 {
 public:
-    DataHandle<edm4hep::SimTrackerHitCollection>
+    mutable DataHandle<edm4hep::SimTrackerHitCollection>
         m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-    DataHandle<edm4eic::RawTrackerHitCollection>
+    mutable DataHandle<edm4eic::RawTrackerHitCollection>
         m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer, this};
     Gaudi::Property<std::vector<std::pair<double, double>>>
         u_quantumEfficiency{this, "quantumEfficiency", {{2.6*eV, 0.3}, {7.0*eV, 0.3}}};
@@ -57,7 +55,7 @@ public:
 
     // constructor
     PhotoMultiplierDigi(const std::string& name, ISvcLocator* svcLoc)
-        : GaudiAlgorithm(name, svcLoc)
+        : Gaudi::Algorithm(name, svcLoc)
     {
         declareProperty("inputHitCollection", m_inputHitCollection,"");
         declareProperty("outputHitCollection", m_outputHitCollection, "");
@@ -65,11 +63,11 @@ public:
 
     StatusCode initialize() override
     {
-        if (GaudiAlgorithm::initialize().isFailure()) {
+        if (Gaudi::Algorithm::initialize().isFailure()) {
             return StatusCode::FAILURE;
         }
 
-        auto randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+        auto randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
         auto sc1 = m_rngUni.initialize(randSvc, Rndm::Flat(0., 1.));
         auto sc2 = m_rngNorm.initialize(randSvc, Rndm::Gauss(0., 1.));
         if (!sc1.isSuccess() || !sc2.isSuccess()) {
@@ -82,7 +80,7 @@ public:
         return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override
+    StatusCode execute(const EventContext&) const override
     {
         // input collection
         const auto &sim = *m_inputHitCollection.get();
diff --git a/JugDigi/src/components/SiliconTrackerDigi.cpp b/JugDigi/src/components/SiliconTrackerDigi.cpp
index 18face7fd7a2be7c18a49016fe59605e461f28b9..6772ee6d76c547135515077414006323507781f3 100644
--- a/JugDigi/src/components/SiliconTrackerDigi.cpp
+++ b/JugDigi/src/components/SiliconTrackerDigi.cpp
@@ -5,9 +5,7 @@
 #include <cmath>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 
@@ -27,34 +25,34 @@ namespace Jug::Digi {
  *
  * \ingroup digi
  */
-class SiliconTrackerDigi : public GaudiAlgorithm {
+class SiliconTrackerDigi : public Gaudi::Algorithm {
 private:
   Gaudi::Property<double> m_timeResolution{this, "timeResolution", 10}; // todo : add units
   Gaudi::Property<double> m_threshold{this, "threshold", 0. * Gaudi::Units::keV};
   Rndm::Numbers m_gaussDist;
-  DataHandle<edm4hep::SimTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+  mutable DataHandle<edm4hep::SimTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                     this};
-  DataHandle<edm4eic::RawTrackerHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::RawTrackerHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                   this};
 
 public:
-  //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
-  SiliconTrackerDigi(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
+  SiliconTrackerDigi(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
-    IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+    IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
     StatusCode sc        = m_gaussDist.initialize(randSvc, Rndm::Gauss(0.0, m_timeResolution.value()));
     if (!sc.isSuccess()) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     const auto* const simhits = m_inputHitCollection.get();
     // Create output collections
diff --git a/JugDigi/src/components/SimTrackerHitsCollector.cpp b/JugDigi/src/components/SimTrackerHitsCollector.cpp
index fa3fbc4754a0bd07445f111e055baf5bb17d4ae2..6501a1195df60d8ee0ba79076852ff582b848f51 100644
--- a/JugDigi/src/components/SimTrackerHitsCollector.cpp
+++ b/JugDigi/src/components/SimTrackerHitsCollector.cpp
@@ -2,10 +2,8 @@
 // Copyright (C) 2022 Wouter Deconinck, Whitney Armstrong, Chao Peng
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
 
 #include <k4FWCore/DataHandle.h>
 
@@ -21,16 +19,16 @@ namespace Jug::Digi {
      *
      * \ingroup digi
      */
-    class SimTrackerHitsCollector : public GaudiAlgorithm {
+    class SimTrackerHitsCollector : public Gaudi::Algorithm {
     private:
       Gaudi::Property<std::vector<std::string>> m_inputSimTrackerHits{this, "inputSimTrackerHits", {},"Tracker hits to be aggregated"};
-      DataHandle<edm4hep::SimTrackerHitCollection> m_outputSimTrackerHits{"outputSimTrackerHits", Gaudi::DataHandle::Writer, this};
+      mutable DataHandle<edm4hep::SimTrackerHitCollection> m_outputSimTrackerHits{"outputSimTrackerHits", Gaudi::DataHandle::Writer, this};
 
       std::vector<DataHandle<edm4hep::SimTrackerHitCollection>*> m_hitCollections;
 
     public:
       SimTrackerHitsCollector(const std::string& name, ISvcLocator* svcLoc)
-          : GaudiAlgorithm(name, svcLoc)
+          : Gaudi::Algorithm(name, svcLoc)
       {
         declareProperty("outputSimTrackerHits", m_outputSimTrackerHits, "output hits combined into single collection");
       }
@@ -41,7 +39,7 @@ namespace Jug::Digi {
       }
 
       StatusCode initialize() override {
-        if (GaudiAlgorithm::initialize().isFailure()) {
+        if (Gaudi::Algorithm::initialize().isFailure()) {
           return StatusCode::FAILURE;
         }
         for (auto colname : m_inputSimTrackerHits) {
@@ -51,7 +49,7 @@ namespace Jug::Digi {
         return StatusCode::SUCCESS;
       }
 
-      StatusCode execute() override
+      StatusCode execute(const EventContext&) const override
       {
         auto* outputHits = m_outputSimTrackerHits.createAndPut();
         if (msgLevel(MSG::DEBUG)) {
diff --git a/JugFast/CMakeLists.txt b/JugFast/CMakeLists.txt
index b9d9810f357591a31154139e9060bce957264840..daec257e92025b39174afd6de34f5c63c9a2d77e 100644
--- a/JugFast/CMakeLists.txt
+++ b/JugFast/CMakeLists.txt
@@ -10,7 +10,7 @@ gaudi_add_module(JugFastPlugins
   SOURCES
   ${JugFastPlugins_sources}
   LINK
-  Gaudi::GaudiAlgLib Gaudi::GaudiKernel
+  Gaudi::GaudiKernel
   JugBase
   JugAlgo
   algorithms::core algorithms::truth
diff --git a/JugFast/src/components/ClusterMerger.cpp b/JugFast/src/components/ClusterMerger.cpp
index 07465ad63dc2a93cbf765c4ba40bd7d46788ddae..ccc4b42ee1c47c06c64eb639def645a0e9a83daf 100644
--- a/JugFast/src/components/ClusterMerger.cpp
+++ b/JugFast/src/components/ClusterMerger.cpp
@@ -7,9 +7,7 @@
 #include <fmt/format.h>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -28,17 +26,17 @@ namespace Jug::Fast {
  *
  * \ingroup fast
  */
-class ClusterMerger : public GaudiAlgorithm {
+class ClusterMerger : public Gaudi::Algorithm {
 private:
   // Input
-  DataHandle<edm4eic::ClusterCollection> m_inputClusters{"InputClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_inputAssociations{"InputAssociations", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_inputClusters{"InputClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_inputAssociations{"InputAssociations", Gaudi::DataHandle::Reader, this};
   // Output
-  DataHandle<edm4eic::ClusterCollection> m_outputClusters{"OutputClusters", Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_outputAssociations{"OutputAssociations", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_outputClusters{"OutputClusters", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_outputAssociations{"OutputAssociations", Gaudi::DataHandle::Writer, this};
 public:
   ClusterMerger(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputClusters", m_inputClusters, "Input cluster collection");
     declareProperty("inputAssociations", m_inputAssociations, "Input cluster association");
     declareProperty("outputClusters", m_outputClusters, "Cluster collection with good energy precision");
@@ -46,14 +44,14 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     if (msgLevel(MSG::DEBUG)) {
       debug() << "Merging cluster that belong to the same primary particle" << endmsg;
     }
diff --git a/JugFast/src/components/InclusiveKinematicsTruth.cpp b/JugFast/src/components/InclusiveKinematicsTruth.cpp
index 822e8c179bd88ce1c3d430604acd4285b4fedfc1..d5f7f3f755c757629448dfdc5378de9925e27536 100644
--- a/JugFast/src/components/InclusiveKinematicsTruth.cpp
+++ b/JugFast/src/components/InclusiveKinematicsTruth.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -26,13 +23,13 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Fast {
 
-class InclusiveKinematicsTruth : public GaudiAlgorithm {
+class InclusiveKinematicsTruth : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -44,13 +41,13 @@ private:
 
 public:
   InclusiveKinematicsTruth(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("outputInclusiveKinematics", m_outputInclusiveKinematicsCollection, "InclusiveKinematicsTruth");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -68,7 +65,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     // output collection
diff --git a/JugFast/src/components/MatchClusters.cpp b/JugFast/src/components/MatchClusters.cpp
index 553f33e3ad2d2716b80d92b1167c75217e3d8f05..0e0d9780d4e05a4ec4e6713ca0e9a6876b2ad33f 100644
--- a/JugFast/src/components/MatchClusters.cpp
+++ b/JugFast/src/components/MatchClusters.cpp
@@ -10,10 +10,7 @@
 
 #include <fmt/format.h>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -29,13 +26,13 @@
 
 namespace Jug::Fast {
 
-class MatchClusters : public GaudiAlgorithm {
+class MatchClusters : public Gaudi::Algorithm {
 private:
   // input data
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"MCParticles", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticles{"ReconstructedChargedParticles",
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"MCParticles", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticles{"ReconstructedChargedParticles",
                                                                     Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticlesAssoc{"ReconstructedChargedParticlesAssoc",
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticlesAssoc{"ReconstructedChargedParticlesAssoc",
                                                                     Gaudi::DataHandle::Reader, this};
   Gaudi::Property<std::vector<std::string>> m_inputClusters{this, "inputClusters", {}, "Clusters to be aggregated"};
   Gaudi::Property<std::vector<std::string>> m_inputClustersAssoc{this, "inputClustersAssoc", {}, "Cluster associations to be aggregated"};
@@ -43,14 +40,14 @@ private:
   std::vector<DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection>*> m_inputClustersAssocCollections;
 
   // output data
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"ReconstructedParticles",
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"ReconstructedParticles",
                                                                      Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_outputParticlesAssoc{"ReconstructedParticlesAssoc",
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_outputParticlesAssoc{"ReconstructedParticlesAssoc",
                                                                      Gaudi::DataHandle::Writer, this};
 
 public:
   MatchClusters(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticles, "MCParticles");
     declareProperty("inputParticles", m_inputParticles, "ReconstructedChargedParticles");
     declareProperty("inputParticlesAssoc", m_inputParticlesAssoc, "ReconstructedChargedParticlesAssoc");
@@ -59,14 +56,14 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_inputClustersCollections = getClusterCollections(m_inputClusters);
     m_inputClustersAssocCollections = getClusterAssociations(m_inputClustersAssoc);
     return StatusCode::SUCCESS;
   }
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     if (msgLevel(MSG::DEBUG)) {
       debug() << "Processing cluster info for new event" << endmsg;
     }
diff --git a/JugFast/src/components/ScatteredElectronFinder.cpp b/JugFast/src/components/ScatteredElectronFinder.cpp
index 9e7c6fd0893d7702782bfc30ad9fe02dd487ff38..e9f056b51325af099d0048c39a27385f4f93a7e6 100644
--- a/JugFast/src/components/ScatteredElectronFinder.cpp
+++ b/JugFast/src/components/ScatteredElectronFinder.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -23,29 +20,29 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Fast {
 
-class ScatteredElectronFinder : public GaudiAlgorithm {
+class ScatteredElectronFinder : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4hep::MCParticleCollection> m_outputMCScatteredElectron{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_outputMCScatteredElectron{
     "outputMCScatteredElectron",
     Gaudi::DataHandle::Writer,
     this};
 
 public:
   ScatteredElectronFinder(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("outputMCScatteredElectron", m_outputMCScatteredElectron, "MCScatteredElectron");
   }
 
   StatusCode initialize() override {
-    return GaudiAlgorithm::initialize();
+    return Gaudi::Algorithm::initialize();
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     // output collection
diff --git a/JugFast/src/components/SmearedFarForwardParticles.cpp b/JugFast/src/components/SmearedFarForwardParticles.cpp
index 69b306acf62148cedf2bdac58e7a9b9650b896f3..c421c3afbcdc412b514d74af28c97dcb9a89562c 100644
--- a/JugFast/src/components/SmearedFarForwardParticles.cpp
+++ b/JugFast/src/components/SmearedFarForwardParticles.cpp
@@ -5,10 +5,7 @@
 #include <cmath>
 #include <fmt/format.h>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -25,12 +22,12 @@ enum DetectorTags { kTagB0 = 1, kTagRP = 2, kTagOMD = 3, kTagZDC = 4 };
 
 namespace Jug::Fast {
 
-class SmearedFarForwardParticles : public GaudiAlgorithm {
+class SmearedFarForwardParticles : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"SmearedFarForwardParticles",
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"SmearedFarForwardParticles",
                                                                       Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_outputAssocCollection{"MCRecoParticleAssociation",
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_outputAssocCollection{"MCRecoParticleAssociation",
                                                                                 Gaudi::DataHandle::Writer, this};
 
   Gaudi::Property<bool> m_enableZDC{this, "enableZDC", true};
@@ -71,16 +68,16 @@ private:
   using RecData = std::pair<RecPart, Assoc>;
 
 public:
-  SmearedFarForwardParticles(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  SmearedFarForwardParticles(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticles, "MCParticles");
     declareProperty("outputParticles", m_outputParticles, "ReconstructedParticles");
     declareProperty("outputAssociations", m_outputAssocCollection, "MCRecoParticleAssociation");
   }
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
-    IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+    IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
     // use 0 for mean and 1 for standard deviation. Can rescale appropriately for the
     // different subsystems
     StatusCode sc = m_gaussDist.initialize(randSvc, Rndm::Gauss(0.0, 1.0));
@@ -89,7 +86,7 @@ public:
     }
     return StatusCode::SUCCESS;
   }
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     const auto& mc = *(m_inputMCParticles.get());
     auto& rc       = *(m_outputParticles.createAndPut());
     auto& assoc    = *(m_outputAssocCollection.createAndPut());
@@ -145,7 +142,7 @@ public:
 private:
   // ZDC smearing as in eic_smear
   // https://github.com/eic/eicsmeardetectors/blob/9a1831dd97bf517b80a06043b9ee4bfb96b483d8/SmearMatrixDetector_0_1_FF.cxx#L224
-  std::vector<RecData> zdc(const edm4hep::MCParticleCollection& mc, const double /* ionBeamEnergy */) {
+  std::vector<RecData> zdc(const edm4hep::MCParticleCollection& mc, const double /* ionBeamEnergy */) const {
     std::vector<RecData> rc;
     for (const auto& part : mc) {
       if (part.getGeneratorStatus() > 1) {
@@ -229,7 +226,7 @@ private:
   }
   // Fast B0 as in
   // https://github.com/eic/eicsmeardetectors/blob/9a1831dd97bf517b80a06043b9ee4bfb96b483d8/SmearMatrixDetector_0_1_FF.cxx#L254
-  std::vector<RecData> b0(const edm4hep::MCParticleCollection& mc, const double /* ionBeamEnergy */) {
+  std::vector<RecData> b0(const edm4hep::MCParticleCollection& mc, const double /* ionBeamEnergy */) const {
     std::vector<RecData> rc;
     for (const auto& part : mc) {
       if (part.getGeneratorStatus() > 1) {
@@ -274,7 +271,7 @@ private:
     return rc;
   }
 
-  std::vector<RecData> rp(const edm4hep::MCParticleCollection& mc, const double ionBeamEnergy) {
+  std::vector<RecData> rp(const edm4hep::MCParticleCollection& mc, const double ionBeamEnergy) const {
     std::vector<RecData> rc;
     for (const auto& part : mc) {
       if (part.getGeneratorStatus() > 1) {
@@ -312,7 +309,7 @@ private:
     return rc;
   }
 
-  std::vector<RecData> omd(const edm4hep::MCParticleCollection& mc, const double ionBeamEnergy) {
+  std::vector<RecData> omd(const edm4hep::MCParticleCollection& mc, const double ionBeamEnergy) const {
     std::vector<RecData> rc;
     for (const auto& part : mc) {
       if (part.getGeneratorStatus() > 1) {
@@ -350,7 +347,7 @@ private:
 
   // all momentum smearing in EIC-smear for the far-forward region uses
   // the same 2 relations for P and Pt smearing (B0, RP, OMD)
-  RecData smearMomentum(const edm4hep::MCParticle& part) {
+  RecData smearMomentum(const edm4hep::MCParticle& part) const {
     const auto mom_ion = rotateLabToIonDirection(part.getMomentum());
     const double p     = std::hypot(mom_ion.x, mom_ion.y, mom_ion.z);
     const double dp    = (0.025 * p) * m_gaussDist();
@@ -392,21 +389,24 @@ private:
   }
 
   // Rotate 25mrad about the y-axis
-  edm4hep::Vector3f rotateLabToIonDirection(const edm4hep::Vector3f& vec) const {
+  template<typename Vector3>
+  Vector3 rotateLabToIonDirection(const Vector3& vec) const {
     const auto sth = sin(-m_crossingAngle);
     const auto cth = cos(-m_crossingAngle);
     return {static_cast<float>(cth * vec.x + sth * vec.z), static_cast<float>(vec.y),
             static_cast<float>(-sth * vec.x + cth * vec.z)};
   }
 
-  edm4hep::Vector3f rotateIonToLabDirection(const edm4hep::Vector3f& vec) const {
+  template<typename Vector3>
+  Vector3 rotateIonToLabDirection(const Vector3& vec) const {
     const auto sth = sin(m_crossingAngle);
     const auto cth = cos(m_crossingAngle);
     return {static_cast<float>(cth * vec.x + sth * vec.z), static_cast<float>(vec.y),
             static_cast<float>(-sth * vec.x + cth * vec.z)};
   }
 
-  edm4hep::Vector3f removeCrossingAngle(const edm4hep::Vector3f& vec) const {
+  template<typename Vector3>
+  Vector3 removeCrossingAngle(const Vector3& vec) const {
     const auto sth = std::sin(-m_crossingAngle);
     const auto cth = std::cos(-m_crossingAngle);
     return {static_cast<float>(cth * vec.x + sth * vec.z), static_cast<float>(vec.y),
diff --git a/JugFast/src/components/TruthClustering.cpp b/JugFast/src/components/TruthClustering.cpp
index 1f2f3b16556acfa3832ecd98963a27328d23aca7..b4165bb26966ff9a88cad3d09502eb0df0ec01f9 100644
--- a/JugFast/src/components/TruthClustering.cpp
+++ b/JugFast/src/components/TruthClustering.cpp
@@ -4,9 +4,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -33,28 +31,28 @@ namespace Jug::Fast {
  *
  * \ingroup reco
  */
-class TruthClustering : public GaudiAlgorithm {
+class TruthClustering : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits{"inputHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4hep::SimCalorimeterHitCollection> m_mcHits{"mcHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoClusters{"outputProtoClusters", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits{"inputHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4hep::SimCalorimeterHitCollection> m_mcHits{"mcHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoClusters{"outputProtoClusters", Gaudi::DataHandle::Writer, this};
 
 public:
   TruthClustering(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHits", m_inputHits, "Input calorimeter reco hits");
     declareProperty("mcHits", m_mcHits, "Input truth hits");
     declareProperty("outputProtoClusters", m_outputProtoClusters, "Output proto clusters");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& hits = *m_inputHits.get();
     const auto& mc   = *m_mcHits.get();
diff --git a/JugFast/src/components/TruthEnergyPositionClusterMerger.cpp b/JugFast/src/components/TruthEnergyPositionClusterMerger.cpp
index 7fd5b49580e2f92acfeec2f8a90eefdd25f6ac31..6554a2eca1d04d31da9ccba95ccadba1584fa556 100644
--- a/JugFast/src/components/TruthEnergyPositionClusterMerger.cpp
+++ b/JugFast/src/components/TruthEnergyPositionClusterMerger.cpp
@@ -7,9 +7,7 @@
 #include <fmt/format.h>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -32,21 +30,21 @@ namespace Jug::Fast {
  *
  * \ingroup reco
  */
-class TruthEnergyPositionClusterMerger : public GaudiAlgorithm {
+class TruthEnergyPositionClusterMerger : public Gaudi::Algorithm {
 private:
   // Input
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"MCParticles", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ClusterCollection> m_energyClusters{"EnergyClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_energyAssociations{"EnergyAssociations", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ClusterCollection> m_positionClusters{"PositionClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_positionAssociations{"PositionAssociations", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"MCParticles", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_energyClusters{"EnergyClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_energyAssociations{"EnergyAssociations", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_positionClusters{"PositionClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_positionAssociations{"PositionAssociations", Gaudi::DataHandle::Reader, this};
   // Output
-  DataHandle<edm4eic::ClusterCollection> m_outputClusters{"OutputClusters", Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_outputAssociations{"OutputAssociations", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_outputClusters{"OutputClusters", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection> m_outputAssociations{"OutputAssociations", Gaudi::DataHandle::Writer, this};
 
 public:
   TruthEnergyPositionClusterMerger(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticles, "MCParticles");
     declareProperty("inputEnergyClusters", m_energyClusters, "Cluster collection with good energy precision");
     declareProperty("inputEnergyAssociations", m_energyAssociations, "Cluster association with good energy precision");
@@ -58,7 +56,7 @@ public:
 
   StatusCode initialize() override { return StatusCode::SUCCESS; }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     if (msgLevel(MSG::DEBUG)) {
       debug() << "Merging energy and position clusters for new event" << endmsg;
     }
diff --git a/JugPID/CMakeLists.txt b/JugPID/CMakeLists.txt
index 34f30bfc791a193a9ca84a4eb90862d07cb5bbc0..205eb5a628d0b2afa6d9b547bd67bd7905a9624a 100644
--- a/JugPID/CMakeLists.txt
+++ b/JugPID/CMakeLists.txt
@@ -10,7 +10,7 @@ gaudi_add_module(JugPIDPlugins
   SOURCES
   ${JugPIDPlugins_sources}
   LINK
-  Gaudi::GaudiAlgLib Gaudi::GaudiKernel
+  Gaudi::GaudiKernel
   ROOT::Core ROOT::RIO ROOT::Tree
   EDM4HEP::edm4hep
   EDM4EIC::edm4eic
diff --git a/JugPID/src/components/PhotoRingClusters.cpp b/JugPID/src/components/PhotoRingClusters.cpp
index d2a7fa156c1ffedaac6841a678743c93d0861347..89b4c5042243c1c278a5f26da3a862f5e1f57354 100644
--- a/JugPID/src/components/PhotoRingClusters.cpp
+++ b/JugPID/src/components/PhotoRingClusters.cpp
@@ -11,9 +11,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -39,10 +37,10 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class PhotoRingClusters : public GaudiAlgorithm {
+class PhotoRingClusters : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::PMTHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::RingImageCollection> m_outputClusterCollection{"outputClusterCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::PMTHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::RingImageCollection> m_outputClusterCollection{"outputClusterCollection", Gaudi::DataHandle::Writer,
                                                                   this};
   // @TODO
   // A more realistic way is to have tracker info as the input to determine how much clusters should be found
@@ -55,14 +53,14 @@ private:
   SmartIF<IGeoSvc> m_geoSvc;
 
 public:
-  // ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
-  PhotoRingClusters(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  // ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
+  PhotoRingClusters(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputClusterCollection", m_outputClusterCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -74,7 +72,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& rawhits = *m_inputHitCollection.get();
     // Create output collections
diff --git a/JugReco/CMakeLists.txt b/JugReco/CMakeLists.txt
index 2ce55022e73c3d61e712d2dd012cf994c9e52721..cd91d7f0a2ac8f4a8bdfe610745965ffaba57898 100644
--- a/JugReco/CMakeLists.txt
+++ b/JugReco/CMakeLists.txt
@@ -10,7 +10,7 @@ gaudi_add_module(JugRecoPlugins
   SOURCES
   ${JugRecoPlugins_sources}
   LINK
-  Gaudi::GaudiAlgLib Gaudi::GaudiKernel
+  Gaudi::GaudiKernel
   JugBase JugAlgo
   algorithms::core algorithms::calorimetry
   ROOT::Core ROOT::RIO ROOT::Tree
diff --git a/JugReco/src/components/CalorimeterHitReco.cpp b/JugReco/src/components/CalorimeterHitReco.cpp
index 8f7333233ac6a0a080730b2223ea33277efc6287..0850a859cfe6ece3ad30d2779a9f91104dd683c1 100644
--- a/JugReco/src/components/CalorimeterHitReco.cpp
+++ b/JugReco/src/components/CalorimeterHitReco.cpp
@@ -11,9 +11,7 @@
 #include <bitset>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -38,7 +36,7 @@ namespace Jug::Reco {
  * Reconstruct digitized outputs, paired with Jug::Digi::CalorimeterHitDigi
  * \ingroup reco
  */
-class CalorimeterHitReco : public GaudiAlgorithm {
+class CalorimeterHitReco : public Gaudi::Algorithm {
 private:
   // length unit from dd4hep, should be fixed
   Gaudi::Property<double> m_lUnit{this, "lengthUnit", dd4hep::mm};
@@ -62,9 +60,9 @@ private:
   double thresholdADC{0};
   double stepTDC{0};
 
-  DataHandle<edm4hep::RawCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+  mutable DataHandle<edm4hep::RawCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                     this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                   this};
 
   // geometry service to get ids, ignored if no names provided
@@ -81,17 +79,17 @@ private:
   // if nothing is provided, the lowest level DetElement (from cellID) will be used
   Gaudi::Property<std::string> m_localDetElement{this, "localDetElement", ""};
   Gaudi::Property<std::vector<std::string>> u_localDetFields{this, "localDetFields", {}};
-  dd4hep::DetElement local;
+  mutable dd4hep::DetElement local;
   size_t local_mask = ~0;
 
 public:
-  CalorimeterHitReco(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  CalorimeterHitReco(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -160,7 +158,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& rawhits = *m_inputHitCollection.get();
     // create output collections
diff --git a/JugReco/src/components/CalorimeterHitsEtaPhiProjector.cpp b/JugReco/src/components/CalorimeterHitsEtaPhiProjector.cpp
index a663a12f1cff659a7e745afc0d790cf75d044f77..f35d3014fc64667b34dec515066fa2d599a6fb35 100644
--- a/JugReco/src/components/CalorimeterHitsEtaPhiProjector.cpp
+++ b/JugReco/src/components/CalorimeterHitsEtaPhiProjector.cpp
@@ -16,9 +16,7 @@
 #include <unordered_map>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -56,24 +54,24 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class CalorimeterHitsEtaPhiProjector : public GaudiAlgorithm {
+class CalorimeterHitsEtaPhiProjector : public Gaudi::Algorithm {
 private:
   Gaudi::Property<std::vector<double>> u_gridSizes{this, "gridSizes", {0.001, 0.001 * rad}};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                   this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                    this};
 
   double gridSizes[2]{0.0, 0.0};
 
 public:
-  CalorimeterHitsEtaPhiProjector(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  CalorimeterHitsEtaPhiProjector(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -87,7 +85,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // Create output collections
     auto& mhits = *m_outputHitCollection.createAndPut();
 
diff --git a/JugReco/src/components/CalorimeterHitsMerger.cpp b/JugReco/src/components/CalorimeterHitsMerger.cpp
index 370d25a820eb004ee5a6ab9cead9f70271aec32b..bc4dbd966b90d9287695df33f1c70aac3ce328d4 100644
--- a/JugReco/src/components/CalorimeterHitsMerger.cpp
+++ b/JugReco/src/components/CalorimeterHitsMerger.cpp
@@ -13,9 +13,7 @@
 #include <unordered_map>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -45,7 +43,7 @@ namespace Jug::Reco {
  *
  *  \ingroup reco
  */
-class CalorimeterHitsMerger : public GaudiAlgorithm {
+class CalorimeterHitsMerger : public Gaudi::Algorithm {
 private:
   Gaudi::Property<std::string> m_geoSvcName{this, "geoServiceName", "GeoSvc"};
   Gaudi::Property<std::string> m_readout{this, "readoutClass", ""};
@@ -53,8 +51,8 @@ private:
   Gaudi::Property<std::vector<std::string>> u_fields{this, "fields", {"layer"}};
   // reference field numbers to locate position for each merged hits group
   Gaudi::Property<std::vector<int>> u_refs{this, "fieldRefNumbers", {}};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                   this};
 
   SmartIF<IGeoSvc> m_geoSvc;
@@ -63,13 +61,13 @@ private:
   uint64_t id_mask{0}, ref_mask{0};
 
 public:
-  CalorimeterHitsMerger(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  CalorimeterHitsMerger(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -107,7 +105,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& inputs = *m_inputHitCollection.get();
     // Create output collections
diff --git a/JugReco/src/components/CalorimeterIslandCluster.cpp b/JugReco/src/components/CalorimeterIslandCluster.cpp
index cabd6c6831e63429cf35fd3c742e5f4a83173b5d..8687272d832c09ae979664d91a929615fc16f60b 100644
--- a/JugReco/src/components/CalorimeterIslandCluster.cpp
+++ b/JugReco/src/components/CalorimeterIslandCluster.cpp
@@ -19,9 +19,7 @@
 #include "fmt/format.h"
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -137,13 +135,13 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class CalorimeterIslandCluster : public GaudiAlgorithm {
+class CalorimeterIslandCluster : public Gaudi::Algorithm {
 private:
   Gaudi::Property<bool> m_splitCluster{this, "splitCluster", true};
   Gaudi::Property<double> m_minClusterHitEdep{this, "minClusterHitEdep", 0.};
   Gaudi::Property<double> m_minClusterCenterEdep{this, "minClusterCenterEdep", 50.0 * MeV};
-  DataHandle<CaloHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoCollection{"outputProtoClusterCollection",
+  mutable DataHandle<CaloHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoCollection{"outputProtoClusterCollection",
                                                                   Gaudi::DataHandle::Writer, this};
 
   Gaudi::Property<std::string> m_geoSvcName{this, "geoServiceName", "GeoSvc"};
@@ -172,13 +170,13 @@ private:
   dd4hep::IDDescriptor m_idSpec;
 
 public:
-  CalorimeterIslandCluster(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  CalorimeterIslandCluster(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputProtoClusterCollection", m_outputProtoCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -288,7 +286,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& hits = *(m_inputHitCollection.get());
     // Create output collections
diff --git a/JugReco/src/components/EnergyPositionClusterMerger.cpp b/JugReco/src/components/EnergyPositionClusterMerger.cpp
index efd970a0d9e3f0c0ba4184e9e634de5f9cac69ac..353fc927b75b219fb0a23ccba45c6f344ba61f2e 100644
--- a/JugReco/src/components/EnergyPositionClusterMerger.cpp
+++ b/JugReco/src/components/EnergyPositionClusterMerger.cpp
@@ -7,9 +7,7 @@
 #include <fmt/format.h>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -34,13 +32,13 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class EnergyPositionClusterMerger : public GaudiAlgorithm {
+class EnergyPositionClusterMerger : public Gaudi::Algorithm {
 private:
   // Input
-  DataHandle<edm4eic::ClusterCollection> m_energyClusters{"energyClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ClusterCollection> m_positionClusters{"positionClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_energyClusters{"energyClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_positionClusters{"positionClusters", Gaudi::DataHandle::Reader, this};
   // Output
-  DataHandle<edm4eic::ClusterCollection> m_outputClusters{"outputClusters", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_outputClusters{"outputClusters", Gaudi::DataHandle::Writer, this};
   // Negative values mean the tolerance check is disabled
   Gaudi::Property<double> m_zToleranceUnits{this, "zTolerance", -1 * cm};
   Gaudi::Property<double> m_phiToleranceUnits{this, "phiTolerance", 20 * degree};
@@ -50,7 +48,7 @@ private:
   double m_phiTolerance{0};
 
 public:
-  EnergyPositionClusterMerger(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  EnergyPositionClusterMerger(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("energyClusters", m_energyClusters, "Cluster collection with good energy precision");
     declareProperty("positionClusters", m_positionClusters, "Cluster collection with good position precision");
     declareProperty("outputClusters", m_outputClusters, "");
@@ -62,7 +60,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input
     const auto& e_clus   = *(m_energyClusters.get());
     const auto& pos_clus = *(m_positionClusters.get());
diff --git a/JugReco/src/components/FarForwardParticles.cpp b/JugReco/src/components/FarForwardParticles.cpp
index 5a0097c11fec313a800e5f8bcb8e7ea722f5dc9b..e31110d84250b35b7ca480c4d6cc8117d360a28d 100644
--- a/JugReco/src/components/FarForwardParticles.cpp
+++ b/JugReco/src/components/FarForwardParticles.cpp
@@ -5,10 +5,7 @@
 #include <cmath>
 #include <fmt/format.h>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 
 #include "DDRec/CellIDPositionConverter.h"
@@ -25,10 +22,10 @@
 
 namespace Jug::Reco {
 
-class FarForwardParticles : public GaudiAlgorithm {
+class FarForwardParticles : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"FarForwardTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"FarForwardTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
                                                                      this};
 
   //----- Define constants here ------
@@ -51,7 +48,7 @@ private:
 
   Gaudi::Property<std::string> m_localDetElement{this, "localDetElement", ""};
   Gaudi::Property<std::vector<std::string>> u_localDetFields{this, "localDetFields", {}};
-  dd4hep::DetElement local;
+  mutable dd4hep::DetElement local;
   size_t local_mask = ~0;
 
   const double aXRP[2][2] = {{2.102403743, 29.11067626}, {0.186640381, 0.192604619}};
@@ -61,7 +58,7 @@ private:
   double aYRPinv[2][2] = {{0.0, 0.0}, {0.0, 0.0}};
 
 public:
-  FarForwardParticles(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  FarForwardParticles(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputCollection", m_inputHitCollection, "FarForwardTrackerHits");
     declareProperty("outputCollection", m_outputParticles, "ReconstructedParticles");
   }
@@ -74,7 +71,7 @@ public:
   // include the Eigen libraries, used in ACTS, for the linear algebra.
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service(m_geoSvcName);
@@ -153,7 +150,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     const edm4eic::TrackerHitCollection* rawhits = m_inputHitCollection.get();
     auto& rc                                 = *(m_outputParticles.createAndPut());
 
diff --git a/JugReco/src/components/FarForwardParticlesOMD.cpp b/JugReco/src/components/FarForwardParticlesOMD.cpp
index 0e00547997f1485086574440931620618bb1b6b0..e8fbe84bf6382ea624ff7f4e1fe45aa7a340b775 100644
--- a/JugReco/src/components/FarForwardParticlesOMD.cpp
+++ b/JugReco/src/components/FarForwardParticlesOMD.cpp
@@ -5,10 +5,7 @@
 #include <cmath>
 #include <fmt/format.h>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -20,10 +17,10 @@
 
 namespace Jug::Reco {
 
-class FarForwardParticlesOMD : public GaudiAlgorithm {
+class FarForwardParticlesOMD : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"FarForwardTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"FarForwardTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
                                                                      this};
 
   //----- Define constants here ------
@@ -43,13 +40,13 @@ private:
 
 public:
   FarForwardParticlesOMD(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputCollection", m_inputHitCollection, "FarForwardTrackerHits");
     declareProperty("outputCollection", m_outputParticles, "ReconstructedParticles");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     double det = aXOMD[0][0] * aXOMD[1][1] - aXOMD[0][1] * aXOMD[1][0];
@@ -74,7 +71,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     const edm4eic::TrackerHitCollection* rawhits = m_inputHitCollection.get();
     auto& rc                                 = *(m_outputParticles.createAndPut());
 
diff --git a/JugReco/src/components/ImagingClusterReco.cpp b/JugReco/src/components/ImagingClusterReco.cpp
index f89e2bc7a1ca03642585492240dc21d170501ca0..4d68ed64c799cf9c9bcd1cd482a764363b8d07fc 100644
--- a/JugReco/src/components/ImagingClusterReco.cpp
+++ b/JugReco/src/components/ImagingClusterReco.cpp
@@ -12,9 +12,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -47,13 +45,13 @@ namespace Jug::Reco {
  *
  *  \ingroup reco
  */
-class ImagingClusterReco : public GaudiAlgorithm {
+class ImagingClusterReco : public Gaudi::Algorithm {
 private:
   Gaudi::Property<int> m_trackStopLayer{this, "trackStopLayer", 9};
 
-  DataHandle<edm4eic::ProtoClusterCollection> m_inputProtoClusters{"inputProtoClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ClusterCollection> m_outputLayers{"outputLayers", Gaudi::DataHandle::Writer, this};
-  DataHandle<edm4eic::ClusterCollection> m_outputClusters{"outputClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ProtoClusterCollection> m_inputProtoClusters{"inputProtoClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_outputLayers{"outputLayers", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_outputClusters{"outputClusters", Gaudi::DataHandle::Reader, this};
 
   // Collection for MC hits when running on MC
   Gaudi::Property<std::string> m_mcHits{this, "mcHits", ""};
@@ -66,14 +64,14 @@ private:
   std::unique_ptr<DataHandle<edm4eic::MCRecoClusterParticleAssociationCollection>> m_outputAssociations_ptr;
 
 public:
-  ImagingClusterReco(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ImagingClusterReco(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputProtoClusters", m_inputProtoClusters, "");
     declareProperty("outputLayers", m_outputLayers, "");
     declareProperty("outputClusters", m_outputClusters, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -94,7 +92,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& proto = *m_inputProtoClusters.get();
     // output collections
@@ -195,7 +193,7 @@ public:
 private:
   template <typename T> static inline T pow2(const T& x) { return x * x; }
 
-  static std::vector<edm4eic::MutableCluster> reconstruct_cluster_layers(const edm4eic::ProtoCluster& pcl) {
+  std::vector<edm4eic::MutableCluster> reconstruct_cluster_layers(const edm4eic::ProtoCluster& pcl) const {
     const auto& hits    = pcl.getHits();
     const auto& weights = pcl.getWeights();
     // using map to have hits sorted by layer
@@ -218,7 +216,7 @@ private:
     return cl_layers;
   }
 
-  static edm4eic::MutableCluster reconstruct_layer(const std::vector<std::pair<edm4eic::CalorimeterHit, float>>& hits) {
+ edm4eic::MutableCluster reconstruct_layer(const std::vector<std::pair<edm4eic::CalorimeterHit, float>>& hits) const {
     edm4eic::MutableCluster layer;
     layer.setType(ClusterType::kClusterSlice);
     // Calculate averages
@@ -257,7 +255,7 @@ private:
     return layer;
   }
 
-  edm4eic::MutableCluster reconstruct_cluster(const edm4eic::ProtoCluster& pcl) {
+  edm4eic::MutableCluster reconstruct_cluster(const edm4eic::ProtoCluster& pcl) const {
     edm4eic::MutableCluster cluster;
 
     const auto& hits    = pcl.getHits();
diff --git a/JugReco/src/components/ImagingPixelDataCombiner.cpp b/JugReco/src/components/ImagingPixelDataCombiner.cpp
index 9d93a1285103802c459df075da4077a0e24fdf9f..319b14c4592ea1b8941ec0d7b655071bc984a64c 100644
--- a/JugReco/src/components/ImagingPixelDataCombiner.cpp
+++ b/JugReco/src/components/ImagingPixelDataCombiner.cpp
@@ -12,9 +12,7 @@
 #include <unordered_map>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -42,25 +40,25 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class ImagingPixelDataCombiner : public GaudiAlgorithm {
+class ImagingPixelDataCombiner : public Gaudi::Algorithm {
 private:
   Gaudi::Property<int> m_layerIncrement{this, "layerIncrement", 0};
   Gaudi::Property<std::string> m_rule{this, "rule", "concatenate"};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits1{"inputHits1", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits2{"inputHits2", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHits{"outputHits", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits1{"inputHits1", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits2{"inputHits2", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHits{"outputHits", Gaudi::DataHandle::Writer, this};
   std::vector<std::string> supported_rules{"concatenate", "interlayer"};
 
 public:
   ImagingPixelDataCombiner(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHits1", m_inputHits1, "");
     declareProperty("inputHits2", m_inputHits2, "");
     declareProperty("outputHits", m_outputHits, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -74,7 +72,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto* const hits1 = m_inputHits1.get();
     const auto* const hits2 = m_inputHits2.get();
diff --git a/JugReco/src/components/ImagingPixelDataSorter.cpp b/JugReco/src/components/ImagingPixelDataSorter.cpp
index 69ac310c353ca7167e9c5cc201cb7c6d710a83cd..94cc565a3dc220721b76588ac4e352a7cb6c6440 100644
--- a/JugReco/src/components/ImagingPixelDataSorter.cpp
+++ b/JugReco/src/components/ImagingPixelDataSorter.cpp
@@ -11,9 +11,7 @@
 #include <unordered_map>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -43,18 +41,18 @@ namespace Jug::Reco {
    *
    * \ingroup reco
    */
-  class ImagingPixelDataSorter : public GaudiAlgorithm {
+  class ImagingPixelDataSorter : public Gaudi::Algorithm {
   private:
     Gaudi::Property<int>                        m_nLayers{this, "numberOfLayers", 9};
     Gaudi::Property<int>                        m_nHits{this, "numberOfHits", 50};
-    DataHandle<edm4eic::CalorimeterHitCollection>   m_inputHitCollection{"inputHitCollection",
+    mutable DataHandle<edm4eic::CalorimeterHitCollection>   m_inputHitCollection{"inputHitCollection",
                                                                      Gaudi::DataHandle::Reader, this};
-    DataHandle<edm4eic::CalorimeterHitCollection>   m_outputHitCollection{"outputHitCollection",
+    mutable DataHandle<edm4eic::CalorimeterHitCollection>   m_outputHitCollection{"outputHitCollection",
                                                                       Gaudi::DataHandle::Writer, this};
 
   public:
     ImagingPixelDataSorter(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc)
+      : Gaudi::Algorithm(name, svcLoc)
     {
       declareProperty("inputHitCollection", m_inputHitCollection, "");
       declareProperty("outputHitCollection", m_outputHitCollection, "");
@@ -62,14 +60,14 @@ namespace Jug::Reco {
 
     StatusCode initialize() override
     {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
 
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override
+    StatusCode execute(const EventContext&) const override
     {
       // input collections
       const auto& hits = *m_inputHitCollection.get();
diff --git a/JugReco/src/components/ImagingPixelMerger.cpp b/JugReco/src/components/ImagingPixelMerger.cpp
index 44078bcfb464d1a2172bd4eea930c24915f67ccc..f12ce2f00aa8dd712bf7bfb5f5481111e0f0d0e3 100644
--- a/JugReco/src/components/ImagingPixelMerger.cpp
+++ b/JugReco/src/components/ImagingPixelMerger.cpp
@@ -15,9 +15,7 @@
 #include <unordered_map>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -52,28 +50,28 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class ImagingPixelMerger : public GaudiAlgorithm {
+class ImagingPixelMerger : public Gaudi::Algorithm {
 private:
   Gaudi::Property<float> m_etaSize{this, "etaSize", 0.001};
   Gaudi::Property<float> m_phiSize{this, "phiSize", 0.001};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits{"inputHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHits{"outputHits", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHits{"inputHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHits{"outputHits", Gaudi::DataHandle::Writer, this};
 
 public:
-  ImagingPixelMerger(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ImagingPixelMerger(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHits", m_inputHits, "");
     declareProperty("outputHits", m_outputHits, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& hits = *m_inputHits.get();
     // Create output collections
diff --git a/JugReco/src/components/ImagingPixelReco.cpp b/JugReco/src/components/ImagingPixelReco.cpp
index 86100661d8b9fa0ab4d74e8840dac396fd65baa6..d77b1727869b5ebf268a30af4fc43431748aa130 100644
--- a/JugReco/src/components/ImagingPixelReco.cpp
+++ b/JugReco/src/components/ImagingPixelReco.cpp
@@ -9,9 +9,7 @@
 #include <bitset>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -38,7 +36,7 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class ImagingPixelReco : public GaudiAlgorithm {
+class ImagingPixelReco : public Gaudi::Algorithm {
 private:
   // geometry service
   Gaudi::Property<std::string> m_geoSvcName{this, "geoServiceName", "GeoSvc"};
@@ -60,9 +58,9 @@ private:
   double dyRangeADC{0};
 
   // hits containers
-  DataHandle<edm4hep::RawCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+  mutable DataHandle<edm4hep::RawCalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                     this};
-  DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                   this};
 
   // Pointer to the geometry service
@@ -73,13 +71,13 @@ private:
   size_t sector_idx{0}, layer_idx{0};
 
 public:
-  ImagingPixelReco(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ImagingPixelReco(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service(m_geoSvcName);
@@ -110,7 +108,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& rawhits = *m_inputHitCollection.get();
     // Create output collections
diff --git a/JugReco/src/components/ImagingTopoCluster.cpp b/JugReco/src/components/ImagingTopoCluster.cpp
index 40f5eddd9ecb8d97c306f36e099ce705a1df10d6..f22a836766770c8a1fcf4a074aa0f20d42d3dff5 100644
--- a/JugReco/src/components/ImagingTopoCluster.cpp
+++ b/JugReco/src/components/ImagingTopoCluster.cpp
@@ -13,9 +13,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -48,7 +46,7 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class ImagingTopoCluster : public GaudiAlgorithm {
+class ImagingTopoCluster : public Gaudi::Algorithm {
 private:
   // maximum difference in layer numbers that can be considered as neighbours
   Gaudi::Property<int> m_neighbourLayersRange{this, "neighbourLayersRange", 1};
@@ -68,10 +66,10 @@ private:
   // minimum number of hits (to save this cluster)
   Gaudi::Property<int> m_minClusterNhits{this, "minClusterNhits", 10};
   // input hits collection
-  DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+  mutable DataHandle<edm4eic::CalorimeterHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                   this};
   // output clustered hits
-  DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoClusterCollection{"outputProtoClusterCollection",
+  mutable DataHandle<edm4eic::ProtoClusterCollection> m_outputProtoClusterCollection{"outputProtoClusterCollection",
                                                                           Gaudi::DataHandle::Writer, this};
 
   // unitless counterparts of the input parameters
@@ -79,13 +77,13 @@ private:
   double minClusterHitEdep{0}, minClusterCenterEdep{0}, minClusterEdep{0};
 
 public:
-  ImagingTopoCluster(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ImagingTopoCluster(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputProtoClusterCollection", m_outputProtoClusterCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
 
@@ -127,7 +125,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& hits = *m_inputHitCollection.get();
     // Create output collections
diff --git a/JugReco/src/components/InclusiveKinematicsDA.cpp b/JugReco/src/components/InclusiveKinematicsDA.cpp
index af63a5c73f12b5e77a2089912711d0e8b854a5da..6ad24d52ee9669c0e4df716fd5f042c611aaf8ae 100644
--- a/JugReco/src/components/InclusiveKinematicsDA.cpp
+++ b/JugReco/src/components/InclusiveKinematicsDA.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -27,21 +24,21 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Reco {
 
-class InclusiveKinematicsDA : public GaudiAlgorithm {
+class InclusiveKinematicsDA : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
     "inputReconstructedParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
     "inputParticleAssociations",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -53,7 +50,7 @@ private:
 
 public:
   InclusiveKinematicsDA(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("inputReconstructedParticles", m_inputParticleCollection, "ReconstructedParticles");
     declareProperty("inputParticleAssociations", m_inputParticleAssociation, "MCRecoParticleAssociation");
@@ -61,7 +58,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
 
     m_pidSvc = service("ParticleSvc");
@@ -78,7 +75,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     const auto& rcparts = *(m_inputParticleCollection.get());
diff --git a/JugReco/src/components/InclusiveKinematicsElectron.cpp b/JugReco/src/components/InclusiveKinematicsElectron.cpp
index 928a5ae3bcf2effb15aa3ba3172aa7f42c1a81e5..7fd098b85908e9b6a403b966eddeab5e29111a0c 100644
--- a/JugReco/src/components/InclusiveKinematicsElectron.cpp
+++ b/JugReco/src/components/InclusiveKinematicsElectron.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -27,21 +24,21 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Reco {
 
-class InclusiveKinematicsElectron : public GaudiAlgorithm {
+class InclusiveKinematicsElectron : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
     "inputReconstructedParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
     "inputParticleAssociations",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -53,7 +50,7 @@ private:
 
 public:
   InclusiveKinematicsElectron(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("inputReconstructedParticles", m_inputParticleCollection, "ReconstructedParticles");
     declareProperty("inputParticleAssociations", m_inputParticleAssociation, "MCRecoParticleAssociation");
@@ -61,7 +58,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
 
     m_pidSvc = service("ParticleSvc");
@@ -78,7 +75,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     const auto& rcparts = *(m_inputParticleCollection.get());
diff --git a/JugReco/src/components/InclusiveKinematicsJB.cpp b/JugReco/src/components/InclusiveKinematicsJB.cpp
index f0f64c7c4f17d07c515b94b77282aa867241d99c..cfc9a235efd3f1274be6e314c96a567e79b23a10 100644
--- a/JugReco/src/components/InclusiveKinematicsJB.cpp
+++ b/JugReco/src/components/InclusiveKinematicsJB.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include <algorithm>
@@ -27,21 +24,21 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Reco {
 
-class InclusiveKinematicsJB : public GaudiAlgorithm {
+class InclusiveKinematicsJB : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
     "inputReconstructedParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
     "inputParticleAssociations",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -53,7 +50,7 @@ private:
 
 public:
   InclusiveKinematicsJB(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("inputReconstructedParticles", m_inputParticleCollection, "ReconstructedParticles");
     declareProperty("inputParticleAssociations", m_inputParticleAssociation, "MCRecoParticleAssociation");
@@ -61,7 +58,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
 
     m_pidSvc = service("ParticleSvc");
@@ -79,7 +76,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     const auto& rcparts = *(m_inputParticleCollection.get());
diff --git a/JugReco/src/components/InclusiveKinematicsSigma.cpp b/JugReco/src/components/InclusiveKinematicsSigma.cpp
index 59634a82cea0097992b69bc6bdfb306c11c1dc4b..b77bb23b53521036d800bdb20466d1272043ddf5 100644
--- a/JugReco/src/components/InclusiveKinematicsSigma.cpp
+++ b/JugReco/src/components/InclusiveKinematicsSigma.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck, Barak Schmookler
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -27,21 +24,21 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Reco {
 
-class InclusiveKinematicsSigma : public GaudiAlgorithm {
+class InclusiveKinematicsSigma : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
     "inputReconstructedParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
     "inputParticleAssociations",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -53,7 +50,7 @@ private:
 
 public:
   InclusiveKinematicsSigma(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("inputReconstructedParticles", m_inputParticleCollection, "ReconstructedParticles");
     declareProperty("inputParticleAssociations", m_inputParticleAssociation, "MCRecoParticleAssociation");
@@ -61,7 +58,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
 
     m_pidSvc = service("ParticleSvc");
@@ -78,7 +75,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     const auto& rcparts = *(m_inputParticleCollection.get());
diff --git a/JugReco/src/components/InclusiveKinematicseSigma.cpp b/JugReco/src/components/InclusiveKinematicseSigma.cpp
index 5d674fc4ff0aae9bd8ed24284eb8db90c1657c06..edef20735632005e444706af2f7cf03813556a2f 100644
--- a/JugReco/src/components/InclusiveKinematicseSigma.cpp
+++ b/JugReco/src/components/InclusiveKinematicseSigma.cpp
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 // Copyright (C) 2022 Wouter Deconinck, Barak Schmookler
 
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Producer.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include <algorithm>
@@ -27,21 +24,21 @@ using ROOT::Math::PxPyPzEVector;
 
 namespace Jug::Reco {
 
-class InclusiveKinematicseSigma : public GaudiAlgorithm {
+class InclusiveKinematicseSigma : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
+  mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticleCollection{
     "inputMCParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_inputParticleCollection{
     "inputReconstructedParticles",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
+  mutable DataHandle<edm4eic::MCRecoParticleAssociationCollection> m_inputParticleAssociation{
     "inputParticleAssociations",
     Gaudi::DataHandle::Reader,
     this};
-  DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
+  mutable DataHandle<edm4eic::InclusiveKinematicsCollection> m_outputInclusiveKinematicsCollection{
     "outputInclusiveKinematics",
     Gaudi::DataHandle::Writer,
     this};
@@ -53,7 +50,7 @@ private:
 
 public:
   InclusiveKinematicseSigma(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputMCParticles", m_inputMCParticleCollection, "MCParticles");
     declareProperty("inputReconstructedParticles", m_inputParticleCollection, "ReconstructedParticles");
     declareProperty("inputParticleAssociations", m_inputParticleAssociation, "MCRecoParticleAssociation");
@@ -61,7 +58,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
 
     m_pidSvc = service("ParticleSvc");
@@ -78,7 +75,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
      // input collections
     const auto& mcparts = *(m_inputMCParticleCollection.get());
     const auto& rcparts = *(m_inputParticleCollection.get());
diff --git a/JugReco/src/components/ParticleCollector.cpp b/JugReco/src/components/ParticleCollector.cpp
index 6818d4521ba620535626ade5c61f365bcb1ec090..490c0bcac29f87a26404546702fe6340c209775e 100644
--- a/JugReco/src/components/ParticleCollector.cpp
+++ b/JugReco/src/components/ParticleCollector.cpp
@@ -3,9 +3,7 @@
 
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 
 #include <k4FWCore/DataHandle.h>
 
@@ -21,16 +19,16 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class ParticleCollector : public GaudiAlgorithm {
+class ParticleCollector : public Gaudi::Algorithm {
 private:
   Gaudi::Property<std::vector<std::string>> m_inputParticles{this, "inputParticles", {}, "Particles to be aggregated"};
-  DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
+  mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer,
                                                                      this};
 
   std::vector<DataHandle<edm4eic::ReconstructedParticleCollection>*> m_particleCollections;
 
 public:
-  ParticleCollector(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ParticleCollector(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("outputParticles", m_outputParticles, "output particles combined into single collection");
   }
   ~ParticleCollector() {
@@ -40,7 +38,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     for (auto colname : m_inputParticles) {
@@ -51,7 +49,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     auto* output = m_outputParticles.createAndPut();
     if (msgLevel(MSG::DEBUG)) {
       debug() << "execute collector" << endmsg;
diff --git a/JugReco/src/components/PhotoMultiplierReco.cpp b/JugReco/src/components/PhotoMultiplierReco.cpp
index 57e48478a78ff241f8f86afe2721ceac5cdcc240..c38c1df26592564bad98ad71e4a02dd6c095f692 100644
--- a/JugReco/src/components/PhotoMultiplierReco.cpp
+++ b/JugReco/src/components/PhotoMultiplierReco.cpp
@@ -13,9 +13,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -42,10 +40,10 @@ namespace Jug::Reco {
  *
  * \ingroup reco
  */
-class PhotoMultiplierReco : public GaudiAlgorithm {
+class PhotoMultiplierReco : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::RawTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::PMTHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::RawTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::PMTHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer, this};
   Gaudi::Property<double> m_timeStep{this, "timeStep", 0.0625 * ns};
   Gaudi::Property<double> m_minNpe{this, "minNpe", 0.0};
   Gaudi::Property<double> m_speMean{this, "speMean", 80.0};
@@ -55,14 +53,14 @@ private:
   std::shared_ptr<const dd4hep::rec::CellIDPositionConverter> m_converter;
 
 public:
-  // ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
-  PhotoMultiplierReco(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  // ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
+  PhotoMultiplierReco(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("outputHitCollection", m_outputHitCollection, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -75,7 +73,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collections
     const auto& rawhits = *m_inputHitCollection.get();
     // Create output collections
diff --git a/JugReco/src/components/SimpleClustering.cpp b/JugReco/src/components/SimpleClustering.cpp
index e92e67ecb2ae7b23573e4e91cfc1c126cc913c6e..d5d7745f8ac1034d5e2a104c7f732e7b4ad0e447 100644
--- a/JugReco/src/components/SimpleClustering.cpp
+++ b/JugReco/src/components/SimpleClustering.cpp
@@ -4,9 +4,7 @@
 #include <algorithm>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -33,15 +31,15 @@ namespace Jug::Reco {
    *
    * \ingroup reco
    */
-  class SimpleClustering : public GaudiAlgorithm {
+  class SimpleClustering : public Gaudi::Algorithm {
   private:
     using RecHits  = edm4eic::CalorimeterHitCollection;
     using ProtoClusters = edm4eic::ProtoClusterCollection;
     using Clusters = edm4eic::ClusterCollection;
 
-    DataHandle<RecHits>       m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-    DataHandle<ProtoClusters> m_outputProtoClusters{"outputProtoCluster", Gaudi::DataHandle::Writer, this};
-    DataHandle<Clusters>      m_outputClusters{"outputClusterCollection", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<RecHits>       m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<ProtoClusters> m_outputProtoClusters{"outputProtoCluster", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<Clusters>      m_outputClusters{"outputClusterCollection", Gaudi::DataHandle::Writer, this};
 
     Gaudi::Property<std::string> m_mcHits{this, "mcHits", ""};
 
@@ -56,7 +54,7 @@ namespace Jug::Reco {
 
   public:
     SimpleClustering(const std::string& name, ISvcLocator* svcLoc) 
-      : GaudiAlgorithm(name, svcLoc) {
+      : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputHitCollection", m_inputHitCollection, "");
       declareProperty("outputProtoClusterCollection", m_outputClusters, "Output proto clusters");
       declareProperty("outputClusterCollection", m_outputClusters, "Output clusters");
@@ -64,7 +62,7 @@ namespace Jug::Reco {
 
     StatusCode initialize() override
     {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
       // Initialize the MC input hit collection if requested
@@ -81,7 +79,7 @@ namespace Jug::Reco {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override
+    StatusCode execute(const EventContext&) const override
     {
       // input collections
       const auto& hits = *m_inputHitCollection.get();
diff --git a/JugReco/src/components/TrackerHitReconstruction.cpp b/JugReco/src/components/TrackerHitReconstruction.cpp
index 4642124df5c2b46f1a2438756e19fe10033c7981..66193c73354731675b48ef61f9060d2746f9fe45 100644
--- a/JugReco/src/components/TrackerHitReconstruction.cpp
+++ b/JugReco/src/components/TrackerHitReconstruction.cpp
@@ -4,11 +4,9 @@
 #include <algorithm>
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 //#include "GaudiKernel/ToolHandle.h"
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
 #include "GaudiKernel/RndmGenerators.h"
 
 #include "DD4hep/DD4hepUnits.h"
@@ -43,12 +41,12 @@ namespace Jug::Reco {
    *
    * \ingroup reco
    */
-  class TrackerHitReconstruction : public GaudiAlgorithm {
+  class TrackerHitReconstruction : public Gaudi::Algorithm {
   private:
     Gaudi::Property<float> m_timeResolution{this, "timeResolution", 10}; // in ns
-    DataHandle<edm4eic::RawTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
+    mutable DataHandle<edm4eic::RawTrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader,
                                                                    this};
-    DataHandle<edm4eic::TrackerHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
+    mutable DataHandle<edm4eic::TrackerHitCollection> m_outputHitCollection{"outputHitCollection", Gaudi::DataHandle::Writer,
                                                                  this};
 
     /// Pointer to the geometry service
@@ -56,14 +54,14 @@ namespace Jug::Reco {
     std::shared_ptr<const dd4hep::rec::CellIDPositionConverter> m_converter;
 
   public:
-    //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
-    TrackerHitReconstruction(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+    //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
+    TrackerHitReconstruction(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputHitCollection", m_inputHitCollection, "");
       declareProperty("outputHitCollection", m_outputHitCollection, "");
     }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
       m_geoSvc = service("GeoSvc");
@@ -76,7 +74,7 @@ namespace Jug::Reco {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       constexpr auto mm = dd4hep::mm;
       // input collection
       const auto* const rawhits = m_inputHitCollection.get();
diff --git a/JugReco/src/components/TrackingHitsCollector2.cpp b/JugReco/src/components/TrackingHitsCollector2.cpp
index a51423491d4a28d8bd3cd66153c1ba155d79a9b2..0ca1f7ac47037cf6a72b3c8c292900e46012daa1 100644
--- a/JugReco/src/components/TrackingHitsCollector2.cpp
+++ b/JugReco/src/components/TrackingHitsCollector2.cpp
@@ -2,10 +2,8 @@
 // Copyright (C) 2022 Whitney Armstrong, Sylvester Joosten, Wouter Deconinck
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
 
 #include <k4FWCore/DataHandle.h>
 
@@ -21,16 +19,16 @@ namespace Jug::Reco {
      *
      * \ingroup reco
      */
-    class TrackingHitsCollector2 : public GaudiAlgorithm {
+    class TrackingHitsCollector2 : public Gaudi::Algorithm {
     private:
       Gaudi::Property<std::vector<std::string>> m_inputTrackingHits{this, "inputTrackingHits", {},"Tracker hits to be aggregated"};
-      DataHandle<edm4eic::TrackerHitCollection> m_trackingHits{"trackingHits", Gaudi::DataHandle::Writer, this};
+      mutable DataHandle<edm4eic::TrackerHitCollection> m_trackingHits{"trackingHits", Gaudi::DataHandle::Writer, this};
 
-      std::vector<DataHandle<edm4eic::TrackerHitCollection>*> m_hitCollections;
+      mutable std::vector<DataHandle<edm4eic::TrackerHitCollection>*> m_hitCollections;
 
     public:
       TrackingHitsCollector2(const std::string& name, ISvcLocator* svcLoc)
-          : GaudiAlgorithm(name, svcLoc)
+          : Gaudi::Algorithm(name, svcLoc)
       {
         declareProperty("trackingHits", m_trackingHits, "output hits combined into single collection");
       }
@@ -41,7 +39,7 @@ namespace Jug::Reco {
       }
 
       StatusCode initialize() override {
-        if (GaudiAlgorithm::initialize().isFailure()) {
+        if (Gaudi::Algorithm::initialize().isFailure()) {
           return StatusCode::FAILURE;
         }
         for (auto colname : m_inputTrackingHits) {
@@ -51,7 +49,7 @@ namespace Jug::Reco {
         return StatusCode::SUCCESS;
       }
 
-      StatusCode execute() override
+      StatusCode execute(const EventContext&) const override
       {
         auto* outputHits = m_trackingHits.createAndPut();
         if (msgLevel(MSG::DEBUG)) {
diff --git a/JugTrack/CMakeLists.txt b/JugTrack/CMakeLists.txt
index c348172dfaf41098793cce3b2236332493ca5ad1..ee3b68614fe2b74710d62a7313201c6a448e83fa 100644
--- a/JugTrack/CMakeLists.txt
+++ b/JugTrack/CMakeLists.txt
@@ -10,7 +10,7 @@ gaudi_add_module(JugTrackPlugins
   SOURCES
   ${JugTrackPlugins_sources}
   LINK
-  Gaudi::GaudiAlgLib Gaudi::GaudiKernel
+  Gaudi::GaudiKernel
   JugBase
   ROOT::Core ROOT::RIO ROOT::Tree
   EDM4HEP::edm4hep
diff --git a/JugTrack/src/components/CKFTracking.cpp b/JugTrack/src/components/CKFTracking.cpp
index 72542b8a30b19c0e0dad3549cc5c6140da629322..787c27b8f2d593e835c664aab3185b16fc130caa 100644
--- a/JugTrack/src/components/CKFTracking.cpp
+++ b/JugTrack/src/components/CKFTracking.cpp
@@ -4,10 +4,8 @@
 #include "CKFTracking.h"
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -94,7 +92,7 @@ namespace Jug::Reco {
   using namespace Acts::UnitLiterals;
 
   CKFTracking::CKFTracking(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc)
+      : Gaudi::Algorithm(name, svcLoc)
   {
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR < 1)
     declareProperty("inputSourceLinks", m_inputSourceLinks, "");
@@ -107,7 +105,7 @@ namespace Jug::Reco {
 
   StatusCode CKFTracking::initialize()
   {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -142,7 +140,7 @@ namespace Jug::Reco {
     return StatusCode::SUCCESS;
   }
 
-  StatusCode CKFTracking::execute()
+  StatusCode CKFTracking::execute(const EventContext&) const
   {
     // Read input data
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR < 1)
diff --git a/JugTrack/src/components/CKFTracking.h b/JugTrack/src/components/CKFTracking.h
index ac69747f82b1b31b40d01f78e8f761510b36a24d..105e008652e9580fb3bff816f36dcf8a2635d1df 100644
--- a/JugTrack/src/components/CKFTracking.h
+++ b/JugTrack/src/components/CKFTracking.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -37,7 +37,7 @@ namespace Jug::Reco {
  *
  * \ingroup tracking
  */
-class CKFTracking : public GaudiAlgorithm {
+class CKFTracking : public Gaudi::Algorithm {
 public:
   /// Track finder function that takes input measurements, initial trackstate
   /// and track finder options and returns some track-finder-specific result.
@@ -76,13 +76,13 @@ public:
 
 public:
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR < 1)
-  DataHandle<ActsExamples::IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
 #endif
-  DataHandle<ActsExamples::MeasurementContainer> m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::TrackParametersContainer> m_inputInitialTrackParameters{"inputInitialTrackParameters",
+  mutable DataHandle<ActsExamples::MeasurementContainer> m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::TrackParametersContainer> m_inputInitialTrackParameters{"inputInitialTrackParameters",
                                                                      Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ConstTrackContainer> m_outputTracks{"outputTracks", Gaudi::DataHandle::Writer, this};
-  DataHandle<ActsExamples::TrajectoriesContainer> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::ConstTrackContainer> m_outputTracks{"outputTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::TrajectoriesContainer> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
 
   Gaudi::Property<std::vector<double>> m_etaBins{this, "etaBins", {}};
   Gaudi::Property<std::vector<double>> m_chi2CutOff{this, "chi2CutOff", {15.}};
@@ -104,7 +104,7 @@ public:
 
   StatusCode initialize() override;
 
-  StatusCode execute() override;
+  StatusCode execute(const EventContext&) const override;
 };
 
 } // namespace Jug::Reco
diff --git a/JugTrack/src/components/ConformalXYPeakProtoTracks.cpp b/JugTrack/src/components/ConformalXYPeakProtoTracks.cpp
index edb2877c3478420883461ed6c196f11de7c410ff..a510fdf95d51174ed87b100057a1bc361de46f3b 100644
--- a/JugTrack/src/components/ConformalXYPeakProtoTracks.cpp
+++ b/JugTrack/src/components/ConformalXYPeakProtoTracks.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -28,31 +26,31 @@ namespace Jug::Reco {
  *
  *  \ingroup tracking
  */
-class ConformalXYPeakProtoTracks : public GaudiAlgorithm {
+class ConformalXYPeakProtoTracks : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
-  DataHandle<int> m_nProtoTracks{"nProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<int> m_nProtoTracks{"nProtoTracks", Gaudi::DataHandle::Writer, this};
 
   Gaudi::Property<int> m_nPhiBins{this, "nPhiBins", 100};
 
   using ConformalHit = ROOT::Math::XYVector;
 
 public:
-  ConformalXYPeakProtoTracks(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ConformalXYPeakProtoTracks(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputTrackerHits", m_inputTrackerHits, "tracker hits whose indices are used in proto-tracks");
     declareProperty("outputProtoTracks", m_outputProtoTracks, "grouped hit indicies");
     declareProperty("nProtoTracks", m_nProtoTracks, "number of proto tracks");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     const edm4eic::TrackerHitCollection* hits = m_inputTrackerHits.get();
     // Create output collections
diff --git a/JugTrack/src/components/FinderAlgoTemplate.cpp b/JugTrack/src/components/FinderAlgoTemplate.cpp
index 2dcdc4c603b6c86f064376bf928c2b68e69d3923..255da1476cc33f96378938a3c740a3a8192e6779 100644
--- a/JugTrack/src/components/FinderAlgoTemplate.cpp
+++ b/JugTrack/src/components/FinderAlgoTemplate.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -24,25 +22,25 @@ namespace Jug::Reco {
  *
  *  \ingroup tracking
  */
-class FinderAlgoTemplate : public GaudiAlgorithm {
+class FinderAlgoTemplate : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
 
 public:
-  FinderAlgoTemplate(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  FinderAlgoTemplate(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputTrackerHits", m_inputTrackerHits, "tracker hits whose indices are used in proto-tracks");
     declareProperty("outputProtoTracks", m_outputProtoTracks, "grouped hit indicies");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     //const edm4eic::TrackerHitCollection* hits = m_inputTrackerHits.get();
     // Create output collections
diff --git a/JugTrack/src/components/HoughTransformProtoTracks.cpp b/JugTrack/src/components/HoughTransformProtoTracks.cpp
index f863fb3191ae8df3b9d1fd6b939629b820227d81..1e60b3a4804f5f0556ce6e138a36af35e1ef424f 100644
--- a/JugTrack/src/components/HoughTransformProtoTracks.cpp
+++ b/JugTrack/src/components/HoughTransformProtoTracks.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -24,24 +22,24 @@ namespace Jug::Reco {
  *
  *  \ingroup tracking
  */
-class HoughTransformProtoTracks : public GaudiAlgorithm {
+class HoughTransformProtoTracks : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
 
 public:
-  HoughTransformProtoTracks(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  HoughTransformProtoTracks(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputTrackerHits", m_inputTrackerHits, "tracker hits whose indices are used in proto-tracks");
     declareProperty("outputProtoTracks", m_outputProtoTracks, "grouped hit indicies");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure())
+    if (Gaudi::Algorithm::initialize().isFailure())
       return StatusCode::FAILURE;
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     //const edm4eic::TrackerHitCollection* hits = m_inputTrackerHits.get();
     // Create output collections
diff --git a/JugTrack/src/components/ParticlesFromTrackFit.cpp b/JugTrack/src/components/ParticlesFromTrackFit.cpp
index 1408e0d31cf349b7b01a23c625d68b9c734b34e5..ac2ed2be1def9c6863ba7eb33036a7f35aae5286 100644
--- a/JugTrack/src/components/ParticlesFromTrackFit.cpp
+++ b/JugTrack/src/components/ParticlesFromTrackFit.cpp
@@ -4,10 +4,8 @@
 #include <algorithm>
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -59,29 +57,29 @@ namespace Jug::Reco {
    *
    * \ingroup tracking
    */
-   class ParticlesFromTrackFit : public GaudiAlgorithm {
+   class ParticlesFromTrackFit : public Gaudi::Algorithm {
    private:
-    DataHandle<ActsExamples::TrajectoriesContainer>     m_inputTrajectories{"inputTrajectories", Gaudi::DataHandle::Reader, this};
-    DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer, this};
-    DataHandle<edm4eic::TrackParametersCollection> m_outputTrackParameters{"outputTrackParameters", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<ActsExamples::TrajectoriesContainer>     m_inputTrajectories{"inputTrajectories", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<edm4eic::ReconstructedParticleCollection> m_outputParticles{"outputParticles", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<edm4eic::TrackParametersCollection> m_outputTrackParameters{"outputTrackParameters", Gaudi::DataHandle::Writer, this};
 
    public:
-    //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
+    //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
     ParticlesFromTrackFit(const std::string& name, ISvcLocator* svcLoc)
-        : GaudiAlgorithm(name, svcLoc) {
+        : Gaudi::Algorithm(name, svcLoc) {
           declareProperty("inputTrajectories", m_inputTrajectories,"");
           declareProperty("outputParticles", m_outputParticles, "");
           declareProperty("outputTrackParameters", m_outputTrackParameters, "Acts Track Parameters");
         }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       // input collection
       const auto* const trajectories = m_inputTrajectories.get();
       // create output collections
diff --git a/JugTrack/src/components/ProtoTrackMatching.cpp b/JugTrack/src/components/ProtoTrackMatching.cpp
index ec44a63fecb8da413405dbe370dd2a8a6f33e898..f284b8b531d0ab2aad0bf9258813a2b0840a0ed1 100644
--- a/JugTrack/src/components/ProtoTrackMatching.cpp
+++ b/JugTrack/src/components/ProtoTrackMatching.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
 #include <k4FWCore/DataHandle.h>
@@ -24,15 +22,15 @@ namespace Jug::Reco {
  *
  *  \ingroup tracking
  */
-class ProtoTrackMatching : public GaudiAlgorithm {
+class ProtoTrackMatching : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::TrackParametersContainer> m_initialTrackParameters{"initialTrackParameters", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"matchedProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputTrackerHits{"inputTrackerHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::TrackParametersContainer> m_initialTrackParameters{"initialTrackParameters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"matchedProtoTracks", Gaudi::DataHandle::Writer, this};
 
 public:
-  ProtoTrackMatching(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  ProtoTrackMatching(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputTrackerHits",     m_inputTrackerHits,     "");
     declareProperty("initialTrackParameters", m_initialTrackParameters, "");
     declareProperty("inputProtoTracks",       m_inputProtoTracks,       "");
@@ -40,13 +38,13 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     
     // hits is unused, commented out for now to avoid compiler warning
diff --git a/JugTrack/src/components/SingleTrackSourceLinker.cpp b/JugTrack/src/components/SingleTrackSourceLinker.cpp
index a020c0e4e890c0055a51876a30a5001561941935..3ffa762e31ab15425e0800abf159f4c93444e5e0 100644
--- a/JugTrack/src/components/SingleTrackSourceLinker.cpp
+++ b/JugTrack/src/components/SingleTrackSourceLinker.cpp
@@ -3,9 +3,7 @@
 
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
 
@@ -45,22 +43,22 @@ namespace Jug::Reco {
  *
  * \ingroup tracking
  */
-class SingleTrackSourceLinker : public GaudiAlgorithm {
+class SingleTrackSourceLinker : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<std::list<ActsExamples::IndexSourceLink>> m_sourceLinkStorage{"sourceLinkStorage", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<std::list<ActsExamples::IndexSourceLink>> m_sourceLinkStorage{"sourceLinkStorage", Gaudi::DataHandle::Writer, this};
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR == 0)
-  DataHandle<ActsExamples::IndexSourceLinkContainer> m_outputSourceLinks{"outputSourceLinks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::IndexSourceLinkContainer> m_outputSourceLinks{"outputSourceLinks", Gaudi::DataHandle::Writer, this};
 #endif
-  DataHandle<ActsExamples::MeasurementContainer> m_outputMeasurements{"outputMeasurements", Gaudi::DataHandle::Writer, this};
-  DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::MeasurementContainer> m_outputMeasurements{"outputMeasurements", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::ProtoTrackContainer> m_outputProtoTracks{"outputProtoTracks", Gaudi::DataHandle::Writer, this};
   /// Pointer to the geometry service
   SmartIF<IGeoSvc> m_geoSvc;
   SmartIF<IActsGeoSvc> m_actsGeoSvc;
   std::shared_ptr<const dd4hep::rec::CellIDPositionConverter> m_converter;
 
 public:
-  SingleTrackSourceLinker(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  SingleTrackSourceLinker(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("sourceLinkStorage", m_sourceLinkStorage, "");
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR == 0)
@@ -71,7 +69,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -90,7 +88,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     const edm4eic::TrackerHitCollection* hits = m_inputHitCollection.get();
     // Create output collections
diff --git a/JugTrack/src/components/TestACTSLogger.cpp b/JugTrack/src/components/TestACTSLogger.cpp
index 52945ca0cbf603f30f7fee7e024a020a618e7fb0..fef4453d9a774409080bc232a265eeb291705c2a 100644
--- a/JugTrack/src/components/TestACTSLogger.cpp
+++ b/JugTrack/src/components/TestACTSLogger.cpp
@@ -15,12 +15,12 @@ using namespace Acts;
 DECLARE_COMPONENT(TestACTSLogger)
 
 TestACTSLogger::TestACTSLogger(const std::string& aName, ISvcLocator* aSvcLoc)
-    : GaudiAlgorithm(aName, aSvcLoc) {}
+    : Gaudi::Algorithm(aName, aSvcLoc) {}
 
 TestACTSLogger::~TestACTSLogger() = default;
 
 StatusCode TestACTSLogger::initialize() {
-  if (GaudiAlgorithm::initialize().isFailure()) {
+  if (Gaudi::Algorithm::initialize().isFailure()) {
     return StatusCode::FAILURE;
   }
   {
@@ -46,7 +46,7 @@ StatusCode TestACTSLogger::initialize() {
   return StatusCode::SUCCESS;
 }
 
-StatusCode TestACTSLogger::execute() { 
+StatusCode TestACTSLogger::execute(const EventContext&) const { 
   return StatusCode::SUCCESS; }
 
-StatusCode TestACTSLogger::finalize() { return GaudiAlgorithm::finalize(); }
+StatusCode TestACTSLogger::finalize() { return Gaudi::Algorithm::finalize(); }
diff --git a/JugTrack/src/components/TestACTSLogger.h b/JugTrack/src/components/TestACTSLogger.h
index 2c54fbf67075551f6d280cde167234210e07cb85..05d25e56d589db2b87f47886341982414391d38c 100644
--- a/JugTrack/src/components/TestACTSLogger.h
+++ b/JugTrack/src/components/TestACTSLogger.h
@@ -5,7 +5,7 @@
 #define TESTRECONSTRUCTION_TESTACTSLOGGER_H
 
 // GAUDI
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "Gaudi/Property.h"
 
 // FCCSW
@@ -15,7 +15,7 @@
  *
  * \ingroup tracking
  */
-class TestACTSLogger : public GaudiAlgorithm {
+class TestACTSLogger : public Gaudi::Algorithm {
 public:
   explicit TestACTSLogger(const std::string&, ISvcLocator*);
   virtual ~TestACTSLogger();
@@ -26,7 +26,7 @@ public:
   /**  Execute.
    *   @return status code
    */
-  virtual StatusCode execute() final;
+  virtual StatusCode execute(const EventContext&) const final;
   /**  Finalize.
    *   @return status code
    */
diff --git a/JugTrack/src/components/TrackParamClusterInit.cpp b/JugTrack/src/components/TrackParamClusterInit.cpp
index be430173885b3a343aebf323bd832533df3bd1ca..91b0555ee9d307fe199487e2c1e3c28c69cd444a 100644
--- a/JugTrack/src/components/TrackParamClusterInit.cpp
+++ b/JugTrack/src/components/TrackParamClusterInit.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
 
@@ -42,30 +40,30 @@ namespace Jug::Reco {
  *
  *  \ingroup tracking
  */
-class TrackParamClusterInit : public GaudiAlgorithm {
+class TrackParamClusterInit : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::ClusterCollection> m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
+  mutable DataHandle<edm4eic::ClusterCollection> m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
                                                                       Gaudi::DataHandle::Writer, this};
 
 public:
-  TrackParamClusterInit(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  TrackParamClusterInit(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputClusters", m_inputClusters, "Input clusters");
     declareProperty("outputInitialTrackParameters", m_outputInitialTrackParameters, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
-    IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+    IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
     if (randSvc == nullptr) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     const auto* const clusters = m_inputClusters.get();
     // Create output collections
diff --git a/JugTrack/src/components/TrackParamImagingClusterInit.cpp b/JugTrack/src/components/TrackParamImagingClusterInit.cpp
index 98b0ea1017a9c0f67e6b8d5253d24d885d454024..30629ee33f742744e5f82a5cb9bb241234a2f308 100644
--- a/JugTrack/src/components/TrackParamImagingClusterInit.cpp
+++ b/JugTrack/src/components/TrackParamImagingClusterInit.cpp
@@ -3,10 +3,8 @@
 
 #include <cmath>
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -42,31 +40,31 @@ namespace Jug::Reco {
    *
    *  \ingroup tracking
    */
-  class TrackParamImagingClusterInit : public GaudiAlgorithm {
+  class TrackParamImagingClusterInit : public Gaudi::Algorithm {
   private:
-    DataHandle<edm4eic::ClusterCollection>          m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
-    DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
+    mutable DataHandle<edm4eic::ClusterCollection>          m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
                                                                         Gaudi::DataHandle::Writer, this};
 
   public:
     TrackParamImagingClusterInit(const std::string& name, ISvcLocator* svcLoc)
-        : GaudiAlgorithm(name, svcLoc) {
+        : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputClusters", m_inputClusters, "Input clusters");
       declareProperty("outputInitialTrackParameters", m_outputInitialTrackParameters, "");
     }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
-      IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+      IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
       if (randSvc == nullptr) {
         return StatusCode::FAILURE;
       }
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       // input collection
       const auto* const clusters = m_inputClusters.get();
       // Create output collections
diff --git a/JugTrack/src/components/TrackParamTruthInit.cpp b/JugTrack/src/components/TrackParamTruthInit.cpp
index e65de9a7656bfce253c94e051d82041b6386e9cd..478dc46c66b9b0ff4e7a8e856397744489c65387 100644
--- a/JugTrack/src/components/TrackParamTruthInit.cpp
+++ b/JugTrack/src/components/TrackParamTruthInit.cpp
@@ -4,9 +4,7 @@
 #include <cmath>
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -43,11 +41,11 @@ namespace Jug::Reco {
    *  TrackParmetersContainer
    *  \ingroup tracking
    */
-  class TrackParamTruthInit : public GaudiAlgorithm {
+  class TrackParamTruthInit : public Gaudi::Algorithm {
   private:
-    DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader,
+    mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader,
                                                                     this};
-    DataHandle<ActsExamples::TrackParametersContainer>         m_outputInitialTrackParameters{"outputInitialTrackParameters",
+    mutable DataHandle<ActsExamples::TrackParametersContainer>         m_outputInitialTrackParameters{"outputInitialTrackParameters",
                                                                         Gaudi::DataHandle::Writer, this};
     
     // selection settings
@@ -62,16 +60,16 @@ namespace Jug::Reco {
 
   public:
     TrackParamTruthInit(const std::string& name, ISvcLocator* svcLoc)
-        : GaudiAlgorithm(name, svcLoc) {
+        : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputMCParticles", m_inputMCParticles, "");
       declareProperty("outputInitialTrackParameters", m_outputInitialTrackParameters, "");
     }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
-      IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+      IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
       if (randSvc == nullptr) {
         return StatusCode::FAILURE;
       }
@@ -85,7 +83,7 @@ namespace Jug::Reco {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       // input collection
       const auto* const mcparts = m_inputMCParticles.get();
       // Create output collections
diff --git a/JugTrack/src/components/TrackParamVertexClusterInit.cpp b/JugTrack/src/components/TrackParamVertexClusterInit.cpp
index 3c31fe1703f8fc84fff87b04546925ab721d1cbb..20439eb7f14f3a88d57cf4ebecbda01dd50b8f4f 100644
--- a/JugTrack/src/components/TrackParamVertexClusterInit.cpp
+++ b/JugTrack/src/components/TrackParamVertexClusterInit.cpp
@@ -5,9 +5,7 @@
 
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/PhysicalConstants.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -35,33 +33,33 @@ namespace Jug::Reco {
  *
  * \ingroup tracking
  */
-class TrackParamVertexClusterInit : public GaudiAlgorithm {
+class TrackParamVertexClusterInit : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputVertexHits{"inputVertexHits", Gaudi::DataHandle::Reader, this};
-  DataHandle<edm4eic::ClusterCollection> m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
-  DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputVertexHits{"inputVertexHits", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<edm4eic::ClusterCollection> m_inputClusters{"inputClusters", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<ActsExamples::TrackParametersContainer> m_outputInitialTrackParameters{"outputInitialTrackParameters",
                                                                       Gaudi::DataHandle::Writer, this};
   Gaudi::Property<double> m_maxHitRadius{this, "maxHitRadius", 40.0 * mm};
 
 public:
-  TrackParamVertexClusterInit(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  TrackParamVertexClusterInit(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputVertexHits", m_inputVertexHits, "Vertex tracker hits");
     declareProperty("inputClusters", m_inputClusters, "Input clusters");
     declareProperty("outputInitialTrackParameters", m_outputInitialTrackParameters, "");
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
-    IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+    IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
     if (randSvc == nullptr) {
       return StatusCode::FAILURE;
     }
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     // input collection
     const auto* const clusters = m_inputClusters.get();
     const auto* const vtx_hits = m_inputVertexHits.get();
diff --git a/JugTrack/src/components/TrackProjector.cpp b/JugTrack/src/components/TrackProjector.cpp
index b3b0ddf73b72b6caa5a21776eb819c828102cfd7..9fd7c90adbf955ee7619e45201b205ed04227253 100644
--- a/JugTrack/src/components/TrackProjector.cpp
+++ b/JugTrack/src/components/TrackProjector.cpp
@@ -4,10 +4,8 @@
 #include <algorithm>
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -48,10 +46,10 @@ namespace Jug::Reco {
    *
    * \ingroup tracking
    */
-   class TrackProjector : public GaudiAlgorithm {
+   class TrackProjector : public Gaudi::Algorithm {
    private:
-    DataHandle<ActsExamples::TrajectoriesContainer>        m_inputTrajectories{"inputTrajectories", Gaudi::DataHandle::Reader, this};
-    DataHandle<edm4eic::TrackSegmentCollection> m_outputTrackSegments{"outputTrackSegments", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<ActsExamples::TrajectoriesContainer>        m_inputTrajectories{"inputTrajectories", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<edm4eic::TrackSegmentCollection> m_outputTrackSegments{"outputTrackSegments", Gaudi::DataHandle::Writer, this};
 
     Gaudi::Property<unsigned int> m_firstInVolumeID{this, "firstInVolumeID", 0};
     Gaudi::Property<std::string> m_firstInVolumeName{this, "firstInVolumeName", ""};
@@ -62,20 +60,20 @@ namespace Jug::Reco {
     Acts::GeometryContext m_geoContext;
 
     public:
-    //  ill-formed: using GaudiAlgorithm::GaudiAlgorithm;
+    //  ill-formed: using Gaudi::Algorithm::GaudiAlgorithm;
     TrackProjector(const std::string& name, ISvcLocator* svcLoc)
-        : GaudiAlgorithm(name, svcLoc) {
+        : Gaudi::Algorithm(name, svcLoc) {
           declareProperty("inputTrajectories", m_inputTrajectories,"");
           declareProperty("outputTrackSegments", m_outputTrackSegments, "");
         }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure())
+      if (Gaudi::Algorithm::initialize().isFailure())
         return StatusCode::FAILURE;
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       // input collection
       const auto* const trajectories = m_inputTrajectories.get();
       // create output collections
diff --git a/JugTrack/src/components/TrackerSourceLinker.cpp b/JugTrack/src/components/TrackerSourceLinker.cpp
index e5f893135a83deabe9332d8ee657cb245a302cea..49440758a97bf224e6f62158b8f3128e8eec766b 100644
--- a/JugTrack/src/components/TrackerSourceLinker.cpp
+++ b/JugTrack/src/components/TrackerSourceLinker.cpp
@@ -5,9 +5,7 @@
 
 // Gaudi
 #include "Gaudi/Property.h"
-#include "GaudiAlg/GaudiAlgorithm.h"
-#include "GaudiAlg/GaudiTool.h"
-#include "GaudiAlg/Transformer.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "GaudiKernel/ToolHandle.h"
 
@@ -47,21 +45,21 @@ namespace Jug::Reco {
  *
  * \ingroup tracking
  */
-class TrackerSourceLinker : public GaudiAlgorithm {
+class TrackerSourceLinker : public Gaudi::Algorithm {
 private:
-  DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
-  DataHandle<std::list<ActsExamples::IndexSourceLink>> m_sourceLinkStorage{"sourceLinkStorage", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<edm4eic::TrackerHitCollection> m_inputHitCollection{"inputHitCollection", Gaudi::DataHandle::Reader, this};
+  mutable DataHandle<std::list<ActsExamples::IndexSourceLink>> m_sourceLinkStorage{"sourceLinkStorage", Gaudi::DataHandle::Writer, this};
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR == 0)
-  DataHandle<ActsExamples::IndexSourceLinkContainer> m_outputSourceLinks{"outputSourceLinks", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::IndexSourceLinkContainer> m_outputSourceLinks{"outputSourceLinks", Gaudi::DataHandle::Writer, this};
 #endif
-  DataHandle<ActsExamples::MeasurementContainer> m_outputMeasurements{"outputMeasurements", Gaudi::DataHandle::Writer, this};
+  mutable DataHandle<ActsExamples::MeasurementContainer> m_outputMeasurements{"outputMeasurements", Gaudi::DataHandle::Writer, this};
   /// Pointer to the geometry services
   SmartIF<IGeoSvc> m_geoSvc;
   SmartIF<IActsGeoSvc> m_actsGeoSvc;
   std::shared_ptr<const dd4hep::rec::CellIDPositionConverter> m_converter;
 
 public:
-  TrackerSourceLinker(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+  TrackerSourceLinker(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
     declareProperty("inputHitCollection", m_inputHitCollection, "");
     declareProperty("sourceLinkStorage", m_sourceLinkStorage, "");
 #if Acts_VERSION_MAJOR < 37 || (Acts_VERSION_MAJOR == 37 && Acts_VERSION_MINOR == 0)
@@ -71,7 +69,7 @@ public:
   }
 
   StatusCode initialize() override {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -91,7 +89,7 @@ public:
     return StatusCode::SUCCESS;
   }
 
-  StatusCode execute() override {
+  StatusCode execute(const EventContext&) const override {
     constexpr double mm_acts = Acts::UnitConstants::mm;
     constexpr double mm_conv = mm_acts / dd4hep::mm; // = 1/0.1
 
diff --git a/JugTrack/src/components/TruthTrackSeeding.cpp b/JugTrack/src/components/TruthTrackSeeding.cpp
index a8e80b1c914a54b5493aa2aa66651e08a85a91f1..df5896634a15edc61c943f2c755d844818e528e8 100644
--- a/JugTrack/src/components/TruthTrackSeeding.cpp
+++ b/JugTrack/src/components/TruthTrackSeeding.cpp
@@ -3,10 +3,8 @@
 
 #include <cmath>
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -34,25 +32,25 @@ namespace Jug::Reco {
    *
    *  \ingroup tracking
    */
-  class TruthTrackSeeding : public GaudiAlgorithm {
+  class TruthTrackSeeding : public Gaudi::Algorithm {
   private:
-    DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader,
+    mutable DataHandle<edm4hep::MCParticleCollection> m_inputMCParticles{"inputMCParticles", Gaudi::DataHandle::Reader,
                                                                     this};
-    DataHandle<edm4eic::TrackParametersCollection> m_outputTrackParameters{"outputTrackParameters",
+    mutable DataHandle<edm4eic::TrackParametersCollection> m_outputTrackParameters{"outputTrackParameters",
                                                                        Gaudi::DataHandle::Writer, this};
     SmartIF<IParticleSvc> m_pidSvc;
 
   public:
-    TruthTrackSeeding(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
+    TruthTrackSeeding(const std::string& name, ISvcLocator* svcLoc) : Gaudi::Algorithm(name, svcLoc) {
       declareProperty("inputMCParticles", m_inputMCParticles, "mcparticle truth data from npsim");
       declareProperty("outputTrackParameters", m_outputTrackParameters, "Output initial track parameters");
     }
 
     StatusCode initialize() override {
-      if (GaudiAlgorithm::initialize().isFailure()) {
+      if (Gaudi::Algorithm::initialize().isFailure()) {
         return StatusCode::FAILURE;
       }
-      IRndmGenSvc* randSvc = svc<IRndmGenSvc>("RndmGenSvc", true);
+      IRndmGenSvc* randSvc = Gaudi::svcLocator()->service<IRndmGenSvc>("RndmGenSvc", true);
       if (randSvc == nullptr) {
         return StatusCode::FAILURE;
       }
@@ -66,7 +64,7 @@ namespace Jug::Reco {
       return StatusCode::SUCCESS;
     }
 
-    StatusCode execute() override {
+    StatusCode execute(const EventContext&) const override {
       // input collection
       const auto* const mcparts = m_inputMCParticles.get();
       // Create output collections
diff --git a/JugTrack/src/components/disabled/TrackFittingAlgorithm.cpp b/JugTrack/src/components/disabled/TrackFittingAlgorithm.cpp
index f21b3d8f76f44a2538ac26d7c30a4bcb3bfb73b8..53970f6ece6c5c3b5a6c15d88e6b666c65f9434e 100644
--- a/JugTrack/src/components/disabled/TrackFittingAlgorithm.cpp
+++ b/JugTrack/src/components/disabled/TrackFittingAlgorithm.cpp
@@ -5,10 +5,8 @@
 #include "TrackFittingAlgorithm.h"
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -51,7 +49,7 @@ namespace Jug::Reco {
   using namespace Acts::UnitLiterals;
 
   TrackFittingAlgorithm::TrackFittingAlgorithm(const std::string& name, ISvcLocator* svcLoc)
-      : GaudiAlgorithm(name, svcLoc)
+      : Gaudi::Algorithm(name, svcLoc)
   {
     declareProperty("inputSourceLinks", m_inputSourceLinks, "");
     declareProperty("initialTrackParameters", m_initialTrackParameters, "");
@@ -63,7 +61,7 @@ namespace Jug::Reco {
 
   StatusCode TrackFittingAlgorithm::initialize()
   {
-    if (GaudiAlgorithm::initialize().isFailure()) {
+    if (Gaudi::Algorithm::initialize().isFailure()) {
       return StatusCode::FAILURE;
     }
     m_geoSvc = service("GeoSvc");
@@ -86,7 +84,7 @@ namespace Jug::Reco {
     return StatusCode::SUCCESS;
   }
 
-  StatusCode TrackFittingAlgorithm::execute()
+  StatusCode TrackFittingAlgorithm::execute(const EventContext&) const
   {
     // Read input data
     const auto* const sourceLinks       = m_inputSourceLinks.get();
diff --git a/JugTrack/src/components/disabled/TrackFittingAlgorithm.h b/JugTrack/src/components/disabled/TrackFittingAlgorithm.h
index 5592ae5f768799125437e2a6daa27ca8b1db7002..80137ce9f1659a5e788dc5b3b08aa076ebd16b18 100644
--- a/JugTrack/src/components/disabled/TrackFittingAlgorithm.h
+++ b/JugTrack/src/components/disabled/TrackFittingAlgorithm.h
@@ -10,7 +10,7 @@
 #include <random>
 #include <stdexcept>
 
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "Gaudi/Property.h"
 
@@ -43,7 +43,7 @@ namespace Jug::Reco {
    *
    * \ingroup tracking
    */
-  class TrackFittingAlgorithm : public GaudiAlgorithm {
+  class TrackFittingAlgorithm : public Gaudi::Algorithm {
   public:
     /// Track fitter function that takes input measurements, initial trackstate
     /// and fitter options and returns some track-fitter-specific result.
@@ -58,12 +58,12 @@ namespace Jug::Reco {
       const std::vector<ActsExamples::IndexSourceLink>&, const ActsExamples::TrackParameters&, const TrackFitterOptions&)>;
 
   public:
-    DataHandle<ActsExamples::IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<ActsExamples::IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
     DataHandle<ActsExamples::TrackParametersContainer> m_initialTrackParameters{"initialTrackParameters", Gaudi::DataHandle::Reader, this};
-    DataHandle<ActsExamples::MeasurementContainer>     m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
-    DataHandle<ActsExamples::ProtoTrackContainer>      m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<ActsExamples::MeasurementContainer>     m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
+    mutable DataHandle<ActsExamples::ProtoTrackContainer>      m_inputProtoTracks{"inputProtoTracks", Gaudi::DataHandle::Reader, this};
     DataHandle<ActsExamples::TrajectoriesContainer>    m_foundTracks{"foundTracks", Gaudi::DataHandle::Reader, this};
-    DataHandle<ActsExamples::TrajectoriesContainer>    m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
+    mutable DataHandle<ActsExamples::TrajectoriesContainer>    m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
 
     FitterFunction                        m_trackFittingFunc;
     SmartIF<IGeoSvc>                      m_geoSvc;
@@ -87,7 +87,7 @@ namespace Jug::Reco {
 
     StatusCode initialize() override;
 
-    StatusCode execute() override;
+    StatusCode execute(const EventContext&) const override;
    private:
     /// Helper function to call correct FitterFunction
     FitterResult fitTrack(
diff --git a/JugTrack/src/components/disabled/TrackParamACTSSeeding.cpp b/JugTrack/src/components/disabled/TrackParamACTSSeeding.cpp
index 70fc87350d665f85fc368b10a84ec1a11507fbd7..9bdefeab1697c0bc0f6ccad222a89747a427c320 100644
--- a/JugTrack/src/components/disabled/TrackParamACTSSeeding.cpp
+++ b/JugTrack/src/components/disabled/TrackParamACTSSeeding.cpp
@@ -17,10 +17,8 @@
 #include "Acts/Seeding/SeedFinder.hpp"
 
 // Gaudi
-#include "GaudiAlg/GaudiAlgorithm.h"
+#include "Gaudi/Algorithm.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "GaudiAlg/Transformer.h"
-#include "GaudiAlg/GaudiTool.h"
 #include "GaudiKernel/RndmGenerators.h"
 #include "Gaudi/Property.h"
 
@@ -57,7 +55,7 @@ namespace Jug::Reco {
      *  TrackParmetersContainer
      *  \ingroup tracking
      */
-    class TrackParamACTSSeeding : public GaudiAlgorithm {
+    class TrackParamACTSSeeding : public Gaudi::Algorithm {
     public:
         DataHandle<edm4eic::TrackerHitCollection>
         m_inputHitCollection { "inputHitCollection",
@@ -238,7 +236,7 @@ namespace Jug::Reco {
     public:
         TrackParamACTSSeeding(const std::string &name,
                               ISvcLocator* svcLoc)
-            : GaudiAlgorithm(name, svcLoc)
+            : Gaudi::Algorithm(name, svcLoc)
         {
             declareProperty("inputHitCollection",
                             m_inputHitCollection, "");
@@ -248,13 +246,13 @@ namespace Jug::Reco {
 
         StatusCode initialize() override;
 
-        StatusCode execute() override;
+        StatusCode execute(const EventContext&) const override;
     };
 
 
     StatusCode TrackParamACTSSeeding::initialize()
     {
-        if (GaudiAlgorithm::initialize().isFailure()) {
+        if (Gaudi::Algorithm::initialize().isFailure()) {
             return StatusCode::FAILURE;
         }
 
@@ -332,7 +330,7 @@ namespace Jug::Reco {
         return StatusCode::SUCCESS;
     }
 
-    StatusCode TrackParamACTSSeeding::execute()
+    StatusCode TrackParamACTSSeeding::execute(const EventContext&) const
     {
         const edm4eic::TrackerHitCollection *hits =
             m_inputHitCollection.get();