diff --git a/Control/AthenaKernel/AthenaKernel/IAthenaEvtLoopPreSelectTool.h b/Control/AthenaKernel/AthenaKernel/IAthenaEvtLoopPreSelectTool.h
index 56ef7e14885d192df0463e13f40dc1368a0d81b0..45d9ccad8856ff945648815368758e69797c7b7f 100644
--- a/Control/AthenaKernel/AthenaKernel/IAthenaEvtLoopPreSelectTool.h
+++ b/Control/AthenaKernel/AthenaKernel/IAthenaEvtLoopPreSelectTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef ATHENAKERNEL_IATHENAEVTLOOPPRESELECTTOOL_H
@@ -19,22 +19,14 @@
 
 class EventIDBase;
 
-class IAthenaEvtLoopPreSelectTool : virtual public IAlgTool {
+class IAthenaEvtLoopPreSelectTool : virtual public extend_interfaces<IAlgTool> {
 
 public:    
 
-  static const InterfaceID& interfaceID() {
-    static const InterfaceID IID_IAthenaEvtLoopPreSelectTool ("IAthenaEvtLoopPreSelectTool", 1, 0 );
-    return IID_IAthenaEvtLoopPreSelectTool;
-  }
-  
-  
-  /// Initialize AlgTool
-  virtual StatusCode initialize() = 0;
+  DeclareInterfaceID(IAthenaEvtLoopPreSelectTool, 1, 0 );
+
   /// called for each event to decide if the event should be passed to the EventSelector
   virtual bool passEvent(const EventIDBase& pEvent) = 0;
-  /// Finalize AlgTool
-  virtual StatusCode finalize() = 0;
 };
 
 #endif
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/GoodRunsListSelectorTool.h b/DataQuality/GoodRunsLists/GoodRunsLists/GoodRunsListSelectorTool.h
index 50343b9d481023b51ab69882442a2bde861808ee..ec61c9bcd025b07b04d9634e769d606d5f2a43d3 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/GoodRunsListSelectorTool.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/GoodRunsListSelectorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef GoodRunsLists_GoodRunsListSelectorTool_H
@@ -32,15 +32,12 @@ namespace Root {
   class TGoodRunsListReader;
 }
 
-class GoodRunsListSelectorTool : virtual public AthAlgTool, virtual public IGoodRunsListSelectorTool, virtual public IAthenaEvtLoopPreSelectTool
+class GoodRunsListSelectorTool : public extends<AthAlgTool, IGoodRunsListSelectorTool, IAthenaEvtLoopPreSelectTool>
 {
  public:    
   GoodRunsListSelectorTool( const std::string&, const std::string&, const IInterface* );
   virtual ~GoodRunsListSelectorTool();
 
-  /// To allow access to the IGoodRunsListSelectorTool interface
-  StatusCode queryInterface( const InterfaceID& riid, void** ppvIf );
-
   /// Initialize AlgTool
   StatusCode initialize();
   /// called for each event by EventSelector to decide if the event should be passed
@@ -48,12 +45,6 @@ class GoodRunsListSelectorTool : virtual public AthAlgTool, virtual public IGood
   /// Finalize AlgTool
   StatusCode finalize();
 
-  ///// to resolve possible conflicts with IProperty::interfaceID()
-  //static const InterfaceID& interfaceID() { 
-  //  return IAthenaEvtLoopPreSelectTool::interfaceID();
-  //  //return IGoodRunsListSelectorTool::interfaceID(); 
-  //}
-
   /// called for each event by GoodRunsListSelectorAlg to decide if the event should be passed
   bool passRunLB( int runNumber, int lumiBlockNr,
                   const std::vector<std::string>& grlnameVec=std::vector<std::string>(),
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/IGoodRunsListSelectorTool.h b/DataQuality/GoodRunsLists/GoodRunsLists/IGoodRunsListSelectorTool.h
index c3612ae8ffaecc60edb4fa03308f334ce46a93bc..ae2cebfadc31a2b694ad5ae3bdd25b0a73f9f6a9 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/IGoodRunsListSelectorTool.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/IGoodRunsListSelectorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef GoodRunsLists_IGoodRunsListSelectorTool_H
@@ -16,13 +16,10 @@ namespace Root {
   class TGRLCollection;
 }
 
-class IGoodRunsListSelectorTool : virtual public IAlgTool {
+class IGoodRunsListSelectorTool : virtual public extend_interfaces<IAlgTool> {
 public:
 
-   static const InterfaceID& interfaceID() {
-     static const InterfaceID IGoodRunsListSelectorToolID( "IGoodRunsListSelectorTool", 1, 0 );
-     return IGoodRunsListSelectorToolID;
-   }
+   DeclareInterfaceID(IGoodRunsListSelectorTool, 1, 0 );
 
    /// DQ Test of run,LBs combination.
    virtual bool passRunLB( int runNumber, int lumiBlockNr,
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/ITriggerRegistryTool.h b/DataQuality/GoodRunsLists/GoodRunsLists/ITriggerRegistryTool.h
index 2b40613efd406d6eb418a88450fe779218988f4a..f6a372ebd764e08a4481aa4de404014790bdde14 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/ITriggerRegistryTool.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/ITriggerRegistryTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef GoodRunsLists_ITriggerRegistryTool_H
@@ -12,13 +12,10 @@
 
 typedef std::pair< TString, std::list<TString> > tvtPair;
 
-class ITriggerRegistryTool : virtual public IAlgTool {
+class ITriggerRegistryTool : virtual public extend_interfaces<IAlgTool> {
 public:
 
-   static const InterfaceID& interfaceID() {
-     static const InterfaceID ITriggerRegistryToolID( "ITriggerRegistryTool", 1, 0 );
-     return ITriggerRegistryToolID;
-   }
+   DeclareInterfaceID(ITriggerRegistryTool, 1, 0 );
 
    /// register grl/brl combination 
    virtual bool registerTriggerSelector(const TString& name, const TString& regexpr, const std::list<TString>& trigpar) = 0 ;
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/TriggerRegistryTool.h b/DataQuality/GoodRunsLists/GoodRunsLists/TriggerRegistryTool.h
index 1390c9d0ad5228d55cff0a115da100c3c6b303b6..8e3458d04fd24f2eff39a693706fd6fd62447492 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/TriggerRegistryTool.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/TriggerRegistryTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef GoodRunsLists_TriggerRegistryTool_H
@@ -19,15 +19,12 @@
  *  @brief This file contains the class definition for the TriggerRegistryTool class.
  **/
 
-class TriggerRegistryTool : virtual public AthAlgTool, virtual public ITriggerRegistryTool
+class TriggerRegistryTool : public extends<AthAlgTool, ITriggerRegistryTool>
 {
  public:    
   TriggerRegistryTool( const std::string&, const std::string&, const IInterface* );
   virtual ~TriggerRegistryTool();
 
-  /// To allow access to the ITriggerRegistryTool interface
-  StatusCode queryInterface( const InterfaceID& riid, void** ppvIf );
-
   /// register trigger
   bool registerTriggerSelector(const TString& name, const TString& regexpr, const std::list<TString>& trigpar);
   /// get selector registry
diff --git a/DataQuality/GoodRunsLists/src/GoodRunsListSelectorTool.cxx b/DataQuality/GoodRunsLists/src/GoodRunsListSelectorTool.cxx
index bc020e464989b6a19007d116573c300411b2bce7..e969f7d0373be6d1bc38d93b3a04869eb808a174 100644
--- a/DataQuality/GoodRunsLists/src/GoodRunsListSelectorTool.cxx
+++ b/DataQuality/GoodRunsLists/src/GoodRunsListSelectorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -21,7 +21,7 @@
 using namespace std;
 
 GoodRunsListSelectorTool::GoodRunsListSelectorTool( const std::string& type, const std::string& name, const IInterface* parent )
- : AthAlgTool( type, name, parent )
+ : base_class( type, name, parent )
  , m_reader(0)
  , m_boolop(0)
  , m_passthrough(true)
@@ -29,9 +29,6 @@ GoodRunsListSelectorTool::GoodRunsListSelectorTool( const std::string& type, con
  , m_rejectanybrl(false)
  , m_eventselectormode(false)
 {
-  declareInterface<IGoodRunsListSelectorTool>(this);
-  declareInterface<IAthenaEvtLoopPreSelectTool>(this);
-
   declareProperty( "GoodRunsListVec", m_goodrunslistVec, "list of input xml files" );
   declareProperty( "BlackRunsListVec", m_blackrunslistVec, "list of input xml files" );
   declareProperty( "BoolOperation", m_boolop );
@@ -62,19 +59,6 @@ GoodRunsListSelectorTool::~GoodRunsListSelectorTool()
 }
 
 
-StatusCode
-GoodRunsListSelectorTool::queryInterface( const InterfaceID& riid, void** ppvIf )
-{
-  if ( riid == IGoodRunsListSelectorTool::interfaceID() )  {
-     *ppvIf = (IGoodRunsListSelectorTool*)this;
-     addRef();
-     return StatusCode::SUCCESS;
-  }
-
-  return AthAlgTool::queryInterface( riid, ppvIf );
-}
-
-
 StatusCode
 GoodRunsListSelectorTool::initialize()
 {
diff --git a/DataQuality/GoodRunsLists/src/TriggerRegistryTool.cxx b/DataQuality/GoodRunsLists/src/TriggerRegistryTool.cxx
index 39bb8706bb97e4d03000fb75de2833b741411be1..7779c24ff3ad41873d4cedeef2ae5c5ff2d47705 100644
--- a/DataQuality/GoodRunsLists/src/TriggerRegistryTool.cxx
+++ b/DataQuality/GoodRunsLists/src/TriggerRegistryTool.cxx
@@ -1,14 +1,13 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 
 #include "GoodRunsLists/TriggerRegistryTool.h"
 
 TriggerRegistryTool::TriggerRegistryTool( const std::string& type, const std::string& name, const IInterface* parent ) 
- : AthAlgTool( type, name, parent )
+ : base_class( type, name, parent )
 {
-  declareInterface<ITriggerRegistryTool>(this);
 }
 
 
@@ -17,19 +16,6 @@ TriggerRegistryTool::~TriggerRegistryTool()
 }
 
 
-StatusCode 
-TriggerRegistryTool::queryInterface( const InterfaceID& riid, void** ppvIf )
-{
-  if ( riid == ITriggerRegistryTool::interfaceID() )  {
-     *ppvIf = (ITriggerRegistryTool*)this;
-     addRef();
-     return StatusCode::SUCCESS;
-  }
-
-  return AthAlgTool::queryInterface( riid, ppvIf );
-}
-
-
 bool 
 TriggerRegistryTool::registerTriggerSelector(const TString& name, const TString& regexpr, const std::list<TString>& trigpar)
 {