diff --git a/Det/DetDesc/include/DetDesc/ConditionAccessor.h b/Det/DetDesc/include/DetDesc/ConditionAccessor.h
index 5d6da3e5b967707c3356063ebbe172e7abef82a5..9709431993fe2f6bb2246cf9f7956343493777f9 100644
--- a/Det/DetDesc/include/DetDesc/ConditionAccessor.h
+++ b/Det/DetDesc/include/DetDesc/ConditionAccessor.h
@@ -14,6 +14,7 @@
 #include <DetDesc/ConditionKey.h>
 #include <DetDesc/IConditionDerivationMgr.h>
 #include <DetDesc/ParamValidDataObject.h>
+#include <Gaudi/FSMCallbackHolder.h>
 #include <Gaudi/Property.h>
 #include <GaudiAlg/FixTESPath.h>
 #include <GaudiAlg/FunctionalUtilities.h>
@@ -157,7 +158,7 @@ namespace LHCb::DetDesc {
                                          ConditionAccessor<std::decay_t<T>>>;
   };
 
-  template <typename Algorithm = FixTESPath<Gaudi::Algorithm>>
+  template <typename Algorithm = FixTESPath<Gaudi::FSMCallbackHolder<Gaudi::Algorithm>>>
   using AlgorithmWithCondition = ConditionAccessorHolder<Algorithm>;
 
   template <typename... C>
diff --git a/Det/LbDD4hep/include/LbDD4hep/ConditionAccessorHolder.h b/Det/LbDD4hep/include/LbDD4hep/ConditionAccessorHolder.h
index c86397cbcaf306f2a2c5b9f7c95417362d1762a7..caa5f8a076d70c1dfb1f7c43f9dfa670121dab0d 100644
--- a/Det/LbDD4hep/include/LbDD4hep/ConditionAccessorHolder.h
+++ b/Det/LbDD4hep/include/LbDD4hep/ConditionAccessorHolder.h
@@ -11,6 +11,7 @@
 #pragma once
 
 #include <Core/Utils.h>
+#include <Gaudi/FSMCallbackHolder.h>
 #include <Gaudi/Property.h>
 #include <GaudiAlg/FixTESPath.h>
 #include <GaudiAlg/FunctionalUtilities.h>
@@ -262,7 +263,7 @@ namespace LHCb::Det::LbDD4hep {
   };
 
   // Inherit from base Algorithm, wrapped in FixTESPath if not already there
-  template <typename Algorithm = Gaudi::Algorithm>
+  template <typename Algorithm = Gaudi::FSMCallbackHolder<Gaudi::Algorithm>>
   using AlgorithmWithCondition =
       ConditionAccessorHolder<std::conditional_t<has_FixTESPath_v<Algorithm>, Algorithm, FixTESPath<Algorithm>>>;
 
diff --git a/GaudiAlg/include/GaudiAlg/GaudiAlgorithm.h b/GaudiAlg/include/GaudiAlg/GaudiAlgorithm.h
index ca4211d5c321fb1f6545f1b8186911d5a5aedb2f..1987a748c89b55080b0f082aa56dcc2b187c5d6b 100644
--- a/GaudiAlg/include/GaudiAlg/GaudiAlgorithm.h
+++ b/GaudiAlg/include/GaudiAlg/GaudiAlgorithm.h
@@ -25,6 +25,8 @@
 #include "GaudiAlg/GaudiAlg.h"
 #include "GaudiAlg/GaudiCommon.h"
 #include "GaudiKernel/DataObjectHandle.h"
+#include <Gaudi/FSMCallbackHolder.h>
+
 // ============================================================================
 // forward declarations:
 // ============================================================================
@@ -101,7 +103,7 @@ class INTupleSvc;
  *  @date   30/06/2001
  */
 // ============================================================================
-class GAUDI_API GaudiAlgorithm : public GaudiCommon<Algorithm> {
+class GAUDI_API GaudiAlgorithm : public GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>> {
 public:
   // ==========================================================================
   /** standard initialization method
@@ -178,7 +180,7 @@ public:
   }
   void put( IDataProviderSvc* svc, std::unique_ptr<DataObject> object, const std::string& address,
             const bool useRootInTES = true ) const {
-    GaudiCommon<Algorithm>::put( svc, std::move( object ), address, useRootInTES );
+    GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::put( svc, std::move( object ), address, useRootInTES );
   }
 
   /** @brief Register a data object or container into Gaudi Event Transient Store
@@ -217,7 +219,8 @@ public:
   }
   const DataObject* put( std::unique_ptr<DataObject> object, const std::string& address,
                          const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::put( evtSvc(), std::move( object ), address, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::put( evtSvc(), std::move( object ), address,
+                                                                  useRootInTES );
   }
 
   /** @brief Templated access to the data in Gaudi Transient Store
@@ -255,7 +258,7 @@ public:
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type get( IDataProviderSvc* svc, const std::string& location,
                                                          const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::get<TYPE>( svc, location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::get<TYPE>( svc, location, useRootInTES );
   }
 
   /** @brief Templated access to the data in Gaudi Transient Store
@@ -294,7 +297,7 @@ public:
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type getIfExists( IDataProviderSvc* svc, const std::string& location,
                                                                  const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::getIfExists<TYPE>( svc, location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getIfExists<TYPE>( svc, location, useRootInTES );
   }
 
   /** @brief Templated access to the data from Gaudi Event Transient Store
@@ -326,7 +329,7 @@ public:
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type get( const std::string& location,
                                                          const bool         useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::get<TYPE>( evtSvc(), location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::get<TYPE>( evtSvc(), location, useRootInTES );
   }
 
   /** @brief Templated access to the data in Gaudi Transient Store
@@ -364,7 +367,7 @@ public:
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type getIfExists( const std::string& location,
                                                                  const bool         useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::getIfExists<TYPE>( evtSvc(), location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getIfExists<TYPE>( evtSvc(), location, useRootInTES );
   }
 
   /** @brief Templated access to the detector data from the
@@ -387,7 +390,7 @@ public:
    */
   template <class TYPE>
   TYPE* getDet( IDataProviderSvc* svc, const std::string& location ) const {
-    return GaudiCommon<Algorithm>::get<TYPE>( svc, location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::get<TYPE>( svc, location, false );
   }
 
   /** @brief Templated access to the detector data from the
@@ -415,7 +418,7 @@ public:
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type getDetIfExists( IDataProviderSvc*  svc,
                                                                     const std::string& location ) const {
-    return GaudiCommon<Algorithm>::getIfExists<TYPE>( svc, location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getIfExists<TYPE>( svc, location, false );
   }
 
   /** @brief Templated access to the detector data from the
@@ -437,7 +440,7 @@ public:
    */
   template <class TYPE>
   TYPE* getDet( const std::string& location ) const {
-    return GaudiCommon<Algorithm>::get<TYPE>( detSvc(), location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::get<TYPE>( detSvc(), location, false );
   }
 
   /** @brief Templated access to the detector data from the
@@ -463,7 +466,7 @@ public:
    */
   template <class TYPE>
   typename Gaudi::Utils::GetData<TYPE>::return_type getDetIfExists( const std::string& location ) const {
-    return GaudiCommon<Algorithm>::getIfExists<TYPE>( detSvc(), location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getIfExists<TYPE>( detSvc(), location, false );
   }
 
   /** @brief Check the existence of a data object or container
@@ -494,7 +497,7 @@ public:
    */
   template <class TYPE>
   bool exist( IDataProviderSvc* svc, const std::string& location, const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::exist<TYPE>( svc, location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::exist<TYPE>( svc, location, useRootInTES );
   }
 
   /** @brief Check the existence of a data object or container
@@ -524,7 +527,7 @@ public:
    */
   template <class TYPE>
   bool exist( const std::string& location, const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::exist<TYPE>( evtSvc(), location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::exist<TYPE>( evtSvc(), location, useRootInTES );
   }
 
   /** @brief Check the existence of detector objects in the Gaudi
@@ -545,7 +548,7 @@ public:
    */
   template <class TYPE>
   bool existDet( IDataProviderSvc* svc, const std::string& location ) const {
-    return GaudiCommon<Algorithm>::exist<TYPE>( svc, location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::exist<TYPE>( svc, location, false );
   }
 
   /** @brief Check the existence of detector objects in the Gaudi
@@ -565,7 +568,7 @@ public:
    */
   template <class TYPE>
   bool existDet( const std::string& location ) const {
-    return GaudiCommon<Algorithm>::exist<TYPE>( detSvc(), location, false );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::exist<TYPE>( detSvc(), location, false );
   }
 
   /** @brief Get the existing data object from Gaudi Event Transient store.
@@ -598,7 +601,7 @@ public:
   template <class TYPE, class TYPE2>
   typename Gaudi::Utils::GetData<TYPE>::return_type getOrCreate( IDataProviderSvc* svc, std::string_view location,
                                                                  const bool useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::getOrCreate<TYPE, TYPE2>( svc, location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getOrCreate<TYPE, TYPE2>( svc, location, useRootInTES );
   }
 
   /** @brief Get the existing data object from Gaudi Event Transient store.
@@ -630,7 +633,8 @@ public:
   template <class TYPE, class TYPE2>
   typename Gaudi::Utils::GetData<TYPE>::return_type getOrCreate( const std::string& location,
                                                                  const bool         useRootInTES = true ) const {
-    return GaudiCommon<Algorithm>::getOrCreate<TYPE, TYPE2>( evtSvc(), location, useRootInTES );
+    return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::getOrCreate<TYPE, TYPE2>( evtSvc(), location,
+                                                                                       useRootInTES );
   }
 
   // ==========================================================================
diff --git a/GaudiAlg/include/GaudiAlg/GaudiTuples.h b/GaudiAlg/include/GaudiAlg/GaudiTuples.h
index 5d379f60f6f05b6c48e23842affa71fedb351f65..fb4803e8d02ce27d8903533b8ee4b196aa35aac5 100644
--- a/GaudiAlg/include/GaudiAlg/GaudiTuples.h
+++ b/GaudiAlg/include/GaudiAlg/GaudiTuples.h
@@ -281,15 +281,8 @@ protected:
   // ==========================================================================
 public:
   // ==========================================================================
-  /// Algorithm constructor - the SFINAE constraint below ensures that this is
-  /// constructor is only defined if PBASE derives from GaudiHistoAlg
-  template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of_v<GaudiHistoAlg, PBASE>, U>>
-  GaudiTuples( const std::string& name, ISvcLocator* pSvcLocator ) : PBASE( name, pSvcLocator ) {}
-  /// Tool constructor - SFINAE-ed to insure this constructor is only defined
-  /// if PBASE derives from AlgTool.
-  template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of_v<GaudiHistoTool, PBASE>, U>>
-  GaudiTuples( const std::string& type, const std::string& name, const IInterface* parent )
-      : PBASE( type, name, parent ) {}
+  /// constructor
+  using PBASE::PBASE;
   // ==========================================================================
 protected:
   // ==========================================================================
diff --git a/GaudiAlg/src/lib/GaudiAlgorithm.cpp b/GaudiAlg/src/lib/GaudiAlgorithm.cpp
index b22c312a628a07956d5cfc07f56dd090cbd77efe..ba92c68a2e310087210574e187c0e191d45e2136 100644
--- a/GaudiAlg/src/lib/GaudiAlgorithm.cpp
+++ b/GaudiAlg/src/lib/GaudiAlgorithm.cpp
@@ -38,12 +38,12 @@
 // ============================================================================
 #include "GaudiCommon.icpp"
 // ============================================================================
-template class GaudiCommon<Algorithm>;
+template class GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>;
 // ============================================================================
 // Standard algorithm like constructor
 // ============================================================================
 GaudiAlgorithm::GaudiAlgorithm( std::string name, ISvcLocator* pSvcLocator )
-    : GaudiCommon<Algorithm>( std::move( name ), pSvcLocator ) {
+    : GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>( std::move( name ), pSvcLocator ) {
   setProperty( "RegisterForContextService", true ).ignore();
 }
 // ============================================================================
@@ -51,7 +51,7 @@ GaudiAlgorithm::GaudiAlgorithm( std::string name, ISvcLocator* pSvcLocator )
 // ============================================================================
 StatusCode GaudiAlgorithm::initialize() {
   // initialize the base class
-  const StatusCode sc = GaudiCommon<Algorithm>::initialize();
+  const StatusCode sc = GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::initialize();
   if ( sc.isFailure() ) { return sc; }
 
   // Add any customisations here, that cannot go in GaudiCommon
@@ -69,7 +69,7 @@ StatusCode GaudiAlgorithm::finalize() {
   m_evtColSvc.reset();
 
   // finalize the base class and return
-  return GaudiCommon<Algorithm>::finalize();
+  return GaudiCommon<Gaudi::FSMCallbackHolder<Algorithm>>::finalize();
 }
 // ============================================================================
 // standard execution method
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/Consumer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/Consumer.h
index a96dff33cc022c03568ec4134d67538daad9907a..520bb4d4680b065cf9a0cecaaa8961dc5c4c6545 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/Consumer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/Consumer.h
@@ -20,10 +20,6 @@ namespace LHCb::Algorithm {
    */
 
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct Consumer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::Consumer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::Consumer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using Consumer = Gaudi::Functional::Consumer<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/FilterPredicate.h b/Kernel/LHCbAlgs/include/LHCbAlgs/FilterPredicate.h
index 655d7bd5b0c07550e3686b73e4fb28c2e38faf6e..3c5624b8138c2bfceed5a0809d023d7b519fd8a0 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/FilterPredicate.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/FilterPredicate.h
@@ -20,10 +20,6 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename T, typename Traits_ = Traits::Default>
-  struct FilterPredicate
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::FilterPredicate<T, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::FilterPredicate<T, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using FilterPredicate = Gaudi::Functional::FilterPredicate<T, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/MergingTransformer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/MergingTransformer.h
index b21fbcb5a9f2f2c835ee492bc0de5bd91f5a809b..214dd129a0c18fc895db6d8e7e1bd9e75b29ff7e 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/MergingTransformer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/MergingTransformer.h
@@ -20,12 +20,7 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MergingTransformer
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::MergingTransformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::MergingTransformer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MergingTransformer = Gaudi::Functional::MergingTransformer<Signature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MergingMultiTransformer with LHCb customization
@@ -33,12 +28,8 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MergingMultiTransformer
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::MergingMultiTransformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::MergingMultiTransformer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MergingMultiTransformer =
+      Gaudi::Functional::MergingMultiTransformer<Signature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MergingConsumer with LHCb customization
@@ -46,11 +37,7 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MergingConsumer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::MergingConsumer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::MergingConsumer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MergingConsumer = Gaudi::Functional::MergingConsumer<Signature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MergingMultiTransformerFilter with LHCb customization
@@ -58,11 +45,7 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MergingMultiTransformerFilter
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::MergingMultiTransformerFilter<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<Gaudi::Functional::MergingMultiTransformerFilter<
-        Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MergingMultiTransformerFilter =
+      Gaudi::Functional::MergingMultiTransformerFilter<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/Producer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/Producer.h
index 780f713e138a88745b884dc9402aca0f5ef37159..7b585dc2a166fc19342a609ec5b779fed23302e3 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/Producer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/Producer.h
@@ -21,10 +21,6 @@ namespace LHCb::Algorithm {
    */
 
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct Producer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::Producer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::Producer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using Producer = Gaudi::Functional::Producer<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/ScalarTransformer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/ScalarTransformer.h
index 14368bd5a31bfa448e55b9efc0b99b6b4a93d442..45655d1674a3b6b90a68314e26eafb8fdc557185 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/ScalarTransformer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/ScalarTransformer.h
@@ -20,12 +20,8 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename ScalarOp, typename TransformerSignature, typename Traits_ = Traits::Default>
-  struct ScalarTransformer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::ScalarTransformer<ScalarOp, TransformerSignature,
-                                                                      Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<Gaudi::Functional::ScalarTransformer<
-        ScalarOp, TransformerSignature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using ScalarTransformer =
+      Gaudi::Functional::ScalarTransformer<ScalarOp, TransformerSignature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MultiScalarTransformer with LHCb customization
@@ -33,11 +29,7 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename ScalarOp, typename TransformerSignature, typename Traits_ = Traits::Default>
-  struct MultiScalarTransformer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::MultiScalarTransformer<ScalarOp, TransformerSignature,
-                                                                           Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<Gaudi::Functional::MultiScalarTransformer<
-        ScalarOp, TransformerSignature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MultiScalarTransformer =
+      Gaudi::Functional::MultiScalarTransformer<ScalarOp, TransformerSignature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingMergingTransformer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingMergingTransformer.h
index fa7cc681c4cc1d3be8760fb1605a1a9c95c96c90..a2ee726757f550dc5d3ed1ace7ccd566ade9ee66 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingMergingTransformer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingMergingTransformer.h
@@ -21,11 +21,7 @@ namespace LHCb::Algorithm {
    * See Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct SplittingMergingTransformer
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::SplittingMergingTransformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<Gaudi::Functional::SplittingMergingTransformer<
-        Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using SplittingMergingTransformer =
+      Gaudi::Functional::SplittingMergingTransformer<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingTransformer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingTransformer.h
index 4b585476f9a33e1e017805431476fb4923de1cbb..a038187df5b4385c0be837f494e0005d0de560a0 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingTransformer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/SplittingTransformer.h
@@ -21,11 +21,6 @@ namespace LHCb::Algorithm {
    */
 
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct SplittingTransformer
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::SplittingTransformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::SplittingTransformer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using SplittingTransformer = Gaudi::Functional::SplittingTransformer<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/Traits.h b/Kernel/LHCbAlgs/include/LHCbAlgs/Traits.h
index 70f4a4b3e72d6641981897b6aa3676f6b8ff92f7..29b7a8c330be4c9f76cc086876cc55a51ee3bd65 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/Traits.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/Traits.h
@@ -13,18 +13,18 @@
 #include "GaudiAlg/FunctionalUtilities.h"
 // FIXME: remove one level of indirection and decide 'here' between DD4HEP and DetDesc...
 #include "DetDesc/GenericConditionAccessorHolder.h"
-#include <GAUDI_VERSION.h>
+#include <Gaudi/FSMCallbackHolder.h>
 
 namespace LHCb::Algorithm::Traits {
 
   using namespace Gaudi::Functional::Traits;
 
-  // At this stage, the only customization is the default base class "FixTESPath<Gaudi::Algorithm>"
-  using Default = BaseClass_t<FixTESPath<Gaudi::Algorithm>>;
+  // At this stage, the only customization is the default base class
+  using Default = BaseClass_t<FixTESPath<Gaudi::FSMCallbackHolder<Gaudi::Algorithm>>>;
 
   namespace details {
     // add a baseclass in case it isn't defined yet...
-    template <typename Tr, typename Base = FixTESPath<Gaudi::Algorithm>>
+    template <typename Tr, typename Base = FixTESPath<Gaudi::FSMCallbackHolder<Gaudi::Algorithm>>>
     using add_base_t =
         std::conditional_t<Gaudi::cpp17::is_detected_v<Gaudi::Functional::details::detail2::BaseClass_t, Tr>, Tr,
                            use_<Tr, BaseClass_t<Base>>>;
@@ -45,17 +45,3 @@ namespace LHCb::Algorithm::Traits {
   using writeOnly = writeViewFor<T, details::OpaqueView>;
 
 } // namespace LHCb::Algorithm::Traits
-
-// Abusing the fact that this file is included in all LHCb Algorithm files to
-// tackle the backward compatibility with Gaudi versions < 39 by defining an
-// empty Gaudi::FSMCallbackHolder class
-#if GAUDI_MAJOR_VERSION < 39
-namespace Gaudi {
-  template <class BASE>
-  class FSMCallbackHolder : public BASE {
-    using BASE::BASE;
-  };
-} // namespace Gaudi
-#else
-#  include <Gaudi/FSMCallbackHolder.h>
-#endif
diff --git a/Kernel/LHCbAlgs/include/LHCbAlgs/Transformer.h b/Kernel/LHCbAlgs/include/LHCbAlgs/Transformer.h
index 2a94f061be8c1891ae394cfb1bb16315503bf877..e46654522b31eaff360a708963db8ca511032ffb 100644
--- a/Kernel/LHCbAlgs/include/LHCbAlgs/Transformer.h
+++ b/Kernel/LHCbAlgs/include/LHCbAlgs/Transformer.h
@@ -20,31 +20,19 @@ namespace LHCb::Algorithm {
    * see Traits.h for the LHCb defaults
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct Transformer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::Transformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::Transformer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using Transformer = Gaudi::Functional::Transformer<Signature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MultiTransformer with LHCb customization
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MultiTransformer
-      : Gaudi::FSMCallbackHolder<Gaudi::Functional::MultiTransformer<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::MultiTransformer<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MultiTransformer = Gaudi::Functional::MultiTransformer<Signature, Traits::details::add_base_t<Traits_>>;
 
   /**
    * Redefinition of Gaudi::Functional::MultiTransformerFilter with LHCb customization
    */
   template <typename Signature, typename Traits_ = Traits::Default>
-  struct MultiTransformerFilter
-      : Gaudi::FSMCallbackHolder<
-            Gaudi::Functional::MultiTransformerFilter<Signature, Traits::details::add_base_t<Traits_>>> {
-    using Gaudi::FSMCallbackHolder<
-        Gaudi::Functional::MultiTransformerFilter<Signature, Traits::details::add_base_t<Traits_>>>::FSMCallbackHolder;
-  };
+  using MultiTransformerFilter =
+      Gaudi::Functional::MultiTransformerFilter<Signature, Traits::details::add_base_t<Traits_>>;
 
 } // namespace LHCb::Algorithm