diff --git a/Calorimeter/CaloCondPhysAlgs/CMakeLists.txt b/Calorimeter/CaloCondPhysAlgs/CMakeLists.txt
index 6ffbc0f566b79e440adba61dddbbff78a81e08d6..d6238ea04d7d2447c40ab6e78b7afbc335cda88d 100644
--- a/Calorimeter/CaloCondPhysAlgs/CMakeLists.txt
+++ b/Calorimeter/CaloCondPhysAlgs/CMakeLists.txt
@@ -26,7 +26,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloUtils
                           Database/AthenaPOOL/AthenaPoolUtilities
                           DetectorDescription/Identifier
-                          Event/EventInfo
                           Event/xAOD/xAODEventInfo
                           LArCalorimeter/LArGeoModel/LArHV
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
@@ -43,7 +42,7 @@ atlas_add_component( CaloCondPhysAlgs
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} ${COOL_LIBRARIES} ${CLHEP_LIBRARIES} CaloCondBlobObjs CaloDetDescrLib CaloGeoHelpers CaloIdentifier AthenaBaseComps AthenaKernel StoreGateLib SGtests GaudiKernel LArCablingLib LArIdentifier TrigDecisionToolLib CaloConditions CaloEvent CaloUtilsLib AthenaPoolUtilities Identifier EventInfo xAODEventInfo LArHV LArReadoutGeometry LArSimEvent )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} ${COOL_LIBRARIES} ${CLHEP_LIBRARIES} CaloCondBlobObjs CaloDetDescrLib CaloGeoHelpers CaloIdentifier AthenaBaseComps AthenaKernel StoreGateLib SGtests GaudiKernel LArCablingLib LArIdentifier TrigDecisionToolLib CaloConditions CaloEvent CaloUtilsLib AthenaPoolUtilities Identifier xAODEventInfo LArHV LArReadoutGeometry LArSimEvent )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.cxx b/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.cxx
index 9f2347e49cce9c1c510efd9617f3427f15fae6ad..c397d4c9e48c963b8dbc6cf16b1c17899da6c6de 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.cxx
+++ b/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.cxx
@@ -4,11 +4,6 @@
 
 #include "LArMinBiasAlg.h"
 
-#include "EventInfo/EventID.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventType.h"
-#include "EventInfo/PileUpEventInfo.h"
-
 #include "CaloEvent/CaloCell.h"
 #include "CaloEvent/CaloCellContainer.h"
 
@@ -83,6 +78,8 @@
 
     ATH_CHECK(m_cablingKey.initialize());
 
+    ATH_CHECK(m_eventInfoKey.initialize());
+
     m_n1=0;
     m_n2=0;
 
@@ -94,15 +91,15 @@
   //__________________________________________________________________________
   StatusCode LArMinBiasAlg::stop()
   {
-    std::cout << "number of events in the two samples  " << m_n1 << " " << m_n2 << std::endl;
+    ATH_MSG_INFO("number of events in the two samples  " << m_n1 << " " << m_n2);
     this->fillNtuple();
-    std::cout <<" stop after fill ntuple " << std::endl;
+    ATH_MSG_INFO(" stop after fill ntuple");
     return StatusCode::SUCCESS;
   }
   //__________________________________________________________________________
   StatusCode LArMinBiasAlg::finalize()
   {
-    std::cout << " finalize() " << std::endl;
+    ATH_MSG_INFO(" finalize()");
     return StatusCode::SUCCESS; 
   }
   
@@ -124,7 +121,7 @@
 
       m_ncell = m_calo_id->calo_cell_hash_max();
 
-      std::cout << " --- first event " << m_ncell << std::endl;
+      ATH_MSG_INFO(" --- first event " << m_ncell);
       m_symCellIndex.resize(m_ncell,-1);
       std::vector<int> doneCell;
       doneCell.resize(m_ncell,-1);
@@ -173,16 +170,18 @@
            nsym++;
         }
       }
-      std::cout << " --- number of symmetric cells found " << nsym << " " << m_CellList.size() << std::endl;
+      ATH_MSG_INFO(" --- number of symmetric cells found " << nsym << " " << m_CellList.size());
       if (nsym>=MAX_SYM_CELLS) ATH_MSG_ERROR(" More than allowed number of symmetric cells... Fix array size for ntuple writing !!!! ");
       m_nsymcell=nsym;
       m_first=false;
     }
 
-
-  const EventInfo* eventInfo;
-  ATH_CHECK (evtStore()->retrieve(eventInfo));
-  int channelNumber = eventInfo->event_type()->mc_channel_number() ;
+    SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey);
+    if (!eventInfo.isValid()) {
+      ATH_MSG_ERROR ("Could not retrieve EventInfo");
+      return StatusCode::FAILURE;
+    }
+    int channelNumber = eventInfo->mcChannelNumber();
 
   m_nevt_total++;
 
@@ -204,7 +203,7 @@
   } 
 
 
-  if ((m_nevt_total%100)==1) std::cout << " ---- process event number " << m_nevt_total <<  " " << channelNumber << "  weight " << weight << std::endl;
+  if ((m_nevt_total%100)==1) ATH_MSG_INFO(" ---- process event number " << m_nevt_total <<  " " << channelNumber << "  weight " << weight);
 
    for (int i=0;i<m_ncell;i++) m_eCell[i]=0.;
 
@@ -249,7 +248,7 @@
             int index2= m_symCellIndex[index];
             if (index2<0) return;
             if (index2 >= ((int)(m_CellList.size())) ) {
-                std::cout << " problem " << index << " " << index2 << " " << m_CellList.size() << std::endl;
+	      ATH_MSG_INFO(" problem " << index << " " << index2 << " " << m_CellList.size());
             }
             double oldN =  m_CellList[index2].nevt;
             double oldAverage = m_CellList[index2].average;
@@ -275,7 +274,7 @@
  void LArMinBiasAlg::fillNtuple()
  {
 
-   std::cout << " in fillNtuple " << m_nsymcell << std::endl;
+   ATH_MSG_INFO(" in fillNtuple " << m_nsymcell);
    for (int i=0;i<m_nsymcell;i++) {
      m_identifier[i] = m_CellList[i].identifier.get_identifier32().get_compact();
      m_layer[i] = m_CellList[i].layer;
@@ -289,14 +288,14 @@
      m_rms[i] = (float) (sqrt(m_CellList[i].rms));
    }
    m_tree->Fill();
-   std::cout << " after tree fill " << std::endl;
+   ATH_MSG_INFO(" after tree fill ");
 
-    for (int i=0;i<m_nsymcell;i++) {
+   for (int i=0;i<m_nsymcell;i++) {
      m_CellList[i].nevt=0;
      m_CellList[i].offset=0.;
      m_CellList[i].average=0;
      m_CellList[i].rms=0;
    }
-   std::cout << " end of fillNtuple " << std::endl;
+   ATH_MSG_INFO(" end of fillNtuple ");
  
  }
diff --git a/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.h b/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.h
index f9289b9223d6b143edfbcbe760d70501cb788271..78616877c988b59b9ebcc6434d29a38b893e510a 100644
--- a/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.h
+++ b/Calorimeter/CaloCondPhysAlgs/src/LArMinBiasAlg.h
@@ -15,6 +15,8 @@
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "StoreGate/StoreGateSvc.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "CaloIdentifier/CaloIdManager.h"
 #include "CaloIdentifier/LArID.h"
@@ -104,6 +106,6 @@
   std::vector<int> m_symCellIndex;
   float m_first;
   int m_ncell = 0;
-
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this,"EvtInfo", "EventInfo", "EventInfo name"};
   };
 #endif
diff --git a/Control/AthenaCommon/CMakeLists.txt b/Control/AthenaCommon/CMakeLists.txt
index 46e7228164ef546e9f1ec64c04f84a98cbe0c7d5..ce8cb891584a680189ecfcd76b0d71beb2e6a05b 100644
--- a/Control/AthenaCommon/CMakeLists.txt
+++ b/Control/AthenaCommon/CMakeLists.txt
@@ -12,8 +12,10 @@ atlas_depends_on_subdirs( PRIVATE
 # Install files from the package:
 atlas_install_headers( AthenaCommon )
 atlas_install_python_modules( python/*.py python/Utils )
-atlas_install_joboptions( share/Preparation.py share/Execution.py share/Atlas.UnixStandardJob.py test/*.py share/Atlas_Gen.UnixStandardJob.py share/MemTraceInclude.py share/runbatch.py )
+atlas_install_joboptions( share/Preparation.py share/Execution.py share/Atlas.UnixStandardJob.py test/*.py 
+                          share/zeroJO.py share/Atlas_Gen.UnixStandardJob.py share/MemTraceInclude.py share/runbatch.py)
 atlas_install_scripts( share/athena.py share/athena_preload.sh share/chappy.py share/find_cfg_dups.py share/test_cfg_pickling.py )
+atlas_install_runtime(share/*.pkl)
 
 # Aliases:
 atlas_add_alias( athena "athena.py" )
@@ -31,6 +33,12 @@ atlas_add_test( KeyStoreUnitTests SCRIPT test/test_KeyStoreUnitTests.sh
 atlas_add_test( CFElementsTest SCRIPT python -m unittest -v AthenaCommon.CFElements
 		POST_EXEC_SCRIPT nopost.sh ) 
 
+atlas_add_test( GenerateBootstrapTest
+   SCRIPT test/test_gen_bootstrap.sh
+   #ignore location of bootstrap file and whether it was already downloaded
+   EXTRA_PATTERNS ".*copy bootstrap.*pkl|.*\/share\/bootstrap.*pkl|File.*exists in the current directory|^Willing to acquire"
+   )
+
 # Check python syntax:
 atlas_add_test( flake8
    SCRIPT flake8 --select=F,E101,E112,E113,E7,E9,W6 --ignore=E701,E741 ${CMAKE_CURRENT_SOURCE_DIR}/python
diff --git a/Control/AthenaConfiguration/share/GenerateBootstrapTest.ref b/Control/AthenaCommon/share/GenerateBootstrapTest.ref
similarity index 100%
rename from Control/AthenaConfiguration/share/GenerateBootstrapTest.ref
rename to Control/AthenaCommon/share/GenerateBootstrapTest.ref
diff --git a/Control/AthenaConfiguration/python/bootstrap.pkl b/Control/AthenaCommon/share/bootstrap.pkl
similarity index 95%
rename from Control/AthenaConfiguration/python/bootstrap.pkl
rename to Control/AthenaCommon/share/bootstrap.pkl
index b44cc47be44a0793473ae2eb10f77bc74b4dd7f2..4dad90511ccdac190b18fdf3733412da7261292a 100644
--- a/Control/AthenaConfiguration/python/bootstrap.pkl
+++ b/Control/AthenaCommon/share/bootstrap.pkl
@@ -185,7 +185,7 @@ S'[]'
 p97
 sS'Members'
 p98
-S"['AthSequencer/AthAlgEvtSeq', 'AthSequencer/AthOutSeq']"
+S"['AthSequencer/AthAlgEvtSeq']"
 p99
 sS'NeededResources'
 p100
@@ -220,7 +220,7 @@ S'True'
 p115
 sS'Members'
 p116
-S"['AthSequencer/AthFilterSeq', 'AthSequencer/AthRegSeq']"
+S"['AthSequencer/AthFilterSeq', 'AthSequencer/AthOutSeq', 'AthSequencer/AthRegSeq']"
 p117
 sS'NeededResources'
 p118
@@ -797,7 +797,7 @@ p112
 g7
 sS'SEARCHPATH'
 p113
-S'.:/afs/cern.ch/work/s/smh/idconfig_2/bld/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/afs/cern.ch/work/s/smh/idconfig_2/bld:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/AthenaExternals/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions'
+S'.:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/AthenaExternals/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions'
 p114
 sS'AuditInitialize'
 p115
diff --git a/Control/AthenaConfiguration/python/bootstrap_threaded.pkl b/Control/AthenaCommon/share/bootstrap_threaded.pkl
similarity index 96%
rename from Control/AthenaConfiguration/python/bootstrap_threaded.pkl
rename to Control/AthenaCommon/share/bootstrap_threaded.pkl
index 6ad9193f79cdd31ed3e5ab8b353dd7bd70cda2fa..8c0a42c81d0acdd45c5318ce11d32a2c3d3d5ba9 100644
--- a/Control/AthenaConfiguration/python/bootstrap_threaded.pkl
+++ b/Control/AthenaCommon/share/bootstrap_threaded.pkl
@@ -276,7 +276,7 @@ S'[]'
 p143
 sS'Members'
 p144
-S"['AthSequencer/AthAlgEvtSeq', 'AthSequencer/AthOutSeq']"
+S"['AthSequencer/AthAlgEvtSeq']"
 p145
 sS'NeededResources'
 p146
@@ -311,7 +311,7 @@ S'True'
 p161
 sS'Members'
 p162
-S"['AthSequencer/AthFilterSeq', 'AthSequencer/AthRegSeq']"
+S"['AthSequencer/AthFilterSeq', 'AthSequencer/AthOutSeq', 'AthSequencer/AthRegSeq']"
 p163
 sS'NeededResources'
 p164
@@ -902,7 +902,7 @@ p105
 g7
 sS'SEARCHPATH'
 p106
-S'.:/afs/cern.ch/work/s/smh/idconfig_2/bld/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/afs/cern.ch/work/s/smh/idconfig_2/bld:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-11T2137/AthenaExternals/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions'
+S'.:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/AthenaExternals/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions:/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-02-20T2138/GAUDI/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/jobOptions'
 p107
 sS'AuditInitialize'
 p108
diff --git a/Control/AthenaConfiguration/share/zeroJO.py b/Control/AthenaCommon/share/zeroJO.py
similarity index 100%
rename from Control/AthenaConfiguration/share/zeroJO.py
rename to Control/AthenaCommon/share/zeroJO.py
diff --git a/Control/AthenaConfiguration/test/test_gen_bootstrap.sh b/Control/AthenaCommon/test/test_gen_bootstrap.sh
similarity index 79%
rename from Control/AthenaConfiguration/test/test_gen_bootstrap.sh
rename to Control/AthenaCommon/test/test_gen_bootstrap.sh
index 4a8b78d5f66212bb2ff03efea975ebd649d5d13b..3f39ccdde32c35509e7fcfa16bce092a83ed91c9 100755
--- a/Control/AthenaConfiguration/test/test_gen_bootstrap.sh
+++ b/Control/AthenaCommon/test/test_gen_bootstrap.sh
@@ -2,9 +2,9 @@
 #Generate threaded and serial bootstrap pickles and diff them
 #If there's a major change in AthenaCommon or Gaudi it will get picked up here
 rm -f bootstrap*pkl
-athena --config-only=bootstrap_test.pkl AthenaConfiguration/zeroJO.py &> /dev/null
+athena --config-only=bootstrap_test.pkl AthenaCommon/zeroJO.py &> /dev/null
 get_files -remove -data bootstrap.pkl
 confTool.py --diff bootstrap.pkl bootstrap_test.pkl | grep -v identical
-athena --threads=1 --config-only=bootstrap_threaded_test.pkl AthenaConfiguration/zeroJO.py &> /dev/null
+athena --threads=1 --config-only=bootstrap_threaded_test.pkl AthenaCommon/zeroJO.py &> /dev/null
 get_files -remove -data bootstrap_threaded.pkl
 confTool.py --diff bootstrap_threaded.pkl bootstrap_threaded_test.pkl | grep -v identical
diff --git a/Control/AthenaConfiguration/CMakeLists.txt b/Control/AthenaConfiguration/CMakeLists.txt
index 3ce9208d39b22e5bb65c6dcda8df3ba7e1bed3a5..9f1ab05d497938c6a9f6c6c4f9ad97ec76fd7aea 100644
--- a/Control/AthenaConfiguration/CMakeLists.txt
+++ b/Control/AthenaConfiguration/CMakeLists.txt
@@ -10,9 +10,7 @@ atlas_subdir( AthenaConfiguration )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py python/iconfTool )
-atlas_install_runtime(python/*.pkl )
 atlas_install_scripts( share/confTool.py python/iconfTool/iconfTool )
-atlas_install_joboptions( share/zeroJO.py )
 atlas_install_data( share/*.ref )
 
 atlas_add_test( ComponentAccumulatorTest
@@ -27,12 +25,6 @@ atlas_add_test( AthConfigFlagsTest
    SCRIPT python -m unittest AthenaConfiguration.AthConfigFlags
    POST_EXEC_SCRIPT nopost.sh )
 
-atlas_add_test( GenerateBootstrapTest
-   SCRIPT test/test_gen_bootstrap.sh
-   #ignore location of bootstrap file and whether it was already downloaded
-   EXTRA_PATTERNS ".*copy bootstrap.*pkl|.*\/share\/bootstrap.*pkl|File.*exists in the current directory|^Willing to acquire"
-   )
-
 if( NOT "${CMAKE_PROJECT_NAME}" STREQUAL "AthSimulation" )
     atlas_add_test( AllConfigFlagsTest
     		    SCRIPT python -m AthenaConfiguration.AllConfigFlags
diff --git a/Control/AthenaConfiguration/python/DetectorConfigFlags.py b/Control/AthenaConfiguration/python/DetectorConfigFlags.py
index 81f33cdd8e5465e97d8edb2e588cfd02eff2adfd..2359b121385fc2d151939597aa2832aa314cb758 100644
--- a/Control/AthenaConfiguration/python/DetectorConfigFlags.py
+++ b/Control/AthenaConfiguration/python/DetectorConfigFlags.py
@@ -76,9 +76,10 @@ def createDetectorConfigFlags():
     dcf.addFlag('Detector.SimulatePixel', False)
     dcf.addFlag('Detector.SimulateSCT',   False)
     dcf.addFlag('Detector.SimulateTRT',   False) # Set default according to prevFlags.GeoModel.Run?
+    dcf.addFlag('Detector.SimulateHGTD',  False)
     dcf.addFlag('Detector.SimulateID',    lambda prevFlags : (prevFlags.Detector.SimulateBCM or prevFlags.Detector.SimulateDBM or
                                                               prevFlags.Detector.SimulatePixel or prevFlags.Detector.SimulateSCT or
-                                                              prevFlags.Detector.SimulateTRT))
+                                                              prevFlags.Detector.SimulateTRT or prevFlags.Detector.SimulateHGTD))
     dcf.addFlag('Detector.SimulateLAr',   False) # Add separate em HEC and FCAL flags?
     dcf.addFlag('Detector.SimulateTile',  False)
     dcf.addFlag('Detector.SimulateCalo',  lambda prevFlags : (prevFlags.Detector.SimulateLAr or prevFlags.Detector.SimulateTile))
@@ -100,6 +101,7 @@ def createDetectorConfigFlags():
                                                                prevFlags.Detector.SimulateALFA or prevFlags.Detector.SimulateAFP or
                                                                prevFlags.Detector.SimulateFwdRegion))
     dcf.addFlag('Detector.SimulateCavern',False)
+
     dcf.addFlag('Detector.Simulate',      lambda prevFlags : (prevFlags.Detector.SimulateBpipe or prevFlags.Detector.SimulateID or
                                                               prevFlags.Detector.SimulateCalo or prevFlags.Detector.SimulateMuon or
                                                               prevFlags.Detector.SimulateForward or prevFlags.Detector.SimulateCavern))
diff --git a/Control/CxxUtils/CxxUtils/PackedArray.h b/Control/CxxUtils/CxxUtils/PackedArray.h
index 0ecbc35f4a1659759e39c5b4de7beb893221b95c..a3a66f4fd920be798f601305f1b31605a2fddc6a 100644
--- a/Control/CxxUtils/CxxUtils/PackedArray.h
+++ b/Control/CxxUtils/CxxUtils/PackedArray.h
@@ -1,7 +1,7 @@
 // This file's extension implies that it's C, but it's really -*- C++ -*-.
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id: PackedArray.h,v 1.2 2007-06-14 22:38:48 ssnyder Exp $
@@ -82,7 +82,7 @@ public:
    *                the size of an unsigned int.
    * @param allocator Allocator for the underlying vector.
    */
-  PackedArray (int bitsize,
+  PackedArray (int bitsize = 8,
                const allocator_type& allocator = allocator_type());
 
   /**
diff --git a/Database/IOVDbSvc/src/ReadFromFileMetaData.cxx b/Database/IOVDbSvc/src/ReadFromFileMetaData.cxx
index 639185efe7f437463a72a3b1ed1caefdc81116f1..d6588dbbc443c903978db6fde7fee49759a54a05 100644
--- a/Database/IOVDbSvc/src/ReadFromFileMetaData.cxx
+++ b/Database/IOVDbSvc/src/ReadFromFileMetaData.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "ReadFromFileMetaData.h"
@@ -16,8 +16,7 @@ namespace IOVDbNamespace{
   ReadFromFileMetaData::ReadFromFileMetaData( const IOVMetaDataContainer* container, 
         const IOVTime & refTime, const bool useEpochTimestamp):
         m_metaContainer(container), 
-        m_referenceTime(refTime),
-        m_isEpochTime(useEpochTimestamp){
+        m_referenceTime(refTime){
     m_payload = (container) ? (container->payloadContainer()) : (nullptr);
     if (m_payload){
       IOVPayloadContainer::const_iterator pitr=m_payload->find(m_referenceTime);
diff --git a/Database/IOVDbSvc/src/ReadFromFileMetaData.h b/Database/IOVDbSvc/src/ReadFromFileMetaData.h
index 5d794f5f753c3266cfd85887dba31696de60bfcc..f03510700904469da168bf7c9139236ce33593e3 100644
--- a/Database/IOVDbSvc/src/ReadFromFileMetaData.h
+++ b/Database/IOVDbSvc/src/ReadFromFileMetaData.h
@@ -47,7 +47,6 @@ namespace IOVDbNamespace{
     const IOVMetaDataContainer* m_metaContainer{};
     IOVTime m_referenceTime{};
     const IOVPayloadContainer* m_payload{};
-    bool m_isEpochTime{};
     CondAttrListCollection * m_pptr{};
     AthenaAttributeList * m_attrList{};
     CondAttrListCollection * m_attrListColl{};
@@ -56,4 +55,4 @@ namespace IOVDbNamespace{
   
   };
 }//namespace
-#endif
\ No newline at end of file
+#endif
diff --git a/Database/PersistentDataModel/PersistentDataModel/AthenaAttributeList.h b/Database/PersistentDataModel/PersistentDataModel/AthenaAttributeList.h
index 2a8a7b13c8827e2490670af3ccc690b996ebe758..a0a9d3f09ef80f1c9d0c6abc98759c8f00589579 100644
--- a/Database/PersistentDataModel/PersistentDataModel/AthenaAttributeList.h
+++ b/Database/PersistentDataModel/PersistentDataModel/AthenaAttributeList.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -50,7 +50,7 @@ public:
     AthenaAttributeList();
 
     /// Copy attribute lists.
-    AthenaAttributeList(const coral::AttributeList& rhs);
+    explicit AthenaAttributeList(const coral::AttributeList& rhs);
         
     /// Construct attribute list according to the specification.
     /// The link to the specification is kept internally.
diff --git a/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx b/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx
index b6b9feb7e0a1a8429dac21f53d8900d7dafe67a3..1717f26c348a6c395cb20f7369784cc37201de52 100644
--- a/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx
+++ b/Event/ByteStreamCnvSvc/src/ByteStreamCnvSvc.cxx
@@ -1,10 +1,11 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
 #include "ByteStreamCnvSvc/ByteStreamOutputSvc.h"
 #include "ByteStreamCnvSvcBase/FullEventAssembler.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
 
 #include "StoreGate/StoreGate.h"
 #include "EventInfo/EventInfo.h"
@@ -20,8 +21,8 @@
 
 #include <algorithm>
 
-/// External definitions
-long ByteStream_StorageType=0x43;
+/// External definitions (TODO: remove this once all "extern" references are removed)
+long ByteStream_StorageType = ByteStreamAddress::storageType();
 
 /// Standard constructor
 ByteStreamCnvSvc::ByteStreamCnvSvc(const std::string& name, ISvcLocator* pSvcLocator)
diff --git a/Event/ByteStreamCnvSvcBase/ByteStreamCnvSvcBase/ByteStreamAddress.h b/Event/ByteStreamCnvSvcBase/ByteStreamCnvSvcBase/ByteStreamAddress.h
index df1391acce458859416239af92430ddb5a916ab3..a95bd7cf4aa08d7b781d0ea78ab8c2f4f82597f5 100755
--- a/Event/ByteStreamCnvSvcBase/ByteStreamCnvSvcBase/ByteStreamAddress.h
+++ b/Event/ByteStreamCnvSvcBase/ByteStreamCnvSvcBase/ByteStreamAddress.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef BYTESTREAMCNVSVCBASE_BYTESTREAMADDRESS_H
@@ -47,6 +47,9 @@ public:
    // @brief get event id
    const EventContext& getEventContext() const;
 
+   // @brief storage type to be used by all bytestream converters
+   static constexpr long storageType() { return 0x43; }
+
 private:
    // @brief it holds a vector of rob ids
    std::vector<uint32_t> m_robIDs;
diff --git a/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx b/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx
index 8add2398cebcaad6b617ebe77806b610e622a32b..77b7a1cba7c8270082ca1c1c70ad5504dc6aaa1f 100644
--- a/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx
+++ b/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx
@@ -32,7 +32,7 @@ typedef std::vector<MuonLink> MuonLinkVector;
 /*****************************************************************************/
 #define GET_PV( name )                                          \
 {                                                               \
-  static SG::AuxElement::Accessor<VertexLink> pvLinkAcc(name);  \
+  static const SG::AuxElement::Accessor<VertexLink> pvLinkAcc(name);  \
   if(!pvLinkAcc.isAvailable(*m_b)) {                            \
     return 0;                                                   \
   }                                                             \
@@ -45,7 +45,7 @@ typedef std::vector<MuonLink> MuonLinkVector;
 /*****************************************************************************/
 #define SET_PV( name, pv, vertexContainer )                       \
 {                                                                 \
-  static SG::AuxElement::Decorator<VertexLink> pvLinkDecor(name); \
+  static const SG::AuxElement::Decorator<VertexLink> pvLinkDecor(name); \
   VertexLink vertexLink;                                          \
   if(pv) {                                                        \
   vertexLink.setElement(pv);                                      \
@@ -58,28 +58,28 @@ typedef std::vector<MuonLink> MuonLinkVector;
 /*****************************************************************************/
 #define GET_FLOAT(name)                                    \
 {                                                          \
-  static SG::AuxElement::Accessor<float> floatAcc(name);   \
+  static const SG::AuxElement::Accessor<float> floatAcc(name);   \
   if(!floatAcc.isAvailable(*m_b)) return -9999999.;        \
   return floatAcc(*m_b);                                   \
 }
 /*****************************************************************************/
 #define SET_FLOAT( name, val)                              \
 {                                                          \
-  static SG::AuxElement::Decorator<float> floatDec(name);  \
+  static const SG::AuxElement::Decorator<float> floatDec(name);  \
   floatDec(*m_b) = val;                                    \
   return true;                                             \
 }
 /*****************************************************************************/
 #define GET_INT(name)                                  \
 {                                                      \
-  static SG::AuxElement::Accessor<int> intAcc(name);   \
+  static const SG::AuxElement::Accessor<int> intAcc(name);   \
   if(!intAcc.isAvailable(*m_b)) return -9999999;       \
   return intAcc(*m_b);                                 \
 }
 /*****************************************************************************/
 #define SET_INT( name, val)                            \
 {                                                      \
-  static SG::AuxElement::Decorator<int> intDec(name);  \
+  static const SG::AuxElement::Decorator<int> intDec(name);  \
   intDec(*m_b) = val;                                  \
   return true;                                         \
 }
@@ -284,9 +284,9 @@ bool xAOD::BPhysHelper::setRefTrks(const std::vector<float>& px,
   m_cachedRefTracks.clear();
   
   // create decorators
-  static SG::AuxElement::Decorator< std::vector<float> > refTrackPxDeco("RefTrackPx");
-  static SG::AuxElement::Decorator< std::vector<float> > refTrackPyDeco("RefTrackPy");
-  static SG::AuxElement::Decorator< std::vector<float> > refTrackPzDeco("RefTrackPz");
+  static const SG::AuxElement::Decorator< std::vector<float> > refTrackPxDeco("RefTrackPx");
+  static const SG::AuxElement::Decorator< std::vector<float> > refTrackPyDeco("RefTrackPy");
+  static const SG::AuxElement::Decorator< std::vector<float> > refTrackPzDeco("RefTrackPz");
   
   // store the elements:
   refTrackPxDeco(*m_b) = px;
@@ -466,7 +466,7 @@ bool xAOD::BPhysHelper::setMuons(const std::vector<const xAOD::Muon*>& muons,
   m_cachedMuons.clear();
   
   // Create muon links decorator 
-  static SG::AuxElement::Decorator<MuonLinkVector> muonLinksDecor("MuonLinks"); 
+  static const SG::AuxElement::Decorator<MuonLinkVector> muonLinksDecor("MuonLinks"); 
   
   // create tmp vector of muon links
   MuonLinkVector muonLinks;
@@ -548,7 +548,7 @@ bool xAOD::BPhysHelper::setPrecedingVertices(const std::vector<const xAOD::Verte
   m_cachedPrecedingVertices.clear();
   
   // Create preceding vertex links decorator 
-  static SG::AuxElement::Decorator<VertexLinkVector> precedingVertexLinksDecor("PrecedingVertexLinks"); 
+  static const SG::AuxElement::Decorator<VertexLinkVector> precedingVertexLinksDecor("PrecedingVertexLinks"); 
   
   // create tmp vector of preceding vertex links
   VertexLinkVector precedingVertexLinks;
@@ -629,7 +629,7 @@ bool xAOD::BPhysHelper::setCascadeVertices(const std::vector<const xAOD::Vertex*
   m_cachedCascadeVertices.clear();
   
   // Create cascade vertex links decorator 
-  static SG::AuxElement::Decorator<VertexLinkVector> cascadeVertexLinksDecor("CascadeVertexLinks"); 
+  static const SG::AuxElement::Decorator<VertexLinkVector> cascadeVertexLinksDecor("CascadeVertexLinks"); 
   
   // create tmp vector of cascade vertex links
   VertexLinkVector cascadeVertexLinks;
@@ -982,9 +982,9 @@ bool xAOD::BPhysHelper::cacheRefTracks()
   m_cachedRefTracks.clear();
   
   // Create auxiliary branches accessors 
-  static SG::AuxElement::Accessor< std::vector<float> > refTrackPxAcc("RefTrackPx");
-  static SG::AuxElement::Accessor< std::vector<float> > refTrackPyAcc("RefTrackPy");
-  static SG::AuxElement::Accessor< std::vector<float> > refTrackPzAcc("RefTrackPz");
+  static const SG::AuxElement::Accessor< std::vector<float> > refTrackPxAcc("RefTrackPx");
+  static const SG::AuxElement::Accessor< std::vector<float> > refTrackPyAcc("RefTrackPy");
+  static const SG::AuxElement::Accessor< std::vector<float> > refTrackPzAcc("RefTrackPz");
   
   // check if branches are available:
   if(!refTrackPxAcc.isAvailable(*m_b) || 
@@ -1026,7 +1026,7 @@ bool xAOD::BPhysHelper::cacheMuons()
   m_cachedMuons.clear();
   
   // Create auxiliary branches accessors 
-  static SG::AuxElement::Accessor<MuonLinkVector> muonLinksAcc("MuonLinks"); 
+  static const SG::AuxElement::Accessor<MuonLinkVector> muonLinksAcc("MuonLinks"); 
   
   // check if branch exists
   if(!muonLinksAcc.isAvailable(*m_b)) {
@@ -1071,7 +1071,7 @@ bool xAOD::BPhysHelper::cachePrecedingVertices()
   m_cachedPrecedingVertices.clear();
   
   // Create auxiliary branches accessors 
-  static SG::AuxElement::Accessor<VertexLinkVector> precedingVertexLinksAcc("PrecedingVertexLinks"); 
+  static const SG::AuxElement::Accessor<VertexLinkVector> precedingVertexLinksAcc("PrecedingVertexLinks"); 
   
   // check if branch exists
   if(!precedingVertexLinksAcc.isAvailable(*m_b)) {
@@ -1116,7 +1116,7 @@ bool xAOD::BPhysHelper::cacheCascadeVertices()
   m_cachedCascadeVertices.clear();
   
   // Create auxiliary branches accessors 
-  static SG::AuxElement::Accessor<VertexLinkVector> cascadeVertexLinksAcc("CascadeVertexLinks"); 
+  static const SG::AuxElement::Accessor<VertexLinkVector> cascadeVertexLinksAcc("CascadeVertexLinks"); 
   
   // check if branch exists
   if(!cascadeVertexLinksAcc.isAvailable(*m_b)) {
diff --git a/Event/xAOD/xAODBPhys/xAODBPhys/ATLAS_CHECK_THREAD_SAFETY b/Event/xAOD/xAODBPhys/xAODBPhys/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 0000000000000000000000000000000000000000..76a491e9f118a3ec04656ab100f3581a08ceb3f5
--- /dev/null
+++ b/Event/xAOD/xAODBPhys/xAODBPhys/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+Event/xAOD/xAODBPhys
diff --git a/Event/xAOD/xAODBTagging/CMakeLists.txt b/Event/xAOD/xAODBTagging/CMakeLists.txt
index 7716fad847c1e4243d94d3e9b7e8d22e3c7114cd..4e166259db4799962bf4d5ba73784c51462a906f 100644
--- a/Event/xAOD/xAODBTagging/CMakeLists.txt
+++ b/Event/xAOD/xAODBTagging/CMakeLists.txt
@@ -13,13 +13,14 @@ atlas_depends_on_subdirs(
    Event/xAOD/xAODBase
    Event/xAOD/xAODCore
    Event/xAOD/xAODTracking
-   Control/AthLinks )
+   Control/AthLinks 
+   Control/CxxUtils)
 
 # Component(s) in the package:
 atlas_add_library( xAODBTagging
    xAODBTagging/*.h xAODBTagging/versions/*.h Root/*.cxx
    PUBLIC_HEADERS xAODBTagging
-   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking )
+   LINK_LIBRARIES AthContainers AthLinks xAODBase xAODCore xAODTracking CxxUtils)
 
 atlas_add_dictionary( xAODBTaggingDict
    xAODBTagging/xAODBTaggingDict.h
diff --git a/Event/xAOD/xAODBTagging/Root/BTagVertexAccessors_v1.h b/Event/xAOD/xAODBTagging/Root/BTagVertexAccessors_v1.h
index 1376af944079e85fc3c35fe84f5249efabd130de..0f90a1a6af6ab38764d5b2bf5af12f4269d857d5 100644
--- a/Event/xAOD/xAODBTagging/Root/BTagVertexAccessors_v1.h
+++ b/Event/xAOD/xAODBTagging/Root/BTagVertexAccessors_v1.h
@@ -4,7 +4,6 @@
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
-// $Id: BTaggingAccessors_v1.h 584372 2014-02-20 10:51:12Z jerdmann $
 #ifndef XAOD_BTAGGINGACCESSORS_V1_H
 #define XAOD_BTAGGINGACCESSORS_V1_H
 
diff --git a/Event/xAOD/xAODBTagging/Root/BTagVertex_v1.cxx b/Event/xAOD/xAODBTagging/Root/BTagVertex_v1.cxx
index d46cf323157c252e5956398717ead8ec6352fdc3..112feb312bbf52dfe3357fccfdbdd7cc9ac514e4 100644
--- a/Event/xAOD/xAODBTagging/Root/BTagVertex_v1.cxx
+++ b/Event/xAOD/xAODBTagging/Root/BTagVertex_v1.cxx
@@ -23,18 +23,7 @@ namespace xAOD {
   AUXSTORE_PRIMITIVE_SETTER_AND_GETTER( BTagVertex_v1, float, pv_compatibility, setPV_compatibility )
   AUXSTORE_OBJECT_SETTER_AND_GETTER( BTagVertex_v1, std::vector<float>, compToOtherSV, setCompToOtherSV)
 
-  /*static SG::AuxElement::Accessor< std::vector< ElementLink< xAOD::BTagVertexContainer > > >reco_vertexLinkAcc( "reco_vertexLink" );
-
-  const std::vector<ElementLink<xAOD::BTagVertexContainer> >& BTagVertex_v1::reco_vertexLink() const {
-    return reco_vertexLinkAcc( *this );
-  }
-
-  void BTagVertex_v1::setReco_vertexLink(const std::vector<ElementLink<xAOD::BTagVertexContainer> >& value) {
-    reco_vertexLinkAcc( *this ) = value;
-    return;
-  }*/
-
-
+  
   // Implementation of accessors for the constituent tracks
 
   AUXSTORE_OBJECT_SETTER_AND_GETTER( BTagVertex_v1, std::vector<float>, track_chi2, setTrack_chi2)
@@ -43,7 +32,7 @@ namespace xAOD {
   AUXSTORE_OBJECT_SETTER_AND_GETTER( BTagVertex_v1, std::vector<float>, track_refPy, setTrack_refPy)
   AUXSTORE_OBJECT_SETTER_AND_GETTER( BTagVertex_v1, std::vector<float>, track_refPz, setTrack_refPz)
 
-  static SG::AuxElement::Accessor<std::vector< ElementLink< xAOD::TrackParticleContainer > > > track_linkAcc( "track_links" );
+  static const SG::AuxElement::Accessor<std::vector< ElementLink< xAOD::TrackParticleContainer > > > track_linkAcc( "track_links" );
 
   const std::vector<ElementLink<xAOD::TrackParticleContainer> >& BTagVertex_v1::track_links() const {
     return track_linkAcc( *this );
diff --git a/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.cxx b/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.cxx
index 75a331718555f9e2bd6c789e1298c374ae450e14..589f3adaf31a2e39a0e847d44ccb66a06bfdcd5b 100644
--- a/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.cxx
+++ b/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.cxx
@@ -15,14 +15,14 @@
 #define DEFINE_ACCESSOR(TYPE, NAME )                               \
    case xAOD::NAME:                                                \
    {                                                               \
-     static SG::AuxElement::Accessor< TYPE > a( #NAME );	   \
+     static const SG::AuxElement::Accessor< TYPE > a( #NAME );	   \
      return &a;							   \
    }                                                               \
    break;
 
 namespace xAOD {
 
-  SG::AuxElement::Accessor< int >* taggerInfoAccessorV1int(BTagInfo info ) 
+  const SG::AuxElement::Accessor< int >* taggerInfoAccessorV1int(BTagInfo info ) 
   {   
     switch( info ) {
       DEFINE_ACCESSOR( int, SV0_NGTinJet );
@@ -44,7 +44,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< float >* taggerInfoAccessorV1float(BTagInfo info ) 
+  const SG::AuxElement::Accessor< float >* taggerInfoAccessorV1float(BTagInfo info ) 
   {   
     switch( info ) {
       DEFINE_ACCESSOR( float, SV0_masssvx );
@@ -65,7 +65,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< uint8_t >* taggerInfoAccessorV1uint8_t(BTagInfo info ) 
+  const SG::AuxElement::Accessor< uint8_t >* taggerInfoAccessorV1uint8_t(BTagInfo info ) 
   {   
     switch( info ) {
       //DEFINE_ACCESSOR( uint8_t, IP2D_isFromV0 );
@@ -77,7 +77,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< std::string >* taggerInfoAccessorV1string(BTagInfo info ) 
+  const SG::AuxElement::Accessor< std::string >* taggerInfoAccessorV1string(BTagInfo info ) 
   {   
     switch( info ) {
       //DEFINE_ACCESSOR( std::string, IP2D_gradeName );
@@ -89,7 +89,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< std::vector<int> >* taggerInfoAccessorV1vectorOfInts(BTagInfo info ) 
+  const SG::AuxElement::Accessor< std::vector<int> >* taggerInfoAccessorV1vectorOfInts(BTagInfo info ) 
   {   
     switch( info ) {
       DEFINE_ACCESSOR( std::vector<int>, IP2D_gradeOfTracks );
@@ -101,7 +101,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< std::vector<float> >* taggerInfoAccessorV1vectorOfFloats(BTagInfo info ) 
+  const SG::AuxElement::Accessor< std::vector<float> >* taggerInfoAccessorV1vectorOfFloats(BTagInfo info ) 
   {   
     switch( info ) {
       DEFINE_ACCESSOR( std::vector<float>, IP3D_valD0wrtPVofTracks );
@@ -123,7 +123,7 @@ namespace xAOD {
     }
   }
 
-  SG::AuxElement::Accessor< std::vector<bool> >* taggerInfoAccessorV1vectorOfBools(BTagInfo info ) 
+  const SG::AuxElement::Accessor< std::vector<bool> >* taggerInfoAccessorV1vectorOfBools(BTagInfo info ) 
   {   
     switch( info ) {
       DEFINE_ACCESSOR( std::vector<bool>, IP3D_flagFromV0ofTracks );
diff --git a/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.h b/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.h
index 6a157c2f60b943ca8234cda192a74d6683b0dbe0..434b93d611e92bf34cf39c8cc688fa98a15814bb 100644
--- a/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.h
+++ b/Event/xAOD/xAODBTagging/Root/BTaggingAccessors_v1.h
@@ -24,13 +24,13 @@ namespace xAOD {
   /// This function holds on to Accessor objects that can be used by each
   /// BTagging_v1 object at runtime to get/set detail values on themselves.
 
-  SG::AuxElement::Accessor< int >* taggerInfoAccessorV1int(BTagInfo info);
-  SG::AuxElement::Accessor< float >* taggerInfoAccessorV1float(BTagInfo info);
-  SG::AuxElement::Accessor< uint8_t >* taggerInfoAccessorV1uint8_t(BTagInfo info);
-  SG::AuxElement::Accessor< std::string >* taggerInfoAccessorV1string(BTagInfo info);
-  SG::AuxElement::Accessor< std::vector<int> >* taggerInfoAccessorV1vectorOfInts(BTagInfo info);
-  SG::AuxElement::Accessor< std::vector<float> >* taggerInfoAccessorV1vectorOfFloats(BTagInfo info);
-  SG::AuxElement::Accessor< std::vector<bool> >* taggerInfoAccessorV1vectorOfBools(BTagInfo info);
+  const SG::AuxElement::Accessor< int >* taggerInfoAccessorV1int(BTagInfo info);
+  const SG::AuxElement::Accessor< float >* taggerInfoAccessorV1float(BTagInfo info);
+  const SG::AuxElement::Accessor< uint8_t >* taggerInfoAccessorV1uint8_t(BTagInfo info);
+  const SG::AuxElement::Accessor< std::string >* taggerInfoAccessorV1string(BTagInfo info);
+  const SG::AuxElement::Accessor< std::vector<int> >* taggerInfoAccessorV1vectorOfInts(BTagInfo info);
+  const SG::AuxElement::Accessor< std::vector<float> >* taggerInfoAccessorV1vectorOfFloats(BTagInfo info);
+  const SG::AuxElement::Accessor< std::vector<bool> >* taggerInfoAccessorV1vectorOfBools(BTagInfo info);
   
 } // namespace xAOD
 
diff --git a/Event/xAOD/xAODBTagging/Root/BTagging_v1.cxx b/Event/xAOD/xAODBTagging/Root/BTagging_v1.cxx
index 4e8e0017117a424bfe1efe1deb8179e279da1089..a6e35bb23c6645e65e8a4c668df30ae537f03110 100644
--- a/Event/xAOD/xAODBTagging/Root/BTagging_v1.cxx
+++ b/Event/xAOD/xAODBTagging/Root/BTagging_v1.cxx
@@ -29,9 +29,9 @@ namespace xAOD {
                                          setSV0_significance3D )
 
    // The accessor object(s):
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       sv0TPAcc1( "SV0_TrackParticles" );
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       sv0TPAcc2( "SV0_TrackParticleLinks" );
 
    const BTagging_v1::TPELVec_t& BTagging_v1::SV0_TrackParticleLinks() const {
@@ -102,9 +102,9 @@ namespace xAOD {
                                          setSV1_pc )
 
    // The accessor object(s):
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       sv1TPAcc1( "SV1_TrackParticles" );
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       sv1TPAcc2( "SV1_TrackParticleLinks" );
 
    const BTagging_v1::TPELVec_t& BTagging_v1::SV1_TrackParticleLinks() const {
@@ -175,9 +175,9 @@ namespace xAOD {
                                          setIP2D_pc )
 
    // The accessor object(s):
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       ip2dTPAcc1( "IP2D_TrackParticles" );
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       ip2dTPAcc2( "IP2D_TrackParticleLinks" );
 
    const BTagging_v1::TPELVec_t& BTagging_v1::IP2D_TrackParticleLinks() const {
@@ -249,9 +249,9 @@ namespace xAOD {
                                          setIP3D_pc )
 
    // The accessor object(s):
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       ip3dTPAcc1( "IP3D_TrackParticles" );
-   static SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
+   static const SG::AuxElement::Accessor< BTagging_v1::TPELVec_t >
       ip3dTPAcc2( "IP3D_TrackParticleLinks" );
 
    const BTagging_v1::TPELVec_t& BTagging_v1::IP3D_TrackParticleLinks() const {
@@ -410,7 +410,7 @@ namespace xAOD {
 
    bool BTagging_v1::taggerInfo( int& value, const BTagInfo info ) const {
 
-      Accessor< int >* acc = taggerInfoAccessorV1int( info );
+      const Accessor< int >* acc = taggerInfoAccessorV1int( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -419,7 +419,7 @@ namespace xAOD {
 
    bool BTagging_v1::taggerInfo( float& value, const BTagInfo info) const {
 
-      Accessor< float >* acc = taggerInfoAccessorV1float( info );
+      const Accessor< float >* acc = taggerInfoAccessorV1float( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -428,7 +428,7 @@ namespace xAOD {
 
    bool BTagging_v1::taggerInfo( bool& value, const BTagInfo info ) const {
 
-      Accessor< uint8_t >* acc = taggerInfoAccessorV1uint8_t( info );
+      const Accessor< uint8_t >* acc = taggerInfoAccessorV1uint8_t( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -438,7 +438,7 @@ namespace xAOD {
    bool BTagging_v1::taggerInfo( std::string& value,
                                  const BTagInfo info ) const {
 
-      Accessor< std::string >* acc = taggerInfoAccessorV1string( info );
+      const Accessor< std::string >* acc = taggerInfoAccessorV1string( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -448,7 +448,7 @@ namespace xAOD {
    bool BTagging_v1::taggerInfo( std::vector<int>& value,
                                  const BTagInfo info ) const {
 
-      Accessor< std::vector<int> >* acc = taggerInfoAccessorV1vectorOfInts( info );
+      const Accessor< std::vector<int> >* acc = taggerInfoAccessorV1vectorOfInts( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -458,7 +458,7 @@ namespace xAOD {
    bool BTagging_v1::taggerInfo( std::vector<float>& value,
                                  const BTagInfo info ) const {
 
-      Accessor< std::vector<float> >* acc = taggerInfoAccessorV1vectorOfFloats( info );
+      const Accessor< std::vector<float> >* acc = taggerInfoAccessorV1vectorOfFloats( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -468,7 +468,7 @@ namespace xAOD {
    bool BTagging_v1::taggerInfo( std::vector<bool>& value,
                                  const BTagInfo info ) const {
 
-      Accessor< std::vector<bool> >* acc = taggerInfoAccessorV1vectorOfBools( info );
+      const Accessor< std::vector<bool> >* acc = taggerInfoAccessorV1vectorOfBools( info );
       if( ! acc ) return false;
       if( ! acc->isAvailable( *this ) ) return false;
       value = ( *acc )( *this );
@@ -477,7 +477,7 @@ namespace xAOD {
 
    void BTagging_v1::setTaggerInfo( int value, const BTagInfo info ) {
 
-      Accessor< int >* acc = taggerInfoAccessorV1int( info );
+      const Accessor< int >* acc = taggerInfoAccessorV1int( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -485,7 +485,7 @@ namespace xAOD {
 
    void BTagging_v1::setTaggerInfo( float value, const BTagInfo info ) {
 
-      Accessor< float >* acc = taggerInfoAccessorV1float( info );
+      const Accessor< float >* acc = taggerInfoAccessorV1float( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -493,7 +493,7 @@ namespace xAOD {
 
    void BTagging_v1::setTaggerInfo( bool value, const BTagInfo info ) {
 
-      Accessor< uint8_t >* acc = taggerInfoAccessorV1uint8_t( info );
+      const Accessor< uint8_t >* acc = taggerInfoAccessorV1uint8_t( info );
       if( ! acc ) return;
       ( *acc )( *this ) = uint8_t(value);
       return;
@@ -502,7 +502,7 @@ namespace xAOD {
    void BTagging_v1::setTaggerInfo( const std::string& value,
                                     const BTagInfo info ) {
 
-      Accessor< std::string >* acc = taggerInfoAccessorV1string( info );
+      const Accessor< std::string >* acc = taggerInfoAccessorV1string( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -511,7 +511,7 @@ namespace xAOD {
    void BTagging_v1::setTaggerInfo( const std::vector<int>& value,
                                     const BTagInfo info ) {
 
-      Accessor< std::vector<int> >* acc = taggerInfoAccessorV1vectorOfInts( info );
+      const Accessor< std::vector<int> >* acc = taggerInfoAccessorV1vectorOfInts( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -520,7 +520,7 @@ namespace xAOD {
    void BTagging_v1::setTaggerInfo( const std::vector<float>& value,
                                     const BTagInfo info ) {
 
-      Accessor< std::vector<float> >* acc = taggerInfoAccessorV1vectorOfFloats( info );
+      const Accessor< std::vector<float> >* acc = taggerInfoAccessorV1vectorOfFloats( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -529,7 +529,7 @@ namespace xAOD {
    void BTagging_v1::setTaggerInfo( const std::vector<bool>& value,
                                     const BTagInfo info ) {
 
-      Accessor< std::vector<bool> >* acc = taggerInfoAccessorV1vectorOfBools( info );
+      const Accessor< std::vector<bool> >* acc = taggerInfoAccessorV1vectorOfBools( info );
       if( ! acc ) return;
       ( *acc )( *this ) = value;
       return;
@@ -543,7 +543,7 @@ namespace xAOD {
   static std::map<std::string, SG::AuxElement::Accessor<BTagging_v1::VxELVec_t> > DynVxELVec;
   static std::map<std::string, SG::AuxElement::Accessor<BTagging_v1::BTagVxELVec_t> > DynBTagVxELVec;
 
-   void BTagging_v1::toPersistent() {
+   void BTagging_v1::toPersistent ATLAS_NOT_REENTRANT () {
 
       TPELVec_t::iterator itr;
       TPELVec_t::iterator end;
@@ -584,14 +584,13 @@ namespace xAOD {
 
       for(; dyniter != DynTPELVec.end(); ++dyniter){
 
-	if( dyniter->second.isAvailableWritable( *this ) ) {
-	  itr = dyniter->second( *this ).begin();
-	  end = dyniter->second( *this ).end();
-	  for( ; itr != end; ++itr ) {
+        if( dyniter->second.isAvailableWritable( *this ) ) {
+          itr = dyniter->second( *this ).begin();
+          end = dyniter->second( *this ).end();
+          for( ; itr != end; ++itr ) {
             itr->toPersistent();
-	  }
-	}
-
+          }
+        }
       }
 
 
@@ -602,14 +601,13 @@ namespace xAOD {
 
       for(; dynvxiter != DynVxELVec.end(); ++dynvxiter){
 
-	if( dynvxiter->second.isAvailableWritable( *this ) ) {
-	  vxitr = dynvxiter->second( *this ).begin();
-	  vxend = dynvxiter->second( *this ).end();
-	  for( ; vxitr != vxend; ++vxitr ) {
+        if( dynvxiter->second.isAvailableWritable( *this ) ) {
+          vxitr = dynvxiter->second( *this ).begin();
+          vxend = dynvxiter->second( *this ).end();
+          for( ; vxitr != vxend; ++vxitr ) {
             vxitr->toPersistent();
-	  }
-	}
-
+          }
+        }
       }
 
       BTagVxELVec_t::iterator btagvxitr;
@@ -619,46 +617,43 @@ namespace xAOD {
 
       for(; dynbtagvxiter != DynBTagVxELVec.end(); ++dynbtagvxiter){
 
-	    if( dynbtagvxiter->second.isAvailableWritable( *this ) ) {
-	      btagvxitr = dynbtagvxiter->second( *this ).begin();
-	      btagvxend = dynbtagvxiter->second( *this ).end();
-	      for( ; btagvxitr != btagvxend; ++btagvxitr ) {
+        if( dynbtagvxiter->second.isAvailableWritable( *this ) ) {
+          btagvxitr = dynbtagvxiter->second( *this ).begin();
+          btagvxend = dynbtagvxiter->second( *this ).end();
+          for( ; btagvxitr != btagvxend; ++btagvxitr ) {
             btagvxitr->toPersistent();
-	      }
-	    }
-
+          }
+        }
       }
 
-
-
       return;
    }
 
   
-  void BTagging_v1::setDynTPELName( const std::string &taggername,
+  void BTagging_v1::setDynTPELName ATLAS_NOT_REENTRANT ( const std::string &taggername,
 				   const std::string &variablename) {
     
     std::string varname = taggername+ "_" + variablename;
-    Accessor< TPELVec_t > acc( varname );
+    const Accessor< TPELVec_t > acc( varname );
     DynTPELVec.insert(std::make_pair(varname,acc));
     return;
   }
 
-  void BTagging_v1::setDynVxELName( const std::string &taggername,
+  void BTagging_v1::setDynVxELName ATLAS_NOT_REENTRANT ( const std::string &taggername,
 				    const std::string &variablename) {
     
     std::string varname = taggername+ "_" + variablename;
-    Accessor< VxELVec_t > acc( varname );
+    const Accessor< VxELVec_t > acc( varname );
     DynVxELVec.insert(std::make_pair(varname,acc));
     return;
   }
 
 
-  void BTagging_v1::setDynBTagVxELName( const std::string &taggername,
+  void BTagging_v1::setDynBTagVxELName ATLAS_NOT_REENTRANT ( const std::string &taggername,
 					const std::string &variablename) {
     
     std::string varname = taggername+ "_" + variablename;
-    Accessor< BTagVxELVec_t > acc( varname );
+    const Accessor< BTagVxELVec_t > acc( varname );
     DynBTagVxELVec.insert(std::make_pair(varname,acc));
     return;
   }
diff --git a/Event/xAOD/xAODBTagging/Root/SecVtxHelper.cxx b/Event/xAOD/xAODBTagging/Root/SecVtxHelper.cxx
index d1ad5b50511485dddf6a68dc14d2c067c8990de0..b611cfbd3376e0c0eea45ae0df228c1b1873e887 100644
--- a/Event/xAOD/xAODBTagging/Root/SecVtxHelper.cxx
+++ b/Event/xAOD/xAODBTagging/Root/SecVtxHelper.cxx
@@ -7,7 +7,7 @@
 
   // get variable mass
   float xAOD::SecVtxHelper::VertexMass(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("mass");
+    static const  SG::AuxElement::Accessor<float> a("mass");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get mass" << std::endl;
       return 0;
@@ -16,13 +16,13 @@
   }
   // set variable mass
   void xAOD::SecVtxHelper::setVertexMass(xAOD::Vertex * vtx, float val){
-    static SG::AuxElement::Accessor<float> a("mass");
+    static const SG::AuxElement::Accessor<float> a("mass");
     a(*vtx)=val;        
 
   }
   // get variable energyFraction
   float xAOD::SecVtxHelper::EnergyFraction(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("energyFraction");
+    static const SG::AuxElement::Accessor<float> a("energyFraction");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get energyFraction" << std::endl;
       return 0;
@@ -31,13 +31,13 @@
   }    
   // set variable energyFraction
   void xAOD::SecVtxHelper::setEnergyFraction(xAOD::Vertex * vtx, float val){ 
-    static SG::AuxElement::Accessor<float> a("energyFraction");
+    static const SG::AuxElement::Accessor<float> a("energyFraction");
     a(*vtx)=val;
 
   }   
  //
   int xAOD::SecVtxHelper::VtxNtrk(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<int> a("ntrk");
+    static const SG::AuxElement::Accessor<int> a("ntrk");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get ntrk" << std::endl;
       return 0;
@@ -46,12 +46,12 @@
   }
   //
   void xAOD::SecVtxHelper::setVtxNtrk(xAOD::Vertex * vtx, int val){
-    static SG::AuxElement::Accessor<int> a("ntrk");
+    static const SG::AuxElement::Accessor<int> a("ntrk");
     a(*vtx)=val;
   }
   //
   float xAOD::SecVtxHelper::Vtxpt(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("pt");
+    static const SG::AuxElement::Accessor<float> a("pt");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get pt" << std::endl;
       return 0;
@@ -60,12 +60,12 @@
   }
   // 
   void xAOD::SecVtxHelper::setVtxpt(xAOD::Vertex * vtx, float val){
-    static SG::AuxElement::Accessor<float> a("pt");
+    static const SG::AuxElement::Accessor<float> a("pt");
     a(*vtx)=val;
   }
   //
   float xAOD::SecVtxHelper::Vtxeta(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("eta");
+    static const SG::AuxElement::Accessor<float> a("eta");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get eta" << std::endl;
       return 0;
@@ -74,12 +74,12 @@
   }
   //
   void xAOD::SecVtxHelper::setVtxeta(xAOD::Vertex * vtx, float val){
-    static SG::AuxElement::Accessor<float> a("eta");
+    static const SG::AuxElement::Accessor<float> a("eta");
     a(*vtx)=val;
   }
   //
   float xAOD::SecVtxHelper::Vtxphi(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("phi");
+    static const SG::AuxElement::Accessor<float> a("phi");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get phi" << std::endl;
       return 0;
@@ -88,12 +88,12 @@
   }
   //
   void xAOD::SecVtxHelper::setVtxphi(xAOD::Vertex * vtx, float val){
-    static SG::AuxElement::Accessor<float> a("phi");
+    static const SG::AuxElement::Accessor<float> a("phi");
     a(*vtx)=val;
   }
   //
   float xAOD::SecVtxHelper::VtxnormDist(const xAOD::Vertex* vtx){
-    static SG::AuxElement::Accessor<float> a("normDist");
+    static const SG::AuxElement::Accessor<float> a("normDist");
     if(!a.isAvailable(*vtx)){
       std::cout << "ERROR: Failed to get normDist" << std::endl;
       return 0;
@@ -102,7 +102,7 @@
   }
   //
   void xAOD::SecVtxHelper::setVtxnormDist(xAOD::Vertex * vtx, float val){
-    static SG::AuxElement::Accessor<float> a("normDist");
+    static const SG::AuxElement::Accessor<float> a("normDist");
     a(*vtx)=val;
   }
 
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/ATLAS_CHECK_THREAD_SAFETY b/Event/xAOD/xAODBTagging/xAODBTagging/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 0000000000000000000000000000000000000000..b1733632912be99265350fcc9f1e599e1c1a629e
--- /dev/null
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+Event/xAOD/xAODBTagging
diff --git a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
index 2148d4e1eae96c04d7cf24a3d191dfc5f3d861c1..ab8c1eb577fcc839d8b35dfb9d36ce15100f148a 100644
--- a/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
+++ b/Event/xAOD/xAODBTagging/xAODBTagging/versions/BTagging_v1.h
@@ -23,6 +23,7 @@
 #include <vector>
 #include <string>
 #include <iostream>
+#include "CxxUtils/checker_macros.h"
 
 namespace xAOD {
 
@@ -299,13 +300,13 @@ namespace xAOD {
     /// @}
 
     ///@name xAOD::BTagging helper for ElementLink Persistification
-    void toPersistent();
+    void toPersistent  ATLAS_NOT_REENTRANT ();
 
-    void setDynTPELName(const std::string &taggername,
+    void setDynTPELName ATLAS_NOT_REENTRANT (const std::string &taggername,
 			const std::string &variablename);
-    void setDynVxELName(const std::string &taggername,
+    void setDynVxELName ATLAS_NOT_REENTRANT (const std::string &taggername,
 			const std::string &variablename);
-    void setDynBTagVxELName(const std::string &taggername,
+    void setDynBTagVxELName ATLAS_NOT_REENTRANT (const std::string &taggername,
 			    const std::string &variablename);
 
 
diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
index 38ec8400fc7b820b78d319fd316c45a94db7cf4e..76a6599cbe003f71db75ba8015b4c7928881910b 100644
--- a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
+++ b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx
@@ -308,8 +308,6 @@ StatusCode HltEventLoopMgr::finalize()
   }
   m_topAlgList.clear();
 
-// Backward compatibility can be removed when we switch to using C++17 by default
-#if __cplusplus >= 201500L // C++17 (needed for fold expressions)
   // Release all handles
   auto releaseAndCheck = [&](auto& handle, std::string handleType) {
     if (handle.release().isFailure())
@@ -337,40 +335,6 @@ StatusCode HltEventLoopMgr::finalize()
                  m_schedulerSvc,
                  m_hltROBDataProviderSvc);
 
-#else // standard older than C++17
-  // Release service handles
-  if (m_incidentSvc.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_incidentSvc.typeAndName();
-  if (m_robDataProviderSvc.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_robDataProviderSvc.typeAndName();
-  if (m_evtStore.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_evtStore.typeAndName();
-  if (m_detectorStore.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_detectorStore.typeAndName();
-  if (m_inputMetaDataStore.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_inputMetaDataStore.typeAndName();
-  if (m_THistSvc.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_THistSvc.typeAndName();
-  if (m_evtSelector.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_evtSelector.typeAndName();
-  if (m_outputCnvSvc.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release service " << m_outputCnvSvc.typeAndName();
-
-  // Release tool handles
-  if (m_coolHelper.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release tool " << m_coolHelper.typeAndName();
-  if (m_hltResultMaker.release().isFailure())
-    ATH_REPORT_MESSAGE(MSG::WARNING) << "Failed to release tool " << m_hltResultMaker.typeAndName();
-
-  // Release SmartIFs
-  m_whiteboard.reset();
-  m_algResourcePool.reset();
-  m_aess.reset();
-  m_schedulerSvc.reset();
-  m_hltROBDataProviderSvc.reset();
-
-#endif
-
   return StatusCode::SUCCESS;
 }
 
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsData/src/SCT_ConfigurationCondData.cxx b/InnerDetector/InDetConditions/SCT_ConditionsData/src/SCT_ConfigurationCondData.cxx
index c637c9d2c4009ed54a0e05fca0bf910cbce854ce..ae7654ce10993641092de72fae455a1844576d88 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsData/src/SCT_ConfigurationCondData.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsData/src/SCT_ConfigurationCondData.cxx
@@ -102,8 +102,12 @@ bool SCT_ConfigurationCondData::isBadModuleId(const Identifier& moduleId) const
 void SCT_ConfigurationCondData::setBadLinks(const IdentifierHash& hash, const bool isBadLink0, const bool isBadLink1) {
   unsigned int iHash{hash};
   iHash = (iHash/2)*2; // Make iHash even
-  m_badLinks[iHash].first  &= isBadLink0;
-  m_badLinks[iHash].second &= isBadLink1;
+  if (m_badLinks.count(iHash)==0) {
+    m_badLinks.insert(std::pair<IdentifierHash, std::pair<bool, bool>>(iHash, std::pair<bool, bool>(isBadLink0, isBadLink1)));
+  } else {
+    m_badLinks[iHash].first  &= isBadLink0;
+    m_badLinks[iHash].second &= isBadLink1;
+  }
   m_badLinksArray[iHash/2].first  &= isBadLink0;
   m_badLinksArray[iHash/2].second &= isBadLink1;
 }
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
index 56e71cf7386f81ef28d2e189d54ea97f0a142734..aeb63e3c5388366c64b4de9a4769b810784b3a7b 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARACCUMULATEDCDIGITCONTRAWEVENTCNV_H
@@ -34,9 +34,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArAccumulatedCalibDigitContByteStreamCnv: public Converter {
 
 public:
@@ -51,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
index 19001569bd24cdcdbd9b9223fc72278ac490dcfb..39cad9f5e7e481c29bde0b46acec26b7c42f73c0 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARACCUMULATEDDIGITCONTRAWEVENTCNV_H
@@ -34,9 +34,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArAccumulatedDigitContByteStreamCnv: public Converter {
 
 public:
@@ -51,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
index 8b49de7edb4c70409e7d042531ae352ea6c011f8..ecf8d3aff477e90bae5cae99b24fa82fa464d040 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARCALIBDIGITCONTRAWEVENTCNV_H
@@ -34,9 +34,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArCalibDigitContByteStreamCnv: public Converter {
   
 public:
@@ -50,8 +47,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
index d37dd395622a6f1f0d4c3a8d6adf54c6d77cc1ac..d017f069d553a5200f6c132a99ff87aa17962dbe 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARDIGITCONTRAWEVENTCNV_H
@@ -34,9 +34,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArDigitContByteStreamCnv: public Converter {
 
 public: 
@@ -51,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType; }
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
index cc25b02c3f8576a86310a7dc99deb190fbd2a798..92f5e28ac4fcbef1d0bc533a38fa2e1c8e65cb2c 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_FEBHEADERCONTRAWEVENTCNV_H
@@ -34,9 +34,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArFebHeaderContByteStreamCnv: public Converter {
  public:
   LArFebHeaderContByteStreamCnv(ISvcLocator* svcloc);
@@ -48,8 +45,8 @@ class LArFebHeaderContByteStreamCnv: public Converter {
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
index ab2188b6048becc5490a1df0164a70d76c7bc0e7..968883644651a241b14997139eda4f3e767e89f0 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARRAWCHANNELCONTRAWEVENTCNV_H
@@ -13,7 +13,6 @@
 #include "ByteStreamData/RawEvent.h" 
 #include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
 //#include "LArByteStream/Hid2RESrcID.h"
-#
 
 class DataObject;
 class StatusCode;
@@ -29,9 +28,6 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 class LArRawChannelContByteStreamCnv: public Converter {
 
  public:
@@ -46,8 +42,8 @@ class LArRawChannelContByteStreamCnv: public Converter {
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType; }
-  static long storageType()     { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
index ad84f43c8d184ec1be359edaf87eb14945fe85c4..b071138fe8530e8ca3f8e8629d0e543c97cd5fcf 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h"
@@ -32,7 +32,7 @@
 
 
 LArAccumulatedCalibDigitContByteStreamCnv::LArAccumulatedCalibDigitContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  Converter(storageType(), classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
 
 const CLID& LArAccumulatedCalibDigitContByteStreamCnv::classID(){
   return ClassID_traits<LArAccumulatedCalibDigitContainer>::ID() ;
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
index db7e42b94fc682f5f79e0d497ccd17ba0397cba9..562dfa424e0ef7b20a84542ba021ba506ff992ad 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArAccumulatedDigitContByteStreamCnv.h"
@@ -32,7 +32,7 @@
 
 
 LArAccumulatedDigitContByteStreamCnv::LArAccumulatedDigitContByteStreamCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+    Converter(storageType(), classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
 
 const CLID& LArAccumulatedDigitContByteStreamCnv::classID(){
   return ClassID_traits<LArAccumulatedDigitContainer>::ID() ;
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
index 1cd8b3e1817900a1ba453786adfd8acef0d337e8..f86ce40b28a1c16a483a6d5a906cc2343503fa46 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArCalibDigitContByteStreamCnv.h"
@@ -30,7 +30,7 @@
 
 
 LArCalibDigitContByteStreamCnv::LArCalibDigitContByteStreamCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(),svcloc),
+    Converter(storageType(), classID(),svcloc),
     m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL) {}
 
 LArCalibDigitContByteStreamCnv::~LArCalibDigitContByteStreamCnv() {
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
index d12e94b5758148444204dc98d88478bd5e9afe46..804e4d738029314bb2e83ade3d2243e8acdd797e 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArDigitContByteStreamCnv.h"
@@ -33,7 +33,7 @@
 
 
 LArDigitContByteStreamCnv::LArDigitContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc), m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  Converter(storageType(), classID(),svcloc), m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
     
 LArDigitContByteStreamCnv::~LArDigitContByteStreamCnv() {
  if (m_log) 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
index 911f264ec322f8044f52d02c10d8a81d0c2d1898..eed4ce7041c200c09ef713c29c24a178735573f6 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArFebHeaderContByteStreamCnv.h"
@@ -33,7 +33,7 @@
 
 
 LArFebHeaderContByteStreamCnv::LArFebHeaderContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  Converter(storageType(), classID(),svcloc),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
 
 const CLID& LArFebHeaderContByteStreamCnv::classID(){
   return ClassID_traits<LArFebHeaderContainer>::ID() ;
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
index 5686674e5a4d060f048136fcdceb6d51c9222321..43e4363990bf1174d0745e970a225fcb0b00f2ab 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArRawChannelContByteStreamCnv.h"
@@ -34,7 +34,7 @@
 
 
 LArRawChannelContByteStreamCnv::LArRawChannelContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc), m_log(NULL),
+  Converter(storageType(), classID(),svcloc), m_log(NULL),
   m_tool(NULL),m_ByteStreamEventAccess(0),m_rdpSvc(0),m_storeGate(0),m_contSize(0)
 {}
 
diff --git a/LArCalorimeter/LArDigitization/LArDigitization/LArPileUpTool.h b/LArCalorimeter/LArDigitization/LArDigitization/LArPileUpTool.h
index 44f1acc5be36ebbd5ae4a91691d12bd694437df2..a1acd7290f4b22fa2cbd0f6ff6ecf7dca7cd09f2 100755
--- a/LArCalorimeter/LArDigitization/LArDigitization/LArPileUpTool.h
+++ b/LArCalorimeter/LArDigitization/LArDigitization/LArPileUpTool.h
@@ -1,6 +1,6 @@
 //Dear emacs, this is -*-c++-*-
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARDIGITIZATION_LARPILEUPTOOL_H
@@ -18,7 +18,7 @@
 #include "PileUpTools/PileUpToolBase.h"
 #include "LArDigitization/ILArPileUpTool.h"
 
-#include "AthenaKernel/IAtRndmGenSvc.h"
+#include "AthenaKernel/IAthRNGSvc.h"
 
 #include "CaloIdentifier/CaloGain.h"
 
@@ -100,10 +100,10 @@ class LArPileUpTool : virtual public ILArPileUpTool, public PileUpToolBase
 
 
   StatusCode MakeDigit(const Identifier & cellId,
-                   HWIdentifier & ch_id,
-                   const std::vector<std::pair<float,float> >  *TimeE,
-                   //const LArDigit * rndm_digit);
-                   const LArDigit * rndm_digit, const std::vector<std::pair<float,float> > *TimeE_DigiHSTruth = nullptr);
+		       HWIdentifier & ch_id,
+		       const std::vector<std::pair<float,float> >  *TimeE,
+		       const LArDigit * rndm_digit, CLHEP::HepRandomEngine * engine,
+		       const std::vector<std::pair<float,float> > *TimeE_DigiHSTruth = nullptr);
 
 
   StatusCode ConvertHits2Samples(const Identifier & cellId, HWIdentifier ch_id,
@@ -182,7 +182,6 @@ class LArPileUpTool : virtual public ILArPileUpTool, public PileUpToolBase
   int    m_NSamples;               // number of samples in Digit
   unsigned int m_firstSample;      // first sample to use for pulse shape for in time energy deposit
   bool   m_usePhase;               // use tbin phase to get shape (default = false for Atlas)
-  std::string  m_rndmSvc;          // random service name
   bool m_rndmEvtRun;               // use run,event number for random number seeding
   bool m_useTriggerTime;
   bool m_RndmEvtOverlay;         // Pileup and noise added by overlaying random events
@@ -226,8 +225,7 @@ class LArPileUpTool : virtual public ILArPileUpTool, public PileUpToolBase
 
   bool m_skipNoHit;
 
-  IAtRndmGenSvc* m_AtRndmGenSvc;
-  CLHEP::HepRandomEngine* m_engine;
+  ServiceHandle<IAthRNGSvc> m_rndmGenSvc{this, "RndmSvc", "AthRNGSvc", ""};
 
   bool m_doDigiTruth;
 
diff --git a/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py b/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
index 5fc80db22d07b5232ed4f6843f668793044b3d8c..b82b8ac9dfb9436baadeb63b952a941d3c382b6a 100644
--- a/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
+++ b/LArCalorimeter/LArDigitization/python/LArDigitizationConfig.py
@@ -81,8 +81,6 @@ def getLArPileUpTool(name='LArPileUpTool', **kwargs): ## useLArFloat()=True,isOv
         protectedInclude("LArConditionsCommon/LArConditionsCommon_MC_jobOptions.py")
     from Digitization.DigitizationFlags import digitizationFlags
     kwargs.setdefault('NoiseOnOff', digitizationFlags.doCaloNoise.get_Value() )
-    kwargs.setdefault('RndmSvc', digitizationFlags.rndmSvc.get_Value() )
-    digitizationFlags.rndmSeedList.addSeed("LArDigitization", 1234, 5678 )
     kwargs.setdefault('DoDigiTruthReconstruction',digitizationFlags.doDigiTruth())
 
     if digitizationFlags.doXingByXingPileUp():
diff --git a/LArCalorimeter/LArDigitization/share/LArDigitization_G4_jobOptions.py b/LArCalorimeter/LArDigitization/share/LArDigitization_G4_jobOptions.py
index af6cc8237d2a4f90b098891dfa712e9118a330da..4f33dbea3c7b7a7cbf703def129a45dfdb9b7836 100755
--- a/LArCalorimeter/LArDigitization/share/LArDigitization_G4_jobOptions.py
+++ b/LArCalorimeter/LArDigitization/share/LArDigitization_G4_jobOptions.py
@@ -34,14 +34,6 @@ topSequence += digitmaker1
 digitmaker1.Nsamples = LArNSamples
 # Calorimeter Noise
 digitmaker1.NoiseOnOff = jobproperties.Digitization.doCaloNoise.get_Value()
-# rndm service
-#digitmaker1.RndmSvc = jobproperties.Digitization.digitizationRndmSvc.get_Value()
-digitmaker1.RndmSvc = jobproperties.Digitization.rndmSvc.get_Value()
-if LArDigitUseOldSeed:
-    digitmaker1.UseRndmEvtRun = TRUE
-else:
-# new random seed initialization
-    jobproperties.Digitization.rndmSeedList.addSeed("LArDigitization", 1234, 5678 )
 
 # ADC2MeVTool
 from LArRecUtils.LArADC2MeVToolDefault import LArADC2MeVToolDefault
diff --git a/LArCalorimeter/LArDigitization/src/LArPileUpTool.cxx b/LArCalorimeter/LArDigitization/src/LArPileUpTool.cxx
index 16d46839f4399e038fbaacbc0d894fe3be1e9835..e470fa540d3e6976f8c662944d460beace87011d 100755
--- a/LArCalorimeter/LArDigitization/src/LArPileUpTool.cxx
+++ b/LArCalorimeter/LArDigitization/src/LArPileUpTool.cxx
@@ -29,6 +29,9 @@
 #include "PileUpTools/PileUpMergeSvc.h"
 #include "EventInfoUtils/EventIDFromStore.h"
 
+#include "AthenaKernel/RNGWrapper.h"
+#include "CLHEP/Random/RandomEngine.h"
+
 #include <CLHEP/Random/Randomize.h>
 
 using CLHEP::RandFlat;
@@ -47,8 +50,6 @@ LArPileUpTool::LArPileUpTool(const std::string& type, const std::string& name, c
   m_larhec_id(nullptr),
   m_larfcal_id(nullptr),
   m_laronline_id(nullptr),
-  m_AtRndmGenSvc(nullptr),
-  m_engine(nullptr),
   m_nhit_tot(0),
   m_trigtime(0),
   m_n_cells(0),
@@ -98,7 +99,6 @@ LArPileUpTool::LArPileUpTool(const std::string& type, const std::string& name, c
   m_NSamples          = 5;
   m_firstSample       = 0;
   m_usePhase          = false;
-  m_rndmSvc           = "AtRndmGenSvc";
   m_rndmEvtRun        = false;
   m_RndmEvtOverlay    = false;
   m_isMcOverlay       = false;
@@ -158,7 +158,6 @@ LArPileUpTool::LArPileUpTool(const std::string& type, const std::string& name, c
   declareProperty("Nsamples",m_NSamples,"Number of ADC samples (default=5)");
   declareProperty("firstSample",m_firstSample,"First sample to use for the shape for in-time signal");
   declareProperty("UsePhase",m_usePhase,"use 1ns binned pulse shape (default=false)");
-  declareProperty("RndmSvc",m_rndmSvc,"Random number service for LAr digitization");
   declareProperty("UseRndmEvtRun",m_rndmEvtRun,"Use Run and Event number to seed rndm number (default=false)");
   declareProperty("MaskingTool",m_maskingTool,"Tool handle for dead channel masking");
   declareProperty("BadFebKey",m_badFebKey,"Key of BadFeb object in ConditionsStore");
@@ -384,25 +383,7 @@ StatusCode LArPileUpTool::initialize()
     m_triggerTimeTool.disable();
   }
 
-// initialize random number service
-  if ( m_NoiseOnOff  || m_addPhase || m_roundingNoNoise) {
-    static const bool CREATEIFNOTTHERE(true);
-    sc = service(m_rndmSvc, m_AtRndmGenSvc, CREATEIFNOTTHERE);
-    if (!sc.isSuccess() || 0 == m_AtRndmGenSvc) {
-      ATH_MSG_ERROR(" Unable to initialize AtRndmGenSvc");
-      return StatusCode::FAILURE;
-    }
-    else {
-      ATH_MSG_INFO(" Found random number service " << m_rndmSvc);
-    }
-    if (!m_rndmEvtRun) {
-      m_engine = m_AtRndmGenSvc->GetEngine("LArDigitization");
-      if (m_engine==0) {
-        ATH_MSG_ERROR(" Could find find random engine LArDigitization ");
-        return StatusCode::FAILURE;
-      }
-    }
-  }
+  ATH_CHECK(m_rndmGenSvc.retrieve());
 
   if (m_NSamples>32) {
      ATH_MSG_WARNING(" Cannot do more than 32 samples:  NSamples reset to 32 ");
@@ -482,27 +463,6 @@ StatusCode LArPileUpTool::prepareEvent(unsigned int /*nInputEvents */)
     if (!m_useMBTime) m_energySum_DigiHSTruth.resize(m_hitmap_DigiHSTruth->GetNbCells(),0.);
   }
 
-
-  // if noise on, get random number engine and initialize with well defined seeds
-  if (m_NoiseOnOff ||m_addPhase) {
-     //if use run-event number for seed
-     if (m_rndmEvtRun) {
-        const EventIDBase* evid = EventIDFromStore( evtStore() );
-        if( evid ) {
-           const int iSeedNumber = evid->event_number()+1;
-           const int iRunNumber = evid->run_number();
-           ATH_MSG_DEBUG(" Run/Event " << evid->run_number() << " " << evid->event_number());
-           ATH_MSG_DEBUG(" iSeedNumber,iRunNumber " << iSeedNumber << " " << iRunNumber);
-           m_engine = m_AtRndmGenSvc->setOnDefinedSeeds(iSeedNumber,iRunNumber,this->name());
-        }
-        else {
-           ATH_MSG_ERROR(" can not retrieve event info. Dummy rndm initialization...");
-           int iSeedNumber=1;
-           m_engine = m_AtRndmGenSvc->setOnDefinedSeeds(iSeedNumber,this->name());
-        }
-     }
-  }
-
   // get the trigger time if requested
 
   m_trigtime=0;
@@ -511,9 +471,12 @@ StatusCode LArPileUpTool::prepareEvent(unsigned int /*nInputEvents */)
      ATH_MSG_DEBUG(" Trigger time used : " << m_trigtime);
   }
 
+  ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this);
+  rngWrapper->setSeed( name(), Gaudi::Hive::currentContext() );
+
   // add random phase (i.e subtract it from trigtime)
   if (m_addPhase) {
-      m_trigtime = m_trigtime - (m_phaseMin + (m_phaseMax-m_phaseMin)*RandFlat::shoot(m_engine)  );
+    m_trigtime = m_trigtime - (m_phaseMin + (m_phaseMax-m_phaseMin)*RandFlat::shoot(*rngWrapper)  );
   }
 
   //
@@ -878,6 +841,9 @@ StatusCode LArPileUpTool::mergeEvent()
    const std::vector<std::pair<float,float> >* TimeE;
    const std::vector<std::pair<float,float> >* TimeE_DigiHSTruth = nullptr;
 
+   ATHRNG::RNGWrapper* rngWrapper = m_rndmGenSvc->getEngine(this);
+   CLHEP::HepRandomEngine * engine = *rngWrapper;
+
    for( ; it!=it_end;++it) // now loop on cells
    {
       hitlist = m_hitmap->GetCell(it);
@@ -903,7 +869,7 @@ StatusCode LArPileUpTool::mergeEvent()
                // MakeDigit called if in no overlay mode or
                // if in overlay mode and random digit exists
                if( (!m_RndmEvtOverlay) || (m_RndmEvtOverlay && digit) ) {
-                if ( this->MakeDigit(cellID, ch_id,TimeE, digit, TimeE_DigiHSTruth)
+		 if ( this->MakeDigit(cellID, ch_id,TimeE, digit, engine, TimeE_DigiHSTruth)
                       == StatusCode::FAILURE ) return StatusCode::FAILURE;
                }
             }
@@ -1907,7 +1873,8 @@ void LArPileUpTool::cross_talk(const IdentifierHash& hashId,
 StatusCode LArPileUpTool::MakeDigit(const Identifier & cellId,
                                     HWIdentifier & ch_id,
                                     const std::vector<std::pair<float,float> >* TimeE,
-                                    const LArDigit * rndmEvtDigit, const std::vector<std::pair<float,float> >* TimeE_DigiHSTruth)
+                                    const LArDigit * rndmEvtDigit, CLHEP::HepRandomEngine * engine,
+				    const std::vector<std::pair<float,float> >* TimeE_DigiHSTruth)
 
 {
   bool createDigit_DigiHSTruth = true;
@@ -2154,7 +2121,7 @@ StatusCode LArPileUpTool::MakeDigit(const Identifier & cellId,
         // Sqrt of noise covariance matrix
 	const std::vector<float>& CorGen=autoCorrNoise->autoCorrSqrt(cellId,igain);
 
-        RandGaussZiggurat::shootArray(m_engine,m_NSamples,m_Rndm,0.,1.);
+        RandGaussZiggurat::shootArray(engine,m_NSamples,m_Rndm,0.,1.);
 
         int index;
         for (int i=0;i<m_NSamples;i++) {
@@ -2209,7 +2176,7 @@ StatusCode LArPileUpTool::MakeDigit(const Identifier & cellId,
 
     else {
       if (m_roundingNoNoise) {
-        float flatRndm = RandFlat::shoot(m_engine);
+        float flatRndm = RandFlat::shoot(engine);
         xAdc =  m_Samples[i]*energy2adc + Pedestal + flatRndm;
         if(m_doDigiTruth) {
           xAdc_DigiHSTruth =  m_Samples_DigiHSTruth[i]*energy2adc + Pedestal + flatRndm;
diff --git a/LumiBlock/LumiBlockComps/LumiBlockComps/LumiBlockMuTool.h b/LumiBlock/LumiBlockComps/LumiBlockComps/LumiBlockMuTool.h
index 7065533b253c6acbbc5ccb76668d1cdac5a2ea66..a71aff9d869c33d715339b4231ccfb4ae1d7f73c 100644
--- a/LumiBlock/LumiBlockComps/LumiBlockComps/LumiBlockMuTool.h
+++ b/LumiBlock/LumiBlockComps/LumiBlockComps/LumiBlockMuTool.h
@@ -14,12 +14,14 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
 
 #include "LumiBlockComps/ILumiBlockMuTool.h"
 #include "LumiBlockComps/ILuminosityTool.h"
 
-#include <string>
+#include "xAODEventInfo/EventInfo.h"
 
+#include <string>
 
 // Usually this will be called to retrieve the mu value directly from EventInfo
 // For data which doesn't have this (or to write it there in the first place)
@@ -47,6 +49,8 @@ class LumiBlockMuTool: public AthAlgTool, virtual public ILumiBlockMuTool {
 
  private:
   ToolHandle<ILuminosityTool> m_lumiTool;
+  SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this,"EventInfoKey","EventInfo","RHK for EventInfo"};
+
 
   // Take MC mu from lumi block number instead of EventInfo?
   bool m_MCLumiBlockHack;  // Default is FALSE
diff --git a/LumiBlock/LumiBlockComps/src/LumiBlockMuTool.cxx b/LumiBlock/LumiBlockComps/src/LumiBlockMuTool.cxx
index 7b2736b536d73cea154366ae93ebfeada7586fe2..1951063077f3b022bcefd1e73045f5a9f02cd9a2 100644
--- a/LumiBlock/LumiBlockComps/src/LumiBlockMuTool.cxx
+++ b/LumiBlock/LumiBlockComps/src/LumiBlockMuTool.cxx
@@ -4,11 +4,9 @@
 
 #include "LumiBlockComps/LumiBlockMuTool.h"
 
-#include "EventInfo/EventID.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventType.h"
-
-#include "AthenaKernel/errorcheck.h"
+//#include "EventInfo/EventID.h"
+//#include "EventInfo/EventInfo.h"
+//#include "EventInfo/EventType.h"
 
 //--------------------------------------------------
 
@@ -28,6 +26,7 @@ StatusCode
 LumiBlockMuTool::initialize()
 {
   ATH_MSG_DEBUG("LumiBlockMuTool::initialize() begin");
+  ATH_CHECK(m_eventInfoKey.initialize());
 
   // Nothing else to do if not reading from DB
   if (!m_useDB) 
@@ -50,9 +49,7 @@ LumiBlockMuTool::finalize()
 float
 LumiBlockMuTool::actualInteractionsPerCrossing() const {
 
-  // Get eventInfo object
-  const EventInfo* eventInfo;
-  CHECK(evtStore()->retrieve(eventInfo), 0);
+  SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey);  
 
   // Take value from DB?     
   if (m_useDB) {
@@ -60,17 +57,18 @@ LumiBlockMuTool::actualInteractionsPerCrossing() const {
     if (m_lumiTool->muToLumi() > 0.)
       mu = m_lumiTool->lbLuminosityPerBCID()/m_lumiTool->muToLumi();
 
-    ATH_MSG_DEBUG("From DB, LB " << eventInfo->event_ID()->lumi_block() << " bcid " << eventInfo->event_ID()->bunch_crossing_id() << " -> " << mu);
+    ATH_MSG_DEBUG("From DB, LB " << eventInfo->lumiBlock() << " bcid " << eventInfo->bcid() << " -> " << mu);
     
     return mu;
   }
 
   // Read MC data from LB number?
-  if (eventInfo->event_type()->test(EventType::IS_SIMULATION)) {
+
+  if (eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION)) {
 
     if (m_MCLumiBlockHack) {
       ATH_MSG_DEBUG("Returning lumi block as mu for MC event ");
-      return eventInfo->event_ID()->lumi_block() % 100; // Never greater than 100 according to Ayana
+      return eventInfo->lumiBlock() % 100; // Never greater than 100 according to Ayana
     }
     
     // Try reading from eventInfo, but fall back if less than zero
@@ -79,7 +77,7 @@ LumiBlockMuTool::actualInteractionsPerCrossing() const {
     if ( eventInfo->actualInteractionsPerCrossing() >= 0) {
       return eventInfo->actualInteractionsPerCrossing();
     } else {
-      return eventInfo->event_ID()->lumi_block() % 100;
+      return eventInfo->lumiBlock() % 100;
     }
 
   }
@@ -94,23 +92,21 @@ LumiBlockMuTool::averageInteractionsPerCrossing() const{
   // Already set by callback if using DB
   if (m_useDB) return m_lumiTool->lbAverageInteractionsPerCrossing();
 
-  // Otherwise get from EventInfo
-  const EventInfo* eventInfo;
-  CHECK(evtStore()->retrieve(eventInfo), 0);
+  SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey);
 
   // Read MC data from LB number?
-  if (eventInfo->event_type()->test(EventType::IS_SIMULATION)) {
+  if (eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION)) {
 
     if (m_MCLumiBlockHack) {
       ATH_MSG_DEBUG("Returning lumi block as mu for MC event ");
-      return eventInfo->event_ID()->lumi_block() % 100;
+      return eventInfo->lumiBlock() % 100;
     }
 
     // Try reading from eventInfo, but fall back if zero
     if ( eventInfo->averageInteractionsPerCrossing() > 0) {
       return eventInfo->averageInteractionsPerCrossing();
     } else {
-      return eventInfo->event_ID()->lumi_block() % 100;
+      return eventInfo->lumiBlock() % 100;
     }
     
   } 
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
index 016183519c99cd7643a4f59aad399ec7b7d94405..9500ba5150ae2c15a2637a063069aaaa82f6064a 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CMakeLists.txt
@@ -15,7 +15,6 @@ atlas_depends_on_subdirs( PUBLIC
                           MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonDigitContainer
-                          MuonSpectrometer/MuonDigitization/MuonDigToolInterfaces
                           MuonSpectrometer/MuonIdHelpers
                           MuonSpectrometer/MuonSimData
                           MuonSpectrometer/MuonSimEvent
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitBuilder.h b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitBuilder.h
index 89f8822a5db3371b6e40a09b6efaa43309496560..ff51b5755548adb5459eb4ace742881dfc311978 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitBuilder.h
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitBuilder.h
@@ -1,14 +1,9 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef MUONDIGITIZATION_CSCDIGITBUILDER_H
-#define MUONDIGITIZATION_CSCDIGITBUILDER_H 
-
-#include "GaudiKernel/ToolHandle.h"
-#include "AthenaBaseComps/AthAlgorithm.h"
-
-class IMuonDigitizationTool;
+#ifndef CSC_DIGITIZATION_CSCDIGITBUILDER_H
+#define CSC_DIGITIZATION_CSCDIGITBUILDER_H
 
 // Author: Ketevi A. Assamagan
 // BNL, October 27, 2003
@@ -20,20 +15,27 @@ class IMuonDigitizationTool;
 // loop over the digit and build the digit container
 // store the digits in StoreGate
 
+#include "GaudiKernel/ToolHandle.h"
+#include "AthenaBaseComps/AthAlgorithm.h"
+
+class IPileUpTool;
+
 class CscDigitBuilder : public AthAlgorithm {
 
- public:
+public:
 
+  /** Constructor with parameters */
   CscDigitBuilder(const std::string& name, ISvcLocator* pSvcLocator);
-  ~CscDigitBuilder();
-    
-  StatusCode initialize();
-  StatusCode execute();
-  StatusCode finalize();
 
- private:
+  /** Destructor */
+  virtual ~CscDigitBuilder() = default;
+
+  /** Basic algorithm methods */
+  virtual StatusCode initialize() override final;
+  virtual StatusCode execute() override final;
 
-   ToolHandle<IMuonDigitizationTool> m_digTool;
+private:
+  ToolHandle<IPileUpTool> m_digTool{this, "DigitizationTool", "CscDigitizationTool", "CscDigitizationTool name"};
 };
 
-#endif // MUONDIGITIZATION_CSCDIGITBUILDER_H
+#endif // CSC_DIGITIZATION_CSCDIGITBUILDER_H
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
index 23fa4f6ea3e2af21d25a0f69e6fdbf6ce8dac572..3471731333f68eac96b0655d77ebb2df75beb3d7 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/CSC_Digitization/CscDigitizationTool.h
@@ -3,9 +3,7 @@
 */
 
 #ifndef MUONDIGITIZATION_CSCDIGITIZATIONTOOL_H
-#define MUONDIGITIZATION_CSCDIGITIZATIONTOOL_H 
-
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
+#define MUONDIGITIZATION_CSCDIGITIZATIONTOOL_H
 
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaKernel/IAthRNGSvc.h"
@@ -40,75 +38,69 @@ class PileUpMergeSvc;
 // loop over the digit and build the digit container
 // store the digits in StoreGate
 
-class CscDigitizationTool : virtual public IMuonDigitizationTool, public PileUpToolBase {
+class CscDigitizationTool : public PileUpToolBase {
 
   typedef std::vector<CscSimData::Deposit> deposits;
   typedef std::map<IdentifierHash,std::pair<double,double> > csc_map;
   typedef std::map<IdentifierHash,std::vector<float> > csc_newmap;
-  
-  
+
+
 public:
-  
+
   CscDigitizationTool(const std::string& type, const std::string& name, const IInterface* pIID);
 
   ~CscDigitizationTool();
-  
-  virtual StatusCode initialize() override final;
 
-  virtual StatusCode finalize()  override final;
+  virtual StatusCode initialize() override final;
 
   // PileUpTool methods...
   ///called at the end of the subevts loop. Not (necessarily) able to access subEvents
   virtual StatusCode mergeEvent()  override final;
-  
+
   ///called for each active bunch-crossing to process current subEvents. bunchXing is in ns
   virtual  StatusCode processBunchXing(
-                                int bunchXing,
-                                SubEventIterator bSubEvents,
-                                SubEventIterator eSubEvents
-                                ) override final;
+                                       int bunchXing,
+                                       SubEventIterator bSubEvents,
+                                       SubEventIterator eSubEvents
+                                       ) override final;
 
   /// return false if not interested in  certain xing times (in ns)
   /// implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
   //  virtual bool toProcess(int bunchXing) const;
   virtual StatusCode prepareEvent(unsigned int /*nInputEvents*/)  override final;
- 
+
   /// alternative interface which uses the PileUpMergeSvc to obtain
   /// all the required SubEvents.
   virtual StatusCode processAllSubEvents()  override final;
 
-  /// Used by CscDigitBuilder. Just calls processAllSubEvents -
-  /// leaving for back-compatibility (IMuonDigitizationTool)
-  virtual StatusCode digitize()  override final;
-
 public: //possibly these should be private?
   StatusCode FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap, //csc_newmap& data_SampleMapOddPhase,
                                            std::map<IdentifierHash,deposits>& myDeposits,bool phaseToSet,
-					   CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData);
+                                           CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData);
   StatusCode FillCollectionWithOldDigitEDM(csc_map& data_map, std::map<IdentifierHash,deposits>& myDeposits,CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData);
 
   StatusCode CoreDigitization(CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData, CLHEP::HepRandomEngine* rndmEngine);
-  
- private:
-  
-  ToolHandle<ICscCalibTool> m_pcalib;
+
+private:
+
+  PublicToolHandle<ICscCalibTool> m_pcalib{this, "cscCalibTool", "CscCalibTool", ""};
 
   SG::WriteHandleKey<CscSimDataCollection> m_cscSimDataCollectionWriteHandleKey{this,"CSCSimDataCollectionOutputName","CSC_SDO","WriteHandleKey for Output CscSimDataCollection"};
   SG::WriteHandleKey<CscDigitContainer> m_cscDigitContainerKey{this,"OutputObjectName","CSC_DIGITS","CSC digit container object"};
   //SG::WriteHandle<CscDigitContainer> m_container;
   //SG::WriteHandle<CscSimDataCollection> m_CSCSimDataCollectionWriteHandle;
 
-  const MuonGM::MuonDetectorManager * m_geoMgr;
-  CSC_Digitizer             * m_cscDigitizer;
+  const MuonGM::MuonDetectorManager * m_geoMgr{nullptr};
+  CSC_Digitizer             * m_cscDigitizer{nullptr};
 
-  const CscIdHelper         * m_cscIdHelper;
+  const CscIdHelper         * m_cscIdHelper{nullptr};
 
   double m_pedestal;
   bool m_maskBadChannel;
   double m_amplification;
-  
+
   //pile-up
-  TimedHitCollection<CSCSimHit>* m_thpcCSC; // the hits
+  TimedHitCollection<CSCSimHit>* m_thpcCSC{nullptr}; // the hits
   std::list<CSCSimHitCollection*> m_cscHitCollList; // only for pileup events..
   //pileup truth veto
   bool m_includePileUpTruth;
@@ -121,22 +113,22 @@ public: //possibly these should be private?
   double m_driftVelocity;
   double m_electronEnergy;
   bool   m_NInterFixed;
-  unsigned int m_run;
-  unsigned int m_evt;
+  unsigned int m_run{0};
+  unsigned int m_evt{0};
 
   ///////////////////////////////////////////////////////////////////
   // Access to the event methods:
   ///////////////////////////////////////////////////////////////////
 private:
-  
+
   // Get next event and extract collection of hit collections:
   StatusCode getNextEvent();
-  
-protected:  
-  
-  PileUpMergeSvc *m_mergeSvc; // Pile up service
-  std::string m_inputObjectName; // name of the input objects
-  
+
+protected:
+
+  PileUpMergeSvc *m_mergeSvc{nullptr}; // Pile up service
+  std::string m_inputObjectName{"CSC_Hits"}; // name of the input objects
+
   ServiceHandle <IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", ""};      // Random number service
   CLHEP::HepRandomEngine *m_rndmEngine;    // Random number engine used - not init in SiDigitization
   std::string m_rndmEngineName;// name of random engine
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitBuilder.cxx b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitBuilder.cxx
index d5034e8431735c16d1c184f1980ac5dc04db905d..cc1bae3dd5fa669a8339c59e6ce24f517bea4d78 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitBuilder.cxx
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitBuilder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Author: Ketevi A. Assamagan
@@ -7,44 +7,23 @@
 
 // Digitization algorithm for the CSC hits
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 #include "CSC_Digitization/CscDigitBuilder.h"
+#include "PileUpTools/IPileUpTool.h"
 
-CscDigitBuilder::CscDigitBuilder(const std::string& name, 
-				 ISvcLocator* pSvcLocator)
-  : AthAlgorithm(name, pSvcLocator),
-    m_digTool("CscDigitizationTool", this )
+CscDigitBuilder::CscDigitBuilder(const std::string& name,
+                                 ISvcLocator* pSvcLocator)
+  : AthAlgorithm(name, pSvcLocator)
 {
-  declareProperty("DigitizationTool", m_digTool);
-}
-
-CscDigitBuilder::~CscDigitBuilder()  {
-
 }
 
 StatusCode CscDigitBuilder::initialize() {
-  // intitialize store gate active store
-  if (m_digTool.retrieve().isFailure()) {
-    ATH_MSG_FATAL ( "Could not retrieve CSC Digitization Tool!" );
-    return StatusCode::FAILURE;
-  }
-  ATH_MSG_DEBUG ( "Retrieved CSC Digitization Tool." );
+  ATH_CHECK(m_digTool.retrieve());
+  ATH_MSG_DEBUG ( "Retrieved CscDigitizationTool (" << m_digTool->name() << ")." );
 
   return StatusCode::SUCCESS;
 }
 
 StatusCode CscDigitBuilder::execute() {
-
   ATH_MSG_DEBUG ( "in execute()" );
-
-  return m_digTool->digitize();
+  return m_digTool->processAllSubEvents();
 }
-
-StatusCode CscDigitBuilder::finalize() {
-    
-  ATH_MSG_DEBUG ( "finalize." );
-
-  return StatusCode::SUCCESS;
-}
-
-
diff --git a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
index 625cbf341951322beaa71f9666700b9cae0e8a60..0a35f25695c44f3cfbe3123c4f17c08ffbe788ac 100644
--- a/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/CSC_Digitization/src/CscDigitizationTool.cxx
@@ -5,7 +5,7 @@
 // Author: Ketevi A. Assamagan
 // BNL, October 27 2003
 // Digitization algorithm for the CSC hits
-#include "MuonReadoutGeometry/MuonDetectorManager.h" 
+#include "MuonReadoutGeometry/MuonDetectorManager.h"
 
 #include "HepMC/GenParticle.h"
 #include "GeneratorObjects/HepMcParticleLink.h"
@@ -29,13 +29,9 @@ static constexpr unsigned int crazyParticleBarcode(
     std::numeric_limits<int32_t>::max());
 // Barcodes at the HepMC level are int
 
-CscDigitizationTool::CscDigitizationTool(const std::string& type,const std::string& name,const IInterface* pIID) 
-  : PileUpToolBase(type, name, pIID), m_pcalib("CscCalibTool")
-  , m_geoMgr(0), m_cscDigitizer(0), m_cscIdHelper(0), m_thpcCSC(0)
-  , m_vetoThisBarcode(crazyParticleBarcode), m_run(0), m_evt(0), m_mergeSvc(0)
-  , m_inputObjectName("CSC_Hits") {
-
-  declareInterface<IMuonDigitizationTool>(this);
+CscDigitizationTool::CscDigitizationTool(const std::string& type,const std::string& name,const IInterface* pIID)
+  : PileUpToolBase(type, name, pIID)
+  , m_vetoThisBarcode(crazyParticleBarcode) {
 
   declareProperty("InputObjectName",  m_inputObjectName = "CSC_Hits", "name of the input objects");
   declareProperty("pedestal",m_pedestal = 0.0);
@@ -43,7 +39,6 @@ CscDigitizationTool::CscDigitizationTool(const std::string& type,const std::stri
   declareProperty("WindowUpperOffset",m_timeWindowUpperOffset = +25.);
   declareProperty("isPileUp",m_isPileUp = false);
 
-  declareProperty("cscCalibTool",     m_pcalib);
   declareProperty("maskBadChannels",  m_maskBadChannel=true);
   declareProperty("amplification",    m_amplification=0.58e5);
 
@@ -55,10 +50,12 @@ CscDigitizationTool::CscDigitizationTool(const std::string& type,const std::stri
   declareProperty("ParticleBarcodeVeto", m_vetoThisBarcode     =  crazyParticleBarcode, "Barcode of particle to ignore");
 }
 
+
 CscDigitizationTool::~CscDigitizationTool()  {
   delete m_cscDigitizer;
 }
 
+
 StatusCode CscDigitizationTool::initialize() {
 
   ATH_MSG_DEBUG ( "Initialized Properties :" );
@@ -82,20 +79,20 @@ StatusCode CscDigitizationTool::initialize() {
   ATH_MSG_DEBUG ( "Retrieved Active Store Service." );
 
   ATH_CHECK(m_cscSimDataCollectionWriteHandleKey.initialize());
-  
+
   // initialize transient detector store and MuonDetDescrManager
   if ( detStore()->retrieve(m_geoMgr).isFailure() ) {
     ATH_MSG_FATAL ( "Could not retrieve MuonDetectorManager!" );
     return StatusCode::FAILURE;
   }
-  else 
+  else
     ATH_MSG_DEBUG ( "MuonDetectorManager retrieved from StoreGate.");
 
 
   //locate the PileUpMergeSvc and initialize our local ptr
-  
+
   const bool CREATEIF(true);
-  if (!(service("PileUpMergeSvc", m_mergeSvc, CREATEIF)).isSuccess() || 
+  if (!(service("PileUpMergeSvc", m_mergeSvc, CREATEIF)).isSuccess() ||
       0 == m_mergeSvc) {
     ATH_MSG_ERROR ( "Could not find PileUpMergeSvc" );
     return StatusCode::FAILURE;
@@ -119,7 +116,7 @@ StatusCode CscDigitizationTool::initialize() {
   }
 
   ICscCalibTool * cscCalibTool = &*(m_pcalib);
-  
+
   //initialize the CSC digitizer
   CscHitIdHelper * cscHitHelper = CscHitIdHelper::GetHelper();
   m_cscDigitizer = new CSC_Digitizer(cscHitHelper, m_geoMgr, cscCalibTool);
@@ -129,7 +126,7 @@ StatusCode CscDigitizationTool::initialize() {
   m_cscDigitizer->setElectronEnergy  (m_electronEnergy);
   if (m_NInterFixed)
     m_cscDigitizer->setNInterFixed();
-  
+
   if ( m_cscDigitizer->initialize().isFailure() ) {
     ATH_MSG_FATAL ( "Could not initialize CSC Digitizer!" );
     return StatusCode::FAILURE;
@@ -149,9 +146,9 @@ StatusCode CscDigitizationTool::initialize() {
   ATH_MSG_DEBUG("WP Current MSG Level DEBUG ? " << msgLvl(MSG::DEBUG) );
   ATH_MSG_DEBUG("WP Current MSG Level VERBOSE ? " << msgLvl(MSG::VERBOSE) );
 
-  
+
   return StatusCode::SUCCESS;
-    
+
 }
 
 // Inherited from PileUpTools
@@ -166,11 +163,6 @@ StatusCode CscDigitizationTool::prepareEvent(unsigned int /*nInputEvents*/) {
 }
 ///////////////////////////////
 
-StatusCode CscDigitizationTool::digitize() {
-  return this->processAllSubEvents();
-}
-///////////////////////////////
-
 StatusCode CscDigitizationTool::processAllSubEvents() {
 
   ATH_MSG_DEBUG ( "in processAllSubEvents()" );
@@ -186,12 +178,12 @@ StatusCode CscDigitizationTool::processAllSubEvents() {
   SG::WriteHandle<CscSimDataCollection> cscSimData(m_cscSimDataCollectionWriteHandleKey);
   ATH_CHECK(cscSimData.record(std::make_unique<CscSimDataCollection>()));
 
-  //merging of the hit collection in getNextEvent method    
+  //merging of the hit collection in getNextEvent method
 
   if (0 == m_thpcCSC ) {
     StatusCode sc = getNextEvent();
     if (StatusCode::FAILURE == sc) {
-      ATH_MSG_INFO ( "There are no CSC hits in this event" );      
+      ATH_MSG_INFO ( "There are no CSC hits in this event" );
       return sc; // there are no hits in this event
     }
   }
@@ -203,21 +195,21 @@ StatusCode CscDigitizationTool::processAllSubEvents() {
 }
 
 StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData, CLHEP::HepRandomEngine* rndmEngine) {
-  
+
   // get the iterator pairs for this DetEl
   //iterate over hits
   const xAOD::EventInfo* pevt = nullptr;
   ATH_CHECK( evtStore()->retrieve(pevt) );
   m_evt = pevt->eventNumber();
   m_run = pevt->runNumber();
-  
-  
+
+
   std::map <IdentifierHash,deposits> myDeposits;
   csc_map    data_map;
   csc_newmap data_SampleMap, data_SampleMapOddPhase;
-  
-  TimedHitCollection< CSCSimHit >::const_iterator i, e;  
-  
+
+  TimedHitCollection< CSCSimHit >::const_iterator i, e;
+
   // Perform null check on m_thpcCSC
   if(!m_thpcCSC) {
     ATH_MSG_ERROR ( "m_thpcCSC is null" );
@@ -225,19 +217,19 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
   }
 
   while( m_thpcCSC->nextDetectorElement(i, e) ) {
- 
+
     // Loop over the hits:
     while (i != e) {
-        
+
       TimedHitPtr<CSCSimHit> phit(*i++);
       const CSCSimHit& hit(*phit);
 
       //      const HepMcParticleLink McLink = HepMcParticleLink(phit->trackNumber(),phit.eventId());
       //      const HepMC::GenParticle* genPart = McLink.cptr(); // some times empty pointer returned
-        
+
       ATH_MSG_DEBUG(hit.print());
 
-    
+
 
       double globalHitTime(hitTime(phit));
       double bunchTime(globalHitTime - hit.globalTime());
@@ -253,8 +245,8 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
         : m_cscDigitizer->digitize_hit(&hit, hashVec, data_map, rndmEngine);
 
       if (status.isFailure()) {
-	ATH_MSG_ERROR ( "CSC Digitizer Failed to digitize a hit!" );
-	return status;
+        ATH_MSG_ERROR ( "CSC Digitizer Failed to digitize a hit!" );
+        return status;
       }
 
       std::vector<IdentifierHash>::const_iterator vecBeg = hashVec.begin();
@@ -288,7 +280,7 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
 
       for (; vecBeg != vecEnd; vecBeg++) {
         CscSimData::Deposit deposit(HepMcParticleLink(phit->trackNumber(),phit.eventId()), CscMcData(energy, ypos, zpos));
-        myDeposits[(*vecBeg)].push_back(deposit); 
+        myDeposits[(*vecBeg)].push_back(deposit);
       }
       hashVec.clear();
     }
@@ -298,8 +290,8 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
   if (m_thpcCSC) {
     delete m_thpcCSC;
     m_thpcCSC=0;
-  } 
-  
+  }
+
   // now loop over the digit map
   // build the digits
   // build the digit collections and record them
@@ -314,11 +306,11 @@ StatusCode CscDigitizationTool::CoreDigitization(CscDigitContainer* cscDigits,Cs
   }  else
     return FillCollectionWithOldDigitEDM(data_map, myDeposits, cscDigits, cscSimData);
 
-}  
-  
+}
+
 
 StatusCode CscDigitizationTool::
-FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap, 
+FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
                               std::map<IdentifierHash,deposits>& myDeposits,
                               bool phaseToSet, CscDigitContainer* cscDigits,CscSimDataCollection* cscSimData
                               ) {
@@ -332,7 +324,7 @@ FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
 
   csc_newmap::const_iterator cscMap    = data_SampleMap.begin();
   csc_newmap::const_iterator cscMapEnd = data_SampleMap.end();
-  
+
   for (; cscMap != cscMapEnd; ++cscMap) {
     Identifier digitId;
     IdentifierHash hashId = (*cscMap).first;
@@ -344,67 +336,67 @@ FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
     Identifier elementId = m_cscIdHelper->parentID(digitId);
     IdentifierHash coll_hash;
     if (m_cscIdHelper->get_hash(elementId, coll_hash, &cscContext)) {
-      ATH_MSG_ERROR ( "Unable to get CSC hash id from CSC Digit collection " 
+      ATH_MSG_ERROR ( "Unable to get CSC hash id from CSC Digit collection "
                       << "context begin_index = " << cscContext.begin_index()
                       << " context end_index  = " << cscContext.end_index()
                       << " the identifier is " );
       elementId.show();
-    } 
-    
+    }
+
 
-    // get the charge 
+    // get the charge
     double stripCharge = 0.0;
     double driftTime = 0.0;
     //if (stripCharge < m_noiseLevel) continue;
-    
-    
+
+
     const std::vector<float> samples = (*cscMap).second;
     //    csc_newmap::iterator ii= data_SampleMapOddPhase.find(hashId);
     //    const std::vector<float> samplesOddPhase = (*ii).second;
-    
-    
+
+
     //    if (msgLvl(MSG::DEBUG)) {
     unsigned int samplingPhase =0;
     double samplingTime = m_pcalib->getSamplingTime();
     m_pcalib->findCharge(samplingTime, samplingPhase, samples, stripCharge, driftTime);
     //    }
     driftTime += m_pcalib->getLatency();
-    
+
     /** mask this readout channel if it is a dead channel or a hot channel */
     if ( !m_pcalib->isGood( hashId ) && m_maskBadChannel ) {
       stripCharge = 0.0;
-      driftTime   = 2*m_timeWindowUpperOffset; 
+      driftTime   = 2*m_timeWindowUpperOffset;
     }
-    
+
     int zsec = m_cscIdHelper->stationEta(digitId);
     int phisec = m_cscIdHelper->stationPhi(digitId);
     int istation = m_cscIdHelper->stationName(digitId) - 49;
-    
+
     int wlay = m_cscIdHelper->wireLayer(digitId);
     int measphi = m_cscIdHelper->measuresPhi(digitId);
     int istrip = m_cscIdHelper->strip(digitId);
-    
+
     int sector = zsec*(2*phisec-istation+1);
-    
+
     auto depositsForHash = myDeposits.find(hashId);
     if (depositsForHash != myDeposits.end() && depositsForHash->second.size()) {
       depositsForHash->second[0].second.setCharge(stripCharge);
       cscSimData->insert ( std::make_pair(digitId, CscSimData(depositsForHash->second,0)) );
     }
-    
+
     // fill the digit collections in StoreGate
     //    CscDigit * newDigit  = new CscDigit(digitId, int(stripCharge+1) );
     // Now, we pass driftTime as well as stripCharge.
     // SimHIT time should be added to distinguish prompt muons from secondary.... 11/19/2009 WP
-    
+
     //   CscDigit * newDigit  = new CscDigit(digitId, samples);
     //    CscDigit * newDigitOddPhase  = new CscDigit(digitId, samplesOddPhase);
 
     ATH_MSG_DEBUG ( "NEWDigit sec:measphi:wlay:istr:chg:t(w/latency) "
-                    << m_run << " " << m_evt << " " << m_cscIdHelper->show_to_string(digitId,&context) 
+                    << m_run << " " << m_evt << " " << m_cscIdHelper->show_to_string(digitId,&context)
                     << " hash:eleId = " << hashId << " " << elementId << " " << prevId << "   "
                     << sector << " " << measphi << " " <<  wlay << " " << istrip << "   "
-                    << int(stripCharge+1) << " " << float(driftTime) 
+                    << int(stripCharge+1) << " " << float(driftTime)
                     << " phase=" << phaseToSet
                     << "  samps: " << samples[0] << " " << samples[1] << " "
                     << samples[2] << " " << samples[3]
@@ -422,22 +414,22 @@ FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
 
         //        const std::vector<float> samplesToPut
         //          = (phaseToSet) ? samplesOddPhase : samples ;
-        
+
         CscDigit * newDigit  = new CscDigit(digitId, samples);
         newCollection->push_back(newDigit);
 
-        if ( cscDigits->addCollection(newCollection, coll_hash).isFailure() ) 
-          ATH_MSG_ERROR ( "Couldn't record CscDigitCollection with key=" << coll_hash 
+        if ( cscDigits->addCollection(newCollection, coll_hash).isFailure() )
+          ATH_MSG_ERROR ( "Couldn't record CscDigitCollection with key=" << coll_hash
                           << " in StoreGate!" );
 
         collection = newCollection;
 
-      } else {  
+      } else {
         CscDigitCollection * existingCollection = const_cast<CscDigitCollection*>( it_coll );
         if (phaseToSet) existingCollection->set_samplingPhase();
         //        const std::vector<float> samplesToPut
         //          = (existingCollection->samplingPhase()) ? samplesOddPhase : samples ;
-        
+
         CscDigit * newDigit  = new CscDigit(digitId, samples);
 
         existingCollection->push_back(newDigit);
@@ -454,7 +446,7 @@ FillCollectionWithNewDigitEDM(csc_newmap& data_SampleMap,
       if (phaseToSet) collection->set_samplingPhase();
       //      const std::vector<float> samplesToPut
       //        = (collection->samplingPhase()) ? samplesOddPhase : samples ;
-      
+
       CscDigit * newDigit  = new CscDigit(digitId, samples);
 
       collection->push_back(newDigit);
@@ -481,66 +473,66 @@ FillCollectionWithOldDigitEDM(csc_map& data_map, std::map<IdentifierHash,deposit
       ATH_MSG_ERROR ( "cannot get CSC channel identifier from hash " << hashId );
       return StatusCode::FAILURE;
     }
-    
-    // get the charge 
+
+    // get the charge
     double stripCharge = 0.0;
     //double gaus = CLHEP::RandGaussZiggurat::shoot(rndmEngine,0.0,1.0);
-    
+
     //if (stripCharge < m_noiseLevel) continue;
     stripCharge   = ((*cscMap).second).second + m_pedestal; // + m_noiseLevel*gaus;
     double driftTime =((*cscMap).second).first;  // SimHIT time is added yet 12/03/2009
-    
+
     //    stripCharge   = ((*cscMap).second).stripCharge + m_pedestal; // + m_noiseLevel*gaus;  v2
     //    double driftTime =((*cscMap).second).driftTime0; // for version2 v2
-    
+
     /** mask this readout channel if it is a dead channel or a hot channel */
     if ( !m_pcalib->isGood( hashId ) && m_maskBadChannel ) {
       stripCharge = 0.0;
-      driftTime   = 2*m_timeWindowUpperOffset; 
+      driftTime   = 2*m_timeWindowUpperOffset;
     }
-    
-    ATH_MSG_VERBOSE ( "CSC Digit Id = " << m_cscIdHelper->show_to_string(digitId,&context) 
-                      << " hash = " << hashId 
+
+    ATH_MSG_VERBOSE ( "CSC Digit Id = " << m_cscIdHelper->show_to_string(digitId,&context)
+                      << " hash = " << hashId
                       << " charge = " << int (stripCharge+1) );
-    
+
     int zsec = m_cscIdHelper->stationEta(digitId);
     int phisec = m_cscIdHelper->stationPhi(digitId);
     int istation = m_cscIdHelper->stationName(digitId) - 49;
-    
+
     int wlay = m_cscIdHelper->wireLayer(digitId);
     int measphi = m_cscIdHelper->measuresPhi(digitId);
     int istrip = m_cscIdHelper->strip(digitId);
-    
+
     int sector = zsec*(2*phisec-istation+1);
-    
+
     auto depositsForHash = myDeposits.find(hashId);
     if (depositsForHash != myDeposits.end() && depositsForHash->second.size()) {
       depositsForHash->second[0].second.setCharge(stripCharge);
       cscSimData->insert ( std::make_pair(digitId, CscSimData(depositsForHash->second,0)) );
     }
-    
+
     // fill the digit collections in StoreGate
     //    CscDigit * newDigit  = new CscDigit(digitId, int(stripCharge+1) );
     // Now, we pass driftTime as well as stripCharge.
     // SimHIT time should be added to distinguish prompt muons from secondary.... 11/19/2009 WP
     CscDigit * newDigit  = new CscDigit(digitId, int(stripCharge+1), float(driftTime) );
     Identifier elementId = m_cscIdHelper->parentID(digitId);
-    
+
     ATH_MSG_DEBUG ( "CSC Digit sector:measphi:wlay:istrip:charge "
                     << m_run << " " << m_evt << " " << sector << " "
                     << measphi << " " <<  wlay << " " << istrip
                     << " " << int(stripCharge+1) << " " << float(driftTime) << " " << (newDigit->sampleCharges()).size());
-    
-    
+
+
     IdentifierHash coll_hash;
     if (m_cscIdHelper->get_hash(elementId, coll_hash, &cscContext)) {
-      ATH_MSG_ERROR ( "Unable to get CSC hash id from CSC Digit collection " 
+      ATH_MSG_ERROR ( "Unable to get CSC hash id from CSC Digit collection "
                       << "context begin_index = " << cscContext.begin_index()
                       << " context end_index  = " << cscContext.end_index()
                       << " the identifier is " );
       elementId.show();
-    } 
-    
+    }
+
     if (prevId != elementId) {
       auto it_coll = cscDigits->indexFindPtr(coll_hash);
       if (nullptr ==  it_coll) {
@@ -549,9 +541,9 @@ FillCollectionWithOldDigitEDM(csc_map& data_map, std::map<IdentifierHash,deposit
         collection = newCollection;
         StatusCode status = cscDigits->addCollection(collection, coll_hash );
         if (status.isFailure())
-          ATH_MSG_ERROR ( "Couldn't record CscDigitCollection with key=" << coll_hash 
+          ATH_MSG_ERROR ( "Couldn't record CscDigitCollection with key=" << coll_hash
                           << " in StoreGate!" );
-      } else {  
+      } else {
         CscDigitCollection * existingCollection = const_cast<CscDigitCollection*>( it_coll );
         existingCollection->push_back(newDigit);
         collection = existingCollection;
@@ -569,18 +561,10 @@ FillCollectionWithOldDigitEDM(csc_map& data_map, std::map<IdentifierHash,deposit
   }
   return StatusCode::SUCCESS;
 }
-  
 
 
-StatusCode CscDigitizationTool::finalize() {
-    
-  ATH_MSG_DEBUG ( "finalize." );
-
-  return StatusCode::SUCCESS;
-}
-
 // Get next event and extract collection of hit collections:
-StatusCode CscDigitizationTool::getNextEvent() // This is applicable to non-PileUp Event... 
+StatusCode CscDigitizationTool::getNextEvent() // This is applicable to non-PileUp Event...
 {
   // Get the messaging service, print where you are
 
@@ -592,7 +576,7 @@ StatusCode CscDigitizationTool::getNextEvent() // This is applicable to non-Pile
 
   //this is a list<pair<time_t, DataLink<CSCSimHitCollection> > >
   TimedHitCollList hitCollList;
-  
+
   if (!(m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList).isSuccess()) ) {
     ATH_MSG_ERROR ( "Could not fill TimedHitCollList" );
     return StatusCode::FAILURE;
@@ -601,14 +585,14 @@ StatusCode CscDigitizationTool::getNextEvent() // This is applicable to non-Pile
     ATH_MSG_ERROR ( "TimedHitCollList has size 0" );
     return StatusCode::FAILURE;
   } else {
-    ATH_MSG_DEBUG ( hitCollList.size() 
-                    << " CSCSimHitCollections with key " << m_inputObjectName 
+    ATH_MSG_DEBUG ( hitCollList.size()
+                    << " CSCSimHitCollections with key " << m_inputObjectName
                     << " found" );
   }
-  
+
   // create a new hits collection
   m_thpcCSC = new TimedHitCollection<CSCSimHit>();
-  
+
   //now merge all collections into one
   TimedHitCollList::iterator iColl(hitCollList.begin());
   TimedHitCollList::iterator endColl(hitCollList.end());
@@ -635,13 +619,13 @@ StatusCode CscDigitizationTool::processBunchXing(int bunchXing,
   TimedHitCollList hitCollList;
 
   if (!(m_mergeSvc->retrieveSubSetEvtData(m_inputObjectName, hitCollList, bunchXing,
-					  bSubEvents, eSubEvents).isSuccess()) &&
+                                          bSubEvents, eSubEvents).isSuccess()) &&
         hitCollList.size() == 0) {
     ATH_MSG_ERROR("Could not fill TimedHitCollList");
     return StatusCode::FAILURE;
   } else {
     ATH_MSG_VERBOSE(hitCollList.size() << " CSCSimHitCollection with key " <<
-		    m_inputObjectName << " found");
+                    m_inputObjectName << " found");
   }
 
   TimedHitCollList::iterator iColl(hitCollList.begin());
@@ -654,10 +638,10 @@ StatusCode CscDigitizationTool::processBunchXing(int bunchXing,
     PileUpTimeEventIndex timeIndex(iColl->first);
 
     ATH_MSG_DEBUG("CSCSimHitCollection found with " << hitCollPtr->size() <<
-		  " hits");
+                  " hits");
     ATH_MSG_VERBOSE("time index info. time: " << timeIndex.time()
-		    << " index: " << timeIndex.index()
-		    << " type: " << timeIndex.type());
+                    << " index: " << timeIndex.index()
+                    << " type: " << timeIndex.type());
 
     m_thpcCSC->insert(timeIndex, hitCollPtr);
     m_cscHitCollList.push_back(hitCollPtr);
@@ -694,6 +678,6 @@ StatusCode CscDigitizationTool::mergeEvent() {
       ++cscHitColl;
     }
   m_cscHitCollList.clear();
-  
+
   return StatusCode::SUCCESS;
 }
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/CMakeLists.txt b/MuonSpectrometer/MuonDigitization/MDT_Digitization/CMakeLists.txt
index 88bd51002f862637632fdf4b8985ff30898651e8..19caffe8179550a43c51504e79fbe404147e69d1 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/CMakeLists.txt
@@ -21,7 +21,6 @@ atlas_depends_on_subdirs( PUBLIC
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonDigitContainer
                           MuonSpectrometer/MuonDigitization/MDT_Response
-                          MuonSpectrometer/MuonDigitization/MuonDigToolInterfaces
                           MuonSpectrometer/MuonIdHelpers
                           MuonSpectrometer/MuonSimData
                           MuonSpectrometer/MuonSimEvent
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MDT_Digitizer.h b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MDT_Digitizer.h
index aeb957080b8ec8e3a87098cf70eeb76df9ffb04f..e03a963ada6425f08cb920ef7d5449ab8723f488 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MDT_Digitizer.h
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MDT_Digitizer.h
@@ -1,30 +1,30 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef MUONDIGITIZATION_MDT_DIGITIZER_H
-#define MUONDIGITIZATION_MDT_DIGITIZER_H 
+#ifndef MDT_DIGITIZATION_MDT_DIGITIZER_H
+#define MDT_DIGITIZATION_MDT_DIGITIZER_H
 
-#include "GaudiKernel/ToolHandle.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
+#include "GaudiKernel/ToolHandle.h"
 
-class IMuonDigitizationTool;
+class IPileUpTool;
 
 class MDT_Digitizer : public AthAlgorithm {
-
  public:
 
+  /** Constructor with parameters */
   MDT_Digitizer(const std::string& name, ISvcLocator* pSvcLocator);
-  ~MDT_Digitizer();
-    
-  StatusCode initialize();
-  StatusCode execute();
-  StatusCode finalize();
 
- private:
+  /** Destructor */
+  virtual ~MDT_Digitizer() = default;
 
-   ToolHandle<IMuonDigitizationTool> m_digTool;
-};
+  /** Basic algorithm methods */
+  virtual StatusCode initialize() override final;
+  virtual StatusCode execute() override final;
 
-#endif // MUONDIGITIZATION_MDT_DIGITIZER_H
+ private:
+   ToolHandle<IPileUpTool> m_digTool{this, "DigitizationTool", "MdtDigitizationTool", "MdtDigitizationTool name"};
+};
 
+#endif // MDT_DIGITIZATION_MDT_DIGITIZER_H
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h
index 780580a5770a0973f795ab069183992c80573897..b58ba14a85c6121a7f765372d3c1419069f0a8ac 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h
@@ -56,7 +56,6 @@
 #include "AthenaKernel/IAthRNGSvc.h"
 #include "CLHEP/Random/RandGaussZiggurat.h"
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 #include "MuonCondInterface/IMDTConditionsSvc.h"
 #include "MDT_Digitization/IMDT_DigitizationTool.h"
 
@@ -99,7 +98,7 @@ class MdtCalibrationDbSvc;
 class MuonSimDataCollection;
 
 
-class MdtDigitizationTool : virtual public IMuonDigitizationTool, public PileUpToolBase {
+class MdtDigitizationTool : public PileUpToolBase {
   
  public:
   MdtDigitizationTool(const std::string& type, const std::string& name, const IInterface* pIID);
@@ -124,10 +123,6 @@ class MdtDigitizationTool : virtual public IMuonDigitizationTool, public PileUpT
   all the required SubEvents. */
   virtual StatusCode processAllSubEvents() override final;
 
-  /** Just calls processAllSubEvents - leaving for back-compatibility
-      (IMuonDigitizationTool) */
-  StatusCode digitize() override final;
-
   struct GeoCorOut {
   GeoCorOut( double sSag, double sTrack, Amg::Vector3D lp, double lSag ) : sagSign(sSag), trackingSign(sTrack), localPosition(lp), localSag(lSag) {}
     double sagSign;            // sign indicating wether the particle passed above or below the wire
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py b/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py
index d47476b1ee55ee191e2027ab0e915e156ecb5eda..0b7b0e7ca7fe94c7b7ac9076985dbde3e137180b 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/python/MdtDigitizationConfig.py
@@ -84,5 +84,5 @@ def Mdt_OverlayDigitizationTool(name="Mdt_OverlayDigitizationTool",**kwargs):
     return MdtDigitizationTool(name,**kwargs)
 
 def getMDT_OverlayDigitizer(name="MDT_OverlayDigitizer", **kwargs):
-    kwargs.setdefault("MDT_DigitizationTool","Mdt_OverlayDigitizationTool")
+    kwargs.setdefault("DigitizationTool","Mdt_OverlayDigitizationTool")
     return CfgMgr.MDT_Digitizer(name,**kwargs)
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MDT_Digitizer.cxx b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MDT_Digitizer.cxx
index b7f4b8b4f869dca3f4b7568dee20becb3dfd22c0..fc6a555f7969d1d5e88151dcd1d468e8bc5e8c23 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MDT_Digitizer.cxx
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MDT_Digitizer.cxx
@@ -1,47 +1,25 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
-
 #include "MDT_Digitization/MDT_Digitizer.h"
+#include "PileUpTools/IPileUpTool.h"
 
-MDT_Digitizer::MDT_Digitizer(const std::string& name, 
-				 ISvcLocator* pSvcLocator)
-  : AthAlgorithm(name, pSvcLocator),
-    m_digTool("MdtDigitizationTool", this )
-{
-   declareProperty("MDT_DigitizationTool", m_digTool);
-}
-
-MDT_Digitizer::~MDT_Digitizer()  {
 
+MDT_Digitizer::MDT_Digitizer(const std::string& name,
+                           ISvcLocator* pSvcLocator)
+  : AthAlgorithm(name, pSvcLocator)
+{
 }
 
 StatusCode MDT_Digitizer::initialize() {
-
-  if (m_digTool.retrieve().isFailure()) {
-    ATH_MSG_FATAL ( "Could not retrieve MDT Digitization Tool!" );
-    return StatusCode::FAILURE;
-  }
-  ATH_MSG_DEBUG ( "Retrieved MDT Digitization Tool." );
+  ATH_CHECK(m_digTool.retrieve());
+  ATH_MSG_DEBUG("Retrieved MdtDigitizationTool (" << m_digTool->name() << ").");
 
   return StatusCode::SUCCESS;
-    
 }
 
 StatusCode MDT_Digitizer::execute() {
-
-  ATH_MSG_DEBUG ( "in execute()" );
-
-  return m_digTool->digitize();
-}
-
- StatusCode MDT_Digitizer::finalize() {
-    
-   ATH_MSG_DEBUG ( "finalize." );
-
-   return StatusCode::SUCCESS;
+  ATH_MSG_DEBUG("in execute()");
+  return m_digTool->processAllSubEvents();
 }
-
-
diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx
index 2d5dcc0b349f0eec2d48c576c46588612b316447..3a2cf95cee792c2e5d3cf0b8cc025ee817f06f9f 100644
--- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx
@@ -82,8 +82,6 @@ MdtDigitizationTool::MdtDigitizationTool(const std::string& type,const std::stri
   , m_calibDbSvc("MdtCalibrationDbSvc", name) 
   , m_pSummarySvc("MDTCondSummarySvc", name)
 {
-  declareInterface<IMuonDigitizationTool>(this);
-
   declareProperty("DigitizationTool",    m_digiTool,                          "Tool which handle the digitization process");
   //Conditions Database
   declareProperty("MdtCalibrationDbSvc", m_calibDbSvc);
@@ -419,11 +417,6 @@ StatusCode MdtDigitizationTool::mergeEvent() {
 }
 
 
-StatusCode MdtDigitizationTool::digitize() {
-  return this->processAllSubEvents();
-}
-
-
 StatusCode MdtDigitizationTool::processAllSubEvents() {
 
   ATH_MSG_DEBUG ( "MdtDigitizationTool::processAllSubEvents()" );
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/CMakeLists.txt b/MuonSpectrometer/MuonDigitization/RPC_Digitization/CMakeLists.txt
index f5c7f67068f2b24a271531eaed96f89029556d63..d9262d24237bd809d9bb7d124b17eb5f21fd52bb 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/CMakeLists.txt
@@ -11,7 +11,6 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/PileUpTools
                           Event/xAOD/xAODEventInfo
                           GaudiKernel
-                          MuonSpectrometer/MuonDigitization/MuonDigToolInterfaces
                           MuonSpectrometer/MuonSimData
                           MuonSpectrometer/MuonSimEvent
                           Simulation/HitManagement
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RPC_Digitizer.h b/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RPC_Digitizer.h
index 67b86157d7a3b2abbf2ce0e4090a3fd4f5964dc0..b1e091ee7c8ba5eb349b009b90e2540fc47ae814 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RPC_Digitizer.h
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RPC_Digitizer.h
@@ -1,31 +1,32 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef MUONDIGITIZATION_RPC_DIGITIZER_H
-#define MUONDIGITIZATION_RPC_DIGITIZER_H 
+#ifndef RPC_DIGITIZATION_RPC_DIGITIZER_H
+#define RPC_DIGITIZATION_RPC_DIGITIZER_H
 
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
 
-class IMuonDigitizationTool;
+class IPileUpTool;
 
 class RPC_Digitizer : public AthAlgorithm {
 
  public:
 
+  /** Constructor with parameters */
   RPC_Digitizer(const std::string& name, ISvcLocator* pSvcLocator);
-  ~RPC_Digitizer();
-    
-  StatusCode initialize();
-  StatusCode execute();
-  StatusCode finalize();
 
- private:
+  /** Destructor */
+  virtual ~RPC_Digitizer() = default;
 
-   ToolHandle<IMuonDigitizationTool> m_digTool;
-};
+  /** Basic algorithm methods */
+  virtual StatusCode initialize() override final;
+  virtual StatusCode execute() override final;
 
-#endif // MUONDIGITIZATION_RPC_DIGITIZER_H
+ private:
 
+  ToolHandle<IPileUpTool> m_digTool{this, "DigitizationTool", "RpcDigitizationTool", "RpcDigitizationTool name"};
+};
 
+#endif // RPC_DIGITIZATION_RPC_DIGITIZER_H
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RpcDigitizationTool.h b/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RpcDigitizationTool.h
index 91dbcab1240a2cc82a609b1cac79bd19fe7de591..e76fd09eb4638f3a989252ad5f8f45cdbab78bc6 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RpcDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/RPC_Digitization/RpcDigitizationTool.h
@@ -40,7 +40,6 @@ the same strip before the dead time is ignored.
 
 
 #include "PileUpTools/PileUpToolBase.h"
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 
 #include "AthenaKernel/IAthRNGSvc.h"
 
@@ -74,7 +73,7 @@ namespace CLHEP{
   class HepRandomEngine;
 }
 
-class RpcDigitizationTool : virtual public IMuonDigitizationTool, public PileUpToolBase {
+class RpcDigitizationTool : public PileUpToolBase {
 
 public:
   RpcDigitizationTool(const std::string& type, const std::string& name, const IInterface* pIID);
@@ -104,11 +103,6 @@ public:
   all the required SubEvents. */
   virtual StatusCode processAllSubEvents() override final;
 
-  /** When being run from RPC_Digitizer, this method is called during
-      the event loop. Just calls processAllSubEvents - leaving for
-      back-compatibility (IMuonDigitizationTool) */
-  virtual StatusCode digitize() override final;
-
 private:
 
   const MuonGM::MuonDetectorManager*  m_GMmgr;
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/python/RPC_DigitizationConfig.py b/MuonSpectrometer/MuonDigitization/RPC_Digitization/python/RPC_DigitizationConfig.py
index ae86b6a7ac5597536de4f3ad6b54b0f6deb3d6de..a04fc8a80392a4a9763ba42ded48adbcf5ba9bf0 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/python/RPC_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/python/RPC_DigitizationConfig.py
@@ -154,5 +154,5 @@ def Rpc_OverlayDigitizationTool(name="RpcDigitizationTool", **kwargs):
     return RpcDigitizationTool(name, **kwargs)
 
 def getRPC_OverlayDigitizer(name="RPC_OverlayDigitizer", **kwargs):
-    kwargs.setdefault("RPC_DigitizationTool","Rpc_OverlayDigitizationTool")
+    kwargs.setdefault("DigitizationTool","Rpc_OverlayDigitizationTool")
     return CfgMgr.RPC_Digitizer(name,**kwargs)
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RPC_Digitizer.cxx b/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RPC_Digitizer.cxx
index 0ffc2f61244d9b528903bcadaa3caf7bb34bbbbb..af17d922a16ca7c0029d1b3fdc99b079b67ad05f 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RPC_Digitizer.cxx
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RPC_Digitizer.cxx
@@ -1,47 +1,25 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
-
 #include "RPC_Digitization/RPC_Digitizer.h"
+#include "PileUpTools/IPileUpTool.h"
 
-RPC_Digitizer::RPC_Digitizer(const std::string& name, 
-				 ISvcLocator* pSvcLocator)
-  : AthAlgorithm(name, pSvcLocator),
-    m_digTool("RpcDigitizationTool", this )
-{
-   declareProperty("RPC_DigitizationTool", m_digTool);
-}
-
-RPC_Digitizer::~RPC_Digitizer()  {
 
+RPC_Digitizer::RPC_Digitizer(const std::string& name,
+                           ISvcLocator* pSvcLocator)
+  : AthAlgorithm(name, pSvcLocator)
+{
 }
 
 StatusCode RPC_Digitizer::initialize() {
-
-  if (m_digTool.retrieve().isFailure()) {
-    ATH_MSG_FATAL ( "Could not retrieve RPC Digitization Tool!" );
-    return StatusCode::FAILURE;
-  }
-  ATH_MSG_DEBUG ( "Retrieved RPC Digitization Tool." );
+  ATH_CHECK(m_digTool.retrieve());
+  ATH_MSG_DEBUG("Retrieved RpcDigitizationTool (" << m_digTool->name() << ").");
 
   return StatusCode::SUCCESS;
-    
 }
 
 StatusCode RPC_Digitizer::execute() {
-
-  ATH_MSG_DEBUG ( "in execute()" );
-
-  return m_digTool->digitize();
-}
-
-StatusCode RPC_Digitizer::finalize() {
-    
-   ATH_MSG_DEBUG ( "finalize." );
-
-   return StatusCode::SUCCESS;
+  ATH_MSG_DEBUG("in execute()");
+  return m_digTool->processAllSubEvents();
 }
-
-
diff --git a/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RpcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RpcDigitizationTool.cxx
index 992c25de6fa444e59ff4e0564ff76a63286260a0..56d7e815a3448d95b7ae1ea454ab05bbc8b07ebf 100644
--- a/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RpcDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/RPC_Digitization/src/RpcDigitizationTool.cxx
@@ -82,8 +82,6 @@ RpcDigitizationTool::RpcDigitizationTool(const std::string& type,
   , m_tagInfoMgr(0)
 {
 
-  declareInterface<IMuonDigitizationTool>(this);
-
   declareProperty("Parameters"           ,  m_paraFile = "G4RPC_Digitizer.txt");  // File with cluster distributions
   declareProperty("InputObjectName"      ,  m_inputHitCollectionName    = "RPC_Hits",  "name of the input object");
   declareProperty("WindowLowerOffset"    ,  m_timeWindowLowerOffset = -100.       , "digitization window lower limit");
@@ -522,11 +520,6 @@ StatusCode RpcDigitizationTool::mergeEvent() {
   return status;
 }
 
-//--------------------------------------------
-StatusCode RpcDigitizationTool::digitize() {
-  return this->processAllSubEvents();
-}
-
 //--------------------------------------------
 StatusCode RpcDigitizationTool::processAllSubEvents() {
 
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/CMakeLists.txt b/MuonSpectrometer/MuonDigitization/TGC_Digitization/CMakeLists.txt
index a3e67f036b3236d59f2dce5acf50da8a2f5fe7aa..3625119cac8fb4ee688bf2be4be20e28a8cd3ab6 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/CMakeLists.txt
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/CMakeLists.txt
@@ -14,7 +14,6 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/Identifier
                           Event/EventInfo
                           GaudiKernel
-                          MuonSpectrometer/MuonDigitization/MuonDigToolInterfaces
                           MuonSpectrometer/MuonSimEvent
                           Simulation/HitManagement
                           PRIVATE
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TGCDigitizer.h b/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TGCDigitizer.h
index 73e84458346429516f32575e8f11f3a45a01b086..82e1424b1b7a1e5da358847d266d927303b931b9 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TGCDigitizer.h
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TGCDigitizer.h
@@ -1,27 +1,30 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef MUONDIGITIZATION_TGC_DIGITIZER_H
-#define MUONDIGITIZATION_TGC_DIGITIZER_H 
+#ifndef TGC_DIGITIZATION_TGC_DIGITIZER_H
+#define TGC_DIGITIZATION_TGC_DIGITIZER_H
 
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "GaudiKernel/ToolHandle.h"
 
-class IMuonDigitizationTool;
+class IPileUpTool;
 
 class TGCDigitizer : public AthAlgorithm {
  public:
+
+  /** Constructor with parameters */
   TGCDigitizer(const std::string& name, ISvcLocator* pSvcLocator);
-  ~TGCDigitizer();
-    
-  StatusCode initialize();
-  StatusCode execute();
-  StatusCode finalize();
 
- private:
-   ToolHandle<IMuonDigitizationTool> m_digTool;
+  /** Destructor */
+  virtual ~TGCDigitizer() = default;
 
+  /** Basic algorithm methods */
+  virtual StatusCode initialize() override final;
+  virtual StatusCode execute() override final;
+
+ private:
+   ToolHandle<IPileUpTool> m_digTool{this, "DigitizationTool", "TgcDigitizationTool", "TgcDigitizationTool name"};
 };
 
-#endif // MUONDIGITIZATION_TGC_DIGITIZER_H
+#endif // TGC_DIGITIZATION_TGC_DIGITIZER_H
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TgcDigitizationTool.h b/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TgcDigitizationTool.h
index 04381ae9a7ee1fd3206b9f06ef007a394dd87ff7..bc3fbb319e00bb4c9a0d2c6c27ce6d25bd374d68 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TgcDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/TGC_Digitization/TgcDigitizationTool.h
@@ -11,7 +11,6 @@
  * @author John Chapman, Yoji Hasegawa, Susumu Oda
  */
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 #include "PileUpTools/PileUpToolBase.h"
 
 #include "EventInfo/PileUpEventInfo.h"  /*SubEvent*/
@@ -38,7 +37,7 @@ namespace MuonGM{
   class MuonDetectorManager;
 }
 
-class TgcDigitizationTool : virtual public IMuonDigitizationTool, public PileUpToolBase {
+class TgcDigitizationTool : public PileUpToolBase {
 public:
   TgcDigitizationTool(const std::string& type, 
 		      const std::string& name,
@@ -69,17 +68,13 @@ public:
   volume of a chamber. */
   virtual StatusCode processAllSubEvents() override final;
 
-  /** Used by TGCDigitizer. Just calls processAllSubEvents - leaving
-      for back-compatibility (IMuonDigitizationTool) */
-  virtual StatusCode digitize() override final;
-
   /** Finalize */
   virtual StatusCode finalize() override final;
 
 private:
   /** Get next event and extract collection of hit collections */
   StatusCode getNextEvent();
-  /** Core part of digitization use by mergeEvent (IPileUpTool) and digitize (IMuonDigitizationTool) */
+  /** Core part of digitization used by processAllSubEvents and mergeEvent */
   StatusCode digitizeCore();
 
 protected:  
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/python/TGC_DigitizationConfig.py b/MuonSpectrometer/MuonDigitization/TGC_Digitization/python/TGC_DigitizationConfig.py
index cf10c94fcd1b70bf8f61b20fbcd5255fb4c3581b..433dfa3d615d1027afe7cc1231708e30a9f95ae1 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/python/TGC_DigitizationConfig.py
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/python/TGC_DigitizationConfig.py
@@ -37,5 +37,5 @@ def Tgc_OverlayDigitizationTool(name="Tgc_OverlayDigitizationTool", **kwargs):
     return TgcDigitizationTool(name,**kwargs)
 
 def getTGC_OverlayDigitizer(name="TGC_OverlayDigitizer", **kwargs):
-    kwargs.setdefault("TGC_DigitizationTool","Tgc_OverlayDigitizationTool")
+    kwargs.setdefault("DigitizationTool","Tgc_OverlayDigitizationTool")
     return CfgMgr.TGCDigitizer(name,**kwargs)
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TGCDigitizer.cxx b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TGCDigitizer.cxx
index 44fba22b9ef8dccbc0a389477ded1b79d98a7fcf..1374ee8a0281db23a1d9968c4928b56c2d6eb48e 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TGCDigitizer.cxx
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TGCDigitizer.cxx
@@ -1,38 +1,25 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "TGC_Digitization/TGCDigitizer.h"
+#include "PileUpTools/IPileUpTool.h"
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 
-TGCDigitizer::TGCDigitizer(const std::string& name, 
-			   ISvcLocator* pSvcLocator)
-  : AthAlgorithm(name, pSvcLocator),
-    m_digTool("TgcDigitizationTool", this)
+TGCDigitizer::TGCDigitizer(const std::string& name,
+                           ISvcLocator* pSvcLocator)
+  : AthAlgorithm(name, pSvcLocator)
 {
-  declareProperty("TGC_DigitizationTool", m_digTool);
-}
-
-TGCDigitizer::~TGCDigitizer() {
 }
 
 StatusCode TGCDigitizer::initialize() {
-  if(m_digTool.retrieve().isFailure()) {
-    ATH_MSG_FATAL("Could not retrieve TGC Digitization Tool!");
-    return StatusCode::FAILURE;
-  }
-  ATH_MSG_DEBUG("Retrieved TGC Digitization Tool (" << m_digTool->name() << ").");
-  
+  ATH_CHECK(m_digTool.retrieve());
+  ATH_MSG_DEBUG("Retrieved TgcDigitizationTool (" << m_digTool->name() << ").");
+
   return StatusCode::SUCCESS;
 }
 
 StatusCode TGCDigitizer::execute() {
   ATH_MSG_DEBUG("in execute()");
-  return m_digTool->digitize();
-}
-
-StatusCode TGCDigitizer::finalize() {
-  ATH_MSG_DEBUG("finalize.");
-  return StatusCode::SUCCESS;
+  return m_digTool->processAllSubEvents();
 }
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
index d628c190978fc23882a6f3d9f1e67cc45ed1d8ea..250efe6adc64cc119febade0575c6e1f45705307 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
@@ -49,8 +49,6 @@ TgcDigitizationTool::TgcDigitizationTool(const std::string& type,
   m_inputHitCollectionName("TGC_Hits"),
   m_vetoThisBarcode(crazyParticleBarcode) 
 {
-  declareInterface<IMuonDigitizationTool>(this);
-
   declareProperty("InputObjectName",  m_inputHitCollectionName    = "TGC_Hits",   "name of the input object");
   declareProperty("IncludePileUpTruth",  m_includePileUpTruth     =  true,        "Include pile-up truth info");
   declareProperty("ParticleBarcodeVeto", m_vetoThisBarcode        =  crazyParticleBarcode, "Barcode of particle to ignore");
@@ -207,11 +205,6 @@ StatusCode TgcDigitizationTool::mergeEvent() {
   return StatusCode::SUCCESS;
 }
 
-//_____________________________________________________________________________
-StatusCode TgcDigitizationTool::digitize() {
-  return this->processAllSubEvents();
-}
-
 //_____________________________________________________________________________
 StatusCode TgcDigitizationTool::processAllSubEvents() {
   ATH_MSG_DEBUG("TgcDigitizationTool::processAllSubEvents()");
diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/CMakeLists.txt b/MuonSpectrometer/MuonOverlay/CscOverlay/CMakeLists.txt
index e08fb1349fda56d5b2e808aa3af848598822d158..4fdc2018cc20aa77e7a2a8d4cf53c9c3f6cb82b9 100644
--- a/MuonSpectrometer/MuonOverlay/CscOverlay/CMakeLists.txt
+++ b/MuonSpectrometer/MuonOverlay/CscOverlay/CMakeLists.txt
@@ -8,6 +8,7 @@ atlas_subdir( CscOverlay )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaKernel
+                          Control/PileUpTools
                           GaudiKernel
                           MuonSpectrometer/MuonCalib/CscCalib/CscCalibTools
                           MuonSpectrometer/MuonCnv/MuonCSC_CnvTools
diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h b/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h
index 297747a6cc87884ed794ce830d41eab0557f78aa..d22064bfeb17a7da7e9d757e0c6e48b70dc43272 100644
--- a/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h
+++ b/MuonSpectrometer/MuonOverlay/CscOverlay/CscOverlay/CscOverlay.h
@@ -8,24 +8,22 @@
 //
 // Ketevi A. Assamagan <ketevi@bnl.gov>, March 2008
 
-#ifndef CSCOVERLAY_H
-#define CSCOVERLAY_H
+#ifndef CSCOVERLAY_CSCOVERLAY_H
+#define CSCOVERLAY_CSCOVERLAY_H
 
 #include <string>
 
-#include "GaudiKernel/Algorithm.h"
-#include "GaudiKernel/MsgStream.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "MuonOverlayBase/MuonOverlayBase.h"
 #include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
+#include "PileUpTools/IPileUpTool.h"
 
 #include "MuonRDO/CscRawDataContainer.h"
 
 #include "CscCalibTools/ICscCalibTool.h"
 #include "MuonCSC_CnvTools/ICSC_RDO_Decoder.h"
 
-#include "CLHEP/Random/RandomEngine.h"
-#include "AthenaKernel/IAtRndmGenSvc.h"
+#include "AthenaKernel/IAthRNGSvc.h"
 
 #include <vector>
 #include <map>
@@ -34,12 +32,16 @@ class CscIdHelper;
 
 namespace std { template<typename _Tp> class auto_ptr; }
 
+namespace CLHEP {
+  class HepRandomEngine;
+}
+
 class CscOverlay : public MuonOverlayBase  {
 public:
-  
+
   CscOverlay(const std::string &name,ISvcLocator *pSvcLocator);
 
-  /** Framework implemenrtation for the event loop */  
+  /** Framework implemenrtation for the event loop */
   virtual StatusCode overlayInitialize();
   virtual StatusCode overlayExecute();
   virtual StatusCode overlayFinalize();
@@ -51,18 +53,18 @@ public:
     this->overlayContainer(data.get(), mc);
   }
 
-  /** if the 2 container do overlay, 
+  /** if the 2 container do overlay,
       loop over the container and do the overlap collection by collection */
-  void mergeCollections(CscRawDataCollection *out_coll, const CscRawDataCollection *orig_coll, 
-                                   const CscRawDataCollection *ovl_coll);
-  
+  void mergeCollections(CscRawDataCollection *out_coll, const CscRawDataCollection *orig_coll,
+                        const CscRawDataCollection *ovl_coll, CLHEP::HepRandomEngine* rndmEngine);
+
 private:
 
-  /** get the data in one SPU of a chamber */ 
+  /** get the data in one SPU of a chamber */
   void spuData( const CscRawDataCollection * coll, const uint16_t spuID, std::vector<const CscRawData*>& data);
 
   /** data in one gas lauer */
-  uint32_t stripData ( const std::vector<const CscRawData*>& data, 
+  uint32_t stripData ( const std::vector<const CscRawData*>& data,
                        const unsigned int numSamples,
                        std::map< int,std::vector<uint16_t> >& samples,
                        uint32_t& hash,
@@ -73,11 +75,12 @@ private:
       between zero bias data and simulation. If there is no overlap, simply
       copy the data */
   std::vector<CscRawData*> overlay( const std::map< int,std::vector<uint16_t> >& sigSamples,
-                        const std::map< int,std::vector<uint16_t> >& ovlSamples,
-                        const uint32_t address,
-                        const uint16_t spuID, 
-                        const uint16_t collId,
-                        const uint32_t hash );
+                                    const std::map< int,std::vector<uint16_t> >& ovlSamples,
+                                    const uint32_t address,
+                                    const uint16_t spuID,
+                                    const uint16_t collId,
+                                    const uint32_t hash,
+                                    CLHEP::HepRandomEngine *rndmEngine);
 
   //Whether the data needs to be fliped by 49-strip for bug#56002
   bool needtoflip(const int address) const;
@@ -86,7 +89,7 @@ private:
   void copyCscRawDataCollectionProperties(const CscRawDataCollection& sourceColl, CscRawDataCollection& outColl) const;
 
   // ----------------------------------------------------------------
- 
+
   // jO controllable properties.
   // "Main" containers are read, have data from "overlay" containers added,
   // and written out with the original SG keys.
@@ -95,17 +98,14 @@ private:
   SG::WriteHandleKey<CscRawDataContainer> m_outputContainerKey{this,"OutputContainerKey","StoreGateSvc+CSCRDO",""};
 
 
-  const CscIdHelper   * m_cscHelper;
-  ToolHandle<ICscCalibTool> m_cscCalibTool;
-  ToolHandle<IMuonDigitizationTool> m_digTool;
-  ToolHandle<IMuonDigitizationTool> m_rdoTool2;
-  ToolHandle<IMuonDigitizationTool> m_rdoTool4;
-  ToolHandle<Muon::ICSC_RDO_Decoder> m_cscRdoDecoderTool;
-
-  ServiceHandle <IAtRndmGenSvc> m_rndmSvc;      // Random number service
-  CLHEP::HepRandomEngine *m_rndmEngine;    // Random number engine used - not init in SiDigitization
-  std::string m_rndmEngineName;// name of random engine
+  const CscIdHelper   * m_cscHelper{nullptr};
+  ToolHandle<ICscCalibTool> m_cscCalibTool{this, "CalibTool", "CscCalibTool", ""};
+  ToolHandle<IPileUpTool> m_digTool{this, "DigitizationTool", "CscDigitizationTool", ""};
+  ToolHandle<IMuonDigitizationTool> m_rdoTool2{this, "MakeRDOTool2", "CscDigitToCscRDOTool2", ""};
+  ToolHandle<IMuonDigitizationTool> m_rdoTool4{this, "MakeRDOTool4", "CscDigitToCscRDOTool4", ""};
+  PublicToolHandle<Muon::ICSC_RDO_Decoder> m_cscRdoDecoderTool{this, "CscRdoDecoderTool", "Muon::CscRDO_Decoder", ""};
 
+  ServiceHandle <IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", "Random Number Service"};      // Random number service
 };
 
-#endif/*CScOVERLAY_H*/
+#endif/*CSCOVERLAY_CSCOVERLAY_H*/
diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/python/CscOverlayConfig.py b/MuonSpectrometer/MuonOverlay/CscOverlay/python/CscOverlayConfig.py
index c1bb2949482ae618462582e23c0ca0f1eaf753d7..4be3e3aa0db4138312bc24d68b5662372926cfec 100644
--- a/MuonSpectrometer/MuonOverlay/CscOverlay/python/CscOverlayConfig.py
+++ b/MuonSpectrometer/MuonOverlay/CscOverlay/python/CscOverlayConfig.py
@@ -7,9 +7,6 @@ def getCscOverlay(name="CscOverlay", **kwargs):
     kwargs.setdefault("DigitizationTool", "Csc_OverlayDigitizationTool")
     kwargs.setdefault("MakeRDOTool2", "CscDigitToCscRDOTool2")
     kwargs.setdefault("MakeRDOTool4", "CscDigitToCscRDOTool4")
-    from Digitization.DigitizationFlags import digitizationFlags
-    kwargs.setdefault("RndmSvc", digitizationFlags.rndmSvc.get_Value())
-    digitizationFlags.rndmSeedList.addSeed("CscOverlay", 12261551, 245536301 )
     kwargs.setdefault("MCStore", overlayFlags.evtStore())
     kwargs.setdefault("DataStore", overlayFlags.dataStore())
 
diff --git a/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx b/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx
index 78f166e41d76f6505812f8401f8f587ac7d1f877..1358ced7a0ff61186b6a2aff30522f7b32d7eefc 100644
--- a/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx
+++ b/MuonSpectrometer/MuonOverlay/CscOverlay/src/CscOverlay.cxx
@@ -5,14 +5,12 @@
 #include "CscOverlay/CscOverlay.h"
 
 #include "StoreGate/StoreGateSvc.h"
-#include "StoreGate/DataHandle.h"
 #include "StoreGate/ReadHandle.h"
 #include "StoreGate/WriteHandle.h"
-#include "CxxUtils/make_unique.h"
 
-#include "MuonDigToolInterfaces/IMuonDigitizationTool.h"
 #include "MuonIdHelpers/CscIdHelper.h"
 
+#include "AthenaKernel/RNGWrapper.h"
 #include "CLHEP/Random/RandomEngine.h"
 #include "CLHEP/Random/RandGauss.h"
 
@@ -23,27 +21,8 @@ constexpr uint16_t MAX_AMPL = 4095; // 12-bit ADC
 
 //================================================================
 CscOverlay::CscOverlay(const std::string &name, ISvcLocator *pSvcLocator) :
-  MuonOverlayBase(name, pSvcLocator),
-  m_cscHelper(nullptr),
-  m_cscCalibTool( "CscCalibTool", this),
-  m_digTool("CscDigitizationTool", this ),
-  m_rdoTool2("CscDigitToCscRDOTool2", this ),
-  m_rdoTool4("CscDigitToCscRDOTool4", this ),
-  m_cscRdoDecoderTool ("Muon::CscRDO_Decoder"),
-  m_rndmSvc("AtRndmGenSvc", name ),
-  m_rndmEngine(nullptr),
-  m_rndmEngineName("CscOverlay")
+  MuonOverlayBase(name, pSvcLocator)
 {
-
-  /** Event DAta Store keys for the 2 data streams to overlay
-      - modifiable in job options */
-  declareProperty("DigitizationTool", m_digTool);
-  declareProperty("MakeRDOTool2", m_rdoTool2);
-  declareProperty("MakeRDOTool4", m_rdoTool4);
-  declareProperty("CscRdoDecoderTool",   m_cscRdoDecoderTool );
-  declareProperty("RndmSvc", 	     m_rndmSvc, "Random Number Service used for CscDigitToCscRDOTool" );
-  declareProperty("RndmEngine",      m_rndmEngineName, "Random engine name for CscDigitToCscRDOTool");
-
 }
 
 //================================================================
@@ -54,9 +33,9 @@ StatusCode CscOverlay::overlayInitialize()
   /** access to the CSC Identifier helper */
   ATH_CHECK(detStore()->retrieve(m_cscHelper, "CSCIDHELPER"));
   ATH_MSG_DEBUG(" Found the CscIdHelper. ");
-  
+
   /** CSC calibratin tool for the Condtiions Data base access */
-  ATH_CHECK(m_cscCalibTool.retrieve());  
+  ATH_CHECK(m_cscCalibTool.retrieve());
 
   // get cscRdoDecoderTool
   ATH_CHECK(m_cscRdoDecoderTool.retrieve());
@@ -72,13 +51,6 @@ StatusCode CscOverlay::overlayInitialize()
 
   //random number initialization
   ATH_CHECK(m_rndmSvc.retrieve());
-    
-  // getting our random numbers stream
-  m_rndmEngine = m_rndmSvc->GetEngine(m_rndmEngineName);
-  if (!m_rndmEngine) {
-    ATH_MSG_ERROR("Could not find RndmEngine : " << m_rndmEngineName);
-    return StatusCode::FAILURE;
-  }
 
   ATH_CHECK( m_inputDataRDOKey.initialize() );
   ATH_CHECK( m_inputOverlayRDOKey.initialize() );
@@ -88,9 +60,9 @@ StatusCode CscOverlay::overlayInitialize()
 }
 
 //================================================================
-StatusCode CscOverlay::overlayFinalize() 
+StatusCode CscOverlay::overlayFinalize()
 {
-  ATH_MSG_INFO("CscOverlay finalized");  
+  ATH_MSG_INFO("CscOverlay finalized");
   return StatusCode::SUCCESS;
 }
 
@@ -99,14 +71,14 @@ StatusCode CscOverlay::overlayExecute() {
   ATH_MSG_DEBUG("CscOverlay::execute() begin");
   //----------------------------------------------------------------
   unsigned int numsamples=0;//to be determined from the data
-  SG::ReadHandle<CscRawDataContainer> inputDataRDO(m_inputDataRDOKey);           
+  SG::ReadHandle<CscRawDataContainer> inputDataRDO(m_inputDataRDOKey);
   if(!inputDataRDO.isValid()) {
     ATH_MSG_WARNING("Could not get data CscRawDataContainer  \"" << inputDataRDO.name() << "\" in " << inputDataRDO.store());
     return StatusCode::SUCCESS;
   }
   ATH_MSG_VERBOSE("Found CscRawDataContainer \"" << inputDataRDO.name() << "\" in " << inputDataRDO.store());
   if ((inputDataRDO->begin()==inputDataRDO->end()) || !*(inputDataRDO->begin())){
-	ATH_MSG_WARNING("Could not get nsamples, inputDataRDO empty?");
+        ATH_MSG_WARNING("Could not get nsamples, inputDataRDO empty?");
   }
   else{
     numsamples=inputDataRDO->begin()->numSamples();
@@ -114,11 +86,11 @@ StatusCode CscOverlay::overlayExecute() {
 
   /** in the simulation stream, run digitization of the fly
       and make RDO - this will be used as input to the overlay job */
-  if ( m_digTool->digitize().isFailure() ) {
+  if ( m_digTool->processAllSubEvents().isFailure() ) {
      ATH_MSG_WARNING("On the fly CSC digitization failed ");
      return StatusCode::SUCCESS;
   }
-  
+
   if (numsamples==2) {
     if ( m_rdoTool2->digitize().isFailure() ) {
       ATH_MSG_WARNING("On the fly CSC Digit -> RDO 2 failed ");
@@ -137,7 +109,7 @@ StatusCode CscOverlay::overlayExecute() {
     ATH_MSG_WARNING("On the fly CSC Digit -> RDO failed - not 2 or 4 samples!");
     //return StatusCode::SUCCESS;
   }
-  
+
   if (numsamples>0) {
     ATH_MSG_DEBUG("Retrieving MC input CSC container");
     SG::ReadHandle<CscRawDataContainer> inputOverlayRDO(m_inputOverlayRDOKey);
@@ -146,13 +118,13 @@ StatusCode CscOverlay::overlayExecute() {
       return StatusCode::SUCCESS;
     }
     ATH_MSG_VERBOSE("Found CscRawOverlayContainer \"" << inputOverlayRDO.name() << "\" in " << inputOverlayRDO.store());
-    
+
     /* now do the overlay - reading real data from the data stream
-       and reading simulated RDO produced in the previous steps 
+       and reading simulated RDO produced in the previous steps
        from the simulation stream */
     this->overlayContainer(inputDataRDO.cptr(), inputOverlayRDO.cptr());
   }
-  
+
   //----------------------------------------------------------------
   ATH_MSG_DEBUG("CscOverlay::execute() end");
   return StatusCode::SUCCESS;
@@ -170,7 +142,7 @@ void CscOverlay::overlayContainer(const CscRawDataContainer *main,
   }
 
   /** Add data from the main container to the output one */
-  CscRawDataContainer::const_iterator p_main = main->begin(); 
+  CscRawDataContainer::const_iterator p_main = main->begin();
   CscRawDataContainer::const_iterator p_main_end = main->end();
   for(; p_main != p_main_end; ) {
     const CscRawDataCollection& mainColl(**p_main);
@@ -183,16 +155,20 @@ void CscOverlay::overlayContainer(const CscRawDataContainer *main,
       p_newColl->push_back(newData.release());
     }
     if ( outputContainer->addCollection(p_newColl.release(), p_main.hashId()).isFailure() ) {
-      ATH_MSG_WARNING("addCollection failed for main"); 
+      ATH_MSG_WARNING("addCollection failed for main");
     }
     else {
       ATH_MSG_DEBUG("data overlayContainer() added overlaid RDO");
     }
     ++p_main;
   }
-  
+
+  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this);
+  rngWrapper->setSeed( name(), Gaudi::Hive::currentContext() );
+  CLHEP::HepRandomEngine *rndmEngine(*rngWrapper);
+
   /** Add data from the ovl container to the output one */
-  CscRawDataContainer::const_iterator p_ovl = overlay->begin(); 
+  CscRawDataContainer::const_iterator p_ovl = overlay->begin();
   CscRawDataContainer::const_iterator p_ovl_end = overlay->end();
 
   for(; p_ovl != p_ovl_end; ) {
@@ -203,7 +179,7 @@ void CscOverlay::overlayContainer(const CscRawDataContainer *main,
     /** The newly created stuff will go to the output EventStore SG */
     auto out_coll = std::make_unique<CscRawDataCollection>( coll_id );
 
-    /** Look for the same ID in the main StoreGate EventStore */ 
+    /** Look for the same ID in the main StoreGate EventStore */
     CscRawDataContainer::const_iterator q = outputContainer->indexFind(coll_id);
 
     if( q != outputContainer->end() ) {
@@ -212,101 +188,101 @@ void CscOverlay::overlayContainer(const CscRawDataContainer *main,
 
       const CscRawDataCollection *coll_data = *q;
       this->copyCscRawDataCollectionProperties(*coll_data, *out_coll);
-      this->mergeCollections(out_coll.get(), coll_data, coll_ovl);
+      this->mergeCollections(out_coll.get(), coll_data, coll_ovl, rndmEngine);
 
-      /** Here the new collection is created, but not yet registered. 
-	  Put it in IDC in place of the original collection.
+      /** Here the new collection is created, but not yet registered.
+          Put it in IDC in place of the original collection.
        */
 
       outputContainer->removeCollection(p_ovl.hashId());
-      if(outputContainer->addCollection(out_coll.release(), p_ovl.hashId()).isFailure()) {      
-	ATH_MSG_WARNING("addCollection failed ");
+      if(outputContainer->addCollection(out_coll.release(), p_ovl.hashId()).isFailure()) {
+        ATH_MSG_WARNING("addCollection failed ");
       }
       else {
-	ATH_MSG_DEBUG("overlayContainer() added overlaid RDO");
+        ATH_MSG_DEBUG("overlayContainer() added overlaid RDO");
       }
     }
     else {
-      /** Copy the complete collection from ovl to output, 
-          hopefully preserving the "most derived" type of its raw data */ 
+      /** Copy the complete collection from ovl to output,
+          hopefully preserving the "most derived" type of its raw data */
       this->copyCscRawDataCollectionProperties(*coll_ovl, *out_coll);
 
-      /** Copy the complete collection from ovl to output, 
+      /** Copy the complete collection from ovl to output,
           hopefully preserving the "most derived" type of its raw data */
       unsigned int numSamples = coll_ovl->numSamples();
       for(CscRawDataCollection::const_iterator i=coll_ovl->begin(); i!=coll_ovl->end(); i++) {
 
-	/** Put Digit into Collection */
-	const CscRawData *data = ( *i );
-	if( !data ) {
-	  ATH_MSG_WARNING("NULL pointer to Digit!");
-	  continue;
-	}	
-	else{
-	  /** The new RDO goes to m_storeGateOutput - no need to mess with the pedestal, but add in noise */
+        /** Put Digit into Collection */
+        const CscRawData *data = ( *i );
+        if( !data ) {
+          ATH_MSG_WARNING("NULL pointer to Digit!");
+          continue;
+        }
+        else{
+          /** The new RDO goes to m_storeGateOutput - no need to mess with the pedestal, but add in noise */
           uint16_t width = data->width();
           uint32_t hashOffset = data->hashId();
-          std::vector<uint16_t> all_samples; 
+          std::vector<uint16_t> all_samples;
           for (unsigned int j=0; j<width; ++j) {
-	    uint32_t stripHash = hashOffset+j;
-	    double noise    = m_cscCalibTool->stripNoise( stripHash, false );
-	    //double pedestal = m_cscCalibTool->stripPedestal( stripHash, false );
-	    std::vector<uint16_t> samples;
-	    bool extractSamples = data->samples(j, numSamples, samples);
-	    if (!extractSamples) {
-	      ATH_MSG_WARNING("Unable to extract samples for strip " << j 
-			      << " Online Cluster width = " << width 
-			      << " for number of Samples = " << numSamples 
-			      << " continuing ..."); 
-	    } 
-	    else {
-	      for (unsigned int k=0; k<samples.size(); ++k) {
-		double theNoise = CLHEP::RandGauss::shoot(m_rndmEngine, 0.0, noise);
-		float adcCount = samples[k] + theNoise;
-		if ( adcCount > MAX_AMPL ) {
-		  ATH_MSG_DEBUG("value out of range (copying over signal): " << adcCount << " " 
-				<< " Setting it to max value = " << MAX_AMPL
-				<< " IdentifierHash is " << stripHash);
-		  adcCount = MAX_AMPL;
-		} 
-		all_samples.push_back( (uint16_t) rint(adcCount) );
-	      }
-	    }
-          }  
-	  auto rdo = std::make_unique<CscRawData>( all_samples, data->address(), data->identify(), data->rpuID(), data->width() );
+            uint32_t stripHash = hashOffset+j;
+            double noise    = m_cscCalibTool->stripNoise( stripHash, false );
+            //double pedestal = m_cscCalibTool->stripPedestal( stripHash, false );
+            std::vector<uint16_t> samples;
+            bool extractSamples = data->samples(j, numSamples, samples);
+            if (!extractSamples) {
+              ATH_MSG_WARNING("Unable to extract samples for strip " << j
+                              << " Online Cluster width = " << width
+                              << " for number of Samples = " << numSamples
+                              << " continuing ...");
+            }
+            else {
+              for (unsigned int k=0; k<samples.size(); ++k) {
+                double theNoise = CLHEP::RandGauss::shoot(rndmEngine, 0.0, noise);
+                float adcCount = samples[k] + theNoise;
+                if ( adcCount > MAX_AMPL ) {
+                  ATH_MSG_DEBUG("value out of range (copying over signal): " << adcCount << " "
+                                << " Setting it to max value = " << MAX_AMPL
+                                << " IdentifierHash is " << stripHash);
+                  adcCount = MAX_AMPL;
+                }
+                all_samples.push_back( (uint16_t) rint(adcCount) );
+              }
+            }
+          }
+          auto rdo = std::make_unique<CscRawData>( all_samples, data->address(), data->identify(), data->rpuID(), data->width() );
           rdo->setHashID( data->hashId() );//ACH - was "width()" ???
-	  rdo->setTime( data->time() );//ACH - was absent
-
-	  //perform some checks
-	  bool good=true;
-	  for (unsigned int j=0; j<width; ++j) {
-	    const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(rdo.get(), j);
-	    if(!(m_cscHelper->valid(channelId))) {
-	      ATH_MSG_WARNING("Invalid CSC Identifier! - skipping " << channelId);
-	      good=false;
-	    }
-	  }
-	  if (good){
-	    out_coll->push_back( rdo.release() );
-	  }
-	}
+          rdo->setTime( data->time() );//ACH - was absent
+
+          //perform some checks
+          bool good=true;
+          for (unsigned int j=0; j<width; ++j) {
+            const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(rdo.get(), j);
+            if(!(m_cscHelper->valid(channelId))) {
+              ATH_MSG_WARNING("Invalid CSC Identifier! - skipping " << channelId);
+              good=false;
+            }
+          }
+          if (good){
+            out_coll->push_back( rdo.release() );
+          }
+        }
       }
-      
+
       /** The new collection goes to m_storeGateOutput */
       if(outputContainer->addCollection(out_coll.release(), out_coll->identify()).isFailure()) {
-	ATH_MSG_WARNING("overlayContainer(): Problem in outputContainer->addCollection(Identifier)");
+        ATH_MSG_WARNING("overlayContainer(): Problem in outputContainer->addCollection(Identifier)");
       }
       else {
-	ATH_MSG_DEBUG("overlayContainer() added new RDO");
+        ATH_MSG_DEBUG("overlayContainer() added new RDO");
       }
     }
-    
+
     ++p_ovl;
   }
-  
+
   ATH_MSG_DEBUG("overlayContainer<>() end");
 }
- 
+
 // Copying CscRawDataCollection properties
  void CscOverlay::copyCscRawDataCollectionProperties(const CscRawDataCollection& sourceColl, CscRawDataCollection& outColl) const {
    /** copy a few things to the new collection */
@@ -322,7 +298,7 @@ void CscOverlay::overlayContainer(const CscRawDataContainer *main,
  }
 
 void CscOverlay::spuData( const CscRawDataCollection * coll, const uint16_t spuID, std::vector<const CscRawData*>& data) {
-  data.clear();  if ( !coll ) return; 
+  data.clear();  if ( !coll ) return;
   CscRawDataCollection::const_iterator idata = coll->begin();
   CscRawDataCollection::const_iterator edata = coll->end();
   for ( ; idata != edata; ++idata ) {
@@ -332,12 +308,12 @@ void CscOverlay::spuData( const CscRawDataCollection * coll, const uint16_t spuI
 }
 
 bool CscOverlay::needtoflip(const int address) const {
-	 int measuresPhi  = ( (address & 0x00000100) >>  8);
-	 if (address<2147483640 && measuresPhi) {
-	   int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
-	   if (stationEta>0) {	     return true;	   }
-	 }
-	 return false;
+         int measuresPhi  = ( (address & 0x00000100) >>  8);
+         if (address<2147483640 && measuresPhi) {
+           int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
+           if (stationEta>0) {       return true;          }
+         }
+         return false;
 }
 
 //
@@ -347,7 +323,8 @@ bool CscOverlay::needtoflip(const int address) const {
 //================================================================
 void CscOverlay::mergeCollections(CscRawDataCollection *out_coll,
                                   const CscRawDataCollection *data_coll,
-                                  const CscRawDataCollection *ovl_coll)
+                                  const CscRawDataCollection *ovl_coll,
+                                  CLHEP::HepRandomEngine* rndmEngine)
 {
   ATH_MSG_DEBUG("mergeCollection<>() begin");
 
@@ -355,24 +332,24 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll,
   unsigned int nSigSamples  = data_coll->numSamples();
   unsigned int nOvlSamples  = ovl_coll->numSamples();
 
-  // sampling times in both data streams 
+  // sampling times in both data streams
   unsigned int dataSamplingTime = data_coll->rate();
   unsigned int ovlSamplingTime  = ovl_coll->rate();
 
   if ( dataSamplingTime != ovlSamplingTime ) {
     ATH_MSG_WARNING("Overlay of inconsistent data - sampling times not the same "
-		    << dataSamplingTime << " ns " << ovlSamplingTime << " ns");
+                    << dataSamplingTime << " ns " << ovlSamplingTime << " ns");
      return;
   }
 
   if ( nSigSamples != nOvlSamples ) {
     ATH_MSG_WARNING("Overlay of inconsistent data - number of samples not the same "
-		    << nSigSamples << " " << nOvlSamples);
+                    << nSigSamples << " " << nOvlSamples);
      return;
   }
 
   /** loop over the SPU - collecting thr data by layer
-      do the overlay by igas layer in a chamber */ 
+      do the overlay by igas layer in a chamber */
   uint16_t clusterCounts[] = {0,0,0,0,0,0,0,0,0,0};
   uint16_t rpuCount[] = {0,0};
   for ( uint16_t spuID=0; spuID<10; ++spuID) {
@@ -384,7 +361,7 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll,
     this->spuData(ovl_coll, spuID, ovlData);
 
     /** for the non-precision strips, all the 4 layers in a chamber
-        are in the same SPU, we need to recover the data by chamber layer */ 
+        are in the same SPU, we need to recover the data by chamber layer */
     int layer = 0;
     if ( spuID == 4 || spuID == 9 ) layer=4;
     for ( int j=0; j<=layer; ++j ) {
@@ -395,116 +372,116 @@ void CscOverlay::mergeCollections(CscRawDataCollection *out_coll,
        uint32_t sigAddress = this->stripData( sigData, nSigSamples, sigSamples, sigHash, spuID, j , true); // real data
        uint32_t ovlAddress = this->stripData( ovlData, nOvlSamples, ovlSamples, ovlHash, spuID, j , false); // simulation
        if (sigSamples.size()==0 && ovlSamples.size()==0) continue;
- 
+
        uint32_t hash      = std::min( sigHash, ovlHash );
        uint32_t address   = std::min( sigAddress, ovlAddress );
        if (sigSamples.size()!=0 && ovlSamples.size()!=0 && needtoflip(address)){
-       	 ATH_MSG_DEBUG("Looking for overlap of hashes and addresses within witdths because needtoflip");
-	 msg() << MSG::VERBOSE ;
-	 std::set<int> sig;  int lastindex=-1;
-	 for (std::map< int,std::vector<uint16_t> >::const_iterator si=sigSamples.begin(); si!=sigSamples.end(); ++si) {
-	   if (si!=sigSamples.begin() && si->first-lastindex!=1) break;
-	   lastindex=si->first;
-	   sig.insert(si->first); msg() << si->first << " ";
-	 }
-	 msg()<<endmsg;
-	 bool overlap=false;
-	 msg() <<MSG::VERBOSE ;
-	 for (std::map< int,std::vector<uint16_t> >::const_iterator so=ovlSamples.begin(); so!=ovlSamples.end(); ++so) {
-	   //add 1 to beginning and end of list because adjacent counts as overlap
-	   msg() << (so->first)-1 << " ";
-	   if (sig.find((so->first)-1)!=sig.end()) {overlap=true; msg() << "!!";}
-	   msg() << (so->first) << " ";
-	   if (sig.find((so->first))!=sig.end()) {overlap=true; msg() << "!!";}
-	   msg() << (so->first)+1 << " ";
-	   if (sig.find((so->first)+1)!=sig.end()) {overlap=true; msg() << "!!";}
-	 }
-	 msg()<<endmsg;
-	 if (!overlap){
-	   ATH_MSG_DEBUG("Taking max of hashes and addresses because needtoflip and no overlap");
-	   hash      = std::max( sigHash, ovlHash );
-	   address   = std::max( sigAddress, ovlAddress );
-	 }
+         ATH_MSG_DEBUG("Looking for overlap of hashes and addresses within witdths because needtoflip");
+         msg() << MSG::VERBOSE ;
+         std::set<int> sig;  int lastindex=-1;
+         for (std::map< int,std::vector<uint16_t> >::const_iterator si=sigSamples.begin(); si!=sigSamples.end(); ++si) {
+           if (si!=sigSamples.begin() && si->first-lastindex!=1) break;
+           lastindex=si->first;
+           sig.insert(si->first); msg() << si->first << " ";
+         }
+         msg()<<endmsg;
+         bool overlap=false;
+         msg() <<MSG::VERBOSE ;
+         for (std::map< int,std::vector<uint16_t> >::const_iterator so=ovlSamples.begin(); so!=ovlSamples.end(); ++so) {
+           //add 1 to beginning and end of list because adjacent counts as overlap
+           msg() << (so->first)-1 << " ";
+           if (sig.find((so->first)-1)!=sig.end()) {overlap=true; msg() << "!!";}
+           msg() << (so->first) << " ";
+           if (sig.find((so->first))!=sig.end()) {overlap=true; msg() << "!!";}
+           msg() << (so->first)+1 << " ";
+           if (sig.find((so->first)+1)!=sig.end()) {overlap=true; msg() << "!!";}
+         }
+         msg()<<endmsg;
+         if (!overlap){
+           ATH_MSG_DEBUG("Taking max of hashes and addresses because needtoflip and no overlap");
+           hash      = std::max( sigHash, ovlHash );
+           address   = std::max( sigAddress, ovlAddress );
+         }
        }
 
        //for checks
        std::set<int> insertedstrips, readstrips;
        for (std::map< int,std::vector<uint16_t> >::const_iterator s=sigSamples.begin(); s!=sigSamples.end(); ++s){readstrips.insert(s->first);}
        for (std::map< int,std::vector<uint16_t> >::const_iterator si=ovlSamples.begin(); si!=ovlSamples.end(); ++si){readstrips.insert(si->first);}
-       
-       std::vector<CscRawData*> datums = this->overlay(sigSamples, ovlSamples,address, spuID, out_coll->identify(), hash );
-       if ( datums.size()==0 ) { 	 ATH_MSG_WARNING("datums is size 0!");       }
+
+       std::vector<CscRawData*> datums = this->overlay(sigSamples, ovlSamples,address, spuID, out_coll->identify(), hash, rndmEngine);
+       if ( datums.size()==0 ) {         ATH_MSG_WARNING("datums is size 0!");       }
        for (unsigned int di=0; di<datums.size(); ++di){
-	 CscRawData* datum=datums[di];
-	 hash = datum->hashId();
-	 address = datum->address();
-	 int stripstart        = (  address & 0x000000FF) + 1 + 0;
-	 ATH_MSG_DEBUG("Datum in layer="<<j<<" has hash="<<hash<<" address="<<address<<" stripstart="<<stripstart<<", "<< *datum );
-	 if (datum->width()==0) {
-	   ATH_MSG_WARNING("Datum has 0 width!");
-	   continue;
-	 }
-
-	  //perform some checks
-	  int stationName =  ( ( address & 0x00010000) >> 16 ) + 50;
-	  int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
-	  int stationPhi  =  ( ( address & 0x0000E000) >> 13 ) + 1;
-	  Identifier me= m_cscHelper->elementID(stationName,stationEta,stationPhi);
-	  ATH_MSG_VERBOSE("stationName,Eta,Phi="<<stationName<<","<<stationEta<<","<<stationPhi<<" - me="<<me);
-	  bool good=true;
-	  for (unsigned int j=0; j<datum->width(); ++j) {
-	    int chamberLayer = ( (address & 0x00000800) >> 11) + 0;
-	    std::string det=m_cscCalibTool->getDetDescr();
-	    if ( det.find ("ATLAS-") != std::string::npos )
-	      chamberLayer = ( (address & 0x00000800) >> 11) + 1;
- 	    int wireLayer    = ( (address & 0x00000600) >>  9) + 1;
-	    int measuresPhi  = ( (address & 0x00000100) >>  8);
-	    int strip        = (  address & 0x000000FF) + 1 + j; 
-	    ATH_MSG_VERBOSE("det,chamberlayer,wirelayer,measuresphi,strip="<<det<<","<<chamberLayer<<","<<wireLayer<<","<<measuresPhi<<","<<strip);
-	    // Added to Online -> Offline id  in A side number is opposite bug#56002
-	    if (measuresPhi) {
-	      int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
-	      if (stationEta>0) {
-		strip = 49-strip;
-		ATH_MSG_VERBOSE("FLIP strip, now strip="<<strip);
-	      }
-	    }
-	    insertedstrips.insert(strip);//for checks
-	    Identifier mechan= m_cscHelper->channelID(me,chamberLayer,wireLayer,measuresPhi,strip);
-	    ATH_MSG_VERBOSE("mechan="<<mechan);
-	    const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(datum, j);
-	    if(!(m_cscHelper->valid(channelId))) {
-	      ATH_MSG_WARNING("Invalid CSC Identifier in merge! - skipping " << channelId );
-	      good=false;
-	    }
-	  else{ATH_MSG_DEBUG("Valid CSC Identifier in merge " << channelId);}
-	  }
-	  if (good){	    out_coll->push_back(datum);	  }
-	  else{	    continue;	  }
-	  
-	  //keep count
+         CscRawData* datum=datums[di];
+         hash = datum->hashId();
+         address = datum->address();
+         int stripstart        = (  address & 0x000000FF) + 1 + 0;
+         ATH_MSG_DEBUG("Datum in layer="<<j<<" has hash="<<hash<<" address="<<address<<" stripstart="<<stripstart<<", "<< *datum );
+         if (datum->width()==0) {
+           ATH_MSG_WARNING("Datum has 0 width!");
+           continue;
+         }
+
+          //perform some checks
+          int stationName =  ( ( address & 0x00010000) >> 16 ) + 50;
+          int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
+          int stationPhi  =  ( ( address & 0x0000E000) >> 13 ) + 1;
+          Identifier me= m_cscHelper->elementID(stationName,stationEta,stationPhi);
+          ATH_MSG_VERBOSE("stationName,Eta,Phi="<<stationName<<","<<stationEta<<","<<stationPhi<<" - me="<<me);
+          bool good=true;
+          for (unsigned int j=0; j<datum->width(); ++j) {
+            int chamberLayer = ( (address & 0x00000800) >> 11) + 0;
+            std::string det=m_cscCalibTool->getDetDescr();
+            if ( det.find ("ATLAS-") != std::string::npos )
+              chamberLayer = ( (address & 0x00000800) >> 11) + 1;
+            int wireLayer    = ( (address & 0x00000600) >>  9) + 1;
+            int measuresPhi  = ( (address & 0x00000100) >>  8);
+            int strip        = (  address & 0x000000FF) + 1 + j;
+            ATH_MSG_VERBOSE("det,chamberlayer,wirelayer,measuresphi,strip="<<det<<","<<chamberLayer<<","<<wireLayer<<","<<measuresPhi<<","<<strip);
+            // Added to Online -> Offline id  in A side number is opposite bug#56002
+            if (measuresPhi) {
+              int stationEta  =  ( ((address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
+              if (stationEta>0) {
+                strip = 49-strip;
+                ATH_MSG_VERBOSE("FLIP strip, now strip="<<strip);
+              }
+            }
+            insertedstrips.insert(strip);//for checks
+            Identifier mechan= m_cscHelper->channelID(me,chamberLayer,wireLayer,measuresPhi,strip);
+            ATH_MSG_VERBOSE("mechan="<<mechan);
+            const Identifier channelId = m_cscRdoDecoderTool->channelIdentifier(datum, j);
+            if(!(m_cscHelper->valid(channelId))) {
+              ATH_MSG_WARNING("Invalid CSC Identifier in merge! - skipping " << channelId );
+              good=false;
+            }
+          else{ATH_MSG_DEBUG("Valid CSC Identifier in merge " << channelId);}
+          }
+          if (good){        out_coll->push_back(datum);   }
+          else{     continue;     }
+
+          //keep count
           clusterCounts[spuID] += 1;
           if ( spuID <= 4 ) rpuCount[0] = 5;
           else if ( spuID > 4 && spuID <= 9 ) rpuCount[1] = 11;
        }//loop over datum
-       
+
        //check
        if (readstrips!=insertedstrips){
-	 ATH_MSG_WARNING("Readstrips != Insertedstrips: ");
-	 for (std::set<int>::const_iterator i = readstrips.begin(); i!=readstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl;
-	 for (std::set<int>::const_iterator i = insertedstrips.begin(); i!=insertedstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl;
+         ATH_MSG_WARNING("Readstrips != Insertedstrips: ");
+         for (std::set<int>::const_iterator i = readstrips.begin(); i!=readstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl;
+         for (std::set<int>::const_iterator i = insertedstrips.begin(); i!=insertedstrips.end(); ++i){std::cout<<*i<<" ";} std::cout<<std::endl;
        }
 
-    } 
-  } 
+    }
+  }
   for (unsigned int i=0; i<10; ++i) out_coll->set_spuCount(i,clusterCounts[i]);
   for (unsigned int i=0; i<2; ++i)  { if (rpuCount[i] != 0) out_coll->addRPU(rpuCount[i]); }
   // FIXME --- need to be able to reset the dataType - should add a new method to CscRawDataCollection for this
   ATH_MSG_DEBUG("mergeCollection<>() end ");
 }
- 
+
 uint32_t CscOverlay::stripData ( const std::vector<const CscRawData*>& data,
-                                 const unsigned int numSamples, 
+                                 const unsigned int numSamples,
                                  std::map< int,std::vector<uint16_t> >& samples,
                                  uint32_t& hash,
                                  const uint16_t spuID,
@@ -536,12 +513,12 @@ uint32_t CscOverlay::stripData ( const std::vector<const CscRawData*>& data,
     int layer          = m_cscHelper->wireLayer( stripId );
     uint16_t width = datum->width();
 
-    /** create the map only layer by layer 
-        for the precision strip, we set gasLayer=0 because the spuID tells you the gas layer 
-        for the non-precision strips, we need to explicitly get the gas layer number form the Identifier */ 
+    /** create the map only layer by layer
+        for the precision strip, we set gasLayer=0 because the spuID tells you the gas layer
+        for the non-precision strips, we need to explicitly get the gas layer number form the Identifier */
     bool non_precision = (gasLayer==layer) && (spuID==4 || spuID==9);
     bool precision     = (gasLayer==0) && (!(spuID==4 || spuID==9));
-    bool check = precision || non_precision; 
+    bool check = precision || non_precision;
     if ( !check ) {
       //ATH_MSG_DEBUG("Not precision or non_precision, skipping layer="<<layer<<", gasLayer="<<gasLayer<<", spuID="<<spuID);
       continue;
@@ -564,7 +541,7 @@ uint32_t CscOverlay::stripData ( const std::vector<const CscRawData*>& data,
       uint32_t oldStrip  = uint32_t (strip & 0x000000FF);
       uint32_t newStrip  = uint32_t (49-oldStrip);//starts at 1
       strip=strip - oldStrip + newStrip;
-      
+
       ATH_MSG_VERBOSE("needtoflip in stripdata, newaddress now = "<<newaddress<<", strip now = "<<strip);
     }
 
@@ -585,16 +562,16 @@ uint32_t CscOverlay::stripData ( const std::vector<const CscRawData*>& data,
        std::vector<uint16_t> adcs;
        bool extractSamples = datum->samples(j, numSamples, adcs);
        if ( !extractSamples ) {
-	 ATH_MSG_WARNING("Unable to extract samples for strip " << j 
-			 << " Online Cluster width = " << width << " for number of Samples = " << numSamples); 
-       } 
-       else {   
-	 int newstrip = (strip+j);
-	 if (false && isdata && needtoflip(address)){
-	   newstrip = strip-j;
-	   ATH_MSG_VERBOSE("needtoflip in stripdata, newstrip is "<<newstrip);
-	 }
-	 samples.insert ( std::make_pair( newstrip, adcs) );    
+         ATH_MSG_WARNING("Unable to extract samples for strip " << j
+                         << " Online Cluster width = " << width << " for number of Samples = " << numSamples);
+       }
+       else {
+         int newstrip = (strip+j);
+         if (false && isdata && needtoflip(address)){
+           newstrip = strip-j;
+           ATH_MSG_VERBOSE("needtoflip in stripdata, newstrip is "<<newstrip);
+         }
+         samples.insert ( std::make_pair( newstrip, adcs) );
        }
     }
   }
@@ -604,11 +581,12 @@ uint32_t CscOverlay::stripData ( const std::vector<const CscRawData*>& data,
 }
 
 std::vector<CscRawData*> CscOverlay::overlay( const std::map< int,std::vector<uint16_t> >& sigSamples,
-                                  const std::map< int,std::vector<uint16_t> >& ovlSamples,
-                                  const uint32_t address, 
-                                  const uint16_t spuID, 
-                                  const uint16_t collId,
-                                  const uint32_t hash )
+                                              const std::map< int,std::vector<uint16_t> >& ovlSamples,
+                                              const uint32_t address,
+                                              const uint16_t spuID,
+                                              const uint16_t collId,
+                                              const uint32_t hash,
+                                              CLHEP::HepRandomEngine *rndmEngine)
 {
   ATH_MSG_DEBUG("overlay<>() begin: hash="<<hash<<" address="<<address);
   std::vector<CscRawData*> datas;
@@ -630,8 +608,8 @@ std::vector<CscRawData*> CscOverlay::overlay( const std::map< int,std::vector<ui
     if ( sig != sigSamples.end() && ovl == ovlSamples.end() ) { // real data only
       ATH_MSG_VERBOSE("data only for i="<<i);
       for ( unsigned int j=0; j<(*sig).second.size(); ++j ) {
-	samples.push_back( (*sig).second.at(j) );
-	assert((*sig).second.at(j)<=MAX_AMPL);
+        samples.push_back( (*sig).second.at(j) );
+        assert((*sig).second.at(j)<=MAX_AMPL);
       }
       width++; used=true;
     }
@@ -640,13 +618,13 @@ std::vector<CscRawData*> CscOverlay::overlay( const std::map< int,std::vector<ui
       int myhashw=myhash+width; if (needtoflip(myaddress)) {myhashw=myhash-width;}
       double noise = m_cscCalibTool->stripNoise( (myhashw), false );//in ADC counts
        for ( unsigned int j=0; j<(*ovl).second.size(); ++j ) {
-	  double theNoise = CLHEP::RandGauss::shoot(m_rndmEngine, 0.0, noise);
+          double theNoise = CLHEP::RandGauss::shoot(rndmEngine, 0.0, noise);
           float adcCount = (*ovl).second.at(j) + theNoise ;//add noise
           if ( adcCount > MAX_AMPL ) {
-	    ATH_MSG_DEBUG("value out of range (adding noise): " << adcCount << " "
-		<< " Setting it to max value = " << MAX_AMPL
-			  << " IdentifierHash is " << (myhashw));
-	    adcCount = MAX_AMPL;
+            ATH_MSG_DEBUG("value out of range (adding noise): " << adcCount << " "
+                << " Setting it to max value = " << MAX_AMPL
+                          << " IdentifierHash is " << (myhashw));
+            adcCount = MAX_AMPL;
           }
           samples.push_back( (uint16_t) rint(adcCount) );
        }
@@ -659,27 +637,27 @@ std::vector<CscRawData*> CscOverlay::overlay( const std::map< int,std::vector<ui
        for ( unsigned int j=0; j<(*sig).second.size(); ++j ) {
           float adcCount = (*sig).second.at(j) + (*ovl).second.at(j) - pedestal ;//subtract pedestal only (data already has noise)
           if ( adcCount > MAX_AMPL ) {
-	    ATH_MSG_DEBUG("value out of range (adding data+MC samples - pedestal): " << adcCount << " "
-		<< " Setting it to max value = " << MAX_AMPL
-			  << " IdentifierHash is " << (myhashw));
-	    adcCount = MAX_AMPL;
+            ATH_MSG_DEBUG("value out of range (adding data+MC samples - pedestal): " << adcCount << " "
+                << " Setting it to max value = " << MAX_AMPL
+                          << " IdentifierHash is " << (myhashw));
+            adcCount = MAX_AMPL;
           }
           samples.push_back( (uint16_t) rint(adcCount) );
        }
        width++; used=true;
     }
-    
+
     if ( used==false && datas.size()>0 ){
       if (needtoflip(myaddress)) {myhash-=1; myaddress-=1;}
       else {myhash+=1; myaddress+=1;}
     }
-  
+
     //If a break is detected in the strip cluster, start a new CscRawData object...
     //and adjust the hash and address, etc.
     if ( (used==false||i==max) && samples.size()>0){
       if (datas.size()>0 && needtoflip(myaddress)) {myhash-=width; myaddress-=width;}
       rawData = new CscRawData( samples, myaddress, collId, spuID, width );
-      rawData->setHashID(myhash); 
+      rawData->setHashID(myhash);
       rawData->setTime(0);//ACH - TODO: should be made significantly more clever!
       datas.push_back(rawData);
       ATH_MSG_DEBUG("overlay<>() add datum: hash="<<myhash<<" address="<<myaddress<<" width="<<width);
@@ -687,7 +665,7 @@ std::vector<CscRawData*> CscOverlay::overlay( const std::map< int,std::vector<ui
       if (!needtoflip(myaddress)) {myhash+=width; myaddress+=width;}
       width=0;
     }
-    
+
   }
   ATH_MSG_DEBUG("overlay<>() end: CscRawDatas size="<<datas.size());
   return datas;
diff --git a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauEleBDT.h b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauEleBDT.h
index a0fa3ddfb010b08abcbfa1ffad34162d297e8055..6ba37d0f400006a917049780590984ad6a168326 100644
--- a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauEleBDT.h
+++ b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauEleBDT.h
@@ -77,7 +77,8 @@ class TauEleBDT: virtual public TauRecToolBase
 	virtual	StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
 	virtual	StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS;}
 	virtual	StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-	virtual	StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 	virtual	StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode eventFinalize() { return StatusCode::SUCCESS; }
 
diff --git a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauJetBDT.h b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauJetBDT.h
index 4190dc44fceb2e744b99e1753e2f03ff4c711a53..6763ed98965808e4feed27ccce846c2ff03621c9 100644
--- a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauJetBDT.h
+++ b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauJetBDT.h
@@ -56,7 +56,8 @@ class TauJetBDT: virtual public TauRecToolBase
 	virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS;}
 	virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode eventFinalize() { return StatusCode::SUCCESS; }
 
diff --git a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauMuonVeto.h b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauMuonVeto.h
index 7f170ab9aa123808db602b1ef8c7fd7d044a41e0..e133b7639dce24787eb04fd99495f18467a953a5 100644
--- a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauMuonVeto.h
+++ b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauMuonVeto.h
@@ -32,7 +32,8 @@ class TauMuonVeto: virtual public TauRecToolBase
 	virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode eventFinalize(){ return StatusCode::SUCCESS; }
 
diff --git a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauScoreFlatteningTool.h b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauScoreFlatteningTool.h
index 5a99ae5c5f21cb53e199eabea35dee8b6cd06b4e..1184f9bf40417e3ceb8132362ace684df39671ee 100644
--- a/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauScoreFlatteningTool.h
+++ b/PhysicsAnalysis/TauID/TauDiscriminant/TauDiscriminant/TauScoreFlatteningTool.h
@@ -37,7 +37,8 @@ class TauScoreFlatteningTool: virtual public TauRecToolBase
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode eventFinalize() { return StatusCode::SUCCESS; }
 
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
index d13f5b0f3e983c06a9997d3fb1372412d4adcb5f..dfcb2b44acb4675e23e228f900569427545c7980 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
@@ -8,7 +8,7 @@
 #                                                                      #
 ########################################################################
 
-__all__ =  ["JetConstit", "JetGhost", "JetDefinition","xAOD"]
+__all__ =  ["JetConstit", "JetGhost", "JetDefinition","xAODType"]
 
 # Code from JetRecUtils
 # define the convention that we write R truncating the decimal point
diff --git a/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py b/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
index b3a883b43fa4137fbccb46d290d67316cc74ee22..4db5a37a93f12e50b8547684519447d802cfe6ee 100644
--- a/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
+++ b/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
@@ -17,14 +17,14 @@
 
 ########################################################################
 # Typical jet constituents
-from JetDefinition import xAOD, JetConstit
+from JetDefinition import xAODType, JetConstit
 from copy import deepcopy
 
 # Topoclusters with origin correction.
 # We don't currently use raw TopoClusters, though some handling
 # could be added to support this.
-EMTopoOrigin = JetConstit(xAOD.Type.CaloCluster, ["EM","Origin"])
-LCTopoOrigin = JetConstit(xAOD.Type.CaloCluster, ["LC","Origin"])
+EMTopoOrigin = JetConstit(xAODType.CaloCluster, ["EM","Origin"])
+LCTopoOrigin = JetConstit(xAODType.CaloCluster, ["LC","Origin"])
 # LC clusters with Constituent Subtraction + SoftKiller
 LCTopoCSSK = deepcopy(LCTopoOrigin)
 LCTopoCSSK.modifiers += ["CS","SK"]
@@ -32,22 +32,22 @@ LCTopoCSSK.modifiers += ["CS","SK"]
 # EM-scale particle flow objects with charged hadron subtraction
 # For now we don't specify a scale, as only one works well, but
 # this could be incorporated into the naming scheme and config
-CHSPFlow = JetConstit(xAOD.Type.ParticleFlow)
+CHSPFlow = JetConstit(xAODType.ParticleFlow)
 # Particle Flow Objects with Constituent Subtraction + SoftKiller
 CSSKPFlow = deepcopy(CHSPFlow)
 CSSKPFlow.modifiers += ["CS","SK"]
 
 # Track particles from the primary vertex
-PV0Track = JetConstit(xAOD.Type.TrackParticle,["PV0"])
+PV0Track = JetConstit(xAODType.TrackParticle,["PV0"])
 
 # Truth particles from the hard scatter vertex prior to Geant4 simulation.
 # Neutrinos and muons are omitted; all other stable particles are included.
-Truth = JetConstit(xAOD.Type.TruthParticle)
+Truth = JetConstit(xAODType.TruthParticle)
 
 # Truth particles from the hard scatter vertex prior to Geant4 simulation.
 # Prompt electrons, muons and neutrinos are excluded, all other stable particles
 # are included, in particular leptons and neutrinos from hadron decays.
-TruthWZ = JetConstit(xAOD.Type.TruthParticle,["NoWZ"])
+TruthWZ = JetConstit(xAODType.TruthParticle,["NoWZ"])
 
 ########################################################################
 # Typical jet algorithm definitions
diff --git a/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py b/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
index 5397dfba6a761cd2b70884914b0888a445cbfae0..fdbbdcb49bf2db746123fbdc6feb87e8a2e6c29d 100644
--- a/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
+++ b/Reconstruction/Jet/JetRecConfig/share/JetRecTestCfg.py
@@ -77,8 +77,8 @@ def DefineJetCollections():
 
     ########################################################################
     # Now we define our own definitions
-    from JetRecConfig.JetDefinition import JetConstit, JetDefinition, xAOD
-    LCTopoCSSK = JetConstit(xAOD.Type.CaloCluster, ["LC","Origin","CS","SK"])
+    from JetRecConfig.JetDefinition import JetConstit, JetDefinition, xAODType
+    LCTopoCSSK = JetConstit(xAODType.CaloCluster, ["LC","Origin","CS","SK"])
     AntiKt4LCTopoCSSK = JetDefinition("AntiKt",0.4,LCTopoCSSK,ptmin=2e3,ptminfilter=2e3)
     AntiKt4LCTopoCSSK.modifiers = ["ConstitFourMom"] + standardrecomods + clustermods + truthmods
     AntiKt4LCTopoCSSK.ghostdefs = standardghosts
@@ -179,7 +179,7 @@ if __name__=="__main__":
     
     # Write what we produced to AOD
     # First define the output list
-    outputlist = []
+    outputlist = ["EventInfo#*"]
     originaljets = ["AntiKt4EMPFlowJets"]
     for jetcoll in originaljets:
         outputlist += ["xAOD::JetContainer#"+jetcoll,
@@ -189,10 +189,10 @@ if __name__=="__main__":
         outputlist += ["xAOD::JetContainer#"+key,
                        "xAOD::JetAuxContainer#"+key+"Aux."]
 
-    # # Now get the output stream components
-    # from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
-    # cfg.merge(OutputStreamCfg(ConfigFlags,"xAOD",ItemList=outputlist))
-    # pprint( cfg.getEventAlgo("OutputStreamxAOD").ItemList )
+    # Now get the output stream components
+    from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
+    cfg.merge(OutputStreamCfg(ConfigFlags,"xAOD",ItemList=outputlist))
+    pprint( cfg.getEventAlgo("OutputStreamxAOD").ItemList )
   
     # Optionally, print the contents of the store every event
     cfg.getService("StoreGateSvc").Dump = args.dumpSG
diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecOnlySetup.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecOnlySetup.py
index 9e96c4c99f652a30f6f29506555b5c59698151b6..93929a30c88e0136f7b3dc8a01c89c536c239017 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecOnlySetup.py
+++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedRecOnlySetup.py
@@ -34,6 +34,7 @@ recFlags.doLArg = True
 recFlags.doTile = True
 # do not run digitization
 DetFlags.digitize.all_setOff()
+DetFlags.overlay.Muon_setOff()
 
 recAlgsFlags.doEFlowJet = False
 
diff --git a/Reconstruction/PanTau/PanTauAlgs/PanTauAlgs/PanTauProcessor.h b/Reconstruction/PanTau/PanTauAlgs/PanTauAlgs/PanTauProcessor.h
index 44e0e9ea21d262c2fa6f6577cc709988ec1ea3ff..70cc5c19fe1dc496a212fde042c86f369be15d8e 100644
--- a/Reconstruction/PanTau/PanTauAlgs/PanTauAlgs/PanTauProcessor.h
+++ b/Reconstruction/PanTau/PanTauAlgs/PanTauAlgs/PanTauProcessor.h
@@ -62,7 +62,8 @@ namespace PanTau
        virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
        virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
        virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-       virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+       virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+       virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
        virtual StatusCode executePanTau(xAOD::TauJet& pTau, xAOD::ParticleContainer& pi0Container);
 
        virtual StatusCode eventInitialize();
diff --git a/Reconstruction/eflowRec/src/PFTrackSelector.cxx b/Reconstruction/eflowRec/src/PFTrackSelector.cxx
index 41af12815ed0258a92d1076479a9b917359c10f0..001344d3a907ae9be63697d94cafbaf3ded4239b 100644
--- a/Reconstruction/eflowRec/src/PFTrackSelector.cxx
+++ b/Reconstruction/eflowRec/src/PFTrackSelector.cxx
@@ -76,27 +76,8 @@ StatusCode PFTrackSelector::execute(){
 StatusCode PFTrackSelector::finalize(){return StatusCode::SUCCESS;}
 
 bool PFTrackSelector::selectTrack(const xAOD::TrackParticle& track) {
-  if (track.pt()*0.001 < m_upperTrackPtCut) 
-  {
-    const xAOD::Vertex* foundVertex { nullptr };
-    SG::ReadHandle<xAOD::VertexContainer> vertices { m_vertexKey };
-    if (vertices.isValid())
-    {
-      for ( const auto& vx : *vertices )
-      {
-	for ( const auto& tpLink : vx->trackParticleLinks() )
-	{
-	  if ( *tpLink == &track )
-	  {
-	    foundVertex = vx;
-	    break;
-	  }
-	}
-	if (foundVertex) break;
-      }
-    }
-    return static_cast<bool>(m_trackSelectorTool->accept(track, foundVertex));
-  }
+  //We pass a null xAOD::Vertex pointer to accept here, the vertex is only needed if z0 cuts are applied (which they are not)
+  if (track.pt()*0.001 < m_upperTrackPtCut) return static_cast<bool>(m_trackSelectorTool->accept(track, nullptr));
   else return false;
 }
 
diff --git a/Reconstruction/tauRec/src/TauRunnerAlg.cxx b/Reconstruction/tauRec/src/TauRunnerAlg.cxx
index 3d102b9b03a7331973b666c9cb36be703acaf2f8..965d10a05b086439514dc04819f577b5a63acb76 100644
--- a/Reconstruction/tauRec/src/TauRunnerAlg.cxx
+++ b/Reconstruction/tauRec/src/TauRunnerAlg.cxx
@@ -231,7 +231,13 @@ StatusCode TauRunnerAlg::execute() {
 	  sc = (*itT)->executeVertexVariables(*pTau, *pSecVtxContainer);
 	}
 	else if ( (*itT)->name().find("Pi0ClusterScaler") != std::string::npos){
-	  sc = (*itT)->executePi0ClusterScaler(*pTau, *chargedPFOContainer);
+	  sc = (*itT)->executePi0ClusterScaler(*pTau, *neutralPFOContainer, *chargedPFOContainer);
+	}
+	else if ( (*itT)->name().find("Pi0ScoreCalculator") != std::string::npos){
+	  sc = (*itT)->executePi0nPFO(*pTau, *neutralPFOContainer);
+	}
+	else if ( (*itT)->name().find("Pi0Selector") != std::string::npos){
+	  sc = (*itT)->executePi0nPFO(*pTau, *neutralPFOContainer);
 	}
 	else if ( (*itT)->name().find("PanTau") != std::string::npos){
 	  sc = (*itT)->executePanTau(*pTau, *pi0Container);
diff --git a/Reconstruction/tauRecTools/Root/TauPi0ClusterScaler.cxx b/Reconstruction/tauRecTools/Root/TauPi0ClusterScaler.cxx
index bd2048c6c8afd4b8ca323c02a4b4ddccda019cf1..9f337ebb977171ff4093fb5d121c46603a738604 100644
--- a/Reconstruction/tauRecTools/Root/TauPi0ClusterScaler.cxx
+++ b/Reconstruction/tauRecTools/Root/TauPi0ClusterScaler.cxx
@@ -56,7 +56,7 @@ StatusCode TauPi0ClusterScaler::finalize()
 }
 
 
-StatusCode TauPi0ClusterScaler::executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& chargedPFOContainer)
+StatusCode TauPi0ClusterScaler::executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, xAOD::PFOContainer& chargedPFOContainer)
 {
     // Clear vector of cell-based charged PFO Links. 
     // Required when rerunning on xAOD level.
@@ -72,32 +72,27 @@ StatusCode TauPi0ClusterScaler::executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD
                   << ", nprongs = " << pTau.nTracks());
 
     // reset neutral PFO kinematics (incase re-run on AOD)
-    resetNeutralPFOs(pTau);
+    resetNeutralPFOs(pTau, neutralPFOContainer);
     // create new proto charged PFOs, extrapolate tracks, add to tau 
     createChargedPFOs(pTau, chargedPFOContainer);
     // associate hadronic PFOs to charged PFOs using extrapolated positions in HCal
-    associateHadronicToChargedPFOs(pTau);
+    associateHadronicToChargedPFOs(pTau, chargedPFOContainer);
     // associate charged PFOs to neutral PFOs using extrapolated positions in ECal
-    associateChargedToNeutralPFOs(pTau);
+    associateChargedToNeutralPFOs(pTau, neutralPFOContainer);
     // estimate charged PFO EM energy and subtract from neutral PFOs
-    subtractChargedEnergyFromNeutralPFOs(pTau);
+    subtractChargedEnergyFromNeutralPFOs(neutralPFOContainer);
 
     ATH_MSG_DEBUG("End of TauPi0ClusterScaler::execute");
 
     return StatusCode::SUCCESS;
 }
 
-void TauPi0ClusterScaler::resetNeutralPFOs(xAOD::TauJet& pTau)
+void TauPi0ClusterScaler::resetNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer)
 {
     // Set neutral PFO kinematics to vertex corrected cluster
     ATH_MSG_DEBUG("Resetting neutral PFO kinematics");
-    for( auto neutralPFOLink : pTau.protoNeutralPFOLinks() )
+    for( auto pfo : neutralPFOContainer )
     {
-        if( not neutralPFOLink.isValid() ){
-            ATH_MSG_WARNING("Invalid protoNeutralPFOLink");
-            continue;
-        }
-        xAOD::PFO* pfo = const_cast<xAOD::PFO*>(*neutralPFOLink);
         const xAOD::CaloCluster* cl = pfo->cluster(0);
 
         // apply cluster vertex correction 
@@ -147,7 +142,7 @@ void TauPi0ClusterScaler::createChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContain
     }
 }
 
-void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& pTau)
+void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& chargedPFOContainer)
 {
     ATH_MSG_DEBUG("Associating hadronic PFOs to charged PFOs");
 
@@ -166,13 +161,7 @@ void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& pTau)
         xAOD::PFO* chargedPFOMatch = 0;
         // assign hadPFO to closest extrapolated chargedPFO track within dR<0.4
         float dRmin = 0.4; 
-        for( auto chargedPFOLink : pTau.protoChargedPFOLinks() ){
-            if( not chargedPFOLink.isValid() ){
-                ATH_MSG_WARNING("Invalid protoChargedPFOLink");
-                continue;
-            }
-            xAOD::PFO* chargedPFO = const_cast<xAOD::PFO*>(*chargedPFOLink);
-
+        for( auto chargedPFO : chargedPFOContainer ){
             // get extrapolated positions from tau-track
             std::vector<const xAOD::IParticle*> tauTrackPcleVec;
             chargedPFO->associatedParticles(xAOD::PFODetails::CaloCluster, tauTrackPcleVec);
@@ -231,7 +220,7 @@ void TauPi0ClusterScaler::associateHadronicToChargedPFOs(xAOD::TauJet& pTau)
     }
 }
 
-void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& pTau)
+void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer)
 {
     ATH_MSG_DEBUG("Associating charged PFOs to neutral PFOs");
     // Will: I'm ashamed of this link-map, but its necessary until the 
@@ -270,12 +259,7 @@ void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& pTau)
         // assign extrapolated chargedPFO to closest neutralPFO within dR<0.04
         xAOD::PFO* neutralPFOMatch = 0;
         float dRmin = 0.04; 
-        for( auto neutralPFOLink : pTau.protoNeutralPFOLinks() ){
-            if( not neutralPFOLink.isValid() ){
-                ATH_MSG_WARNING("Invalid protoNeutralPFOLink");
-                continue;
-            }
-            xAOD::PFO* neutralPFO = const_cast<xAOD::PFO*>(*neutralPFOLink);
+        for( auto neutralPFO : neutralPFOContainer ){
             // calculate dR (false means use eta instead of rapidity)
             float dR = xAOD::P4Helpers::deltaR((*neutralPFO->cluster(0)), etaCalo, phiCalo, false);
             ATH_MSG_DEBUG("neutralPFO, eta: " << neutralPFO->cluster(0)->eta()
@@ -315,17 +299,11 @@ void TauPi0ClusterScaler::associateChargedToNeutralPFOs(xAOD::TauJet& pTau)
 }
 
 
-void TauPi0ClusterScaler::subtractChargedEnergyFromNeutralPFOs(xAOD::TauJet& pTau)
+void TauPi0ClusterScaler::subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& neutralPFOContainer)
 {
     ATH_MSG_DEBUG("Subtracting charged energy from neutral PFOs");
-    for( auto neutralPFOLink : pTau.protoNeutralPFOLinks() )
+    for( auto neutralPFO : neutralPFOContainer )
     {
-        if( not neutralPFOLink.isValid() ){
-            ATH_MSG_WARNING("Invalid protoNeutralPFOLink");
-            continue;
-        }
-        xAOD::PFO* neutralPFO = const_cast<xAOD::PFO*>(*neutralPFOLink);
-
         // get associated charged PFOs
         std::vector<const xAOD::IParticle*> chargedPFOs;
         neutralPFO->associatedParticles(xAOD::PFODetails::Track, chargedPFOs);
diff --git a/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx b/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx
index 0b9ca0672b43c1c55df0b901768a322c802018e4..d559059911d176cf3d3b024413749785de51565e 100644
--- a/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx
+++ b/Reconstruction/tauRecTools/Root/TauPi0ScoreCalculator.cxx
@@ -102,7 +102,7 @@ StatusCode TauPi0ScoreCalculator::finalize()
 }
 
 
-StatusCode TauPi0ScoreCalculator::execute(xAOD::TauJet& pTau) 
+StatusCode TauPi0ScoreCalculator::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) 
 {
     //---------------------------------------------------------------------
     // only run on 1-5 prong taus 
@@ -115,15 +115,10 @@ StatusCode TauPi0ScoreCalculator::execute(xAOD::TauJet& pTau)
     //---------------------------------------------------------------------
     // retrieve neutral PFOs from tau, calculate BDT scores and store them in PFO
     //---------------------------------------------------------------------
-    for( auto neutralPFOLink : pTau.protoNeutralPFOLinks() )
+    for( auto neutralPFO : neutralPFOContainer )
     {
-        if( not neutralPFOLink.isValid() ){
-            ATH_MSG_WARNING("Invalid protoNeutralPFOLink");
-            continue;
-        }
-        float BDTScore = calculateScore(*neutralPFOLink);
-        xAOD::PFO* neutralPFO = const_cast<xAOD::PFO*>(*neutralPFOLink);
-        neutralPFO->setBDTPi0Score((float) BDTScore);
+      float BDTScore = calculateScore(neutralPFO);
+      neutralPFO->setBDTPi0Score((float) BDTScore);
     }
 
     ATH_MSG_DEBUG("End of TauPi0ScoreCalculator::execute");
diff --git a/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx b/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx
index 0ee133455b72530ea10791203bca3fd98d964329..ec648fd2743f9a96f0e6098c39d02a92d810fc83 100644
--- a/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx
+++ b/Reconstruction/tauRecTools/Root/TauPi0Selector.cxx
@@ -46,7 +46,7 @@ StatusCode TauPi0Selector::finalize()
   return StatusCode::SUCCESS;
 }
 
-StatusCode TauPi0Selector::execute(xAOD::TauJet& pTau) 
+StatusCode TauPi0Selector::executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) 
 {
     // decay mode enum
     auto kDecayModeProto = xAOD::TauJetParameters::PanTau_DecayModeProto;
@@ -70,14 +70,8 @@ StatusCode TauPi0Selector::execute(xAOD::TauJet& pTau)
     // Pi0NeutralPFOs 
     //---------------------------------------------------------------------
     int nRecoPi0s=0;
-    for( auto neutralPFOLink : pTau.protoNeutralPFOLinks() )
+    for( auto neutralPFO : neutralPFOContainer )
     {
-        if( not neutralPFOLink.isValid() ){
-            ATH_MSG_WARNING("Invalid protoNeutralPFOLink");
-            continue;
-        }
-        xAOD::PFO* neutralPFO = const_cast<xAOD::PFO*>(*neutralPFOLink);
-
         // Set number of pi0s to 0 for all neutral PFOs. Required when rerunning on xAOD level
         neutralPFO->setAttribute<int>(xAOD::PFODetails::PFOAttributes::nPi0Proto, 0);
 
@@ -111,7 +105,7 @@ StatusCode TauPi0Selector::execute(xAOD::TauJet& pTau)
         }
 
         // Set element link to Pi0tagged PFO
-        pTau.addProtoPi0PFOLink(neutralPFOLink);
+        pTau.addProtoPi0PFOLink(ElementLink< xAOD::PFOContainer > (neutralPFO, neutralPFOContainer));
     }
     // Calculate visTau TLV and store it in pPi0Details.
     TLorentzVector p4 = getP4(pTau);
diff --git a/Reconstruction/tauRecTools/src/JetSeedBuilder.h b/Reconstruction/tauRecTools/src/JetSeedBuilder.h
index 2e80b07949a4ba4e16b0eedf51991a56d6f11397..c9e639576af43a6d8d4c821cb2ebee0de97a3a04 100644
--- a/Reconstruction/tauRecTools/src/JetSeedBuilder.h
+++ b/Reconstruction/tauRecTools/src/JetSeedBuilder.h
@@ -45,7 +45,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }  
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual StatusCode eventFinalize();
diff --git a/Reconstruction/tauRecTools/src/LockTauContainers.h b/Reconstruction/tauRecTools/src/LockTauContainers.h
index 5fc1f3caf0539d8fd359f106420442d6dbfe199e..0ffc54af5cdea0701fab5c7b4c68edd50942617e 100644
--- a/Reconstruction/tauRecTools/src/LockTauContainers.h
+++ b/Reconstruction/tauRecTools/src/LockTauContainers.h
@@ -29,7 +29,8 @@ class LockTauContainers : public TauRecToolBase
 	virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
         virtual StatusCode eventFinalize();
 	virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/src/PhotonConversionPID.h b/Reconstruction/tauRecTools/src/PhotonConversionPID.h
index f5b460202b839108a212a6dab23325e61320680b..d61cb81e5b7d334dec2370f2183a1a03befc5b5e 100644
--- a/Reconstruction/tauRecTools/src/PhotonConversionPID.h
+++ b/Reconstruction/tauRecTools/src/PhotonConversionPID.h
@@ -37,7 +37,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
 
diff --git a/Reconstruction/tauRecTools/src/PhotonConversionVertex.h b/Reconstruction/tauRecTools/src/PhotonConversionVertex.h
index 622e8226f0e3d87f5e931a391828e62e6235ce9e..e5cae14f79c4b189ba41ad2de6b4d4954412f285 100644
--- a/Reconstruction/tauRecTools/src/PhotonConversionVertex.h
+++ b/Reconstruction/tauRecTools/src/PhotonConversionVertex.h
@@ -51,8 +51,9 @@ public:
     virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual void print() const { }
diff --git a/Reconstruction/tauRecTools/src/TauAxisSetter.h b/Reconstruction/tauRecTools/src/TauAxisSetter.h
index 56e7796ea7c8b395703c9c04998faecfd031f2d7..e509670406305e1bf293ae114df684655ceb466f 100644
--- a/Reconstruction/tauRecTools/src/TauAxisSetter.h
+++ b/Reconstruction/tauRecTools/src/TauAxisSetter.h
@@ -37,7 +37,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual void print() const { }
diff --git a/Reconstruction/tauRecTools/src/TauCalibrateEM.h b/Reconstruction/tauRecTools/src/TauCalibrateEM.h
index 58bc81aa1c21535338470d1603194631520f07ac..e8a1b4dd27b405291dcd5c68a86b03704207397a 100644
--- a/Reconstruction/tauRecTools/src/TauCalibrateEM.h
+++ b/Reconstruction/tauRecTools/src/TauCalibrateEM.h
@@ -23,7 +23,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/src/TauCellVariables.h b/Reconstruction/tauRecTools/src/TauCellVariables.h
index 56cb9579dad1f1261d98c10692ab6da026acde8f..425187ec35a62e0c361e17be1f48cbe2eecf32e8 100644
--- a/Reconstruction/tauRecTools/src/TauCellVariables.h
+++ b/Reconstruction/tauRecTools/src/TauCellVariables.h
@@ -32,7 +32,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual void print() const { }
diff --git a/Reconstruction/tauRecTools/src/TauConversionFinder.h b/Reconstruction/tauRecTools/src/TauConversionFinder.h
index 15fee03b6b40ee10bcbe3f790d5cf8f2100dda4c..460f5b3521aeb7f0c34716019278c1ea1f2017db 100644
--- a/Reconstruction/tauRecTools/src/TauConversionFinder.h
+++ b/Reconstruction/tauRecTools/src/TauConversionFinder.h
@@ -35,8 +35,9 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 
     virtual void print() const { }
 
diff --git a/Reconstruction/tauRecTools/src/TauConversionTagger.h b/Reconstruction/tauRecTools/src/TauConversionTagger.h
index a1e4b84a05139f8b7093d6e98dea5d8100b04cce..885b33e4321b27adc709a33c30973758be283600 100644
--- a/Reconstruction/tauRecTools/src/TauConversionTagger.h
+++ b/Reconstruction/tauRecTools/src/TauConversionTagger.h
@@ -36,7 +36,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode finalize();
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/src/TauElectronVetoVariables.h b/Reconstruction/tauRecTools/src/TauElectronVetoVariables.h
index 66fd341882fce3756387355680a1e63bf6c10124..7414f75a0f9b07d0a50da914e1a07be2a5e3b183 100644
--- a/Reconstruction/tauRecTools/src/TauElectronVetoVariables.h
+++ b/Reconstruction/tauRecTools/src/TauElectronVetoVariables.h
@@ -32,7 +32,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode initialize();
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
index 7e9e40d219ea01e6ade1292ad5cc53a5b30dbc19..a12424fc18d246c7b9cfd75eb029281edf9c63d8 100644
--- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
+++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
@@ -35,7 +35,8 @@ public:
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, 
 						xAOD::PFOContainer& hadronicClusterPFOContainer, xAOD::CaloClusterContainer& pi0CaloClusContainer);
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventFinalize();
 
diff --git a/Reconstruction/tauRecTools/src/TauPi0CreateROI.h b/Reconstruction/tauRecTools/src/TauPi0CreateROI.h
index 37228b348fc8c3b79f985a74dda833d846c19598..e2532b33090abb91310ccf4e50fde2b85e464bc5 100644
--- a/Reconstruction/tauRecTools/src/TauPi0CreateROI.h
+++ b/Reconstruction/tauRecTools/src/TauPi0CreateROI.h
@@ -37,7 +37,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet& pTau, CaloCellContainer& Pi0CellContainer);
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventFinalize();
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/src/TauShotFinder.h b/Reconstruction/tauRecTools/src/TauShotFinder.h
index 0ef4ed0d6e95d3f43fe1247bf665c69dc9e83c7d..7293d92a7d977c69b73a51270c82183e1d70ed4d 100644
--- a/Reconstruction/tauRecTools/src/TauShotFinder.h
+++ b/Reconstruction/tauRecTools/src/TauShotFinder.h
@@ -46,7 +46,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode execute(xAOD::TauJet&){ return StatusCode::SUCCESS; };
     virtual StatusCode eventFinalize();
diff --git a/Reconstruction/tauRecTools/src/TauTestDump.h b/Reconstruction/tauRecTools/src/TauTestDump.h
index 2639786ad955168bec3a7e7be022f59ddb63d8a4..11a2d40c78774696eb0cfc9d8b3845b27708e45f 100644
--- a/Reconstruction/tauRecTools/src/TauTestDump.h
+++ b/Reconstruction/tauRecTools/src/TauTestDump.h
@@ -31,7 +31,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode finalize();  
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/src/TauTrackFinder.h b/Reconstruction/tauRecTools/src/TauTrackFinder.h
index 0b9debba38094b9d0821d5fc3da3f37f735e1de6..9d9aa1a2d766bd8802ba6b1658a57dd5407a84c5 100644
--- a/Reconstruction/tauRecTools/src/TauTrackFinder.h
+++ b/Reconstruction/tauRecTools/src/TauTrackFinder.h
@@ -66,7 +66,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventFinalize();
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/src/TauVertexFinder.h b/Reconstruction/tauRecTools/src/TauVertexFinder.h
index bb65bda3f43be91fd259f28e42fa92791350a4e3..8410ef831782202a3e9a5841d0111eb692ac4bc0 100644
--- a/Reconstruction/tauRecTools/src/TauVertexFinder.h
+++ b/Reconstruction/tauRecTools/src/TauVertexFinder.h
@@ -46,7 +46,8 @@ public:
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode eventFinalize();
   virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/src/TauVertexVariables.h b/Reconstruction/tauRecTools/src/TauVertexVariables.h
index 8c471e8f38bc31f60cb9eea291f5eded2acd122d..c0f919298f1de9972962c17930a543001fce0201 100644
--- a/Reconstruction/tauRecTools/src/TauVertexVariables.h
+++ b/Reconstruction/tauRecTools/src/TauVertexVariables.h
@@ -40,7 +40,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet& pTau, xAOD::VertexContainer& pVertexContainer); 
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventInitialize();
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/CombinedP4FromRecoTaus.h b/Reconstruction/tauRecTools/tauRecTools/CombinedP4FromRecoTaus.h
index 43f2a63311a87f8169668092ad04df25f0e88db5..03e339b7f28312295d557afd44181d9e8332ee9c 100644
--- a/Reconstruction/tauRecTools/tauRecTools/CombinedP4FromRecoTaus.h
+++ b/Reconstruction/tauRecTools/tauRecTools/CombinedP4FromRecoTaus.h
@@ -76,7 +76,8 @@ class CombinedP4FromRecoTaus
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   
 
diff --git a/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h b/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h
index a4ae90bc7f12348f0d32f7b6aa74d2c47f5a0b92..1b11980a5bd4375477ce2101dbefe32759cd044f 100644
--- a/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h
+++ b/Reconstruction/tauRecTools/tauRecTools/ITauToolBase.h
@@ -46,7 +46,8 @@ class ITauToolBase : virtual public asg::IAsgTool
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, 
 					      xAOD::PFOContainer& hadronicPFOContainer, xAOD::CaloClusterContainer& caloClusterContainer ) = 0;
   virtual StatusCode executeVertexVariables(xAOD::TauJet& pTau, xAOD::VertexContainer& vertexContainer ) = 0;  
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& PFOContainer ) = 0;  
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer, xAOD::PFOContainer& chargedPFOContainer ) = 0;  
+  virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& neutralPFOContainer) = 0;
   virtual StatusCode executePanTau(xAOD::TauJet& pTau, xAOD::ParticleContainer& particleContainer) =0;
 
   //-----------------------------------------------------------------
diff --git a/Reconstruction/tauRecTools/tauRecTools/MvaTESEvaluator.h b/Reconstruction/tauRecTools/tauRecTools/MvaTESEvaluator.h
index f5e54ca33bb37f2af6155659e44567924b9c8ab2..dca3938ece5514c8798383980b8986c761c74eb5 100644
--- a/Reconstruction/tauRecTools/tauRecTools/MvaTESEvaluator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/MvaTESEvaluator.h
@@ -28,7 +28,8 @@ class MvaTESEvaluator
   StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   //StatusCode finalize() { delete m_reader; return StatusCode::SUCCESS;}
   StatusCode finalize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/tauRecTools/MvaTESVariableDecorator.h b/Reconstruction/tauRecTools/tauRecTools/MvaTESVariableDecorator.h
index dbc8ae940ec3c5f861ad818420a906b14e51ca4b..533cf05ed099ae82372be9984fee311ca3e99060 100644
--- a/Reconstruction/tauRecTools/tauRecTools/MvaTESVariableDecorator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/MvaTESVariableDecorator.h
@@ -28,7 +28,8 @@ class MvaTESVariableDecorator
   StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
   StatusCode eventFinalize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h b/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h
index 74726da21c0d9a5f4004ec8665b40ee981885ba3..c5957e708eec9e839e125bf4c1ac94727b9ff07e 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauCalibrateLC.h
@@ -35,7 +35,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
     virtual StatusCode eventFinalize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauCommonCalcVars.h b/Reconstruction/tauRecTools/tauRecTools/TauCommonCalcVars.h
index 4a940cb5c26c5712d17587375b89dd1d264c9291..c29fa6fe0ac54528870eed1dc1e1ab28a9552873 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauCommonCalcVars.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauCommonCalcVars.h
@@ -32,7 +32,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode finalize();  
 
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauEleOLRDecorator.h b/Reconstruction/tauRecTools/tauRecTools/TauEleOLRDecorator.h
index 5122087460d978de67548451237d4dae0bdf3ae1..1dbcd5fc2bf9fce11a8f773a317d336fd37d82d7 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauEleOLRDecorator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauEleOLRDecorator.h
@@ -37,9 +37,10 @@ class TauEleOLRDecorator: virtual public TauRecToolBase
   virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 
 
   virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauGenericPi0Cone.h b/Reconstruction/tauRecTools/tauRecTools/TauGenericPi0Cone.h
index ff99fbc5ad032c0b799d92e2223f5e7d0289f5f8..1fa0fdb96afa329f69ad463caaeb41a859e3fa03 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauGenericPi0Cone.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauGenericPi0Cone.h
@@ -35,7 +35,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     
     virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauIDPileupCorrection.h b/Reconstruction/tauRecTools/tauRecTools/TauIDPileupCorrection.h
index 0b9265a8b552354319bf2c1343462e6b38bb7810..24d625818b1473cc8e6c3c6269eb71508ed8b266 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauIDPileupCorrection.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauIDPileupCorrection.h
@@ -51,8 +51,9 @@ public:
     virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     
     virtual void print() const { }
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h b/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h
index 5a568345544849dff0526d140e198fad37c37c8c..418d86bbd5853fcd325765996b8f88c87d17e175 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h
@@ -35,7 +35,8 @@ class TauIDVarCalculator: public TauRecToolBase
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
   virtual StatusCode finalize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauJetBDTEvaluator.h b/Reconstruction/tauRecTools/tauRecTools/TauJetBDTEvaluator.h
index e635d082594580babaceac90d93e6b345b4dd476..b276421e5a2d11b54322d9eb28e69f2668f12bde 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauJetBDTEvaluator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauJetBDTEvaluator.h
@@ -33,7 +33,8 @@ class TauJetBDTEvaluator
   StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   StatusCode finalize();// { delete myBdt; delete m_outputVar; return StatusCode::SUCCESS;}
   
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauPi0ClusterScaler.h b/Reconstruction/tauRecTools/tauRecTools/TauPi0ClusterScaler.h
index c1a60d3105a29b9e1334a03b8893f1f4b511b288..e16cdb18bbf286e2f882cb55d34e5ceb81425967 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauPi0ClusterScaler.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauPi0ClusterScaler.h
@@ -36,7 +36,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer); 
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer, xAOD::PFOContainer& pChargedPFOContainer); 
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode eventFinalize();
 
@@ -48,7 +49,7 @@ private:
     //ToolHandle<Trk::IParticleCaloExtensionTool> m_caloExtensionTool;
 
     /** @brief reset neutral PFO kinematics (for AOD running) */
-    void resetNeutralPFOs(xAOD::TauJet& pTau);
+    void resetNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer);
     
     /** @brief create charged PFOs */
     void createChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer);
@@ -57,13 +58,13 @@ private:
     //void extrapolateChargedPFOs(xAOD::TauJet& pTau);
     
     /** @brief associate hadronic PFOs to charged PFOs */
-    void associateHadronicToChargedPFOs(xAOD::TauJet& pTau);
+    void associateHadronicToChargedPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pChargedPFOContainer);
     
     /** @brief associate charged PFOs to neutral PFOs */
-    void associateChargedToNeutralPFOs(xAOD::TauJet& pTau);
+    void associateChargedToNeutralPFOs(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer);
     
     /** @brief associate charged PFOs to neutral PFOs */
-    void subtractChargedEnergyFromNeutralPFOs(xAOD::TauJet& pTau);
+    void subtractChargedEnergyFromNeutralPFOs(xAOD::PFOContainer& pNeutralPFOContainer);
 
     /** @brief sets of EM/Had samplings for track extrapolation */
     //std::set<CaloSampling::CaloSample> m_EMSamplings;
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h b/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h
index 56c4566ac51cc61b3e2e18d0beda539d378d62f9..9dbd75c58169faea63b8a749280f19d751ac9c2a 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauPi0ScoreCalculator.h
@@ -29,12 +29,13 @@ public:
 
     virtual StatusCode initialize();
     virtual StatusCode finalize();
-    virtual StatusCode execute(xAOD::TauJet& pTau);
+    virtual StatusCode execute(xAOD::TauJet&){ return StatusCode::SUCCESS; }
     virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer);
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h b/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h
index 0cc4e5d944fd54ba2541ec9306fe4390bd22dd8c..0ea9b77d719031ffba8346751ff0d20a9645c632 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauPi0Selector.h
@@ -23,12 +23,13 @@ public:
     virtual ~TauPi0Selector();
     virtual StatusCode initialize();
     virtual StatusCode finalize();
-    virtual StatusCode execute(xAOD::TauJet& pTau);
+    virtual StatusCode execute(xAOD::TauJet&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeShotFinder(xAOD::TauJet&, xAOD::CaloClusterContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet& pTau, xAOD::PFOContainer& pNeutralPFOContainer);
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauSubstructureVariables.h b/Reconstruction/tauRecTools/tauRecTools/TauSubstructureVariables.h
index 6659e94129ec119514e6d42dbb1c9cc32a33d975..429dd26dd08981314ec038d12c653d2e26e4ddca 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauSubstructureVariables.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauSubstructureVariables.h
@@ -31,7 +31,8 @@ class TauSubstructureVariables : public TauRecToolBase
 	virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+	virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
 	virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
         virtual StatusCode initialize();
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h b/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h
index 83f689985ef64aa045c415f2c020a46a475d71c4..b57c70bf8ffec04d2e3685141a690813138383ee 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauTrackClassifier.h
@@ -49,7 +49,8 @@ public:
   virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
 private:
@@ -80,7 +81,8 @@ class TrackMVABDT
   StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
   StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+  StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
   StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
   StatusCode finalize();
   
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauTrackFilter.h b/Reconstruction/tauRecTools/tauRecTools/TauTrackFilter.h
index 397b4750ad8afc7bef10a64f2d9f088e35377d84..46f98b535cced61f83216e233125be16f3683b11 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauTrackFilter.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauTrackFilter.h
@@ -35,7 +35,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode finalize();
     virtual StatusCode eventInitialize() { return StatusCode::SUCCESS; }
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h b/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
index 2517ced2145d109911ae66596060c80b95092c11..1bf821b1b2af7a3fff2c882572cbbe0ead1edde3 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
@@ -38,7 +38,8 @@ public:
     virtual StatusCode executePi0CreateROI(xAOD::TauJet&, CaloCellContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePi0ClusterCreator(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&, xAOD::CaloClusterContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executeVertexVariables(xAOD::TauJet&, xAOD::VertexContainer&) { return StatusCode::SUCCESS; }
-    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0ClusterScaler(xAOD::TauJet&, xAOD::PFOContainer&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
+    virtual StatusCode executePi0nPFO(xAOD::TauJet&, xAOD::PFOContainer&) { return StatusCode::SUCCESS; }
     virtual StatusCode executePanTau(xAOD::TauJet&, xAOD::ParticleContainer&) { return StatusCode::SUCCESS; }
 
     virtual StatusCode retrieveHistos(int nProng);
diff --git a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
index f7b55e4028b29919550eeab106d001f3463753d4..834c41c170b28bf5ec902ce47b6d3a40787e4223 100755
--- a/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
+++ b/Simulation/Digitization/test/test_MC16a_Digi_tf_configuration.py
@@ -296,7 +296,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___CscDigitizationTool_properties(self):
         tested_configurable_name = 'ToolSvc.CscDigitizationTool'
-        expected_property_list = ['DetStore', 'DriftVelocity', 'ElectronEnergy', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'InputObjectName', 'LastXing', 'NewDigitEDM', 'OutputObjectName', 'RndmEngine', 'RndmSvc', 'WindowLowerOffset', 'WindowUpperOffset', 'amplification', 'cscCalibTool', 'isPileUp', 'pedestal']
+        expected_property_list = ['DetStore', 'DriftVelocity', 'ElectronEnergy', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'InputObjectName', 'LastXing', 'NewDigitEDM', 'OutputObjectName', 'RndmSvc', 'WindowLowerOffset', 'WindowUpperOffset', 'amplification', 'cscCalibTool', 'isPileUp', 'pedestal']
         expected_nonstring_properties = {'LastXing': '175', 'FirstXing': '-375'}
         expected_string_properties = {'InputObjectName': 'CSC_Hits', 'OutputObjectName': 'CSC_DIGITS'}
         self._detailed_ConfigurablePropertiesCheck(
@@ -308,7 +308,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___MdtDigitizationTool_properties(self):
         tested_configurable_name = 'ToolSvc.MdtDigitizationTool'
-        expected_property_list = ['DetStore', 'DigitizationTool', 'DiscardEarlyHits', 'DoQballCharge', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing', 'MDTCondSummarySvc', 'MaskedStations', 'MdtCalibrationDbSvc', 'RndmEngine', 'RndmSvc', 'TwinRndmEngine', 'TwinRndmSvc', 'UseDeadChamberSvc', 'UseTof']
+        expected_property_list = ['DetStore', 'DigitizationTool', 'DiscardEarlyHits', 'DoQballCharge', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing', 'MDTCondSummarySvc', 'MaskedStations', 'MdtCalibrationDbSvc', 'RndmSvc', 'UseDeadChamberSvc', 'UseTof']
         expected_nonstring_properties = {'LastXing': '150', 'FirstXing': '-800'}
         expected_string_properties = {} # Not checking any specific property values
         self._detailed_ConfigurablePropertiesCheck(
@@ -320,7 +320,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___RpcDigitizationTool_properties(self):
         tested_configurable_name = 'ToolSvc.RpcDigitizationTool'
-        expected_property_list = ['ClusterSize1_2uncorr', 'ClusterSize_fromCOOL', 'CutProjectedTracks', 'DeadTime', 'DetStore', 'DumpFromDbFirst', 'EfficiencyPatchForBMShighEta', 'Efficiency_fromCOOL', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'FracClusterSize1_A', 'FracClusterSize1_C', 'FracClusterSize2_A', 'FracClusterSize2_C', 'FracClusterSizeTail_A', 'FracClusterSizeTail_C', 'IgnoreRunDependentConfig', 'LastXing', 'MeanClusterSizeTail_A', 'MeanClusterSizeTail_C', 'OnlyEtaEff_A', 'OnlyEtaEff_C', 'OnlyPhiEff_A', 'OnlyPhiEff_C', 'PanelId_OFF_fromlist', 'PanelId_OK_fromlist', 'PatchForRpcTime', 'PatchForRpcTimeShift', 'PhiAndEtaEff_A', 'PhiAndEtaEff_C', 'PrintCalibrationVector', 'RPCCondSummarySvc', 'RPCInfoFromDb', 'RndmEngine', 'RndmSvc', 'testbeam_clustersize', 'turnON_clustersize', 'turnON_efficiency']
+        expected_property_list = ['ClusterSize1_2uncorr', 'ClusterSize_fromCOOL', 'CutProjectedTracks', 'DeadTime', 'DetStore', 'DumpFromDbFirst', 'EfficiencyPatchForBMShighEta', 'Efficiency_fromCOOL', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'FracClusterSize1_A', 'FracClusterSize1_C', 'FracClusterSize2_A', 'FracClusterSize2_C', 'FracClusterSizeTail_A', 'FracClusterSizeTail_C', 'IgnoreRunDependentConfig', 'LastXing', 'MeanClusterSizeTail_A', 'MeanClusterSizeTail_C', 'OnlyEtaEff_A', 'OnlyEtaEff_C', 'OnlyPhiEff_A', 'OnlyPhiEff_C', 'PanelId_OFF_fromlist', 'PanelId_OK_fromlist', 'PatchForRpcTime', 'PatchForRpcTimeShift', 'PhiAndEtaEff_A', 'PhiAndEtaEff_C', 'PrintCalibrationVector', 'RPCCondSummarySvc', 'RPCInfoFromDb', 'RndmSvc', 'testbeam_clustersize', 'turnON_clustersize', 'turnON_efficiency']
         expected_nonstring_properties = {'LastXing': '125', 'FirstXing': '-150'}
         expected_string_properties = {} # Not checking any specific property values
         self._detailed_ConfigurablePropertiesCheck(
@@ -332,7 +332,7 @@ class TestDigitizationMC16a(unittest.TestCase):
 
     def test___TgcDigitizationTool_properties(self):
         tested_configurable_name = 'ToolSvc.TgcDigitizationTool'
-        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing', 'RndmEngine', 'RndmSvc']
+        expected_property_list = ['DetStore', 'EvtStore', 'ExtraInputs', 'ExtraOutputs', 'FirstXing', 'LastXing', 'RndmSvc']
         expected_nonstring_properties = {'LastXing': '75', 'FirstXing': '-50'}
         expected_string_properties = {} # Not checking any specific property values
         self._detailed_ConfigurablePropertiesCheck(
diff --git a/Simulation/G4Atlas/G4AtlasApps/test/test_G4Atlas.sh b/Simulation/G4Atlas/G4AtlasApps/test/test_G4Atlas.sh
index d269fdfe37401c30fa22f6af3a38de4c8a44236f..b3eb1adf797ca4ef928bedc3c3bcc7d7bd68e257 100755
--- a/Simulation/G4Atlas/G4AtlasApps/test/test_G4Atlas.sh
+++ b/Simulation/G4Atlas/G4AtlasApps/test/test_G4Atlas.sh
@@ -3,7 +3,6 @@
 # art-description: G4Atlas ParticleGun example
 # art-type: build
 # art-include: 21.0/Athena
-# art-include: 21.0/AthSimulation
 # art-include: 21.3/Athena
 # art-include: 21.9/Athena
 # art-include: master/Athena
diff --git a/Simulation/G4Atlas/G4AtlasApps/test/test_G4Cosmic.sh b/Simulation/G4Atlas/G4AtlasApps/test/test_G4Cosmic.sh
index d99e6f2f92c1a90eda31b40e873f28c8090f7b2c..c900fce25928cce1a7b60f57687f213438742fc7 100755
--- a/Simulation/G4Atlas/G4AtlasApps/test/test_G4Cosmic.sh
+++ b/Simulation/G4Atlas/G4AtlasApps/test/test_G4Cosmic.sh
@@ -3,7 +3,6 @@
 # art-description: G4Cosmic example
 # art-type: build
 # art-include: 21.0/Athena
-# art-include: 21.0/AthSimulation
 # art-include: 21.3/Athena
 # art-include: 21.9/Athena
 # art-include: master/Athena
diff --git a/Simulation/ISF/ISF_Config/python/ISF_ConfigConfigDb.py b/Simulation/ISF/ISF_Config/python/ISF_ConfigConfigDb.py
index 9e8f8cad9ac5678feaf21dcf310efd2bbe706a34..8808d0d3b2f7b817a8504c67a2c1204cbe177c4b 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_ConfigConfigDb.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_ConfigConfigDb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 """
 Configuration database for ISF
@@ -45,9 +45,11 @@ addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_G4HS_FastPileup",     "ISF_Ker
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_ATLFASTIIF_IDOnly",   "ISF_Kernel_ATLFASTIIF_IDOnly")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_ATLFASTIIF_IDCalo",   "ISF_Kernel_ATLFASTIIF_IDCalo")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_G4FastCalo",          "ISF_Kernel_G4FastCalo")
+addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_G4FastCaloDNN",          "ISF_Kernel_G4FastCaloDNN")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_Fatras_newExtrapolation","ISF_Kernel_Fatras_newExtrapolation")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_Fatras_newExtrapolation_IDOnly","ISF_Kernel_Fatras_newExtrapolation_IDOnly")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_FastOnly",            "ISF_Kernel_FastOnly")
+addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_DNNOnly",            "ISF_Kernel_DNNOnly")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_MultiSimTest",        "ISF_Kernel_MultiSimTest")
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_G4GammaCones"                , "ISF_Kernel_G4GammaCones"                 )
 addAlgorithm("ISF_Config.ISF_MainConfig.getKernel_G4GammaCones_FastCalo"       , "ISF_Kernel_G4GammaCones_FastCalo"        )
diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
index 7e70cf71d08d4f652e79134c425759366f455362..b3868c8ec6ef6b8cc663ce1fe9cde934465710ab 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 """
 Tools configurations for ISF
@@ -364,6 +364,22 @@ def getKernel_G4FastCalo(name="ISF_Kernel_G4FastCalo", **kwargs):
     simFlags.SimulationFlavour = "G4FastCalo"
     return getKernel_GenericSimulator(name, **kwargs)
 
+############## Simulator: G4FastCaloDNN ###############
+# like G4FastCalo, replacing FastCaloSimV2 by DNNCaloSim
+def getKernel_G4FastCaloDNN(name="ISF_Kernel_G4FastCaloDNN", **kwargs):
+    kwargs.setdefault("ParticleBroker"             , 'ISF_AFIIParticleBrokerSvc')
+
+    kwargs.setdefault("BeamPipeSimulationSelectors", [ 'ISF_DefaultAFIIGeant4Selector' ]            )
+    kwargs.setdefault("IDSimulationSelectors"      , [ 'ISF_DefaultAFIIGeant4Selector' ]            )
+    kwargs.setdefault("CaloSimulationSelectors"    , [ 'ISF_MuonAFIIGeant4Selector',
+                                                       'ISF_EtaGreater5ParticleKillerSimSelector',
+                                                       'ISF_DefaultDNNCaloSimSelector' ] ) 
+    kwargs.setdefault("MSSimulationSelectors"      , [ 'ISF_DefaultAFIIGeant4Selector' ]            )
+    kwargs.setdefault("CavernSimulationSelectors"  , [ 'ISF_DefaultParticleKillerSelector' ]        )
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "G4FastCalo"
+    return getKernel_GenericSimulator(name, **kwargs)
+
 ############## Simulator: ATLFASTII ###############
 def getKernel_ATLFASTII(name="ISF_Kernel_ATLFASTII", **kwargs):
     kwargs.setdefault("ParticleBroker"             , 'ISF_AFIIParticleBrokerSvc'                    )
@@ -529,6 +545,13 @@ def getKernel_FastOnly(name="ISF_Kernel_FastOnly", **kwargs):
     kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
     return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
+############## Simulator: DNNOnly ###############
+# run DNNCaloSim standalone, for faster tests
+def getKernel_DNNOnly(name="ISF_Kernel_DNNOnly", **kwargs):
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultDNNCaloSimSelector'    ] )
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
+
+
 ############## Simulator: G4GammaCones ###############
 def getKernel_G4GammaCones(name="ISF_Kernel_G4GammaCones", **kwargs):
     kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_PhotonConeGeant4Selector' ,
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSCenterPositionCalculation.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSCenterPositionCalculation.cxx
index 4dd796537b99f298ffe81567053d19ba6009ed0f..f759bf447abff81fe4e37d9871cefc3e4099d2e6 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSCenterPositionCalculation.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSCenterPositionCalculation.cxx
@@ -24,7 +24,7 @@ FCSReturnCode TFCSCenterPositionCalculation::simulate_hit(Hit& hit,TFCSSimulatio
    hit.setCenter_eta( (1.-m_extrapWeight)*extrapol->eta(cs, SUBPOS_ENT) + m_extrapWeight*extrapol->eta(cs, SUBPOS_EXT) );
    hit.setCenter_phi( (1.-m_extrapWeight)*extrapol->phi(cs, SUBPOS_ENT) + m_extrapWeight*extrapol->phi(cs, SUBPOS_EXT) );
    
-   ATH_MSG_DEBUG("TFCSCenterPositionCalculation: center_r: " << hit.center_r() << " center_z: " << hit.center_z() << " center_phi: " << hit.center_phi() << " center_eta: " << hit.center_eta() );
+   ATH_MSG_DEBUG("TFCSCenterPositionCalculation: center_r: " << hit.center_r() << " center_z: " << hit.center_z() << " center_phi: " << hit.center_phi() << " center_eta: " << hit.center_eta() << " weight: " << m_extrapWeight << " cs: " << cs);
    
    return FCSSuccess;
 }
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrization.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrization.cxx
index 5741c0f168e3a6e4aa7def787b97c9fa497ddaef..fc78ae5ea4af8310be9d80ffd93d97798bb36de8 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrization.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrization.cxx
@@ -55,10 +55,12 @@ FCSReturnCode TFCSHistoLateralShapeParametrization::simulate_hit(Hit &hit, TFCSS
   const double  charge   = HepPDT::ParticleID(pdgId).charge();
 
   const int cs=calosample();
-  const double center_eta=0.5*( extrapol->eta(cs, CaloSubPos::SUBPOS_ENT) + extrapol->eta(cs, CaloSubPos::SUBPOS_EXT) );
-  const double center_phi=0.5*( extrapol->phi(cs, CaloSubPos::SUBPOS_ENT) + extrapol->phi(cs, CaloSubPos::SUBPOS_EXT) );
-  const double center_r=0.5*( extrapol->r(cs, CaloSubPos::SUBPOS_ENT) + extrapol->r(cs, CaloSubPos::SUBPOS_EXT) );
-  const double center_z=0.5*( extrapol->z(cs, CaloSubPos::SUBPOS_ENT) + extrapol->z(cs, CaloSubPos::SUBPOS_EXT) );
+  const double center_eta = hit.center_eta(); 
+  const double center_phi = hit.center_phi();
+  const double center_r   = hit.center_r();
+  const double center_z   = hit.center_z();
+  
+  
 
   if (TMath::IsNaN(center_r) or TMath::IsNaN(center_z) or TMath::IsNaN(center_eta) or TMath::IsNaN(center_phi)) { //Check if extrapolation fails
     return FCSFatal;
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrizationFCal.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrizationFCal.cxx
index 19e521ca818ce91dbf0a5db56c6e9c680a0f98b0..a6e1243ae216f1e2739146dc18c750d037f0574f 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrizationFCal.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSHistoLateralShapeParametrizationFCal.cxx
@@ -28,7 +28,7 @@ TFCSHistoLateralShapeParametrizationFCal::~TFCSHistoLateralShapeParametrizationF
 {
 }
 
-FCSReturnCode TFCSHistoLateralShapeParametrizationFCal::simulate_hit(Hit &hit, TFCSSimulationState &simulstate, const TFCSTruthState* truth, const TFCSExtrapolationState* extrapol)
+FCSReturnCode TFCSHistoLateralShapeParametrizationFCal::simulate_hit(Hit &hit, TFCSSimulationState &simulstate, const TFCSTruthState* truth, const TFCSExtrapolationState* /*extrapol*/)
 {
   if (!simulstate.randomEngine()) {
     return FCSFatal;
@@ -38,9 +38,12 @@ FCSReturnCode TFCSHistoLateralShapeParametrizationFCal::simulate_hit(Hit &hit, T
   const double  charge   = HepPDT::ParticleID(pdgId).charge();
 
   const int cs=calosample();
-  const double center_phi=0.5*( extrapol->phi(cs, CaloSubPos::SUBPOS_ENT) + extrapol->phi(cs, CaloSubPos::SUBPOS_EXT) );
-  const double center_r=0.5*( extrapol->r(cs, CaloSubPos::SUBPOS_ENT) + extrapol->r(cs, CaloSubPos::SUBPOS_EXT) );
-  const double center_z=0.5*( extrapol->z(cs, CaloSubPos::SUBPOS_ENT) + extrapol->z(cs, CaloSubPos::SUBPOS_EXT) );
+  //const double center_phi=0.5*( extrapol->phi(cs, CaloSubPos::SUBPOS_ENT) + extrapol->phi(cs, CaloSubPos::SUBPOS_EXT) );
+  //const double center_r=0.5*( extrapol->r(cs, CaloSubPos::SUBPOS_ENT) + extrapol->r(cs, CaloSubPos::SUBPOS_EXT) );
+  //const double center_z=0.5*( extrapol->z(cs, CaloSubPos::SUBPOS_ENT) + extrapol->z(cs, CaloSubPos::SUBPOS_EXT) );
+  const double center_phi = hit.center_phi();
+  const double center_r   = hit.center_r();
+  const double center_z   = hit.center_z();
 
   float alpha, r, rnd1, rnd2;
   rnd1 = CLHEP::RandFlat::shoot(simulstate.randomEngine());
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
index 8e82ab2ff1aff7a9746a211314960815e6c67da0..96b650d200bece70dc7ce10ad249344c5ea76d18 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/CMakeLists.txt
@@ -34,13 +34,14 @@ atlas_depends_on_subdirs( PUBLIC
 # External dependencies:
 find_package( CLHEP )
 find_package( HepMC )
+find_package(lwtnn)
 
 # Component(s) in the package:
 atlas_add_component( ISF_FastCaloSimServices
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel IdDictParser ISF_Interfaces TrkEventPrimitives TrkExInterfaces CaloEvent StoreGateLib SGtests NavFourMom GeneratorObjects FastCaloSimLib ISF_Event ISF_FastCaloSimEvent ISF_FastCaloSimInterfaces ISF_FastCaloSimParametrizationLib PathResolver)
+                     INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} ${LWTNN_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} ${LWTNN_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel IdDictParser ISF_Interfaces TrkEventPrimitives TrkExInterfaces CaloEvent StoreGateLib SGtests NavFourMom GeneratorObjects FastCaloSimLib ISF_Event ISF_FastCaloSimEvent ISF_FastCaloSimInterfaces ISF_FastCaloSimParametrizationLib PathResolver)
 
 # Install files from the package:
 atlas_install_headers( ISF_FastCaloSimServices )
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
index 62e8ded1c78c5c89f75afc1488d2f5b525f78a43..5c476d2d9a0f9fb1da5610053fbdefc4d33c3142 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 """
 Tools configurations for ISF_FastCaloSimServices
@@ -87,3 +87,24 @@ def getFastCaloSimSvcV2(name="ISF_FastCaloSimSvcV2", **kwargs):
     kwargs.setdefault("RandomSvc"                        , simFlags.RandomSvc.get_Value() )
 
     return CfgMgr.ISF__FastCaloSimSvcV2(name, **kwargs )
+
+#### DNNCaloSim
+def getDNNCaloSimSvc(name="ISF_DNNCaloSimSvc", **kwargs):
+    from ISF_FastCaloSimServices.ISF_FastCaloSimJobProperties import ISF_FastCaloSimFlags
+
+    kwargs.setdefault("CaloCellsOutputName"              , ISF_FastCaloSimFlags.CaloCellsName()   )
+    kwargs.setdefault("CaloCellMakerTools_setup"         , [ 'ISF_EmptyCellBuilderTool' ] )
+    kwargs.setdefault("CaloCellMakerTools_release"       , [ 'ISF_CaloCellContainerFinalizerTool',
+                                                           'ISF_FastHitConvertTool' ]) #DR needed ?
+    kwargs.setdefault("ParamsInputFilename"              , ISF_FastCaloSimFlags.ParamsInputFilename())
+    kwargs.setdefault("FastCaloSimCaloExtrapolation"     , 'FastCaloSimCaloExtrapolation')
+
+    # register the FastCaloSim random number streams
+    from G4AtlasApps.SimFlags import simFlags
+    if not simFlags.RandomSeedList.checkForExistingSeed(ISF_FastCaloSimFlags.RandomStreamName()):
+        simFlags.RandomSeedList.addSeed( ISF_FastCaloSimFlags.RandomStreamName(), 98346412, 12461240 )
+
+    kwargs.setdefault("RandomStream"                     , ISF_FastCaloSimFlags.RandomStreamName())
+    kwargs.setdefault("RandomSvc"                        , simFlags.RandomSvc.get_Value() )
+
+    return CfgMgr.ISF__DNNCaloSimSvc(name, **kwargs )
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
index 70399972113df390d81008c4d14ec2ab168977c7..ef876dd16d2e6f4cc8808d7fa1b58b639d5df4c6 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigDb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 """
 Configuration database for ISF_FastCaloSimServices
@@ -35,3 +35,4 @@ addService("ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig.getFastHitConv
 addService("ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig.getLegacyAFIIFastCaloSimSvc",                   "ISF_LegacyAFIIFastCaloSimSvc")
 addService("ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig.getFastHitConvAlgLegacyAFIIFastCaloSimSvc",     "ISF_FastHitConvAlgLegacyAFIIFastCaloSimSvc")
 addService("ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig.getFastCaloSimSvcV2",                           "ISF_FastCaloSimSvcV2")
+addService("ISF_FastCaloSimServices.ISF_FastCaloSimServicesConfig.getDNNCaloSimSvc",                           "ISF_DNNCaloSimSvc")
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..30499bb83790feacacca56d2a6bc2bc137989a28
--- /dev/null
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.cxx
@@ -0,0 +1,616 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// DNNCaloSimSvc.cxx, (c) ATLAS Detector software             //
+///////////////////////////////////////////////////////////////////
+
+// class header include
+#include "DNNCaloSimSvc.h"
+
+
+// FastCaloSim includes
+#include "ISF_FastCaloSimEvent/TFCSParametrizationBase.h"
+#include "ISF_FastCaloSimEvent/TFCSSimulationState.h"
+#include "ISF_FastCaloSimEvent/TFCSTruthState.h"
+#include "ISF_FastCaloSimEvent/TFCSExtrapolationState.h"
+#include "ISF_FastCaloSimParametrization/CaloGeometryFromCaloDDM.h"
+#include "ISF_FastCaloSimEvent/FastCaloSim_CaloCell_ID.h"
+
+//calculators
+#include "CaloGeoHelpers/CaloPhiRange.h"
+
+//!
+#include "AtlasDetDescr/AtlasDetectorID.h"
+#include "IdDictParser/IdDictParser.h"
+#include "CaloIdentifier/LArEM_ID.h"
+#include "CaloIdentifier/TileID.h"
+//!
+
+// StoreGate
+#include "StoreGate/StoreGateSvc.h"
+#include "StoreGate/StoreGate.h"
+
+#include "CaloDetDescr/CaloDetDescrElement.h"
+#include "CaloDetDescr/CaloDetDescrManager.h"
+#include "CaloIdentifier/CaloIdManager.h"
+#include "LArReadoutGeometry/FCALDetectorManager.h"
+
+#include "PathResolver/PathResolver.h"
+
+#include "lwtnn/parse_json.hh"
+
+#include "TFile.h"
+#include <fstream>
+#include "CLHEP/Random/RandGauss.h"
+#include "CLHEP/Random/RandFlat.h"
+#include "CLHEP/Units/SystemOfUnits.h"
+
+using std::abs;
+using std::atan2;
+
+/** Constructor **/
+ISF::DNNCaloSimSvc::DNNCaloSimSvc(const std::string& name, ISvcLocator* svc) :
+  BaseSimulationSvc(name, svc),
+  m_graph(nullptr),
+  m_theContainer(nullptr),
+  m_rndGenSvc("AtRndmGenSvc", name),
+  m_randomEngine(nullptr),
+  m_caloDetDescrManager(nullptr),
+  m_caloGeo(nullptr)
+{
+  declareProperty("ParamsInputFilename"            ,       m_paramsFilename="DNNCaloSim/DNNCaloSim_GAN_nn_v0.json"," lwtnn json output describing the trained network");
+  declareProperty("ParamsInputArchitecture"        ,       m_paramsInputArchitecture="GANv0","tag describing additional parameters necessary for the network");
+  declareProperty("CaloCellsOutputName"            ,       m_caloCellsOutputName) ;
+  declareProperty("CaloCellMakerTools_setup"       ,       m_caloCellMakerToolsSetup) ;
+  declareProperty("CaloCellMakerTools_release"     ,       m_caloCellMakerToolsRelease) ;
+  declareProperty("RandomSvc"                      ,       m_rndGenSvc                );
+  declareProperty("RandomStream"                   ,       m_randomEngineName         );
+  declareProperty("FastCaloSimCaloExtrapolation"   ,       m_FastCaloSimCaloExtrapolation );
+}
+
+ISF::DNNCaloSimSvc::~DNNCaloSimSvc()
+{}
+
+/** framework methods */
+StatusCode ISF::DNNCaloSimSvc::initialize()
+{
+  ATH_MSG_INFO(m_screenOutputPrefix << "Initializing ...");
+
+  ATH_CHECK(m_rndGenSvc.retrieve());
+  m_randomEngine = m_rndGenSvc->GetEngine( m_randomEngineName);
+  if(!m_randomEngine)
+    {
+      ATH_MSG_ERROR("Could not get random number engine from RandomNumberService. Abort.");
+      return StatusCode::FAILURE;
+    }
+  
+  m_caloDetDescrManager  = CaloDetDescrManager::instance();
+  const FCALDetectorManager * fcalManager=NULL;
+  ATH_CHECK(detStore()->retrieve(fcalManager));
+
+  const CaloIdManager* caloId_mgr = m_caloDetDescrManager->getCalo_Mgr();
+  m_emID = caloId_mgr->getEM_ID();
+  
+  m_caloGeo = std::make_unique<CaloGeometryFromCaloDDM>();
+  m_caloGeo->LoadGeometryFromCaloDDM(m_caloDetDescrManager);
+  if(!m_caloGeo->LoadFCalChannelMapFromFCalDDM(fcalManager) )ATH_MSG_FATAL("Found inconsistency between FCal_Channel map and GEO file. Please, check if they are configured properly.");
+
+
+  // initialize DNN 
+  if (initializeNetwork().isFailure())
+    {
+      ATH_MSG_ERROR("Could not initialize network ");
+      return StatusCode::FAILURE;
+
+    }
+
+  
+  // Get FastCaloSimCaloExtrapolation
+  if(m_FastCaloSimCaloExtrapolation.retrieve().isFailure())
+    {
+      ATH_MSG_ERROR("FastCaloSimCaloExtrapolation not found ");
+      return StatusCode::FAILURE;
+    }
+
+  m_windowCells.reserve(m_numberOfCellsForDNN);
+  
+
+
+  return StatusCode::SUCCESS;
+}
+
+// initialize lwtnn network 
+StatusCode ISF::DNNCaloSimSvc::initializeNetwork()
+{
+
+
+
+  // get neural net JSON file as an std::istream object
+  std::string inputFile=PathResolverFindCalibFile(m_paramsFilename);
+  if (inputFile.empty()){
+    ATH_MSG_ERROR("Could not find json file " << m_paramsFilename );
+    return StatusCode::FAILURE;
+  } 
+
+
+
+  ATH_MSG_INFO("Using json file " << inputFile );
+  std::ifstream input(inputFile);
+  // build the graph
+  m_graph=std::make_unique<lwt::LightweightGraph>(lwt::parse_json_graph(input) );
+  if (m_graph==nullptr){
+    ATH_MSG_ERROR("Could not create LightWeightGraph from  " << m_paramsFilename );
+    return StatusCode::FAILURE;
+  }
+
+
+
+  // initialize all necessary constants
+  // FIXME eventually all these could be stored in the .json file
+
+  ATH_MSG_INFO("Using ParamsInputArchitecture: " << m_paramsInputArchitecture );
+  if (m_paramsInputArchitecture=="GANv0") // GAN then VAE etc...
+    {
+      m_GANLatentSize = 300;
+      m_logTrueEnergyMean = 9.70406053;
+      m_logTrueEnergyScale = 1.76099569;
+      m_riImpactEtaMean = 3.47603256e-05;
+      m_riImpactEtaScale = 0.00722316;
+      m_riImpactPhiMean = -5.42153684e-05;
+      m_riImpactPhiScale = 0.00708241;
+    }
+
+  if (m_GANLatentSize==0){
+    ATH_MSG_ERROR("m_GANLatentSize uninitialized!.ParamsInputArchitecture= " << m_paramsInputArchitecture );
+    return StatusCode::FAILURE;
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+/** framework methods */
+StatusCode ISF::DNNCaloSimSvc::finalize()
+{
+  ATH_MSG_INFO(m_screenOutputPrefix << "Finalizing ...");
+  return StatusCode::SUCCESS;
+}
+
+StatusCode ISF::DNNCaloSimSvc::setupEvent()
+{
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+  ATH_MSG_INFO(m_screenOutputPrefix << "setupEvent NEW EVENT! ");
+
+  m_theContainer = new CaloCellContainer(SG::VIEW_ELEMENTS);
+
+  StatusCode sc = evtStore()->record(m_theContainer, m_caloCellsOutputName);
+  if (sc.isFailure())
+    {
+      ATH_MSG_FATAL( m_screenOutputPrefix << "cannot record CaloCellContainer " << m_caloCellsOutputName );
+      return StatusCode::FAILURE;
+    }
+
+  //FIXME why retrieve every event ?
+  CHECK( m_caloCellMakerToolsSetup.retrieve() );
+  ATH_MSG_DEBUG( "Successfully retrieve CaloCellMakerTools: " << m_caloCellMakerToolsSetup );
+  ToolHandleArray<ICaloCellMakerTool>::iterator itrTool = m_caloCellMakerToolsSetup.begin();
+  ToolHandleArray<ICaloCellMakerTool>::iterator endTool = m_caloCellMakerToolsSetup.end();
+  for (; itrTool != endTool; ++itrTool)
+    {
+      std::string chronoName=this->name()+"_"+ itrTool->name();
+      if (m_chrono) m_chrono->chronoStart(chronoName);
+      StatusCode sc = (*itrTool)->process(m_theContainer, ctx);
+      if (m_chrono) {
+	m_chrono->chronoStop(chronoName);
+	ATH_MSG_DEBUG( m_screenOutputPrefix << "Chrono stop : delta " << m_chrono->chronoDelta (chronoName,IChronoStatSvc::USER) * CLHEP::microsecond / CLHEP::second << " second " );
+      }
+
+      if (sc.isFailure())
+	{
+	  ATH_MSG_ERROR( m_screenOutputPrefix << "Error executing tool " << itrTool->name() );
+	  return StatusCode::FAILURE;
+	}
+    }
+
+
+  // FIXME just for debugging
+  // exercise window building 
+  // should be false by default 
+  // careful:if enabled change the random number sequence !
+  if (false){
+    TFCSSimulationState testsimulstate(m_randomEngine);
+    const CaloDetDescrElement * testImpactCellDDE;
+    const int ntrial=100;
+    ATH_MSG_INFO ("Trial window building on " << ntrial << " dummy eta phi " );
+    for (int i=0 ; i< ntrial ; i++){
+      const double eta = CLHEP::RandFlat::shoot(testsimulstate.randomEngine(), 0.2, 0.25);
+      const double phi = CLHEP::RandFlat::shoot(testsimulstate.randomEngine(), -CLHEP::pi , CLHEP::pi);
+      
+      //randomise eta, phi
+      if (fillWindowCells(eta,phi,testImpactCellDDE).isFailure()){
+	  ATH_MSG_WARNING("Could not build trial window cells vector with eta " << eta << " phi " << phi);
+      }
+    }
+    ATH_MSG_INFO ("End of trial window building on " << ntrial << " dummy eta phi " );
+    
+  }
+
+
+
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode ISF::DNNCaloSimSvc::releaseEvent()
+{
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+  ATH_MSG_VERBOSE(m_screenOutputPrefix << "release Event");
+ 
+  CHECK( m_caloCellMakerToolsRelease.retrieve() );
+ 
+  //run release tools in a loop
+  ToolHandleArray<ICaloCellMakerTool>::iterator itrTool = m_caloCellMakerToolsRelease.begin();
+  ToolHandleArray<ICaloCellMakerTool>::iterator endTool = m_caloCellMakerToolsRelease.end();
+  for (; itrTool != endTool; ++itrTool)
+    {
+      ATH_MSG_VERBOSE( m_screenOutputPrefix << "Calling tool " << itrTool->name() );
+  
+      StatusCode sc = (*itrTool)->process(m_theContainer, ctx);
+  
+      if (sc.isFailure())
+	{
+	  ATH_MSG_ERROR( m_screenOutputPrefix << "Error executing tool " << itrTool->name() );
+	}
+    }
+ 
+  return StatusCode::SUCCESS;
+ 
+}
+bool compCellsForDNNSortMirror(const CaloCell* a, const CaloCell* b)
+{
+  static CaloPhiRange range;
+  CaloCell_ID::CaloSample aSampling = a->caloDDE()->getSampling();
+  CaloCell_ID::CaloSample bSampling = b->caloDDE()->getSampling();
+
+  float aEtaRaw = a->caloDDE()->eta_raw();
+  float bEtaRaw = b->caloDDE()->eta_raw();
+
+  float aPhiRaw = a->caloDDE()->phi_raw();
+  float bPhiRaw = b->caloDDE()->phi_raw();
+
+  if ((aSampling) < (bSampling))
+    return true;
+  else if ((aSampling) > (bSampling))
+    return false;
+  // reverse sort in eta for left half of detector
+  if ((aEtaRaw) < (bEtaRaw))
+    return false;
+  else if ((aEtaRaw) > (bEtaRaw))
+    return true;
+
+  if (range.diff(aPhiRaw, bPhiRaw) > 0){
+    return false;
+  }
+
+  return true;
+}
+
+bool compCellsForDNNSort(const CaloCell* a, const CaloCell* b)
+{
+  static CaloPhiRange range;
+  CaloCell_ID::CaloSample aSampling = a->caloDDE()->getSampling();
+  CaloCell_ID::CaloSample bSampling = b->caloDDE()->getSampling();
+
+  float aEtaRaw = a->caloDDE()->eta_raw();
+  float bEtaRaw = b->caloDDE()->eta_raw();
+
+  float aPhiRaw = a->caloDDE()->phi_raw();
+  float bPhiRaw = b->caloDDE()->phi_raw();
+
+  if ((aSampling) < (bSampling))
+    return true;
+  else if ((aSampling) > (bSampling))
+    return false;
+
+  if ((aEtaRaw) < (bEtaRaw))
+    return true;
+  else if ((aEtaRaw) > (bEtaRaw))
+    return false;
+
+if (range.diff(aPhiRaw, bPhiRaw) > 0){
+    return false;
+  }
+  
+  return true;
+}
+
+/** Simulation Call */
+StatusCode ISF::DNNCaloSimSvc::simulate(const ISF::ISFParticle& isfp, McEventCollection*)
+{
+
+  ATH_MSG_VERBOSE("NEW PARTICLE! DNNCaloSimSvc called with ISFParticle: " << isfp);
+ 
+
+  //Don't simulate particles with total energy below 10 MeV
+  if(isfp.ekin() < 10) {
+    ATH_MSG_VERBOSE("Skipping particle with Ekin: " << isfp.ekin() <<" MeV. Below the 10 MeV threshold.");
+    return StatusCode::SUCCESS;
+  }
+
+
+  //Compute all inputs to the network
+  NetworkInputs inputs;
+  double trueEnergy;
+  if (fillNetworkInputs(isfp,inputs,trueEnergy).isFailure()) {
+    ATH_MSG_WARNING("Could not initialize network ");
+    // bail out but do not stop the job
+    return StatusCode::SUCCESS;
+  }
+ 
+
+  // compute the network output values
+  ATH_MSG_VERBOSE("neural network input = "<<inputs);
+  NetworkOutputs outputs = m_graph->compute(inputs);
+  ATH_MSG_VERBOSE("neural network output = "<<outputs);
+
+
+  // add network output energy in the right place in the calorimeter
+  int itr = 0;
+  for ( auto & windowCell : m_windowCells) {
+    windowCell->addEnergy(trueEnergy * outputs[std::to_string(itr)]);
+    itr++;
+
+    ATH_MSG_VERBOSE(" cell eta_raw " << windowCell->caloDDE()->eta_raw() 
+		    << " phi_raw " << windowCell->caloDDE()->phi_raw() 
+		    << " sampling " << windowCell->caloDDE()->getSampling() 
+		    << " energy " << windowCell->energy());
+  }
+
+
+
+
+  
+  return StatusCode::SUCCESS;
+}
+
+
+
+// compute all the necessary inputs to the network
+StatusCode ISF::DNNCaloSimSvc::fillNetworkInputs(const ISF::ISFParticle& isfp, NetworkInputs & inputs, double & trueEnergy)
+{
+  static CaloPhiRange range;
+  Amg::Vector3D particle_position =  isfp.position();  
+  Amg::Vector3D particle_direction(isfp.momentum().x(),isfp.momentum().y(),isfp.momentum().z());
+  
+  //int barcode=isfp.barcode(); // isfp barcode, eta and phi: in case we need them
+  // float eta_isfp = particle_position.eta();  
+  // float phi_isfp = particle_position.phi(); 
+
+  TFCSTruthState truth(isfp.momentum().x(),isfp.momentum().y(),isfp.momentum().z(),sqrt(isfp.momentum().mag2()+pow(isfp.mass(),2)),isfp.pdgCode());
+  truth.set_vertex(particle_position[Amg::x], particle_position[Amg::y], particle_position[Amg::z]);
+
+  trueEnergy = isfp.ekin();
+
+
+  TFCSExtrapolationState extrapol;
+  //FIXME this is extrapolating to many layers, when we only need middle layer middle surface
+  //FIXME could have dedicated extrapolation to save time 
+  m_FastCaloSimCaloExtrapolation->extrapolate(extrapol,&truth);
+  //  extrapol.Print();
+ 
+
+  if (false)
+    {
+      for (int isam=0; isam< CaloCell_ID_FCS::MaxSample ; isam++){
+	//enum SUBPOS { SUBPOS_MID = 0, SUBPOS_ENT = 1, SUBPOS_EXT = 2}; //MID=middle, ENT=entrance, EXT=exit of cal layer
+
+	for (int isubpos=0; isubpos< 3 ; isubpos++){
+      
+	  ATH_MSG_VERBOSE("EXTRAPO isam=" << isam <<
+			  " isubpos=" << isubpos <<
+			  " OK="    << extrapol.OK(isam,isubpos) <<
+			  " eta="  << extrapol.eta(isam,isubpos) <<
+			  " phi="  << extrapol.phi(isam,isubpos) <<
+			  " r="  << extrapol.r(isam,isubpos) );
+
+	}
+      }
+    }
+
+  //FIXME deal with endcap as well 
+  int isam=CaloCell_ID_FCS::EMB2;
+  int isubpos=SUBPOS_ENT;
+  double etaExtrap=-999.;
+  double phiExtrap=-999.;
+  if (extrapol.eta(isam,isubpos)) {
+    etaExtrap=extrapol.eta(isam,isubpos);
+    phiExtrap=extrapol.phi(isam,isubpos);
+  }
+
+  ATH_MSG_VERBOSE("Will use isam=" << isam <<
+		  " isubpos=" << isubpos <<
+		  " eta="  << etaExtrap << 
+		  " phi="  << phiExtrap );
+
+
+
+  // fill vector of cells, and DDE of middle cell
+  const CaloDetDescrElement * impactCellDDE;
+  if (fillWindowCells(etaExtrap,phiExtrap,impactCellDDE).isFailure()){
+    ATH_MSG_WARNING("Could not build window cells vector ");
+    return StatusCode::FAILURE;
+  }
+
+
+  // start neural network part
+  // fill a map of input nodes
+  // this is for GAN
+  // most likely it should be specialised as a function of m_ParamsInputArchitecture
+
+  double randGaussz = 0.;
+
+
+  int impactEtaIndex = m_emID->eta(impactCellDDE->identify());
+  int impactPhiIndex = m_emID->phi(impactCellDDE->identify());
+  double etaRawImpactCell=impactCellDDE->eta_raw();
+  double phiRawImpactCell=impactCellDDE->phi_raw();
+
+  ATH_MSG_VERBOSE("impact eta_index " << impactEtaIndex 
+		  << " phi_index " <<  impactPhiIndex  
+		  << " sampling " << m_emID->sampling(impactCellDDE->identify()));
+
+  int pconf = impactPhiIndex % 4 ;
+  int econf = (impactEtaIndex + 1) % 2 ; // ofset corresponds to difference in index calculated for neural net preprocessing
+
+  double riImpactEta = (etaExtrap - etaRawImpactCell);
+  // mirror for left half
+  if (etaExtrap < 0){
+    riImpactEta *= -1.;
+
+  }
+  // scale & centre
+  riImpactEta = (riImpactEta - m_riImpactEtaMean)/m_riImpactEtaScale;
+  double riImpactPhi = (range.diff(phiExtrap, phiRawImpactCell) - m_riImpactPhiMean)/m_riImpactPhiScale;
+
+
+  // fill randomize latent space
+  TFCSSimulationState simulstate(m_randomEngine);
+
+  //FIXME generate in one go
+  for (int i = 0; i< m_GANLatentSize; i ++)
+    {
+      randGaussz = CLHEP::RandGauss::shoot(simulstate.randomEngine(), 0., 1.);
+      inputs["Z"].insert ( std::pair<std::string,double>(std::to_string(i), randGaussz) );
+
+    }
+
+  // fill preprocessed true energy
+  inputs["E_true"].insert ( std::pair<std::string,double>("0", (std::log(trueEnergy) - m_logTrueEnergyMean)/m_logTrueEnergyScale) );
+  // fill p,e configurations multi-hot vector
+  for (int i = 0; i< 4; i ++)
+    {
+      if (i == pconf){
+	inputs["pconfig"].insert ( std::pair<std::string,double>(std::to_string(i),1.) );
+      }
+      else{
+	inputs["pconfig"].insert ( std::pair<std::string,double>(std::to_string(i),0.) );
+      }
+    }
+  for (int i = 0; i< 2; i ++){
+    if (i == econf){
+      inputs["econfig"].insert ( std::pair<std::string,double>(std::to_string(i),1.) );
+    }
+    else{
+      inputs["econfig"].insert ( std::pair<std::string,double>(std::to_string(i),0.) );
+    }
+  }
+  // fill position of extrap particle in impact cell
+  inputs["ripos"].insert ( std::pair<std::string,double>("0", riImpactEta) ); 
+  inputs["ripos"].insert ( std::pair<std::string,double>("1", riImpactPhi ) );
+
+  return StatusCode::SUCCESS;
+}
+
+
+StatusCode ISF::DNNCaloSimSvc::fillWindowCells(const double etaExtrap,const double phiExtrap,const CaloDetDescrElement* & impactCellDDE) {
+  
+  //now find the cell it corresponds to  
+  //FIXME this is barrel should also look in endcap 
+  // (note that is really looking up eta, phi, not raw eta phi
+  static CaloPhiRange range;
+
+  impactCellDDE=m_caloDetDescrManager->get_element(CaloCell_ID::EMB2,etaExtrap,phiExtrap);
+  if (impactCellDDE==nullptr){
+    ATH_MSG_WARNING("No cell found for this eta " << etaExtrap << " phi " << phiExtrap);
+    return StatusCode::FAILURE;
+  }
+
+
+
+
+  const int caloHashImpactCell=impactCellDDE->calo_hash();
+  const double etaImpactCell=impactCellDDE->eta();
+  const double phiImpactCell=impactCellDDE->phi();
+  const double etaRawImpactCell=impactCellDDE->eta_raw();
+  const double phiRawImpactCell=impactCellDDE->phi_raw();
+
+
+  ATH_MSG_VERBOSE("impact cell calohash=" << caloHashImpactCell <<
+		  " eta="  << etaImpactCell << 
+		  " phi="  << phiImpactCell <<
+		  " eta raw="  << etaRawImpactCell << 
+		  " phi raw="  << phiRawImpactCell );
+
+
+  int nSqCuts = 0;
+
+
+  // select the cells DNN will simulate 
+  // note that m_theCellContainer has all the calorimeter cells
+  // this will hold the list of cells to simulate
+  //FIXME this can be sped up certainly
+  m_windowCells.clear();
+  CaloCell_ID::CaloSample sampling;
+  float eta_raw;
+  float phi_raw;
+  for(const auto& theCell : * m_theContainer) {
+    sampling = theCell->caloDDE()->getSampling();
+    eta_raw = theCell->caloDDE()->eta_raw();
+    phi_raw = theCell->caloDDE()->phi_raw();
+    if (( eta_raw < etaRawImpactCell + m_etaRawBackCut) && (eta_raw > etaRawImpactCell - m_etaRawBackCut)) {
+      if ((range.diff(phi_raw, phiRawImpactCell) < m_phiRawStripCut ) && (range.diff(phi_raw, phiRawImpactCell) > - m_phiRawStripCut) ) {
+
+      }
+      else{
+        continue;
+      }
+    }
+    else{
+      continue;
+    }
+
+    if ((sampling == 0) || (sampling == 1) ){
+      if ((eta_raw < etaRawImpactCell + m_etaRawMiddleCut) && (eta_raw > etaRawImpactCell - m_etaRawMiddleCut)) {
+	       nSqCuts ++;
+      	// add to vector
+      	m_windowCells.push_back(theCell);
+	
+      }
+    }
+    else if((sampling == 2)) {
+      if ((range.diff(phi_raw , phiRawImpactCell) < m_phiRawMiddleCut) && (range.diff(phi_raw, phiRawImpactCell) > - m_phiRawMiddleCut)) {
+	       if ((eta_raw < etaRawImpactCell + m_etaRawMiddleCut) && (eta_raw > etaRawImpactCell - m_etaRawMiddleCut)) {
+	         nSqCuts ++;
+	         m_windowCells.push_back(theCell);
+	       }
+      }
+    }
+
+    else if(sampling == 3){
+      if ((range.diff(phi_raw, phiRawImpactCell) <  m_phiRawMiddleCut) && (range.diff(phi_raw , phiRawImpactCell) > - m_phiRawMiddleCut )) {
+      	nSqCuts ++;
+      	m_windowCells.push_back(theCell);
+      }
+
+    }
+  }
+
+  if (nSqCuts != m_numberOfCellsForDNN){
+    ATH_MSG_WARNING("Total cells passing DNN selection is " << nSqCuts << " but should be " << m_numberOfCellsForDNN );
+    // bail out, but do not stop the job
+    return StatusCode::FAILURE;
+
+  }
+
+  //sort cells within the cluster like they are fed to DNN
+  if (etaRawImpactCell < 0){
+    std::sort(m_windowCells.begin(), m_windowCells.end(), &compCellsForDNNSortMirror);
+  }
+  else{
+    std::sort(m_windowCells.begin(), m_windowCells.end(), &compCellsForDNNSort);
+  }
+
+  return StatusCode::SUCCESS;
+
+}
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.h
new file mode 100644
index 0000000000000000000000000000000000000000..03f75dd0ec9354af87986c8f16835c2b2791825d
--- /dev/null
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/DNNCaloSimSvc.h
@@ -0,0 +1,132 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+ 
+//////////////////////////////////////////////////////////////////
+// DNNCaloSimSvc.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef ISF_DNNCALOSIMSVC_H
+#define ISF_DNNCALOSIMSVC_H 1
+
+// ISF includes
+#include "ISF_Interfaces/BaseSimulationSvc.h"
+
+// Framework includes
+#include "GaudiKernel/IChronoStatSvc.h"
+
+// FastCaloSim includes
+#include "ISF_FastCaloSimParametrization/IFastCaloSimCaloExtrapolation.h"
+#include "TrkExInterfaces/ITimedExtrapolator.h" 
+
+#include "CaloInterface/ICaloCellMakerTool.h"
+
+#include "AthenaKernel/IAtRndmGenSvc.h"
+
+#include "AtlasDetDescr/AtlasDetectorID.h"
+#include "CaloIdentifier/LArEM_ID.h"
+#include "CaloIdentifier/LArHEC_ID.h"
+#include "CaloIdentifier/LArFCAL_ID.h"
+#include "CaloIdentifier/TileID.h"
+#include "CaloDetDescr/CaloDetDescrManager.h"
+
+#include "lwtnn/LightweightGraph.hh"
+#include "CaloEvent/CaloCellContainer.h"
+#include "CLHEP/Units/PhysicalConstants.h"
+
+namespace CLHEP
+{
+ class HepRandomEngine;
+}
+
+//forward declarations
+class CaloCellContainer;
+class CaloGeometryFromCaloDDM;
+class TFCSParametrizationBase;
+
+
+namespace ISF {
+  /** @class DNNCaloSimSvc
+
+    @author Aishik.Ghosh -at- cern.ch, David Rousseau -at- cern.ch,
+    */
+  
+  class DNNCaloSimSvc : public BaseSimulationSvc
+  {
+    public:
+      /** Constructor with parameters */
+      DNNCaloSimSvc(const std::string& name, ISvcLocator* pSvcLocator);
+       
+      /** Destructor */
+      virtual ~DNNCaloSimSvc() final;
+      
+      /** Athena algorithm's interface methods */
+      virtual StatusCode  initialize() override final;
+      virtual StatusCode  finalize() override final;
+      
+      /** helper for initialize */
+      StatusCode initializeNetwork();
+
+      /** Simulation Call */
+    virtual StatusCode simulate(const ISFParticle& isp, McEventCollection*) override final;
+      // type of input requested by lwtnn
+      typedef std::map<std::string, std::map<std::string, double> >  NetworkInputs ;
+      typedef std::map<std::string, double> NetworkOutputs;
+      StatusCode fillNetworkInputs(const ISF::ISFParticle& isfp, NetworkInputs  & inputs, double & trueEnergy);
+      StatusCode fillWindowCells(const double etaExtrap,const double phiExtrap,const CaloDetDescrElement* & impactCellDDE);
+
+      /** Setup Event chain - in case of a begin-of event action is needed */
+      virtual StatusCode setupEvent() override final;
+      
+      /** Release Event chain - in case of an end-of event action is needed */
+      virtual StatusCode releaseEvent() override final;
+      
+      std::string m_paramsFilename;
+      std::string m_paramsInputArchitecture;
+
+      std::unique_ptr<lwt::LightweightGraph> m_graph;
+      
+      ToolHandleArray<ICaloCellMakerTool> m_caloCellMakerToolsSetup ;
+      ToolHandleArray<ICaloCellMakerTool> m_caloCellMakerToolsRelease ;
+
+      ToolHandle<IFastCaloSimCaloExtrapolation> m_FastCaloSimCaloExtrapolation;
+      ToolHandle<Trk::ITimedExtrapolator> m_extrapolator;
+      
+      CaloCellContainer *       m_theContainer;
+
+      ServiceHandle<IAtRndmGenSvc>    m_rndGenSvc;
+      CLHEP::HepRandomEngine*         m_randomEngine;
+      std::string                     m_randomEngineName;
+      
+
+      const CaloDetDescrManager* m_caloDetDescrManager;
+      std::unique_ptr<CaloGeometryFromCaloDDM> m_caloGeo;
+      const LArEM_ID* m_emID;
+      std::vector<CaloCell*> m_windowCells;
+
+      // specific to architecture
+      // preprocessing of input
+      int m_GANLatentSize = 0;
+      double m_logTrueEnergyMean = 0.;
+      double m_logTrueEnergyScale = 0.;
+      double m_riImpactEtaMean = 0.;
+      double m_riImpactEtaScale = 0.;
+      double m_riImpactPhiMean = 0.;
+      double m_riImpactPhiScale = 0.;
+
+      // building of the 266 cells cluster
+      const int m_numberOfCellsForDNN = 266;
+      const double m_middleCellWidthEta = 0.025;
+      const double m_middleCellWidthPhi = CLHEP::pi / std::pow(2,7);
+      const double m_etaRawMiddleCut = m_middleCellWidthEta * 3.5;
+      const double m_etaRawBackCut = m_middleCellWidthEta * 4.;
+      const double m_phiRawMiddleCut = m_middleCellWidthPhi * 3.5;
+      const double m_phiRawStripCut = m_middleCellWidthPhi * 6.0;
+
+      
+      std::string  m_caloCellsOutputName;
+  };
+
+}
+
+#endif //> !ISF_DNNCALOSIMSVC_H
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/components/ISF_FastCaloSimServices_entries.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/components/ISF_FastCaloSimServices_entries.cxx
index 703317432b741717eb2d0908a04fba7c6f401cc5..8c8150c4f6f7a790d7a6782eb153fc7ed3d5784f 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/components/ISF_FastCaloSimServices_entries.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/src/components/ISF_FastCaloSimServices_entries.cxx
@@ -1,8 +1,10 @@
+#include "../DNNCaloSimSvc.h"
 #include "../FastCaloSimSvc.h"
 #include "../FastCaloSimSvcV2.h"
 #include "../FastCaloSimSvcPU.h"
 #include "../FastCaloTool.h"
 
+DECLARE_COMPONENT( ISF::DNNCaloSimSvc )
 DECLARE_COMPONENT( ISF::FastCaloSimSvc )
 DECLARE_COMPONENT( ISF::FastCaloSimSvcV2 )
 DECLARE_COMPONENT( ISF::FastCaloSimSvcPU )
diff --git a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
index fe3e9f4fd199294020c64ece2f92375a25186a26..5b9304d419894f0bbd2662ca68c1159e1ef160a1 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
+++ b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 """
 ISF_SimulationSelectors configurations for ISF
 Elmar Ritsch, 04/02/2013
@@ -63,6 +63,10 @@ def getDefaultFastCaloSimV2Selector(name="ISF_DefaultFastCaloSimV2Selector", **k
     kwargs.setdefault('SimulationFlavor', SimulationFlavor.FastCaloSimV2)
     return getDefaultSimSelector(name, **kwargs )
 
+def getDefaultDNNCaloSimSelector(name="ISF_DefaultDNNCaloSimSelector", **kwargs):
+    kwargs.setdefault("Simulator"   , 'ISF_DNNCaloSimSvc')
+    return getDefaultSimSelector(name, **kwargs )
+
 def getFastHitConvAlgFastCaloSimSelector(name="ISF_FastHitConvAlgFastCaloSimSelector", **kwargs):
     kwargs.setdefault("Simulator"   , 'ISF_FastHitConvAlgFastCaloSimSvc')
     kwargs.setdefault('SimulationFlavor', SimulationFlavor.FastCaloSim)
diff --git a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
index f64e7493ed7af2dd2d477c7e44e45087868f7901..d166e8912ba81e339dd4356e6c703cb500c3ccf1 100644
--- a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
+++ b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfigDb.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 """
 Configuration database for ISF_SimulationSelectors
 Elmar Ritsch, 10/11/2014
@@ -36,6 +36,7 @@ addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastCaloSimPil
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastHitConvAlgFastCaloSimSelector"    , "ISF_FastHitConvAlgFastCaloSimSelector"   )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultLegacyAFIIFastCaloSimSelector" , "ISF_DefaultLegacyAFIIFastCaloSimSelector")
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultFastCaloSimV2Selector"         , "ISF_DefaultFastCaloSimV2Selector"        )
+addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultDNNCaloSimSelector"         , "ISF_DefaultDNNCaloSimSelector"        )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getFastHitConvAlgLegacyAFIIFastCaloSimSelector" , "ISF_FastHitConvAlgLegacyAFIIFastCaloSimSelector")
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultFatrasSelector"                , "ISF_DefaultFatrasSelector"               )
 addTool("ISF_SimulationSelectors.ISF_SimulationSelectorsConfig.getDefaultFatrasNewExtrapolationSelector", "ISF_DefaultFatrasNewExtrapolationSelector")
diff --git a/Simulation/ISF/ISF_Validation/test/test_ATLFASTII_ttbar_2evts.sh b/Simulation/ISF/ISF_Validation/test/test_ATLFASTII_ttbar_2evts.sh
index 00b52d0a5da2a33b1edb4a51331c04a11f9b409a..654071172b2c9653a9bdd5f828229197cf90e21f 100755
--- a/Simulation/ISF/ISF_Validation/test/test_ATLFASTII_ttbar_2evts.sh
+++ b/Simulation/ISF/ISF_Validation/test/test_ATLFASTII_ttbar_2evts.sh
@@ -3,7 +3,6 @@
 # art-description: MC15-style simulation using ATLFASTII
 # art-type: build
 # art-include: 21.0/Athena
-# art-include: 21.0/AthSimulation
 # art-include: 21.3/Athena
 # art-include: 21.9/Athena
 # art-include: master/Athena
diff --git a/Simulation/ISF/ISF_Validation/test/test_FullG4_LongLived_ZPrime_2evts.sh b/Simulation/ISF/ISF_Validation/test/test_FullG4_LongLived_ZPrime_2evts.sh
index cd2efce781b87b791ac819deb649c43104d62d2e..9f833ade127be6f8bd804dd1c3d994da76f851af 100755
--- a/Simulation/ISF/ISF_Validation/test/test_FullG4_LongLived_ZPrime_2evts.sh
+++ b/Simulation/ISF/ISF_Validation/test/test_FullG4_LongLived_ZPrime_2evts.sh
@@ -3,7 +3,6 @@
 # art-description: MC15-style simulation using FullG4_LongLived
 # art-type: build
 # art-include: 21.0/Athena
-# art-include: 21.0/AthSimulation
 # art-include: 21.3/Athena
 # art-include: 21.9/Athena
 # art-include: master/Athena
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileBeamElemContByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileBeamElemContByteStreamCnv.h
index 768c77b43d4483bd7d6f5a874b847439fdb150b3..e491d81a0db5c917c0805ec88a3f252f72a82d8e 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileBeamElemContByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileBeamElemContByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILEBYTESTREAM_TILEBEAMELEM_BYTESTREAMCNV_H
@@ -35,9 +35,6 @@ class TileROD_Decoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 /**
  * @class TileBeamElemContByteStreamCnv
  * @brief This Converter class provides conversion from ByteStream to TileBeamElemContainer
@@ -57,8 +54,8 @@ class TileBeamElemContByteStreamCnv
     virtual StatusCode finalize() override;
 
     /// Storage type and class ID
-    virtual long repSvcType() const override { return ByteStream_StorageType; }
-    static long storageType()  { return ByteStream_StorageType; }
+    virtual long repSvcType() const override { return i_repSvcType(); }
+    static long storageType();
     static const CLID& classID();
 
     // FIXME: Eliminate this backdoor access to RAW data.
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileDigitsContByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileDigitsContByteStreamCnv.h
index 3a30d56982a272c60829a163af28f9072145a7fb..1318cf163fa0dae3a51c533699a4a5004ae8c907 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileDigitsContByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileDigitsContByteStreamCnv.h
@@ -33,9 +33,6 @@ class TileROD_Decoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 /**
  * @class TileDigitsContByteStreamCnv
  * @brief This Converter class provides conversion from ByteStream to TileDigitsContainer
@@ -61,8 +58,8 @@ class TileDigitsContByteStreamCnv
     virtual StatusCode finalize() override;
     
     /// Storage type and class ID
-    virtual long repSvcType() const override { return ByteStream_StorageType; }
-    static long storageType()  { return ByteStream_StorageType; }
+    virtual long repSvcType() const override { return i_repSvcType(); }
+    static long storageType();
     static const CLID& classID();
 
   private: 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileL2ContByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileL2ContByteStreamCnv.h
index 889d2778e57b0d1c9853b6d83d1493a4a1a984b1..fa3dd8144264ad1a838841babe572da88a000a43 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileL2ContByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileL2ContByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILEBYTESTREAM_TILEL2_BYTESTREAMCNV_H
@@ -28,9 +28,6 @@ class TileROD_Decoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 
 class TileRecyclableL2Container
   : public TileL2Container, public DataObject
@@ -79,8 +76,8 @@ class TileL2ContByteStreamCnv
     virtual StatusCode finalize() override;
     
     /// Storage type and class ID
-    virtual long repSvcType() const override { return ByteStream_StorageType; }
-    static long storageType()  { return ByteStream_StorageType; }
+    virtual long repSvcType() const override { return i_repSvcType(); }
+    static long storageType();
     static const CLID& classID();
     
   private: 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileLaserObjByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileLaserObjByteStreamCnv.h
index 6d314588435048e2e86b95f030957ae7ca552a23..280adf13ebec28eaa6ba03905cb8d65e8b085cc4 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileLaserObjByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileLaserObjByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //author Renato Febbraro
@@ -35,8 +35,6 @@ class TileHid2RESrcID;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
 
 class TileLaserObjByteStreamCnv
   : public Converter
@@ -47,13 +45,13 @@ class TileLaserObjByteStreamCnv
 
     typedef TileLaserObjByteStreamTool  BYTESTREAMTOOL ;
 
-    virtual StatusCode initialize();
-    virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-    virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+    virtual StatusCode initialize() override;
+    virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj) override;
+    virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr) override;
     
     /// Storage type and class ID
-    virtual long repSvcType() const  { return ByteStream_StorageType; }
-    static long storageType()  { return ByteStream_StorageType; }
+    virtual long repSvcType() const override { return i_repSvcType(); }
+    static long storageType();
     static const CLID& classID();
     
   private: 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileMuRcvContByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileMuRcvContByteStreamCnv.h
index 67ba746f3faaaf993e852ad3e336f217d2459505..7a0a28374e5b794136cb3cb97c07417df20f605d 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileMuRcvContByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileMuRcvContByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILEBYTESTREAM_TILEMURCVCONTBYTESTREAMCNV_H
@@ -24,9 +24,6 @@ class TileROD_Decoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
-
 
 /**
  * @class TileMuRcvContByteStreamCnv
@@ -51,8 +48,8 @@ class TileMuRcvContByteStreamCnv
   virtual StatusCode finalize() override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const override { return ByteStream_StorageType; }
-  static long storageType()  { return ByteStream_StorageType; }
+  virtual long repSvcType() const override { return i_repSvcType(); }
+  static long storageType();
   static const CLID& classID();
 
  private: 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileRawChannelContByteStreamCnv.h b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileRawChannelContByteStreamCnv.h
index 0aea20c6954f042f30c5f9e595a7d598c9c79e50..4c90241ec5efd8cf0cde39972fff56dcd2541b1e 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileRawChannelContByteStreamCnv.h
+++ b/TileCalorimeter/TileSvc/TileByteStream/TileByteStream/TileRawChannelContByteStreamCnv.h
@@ -38,8 +38,6 @@ class TileROD_Decoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-// Externals 
-extern long ByteStream_StorageType;
 
 class TileRawChannelContByteStreamCnv
   : public Converter
@@ -56,8 +54,8 @@ class TileRawChannelContByteStreamCnv
     virtual StatusCode finalize() override;
     
     /// Storage type and class ID
-    virtual long repSvcType() const override  { return ByteStream_StorageType; }
-    static long storageType()  { return ByteStream_StorageType; }
+    virtual long repSvcType() const override  { return i_repSvcType(); }
+    static long storageType();
     static const CLID& classID();
     
   private: 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileBeamElemContByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileBeamElemContByteStreamCnv.cxx
index e79682d06430d2848744db87bde31f6ec98decfc..0ecea833775f5d9b6f9546768165b55e58dbc69d 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileBeamElemContByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileBeamElemContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Gaudi includes
@@ -30,7 +30,7 @@
 
 
 TileBeamElemContByteStreamCnv::TileBeamElemContByteStreamCnv(ISvcLocator* svcloc)
-  : Converter(ByteStream_StorageType, classID(), svcloc)
+  : Converter(storageType(), classID(), svcloc)
   , ::AthMessaging(msgSvc(), "TileBeamElemContByteStreamCnv")
   , m_name("TileBeamElemContByteStreamCnv")
   , m_robSvc("ROBDataProviderSvc", m_name)
@@ -42,6 +42,7 @@ TileBeamElemContByteStreamCnv::TileBeamElemContByteStreamCnv(ISvcLocator* svcloc
 
 const CLID& TileBeamElemContByteStreamCnv::classID() {return ClassID_traits<TileBeamElemContainer>::ID();}
 
+long TileBeamElemContByteStreamCnv::storageType() { return ByteStreamAddress::storageType(); }
 
 StatusCode TileBeamElemContByteStreamCnv::initialize() {
 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileDigitsContByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileDigitsContByteStreamCnv.cxx
index 042981523935eba418722055d22707416de06557..7f7cbb91fb69dd808fec485cbb667e6694c04526 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileDigitsContByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileDigitsContByteStreamCnv.cxx
@@ -39,7 +39,7 @@
 
 
 TileDigitsContByteStreamCnv::TileDigitsContByteStreamCnv(ISvcLocator* svcloc) 
-  : Converter(ByteStream_StorageType, classID(), svcloc)
+  : Converter(storageType(), classID(), svcloc)
   , ::AthMessaging(msgSvc(), "TileDigitsContByteStreamCnv")
   , m_name("TileDigitsContByteStreamCnv")
   , m_tool("TileDigitsContByteStreamTool")
@@ -53,6 +53,7 @@ TileDigitsContByteStreamCnv::TileDigitsContByteStreamCnv(ISvcLocator* svcloc)
 
 const CLID& TileDigitsContByteStreamCnv::classID(){ return ClassID_traits<TileDigitsContainer>::ID();}
 
+long TileDigitsContByteStreamCnv::storageType() { return ByteStreamAddress::storageType(); }
 
 StatusCode TileDigitsContByteStreamCnv::initialize() {
   
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileL2ContByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileL2ContByteStreamCnv.cxx
index de99d00cdbe9dcba34c0cfdb75519e26dad7e356..388b26cb5ba275eb16210d68326a10b7587cc740 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileL2ContByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileL2ContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Gaudi includes
@@ -60,7 +60,7 @@ void TileRecyclableL2Container::recycle()
 
 
 TileL2ContByteStreamCnv::TileL2ContByteStreamCnv(ISvcLocator* svcloc)
-  : Converter(ByteStream_StorageType, classID(), svcloc)
+  : Converter(storageType(), classID(), svcloc)
   , ::AthMessaging(msgSvc(), "TileL2ContByteStreamCnv")
   , m_name("TileL2ContByteStreamCnv")
   , m_tool("TileL2ContByteStreamTool")
@@ -74,6 +74,7 @@ TileL2ContByteStreamCnv::TileL2ContByteStreamCnv(ISvcLocator* svcloc)
 
 const CLID& TileL2ContByteStreamCnv::classID(){ return ClassID_traits<TileL2Container>::ID(); }
 
+long TileL2ContByteStreamCnv::storageType() { return ByteStreamAddress::storageType(); }
 
 StatusCode TileL2ContByteStreamCnv::initialize() {
 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileLaserObjByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileLaserObjByteStreamCnv.cxx
index 7a2b97fe265328b60a59fc717e635ce06af62ade..caed68285a7dcd220e4f75cd45c68f6e46d4d21b 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileLaserObjByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileLaserObjByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 //author Renato Febbraro
@@ -36,7 +36,7 @@
 
 
 TileLaserObjByteStreamCnv::TileLaserObjByteStreamCnv(ISvcLocator* svcloc)
-  : Converter(ByteStream_StorageType, classID(), svcloc)
+  : Converter(storageType(), classID(), svcloc)
   , ::AthMessaging(msgSvc(), "TileLaserObjByteStreamCnv")
   , m_name("TileLaserObjByteStreamCnv")
   , m_robSvc("ROBDataProviderSvc", m_name)
@@ -48,6 +48,7 @@ TileLaserObjByteStreamCnv::TileLaserObjByteStreamCnv(ISvcLocator* svcloc)
 
 const CLID& TileLaserObjByteStreamCnv::classID(){ return ClassID_traits<TileLaserObject>::ID();}
 
+long TileLaserObjByteStreamCnv::storageType() { return ByteStreamAddress::storageType(); }
 
 StatusCode TileLaserObjByteStreamCnv::initialize() {
 
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileMuRcvContByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileMuRcvContByteStreamCnv.cxx
index b03a78f8a53b1760ea95c82f807ae7691003ba55..0d850199349c7179bea89b2fb599d94baee56531 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileMuRcvContByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileMuRcvContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Gaudi includes
@@ -32,7 +32,7 @@
 
 
 TileMuRcvContByteStreamCnv::TileMuRcvContByteStreamCnv(ISvcLocator* svcloc)
-  : Converter(ByteStream_StorageType, classID(),svcloc)
+  : Converter(storageType(), classID(),svcloc)
   , ::AthMessaging(msgSvc(), "TileMuRcvContByteStreamCnv")
   , m_name("TileMuRcvContByteStreamCnv")
   , m_tool("TileMuRcvContByteStreamTool")
@@ -45,7 +45,11 @@ TileMuRcvContByteStreamCnv::TileMuRcvContByteStreamCnv(ISvcLocator* svcloc)
 }
 
 const CLID& TileMuRcvContByteStreamCnv::classID(){
-return ClassID_traits<TileMuonReceiverContainer>::ID() ;
+  return ClassID_traits<TileMuonReceiverContainer>::ID();
+}
+
+long TileMuRcvContByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
 }
 
 StatusCode TileMuRcvContByteStreamCnv::initialize()
diff --git a/TileCalorimeter/TileSvc/TileByteStream/src/TileRawChannelContByteStreamCnv.cxx b/TileCalorimeter/TileSvc/TileByteStream/src/TileRawChannelContByteStreamCnv.cxx
index 517090ed689b993b0d66a5057306b72c83288ba0..6c73fe1df1bf6c2919e6bf53c612614e64a29439 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/src/TileRawChannelContByteStreamCnv.cxx
+++ b/TileCalorimeter/TileSvc/TileByteStream/src/TileRawChannelContByteStreamCnv.cxx
@@ -35,7 +35,7 @@
 #include <stdint.h>
 
 TileRawChannelContByteStreamCnv::TileRawChannelContByteStreamCnv(ISvcLocator* svcloc) 
-  : Converter(ByteStream_StorageType, classID(), svcloc)
+  : Converter(storageType(), classID(), svcloc)
   , ::AthMessaging(msgSvc(), "TileRawChannelContByteStreamCnv")
   , m_name("TileRawChannelContByteStreamCnv")
   , m_tool("TileRawChannelContByteStreamTool")
@@ -49,6 +49,8 @@ TileRawChannelContByteStreamCnv::TileRawChannelContByteStreamCnv(ISvcLocator* sv
 
 const CLID& TileRawChannelContByteStreamCnv::classID() { return ClassID_traits<TileRawChannelContainer>::ID();}
 
+long TileRawChannelContByteStreamCnv::storageType() { return ByteStreamAddress::storageType(); }
+
 StatusCode TileRawChannelContByteStreamCnv::initialize() {
 
   ATH_MSG_DEBUG(" initialize ");
diff --git a/Tools/PROCTools/python/RunTier0TestsTools.py b/Tools/PROCTools/python/RunTier0TestsTools.py
index 080eabfc8e509fc360ccbb05f1ea4c16bfa17718..43ba199944d67ee3a05adbd2d38f5ef05f920716 100644
--- a/Tools/PROCTools/python/RunTier0TestsTools.py
+++ b/Tools/PROCTools/python/RunTier0TestsTools.py
@@ -24,5 +24,5 @@ ciRefFileMap = {
                 's3126-22.0'           : 'v2',
                 # OverlayTier0Test_required-test
                 'overlay-d1498-21.0'   : 'v1',
-                'overlay-d1498-22.0'   : 'v4',
+                'overlay-d1498-22.0'   : 'v6',
                }
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidParametrization.h b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidParametrization.h
index 67dd6513807147a43a6e6ff4b4840d6754c51750..8340f1a2016c8013dd129f1ca57de40150c757dd 100755
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidParametrization.h
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidParametrization.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -33,44 +33,75 @@ class SolenoidParametrization
 {
     
 public:
-    // private constructors (as singleton)
-    ~SolenoidParametrization			(void);
+    class BinParameters
+    {
+    public:
+      BinParameters (const double zAtAxis, const double cotTheta)
+        : m_cotTheta (cotTheta), m_zAtAxis (zAtAxis) {}
+      BinParameters (const double r, const double z, const double cotTheta);
+      double m_signTheta = 1;
+      double m_cotTheta = 0;
+      double m_zAtAxis = 0;
+      double m_interpolateZ = 0;
+      double m_complementZ = 0;
+      double m_interpolateTheta = 0;
+      double m_complementTheta = 0;
+    };
+    class Parameters
+      : public BinParameters
+    {
+    public:
+      Parameters (const SolenoidParametrization& spar,
+                  const double r, const double z, const double cotTheta);
+      double m_fieldAtOrigin;
+      double m_quadraticTerm;
+      double m_cubicTerm;
+    };
+
+    SolenoidParametrization		(MagField::IMagFieldSvc* magFieldSvc);	// configuration from Intersector
+    ~SolenoidParametrization() = default;
     
     // forbidden copy constructor
     // forbidden assignment operator
 
-    static SolenoidParametrization*	instance (MagField::IMagFieldSvc* magFieldSvc);	// initialize singleton
-    static void                 clearInstance(void);	// clear (to be used before reinitialization)
-    
-    double			centralField (void) const;
-    double			fieldComponent (double) const;		// parametrized - perp to track in rz-plane
+    double			centralField() const;
+    double			fieldComponent (double z,
+                                                const Parameters& parms) const;		// parametrized - perp to track in rz-plane
     double			fieldComponent (double r, double z, double cotTheta) const; // from MagFieldSvc
-    void			fieldIntegrals (double&, double&, double, double);
-    bool			hasParametrization (void) const;
-    double			maximumR (void) const;		// param valid to maximumR
-    double			maximumZ (void) const;		// param valid to maximumZ
-    void			printFieldIntegrals (void) const;
-    void			printParametersForEtaLine (double, double);
-    void			printResidualForEtaLine (double, double);
-    void			setParameters (double, double, double); // set line in rz-plane
-    bool			validOrigin(Amg::Vector3D origin) const; // param valid for this origin?
+    void			fieldIntegrals (double& firstIntegral,
+                                                double& secondIntegral,
+                                                double zBegin,
+                                                double zEnd,
+                                                Parameters& parms) const;
+    double			maximumR() const;		// param valid to maximumR
+    double			maximumZ() const;		// param valid to maximumZ
+    void			printFieldIntegrals() const;
+    void			printParametersForEtaLine(double eta, double z_origin) const;
+    void			printResidualForEtaLine (double eta, double zOrigin) const;
+    bool			validOrigin(const Amg::Vector3D& origin) const; // param valid for this origin?
+
+    // OK to use this parametrization for CURRENT?
+    bool                        currentMatches (double current) const;
 
 private:
-    //  implementation does not work without magnetic field service
-    //  SolenoidParametrization		(void);				// singleton constructor
-    SolenoidParametrization		(MagField::IMagFieldSvc* magFieldSvc);	// configuration from Intersector
-    int				fieldKey(void);
-    void			integrate(double&, double&, double, double) const;
-    double			interpolate(int, int, int, int) const;
-    void			parametrizeSolenoid (void);
-    void			setTerms(int);
+    friend class Parameters;
+
+    static int			fieldKey(BinParameters& parms);
+    void			integrate(double& firstIntegral,
+                                          double& secondIntegral,
+                                          double zBegin,
+                                          double zEnd,
+                                          const Parameters& parms) const;
+    double			interpolate(int key1, int key2,
+                                            int key3, int key4,
+                                            const Parameters& parms) const;
+    void			parametrizeSolenoid();
+    void			setTerms(int, Parameters& parms) const;
 
-    static SolenoidParametrization* 		s_instance;
     static const double		s_binInvSizeTheta;
     static const double		s_binInvSizeZ;
     static const double		s_binZeroTheta;
     static const double		s_binZeroZ;
-    static double		s_centralField;
     static const double		s_lightSpeed;
     static const int	       	s_maxBinTheta;
     static const int	       	s_maxBinZ;
@@ -81,60 +112,52 @@ private:
     static const double		s_rOuter;
     static const double		s_zInner;
     static const double		s_zOuter;
-    static double		s_parameters[14688];
 
-    double 			m_complementTheta;
-    double 			m_complementZ;
-    double 			m_cotTheta;
-    double			m_cubicTerm;
-    double			m_fieldAtOrigin;
-    bool			m_hasParametrization;
-    double 			m_interpolateTheta;
-    double 			m_interpolateZ;
     MagField::IMagFieldSvc*	m_magFieldSvc;
-    double			m_quadraticTerm;
-    double			m_signTheta;
-    double			m_zAtAxis;
+    double                      m_currentMin;
+    double                      m_currentMax;
+    double		        m_centralField;
+    double		        m_parameters[14688];
     
     // copy, assignment: no semantics, no implementation
-    SolenoidParametrization (const SolenoidParametrization&);
-    SolenoidParametrization &operator= (const SolenoidParametrization&);
+    SolenoidParametrization (const SolenoidParametrization&) = delete;
+    SolenoidParametrization &operator= (const SolenoidParametrization&) = delete;
 };
 
 //<<<<<< INLINE PRIVATE MEMBER FUNCTIONS                                >>>>>>
 
 inline int
-SolenoidParametrization::fieldKey(void) 
+SolenoidParametrization::fieldKey(BinParameters& parms)
 {
-    double	z	= m_zAtAxis - s_binZeroZ;
+    double	z	= parms.m_zAtAxis - s_binZeroZ;
     int		zBin  	= static_cast<int>(s_binInvSizeZ*z);
-    m_interpolateZ    	= z*s_binInvSizeZ - double(zBin);
+    parms.m_interpolateZ = z*s_binInvSizeZ - double(zBin);
     if (zBin < 0)
     {
-	m_interpolateZ	= 0.;
+	parms.m_interpolateZ	= 0.;
 	zBin 		= 0;
     }
     else if (zBin > s_maxBinZ - 2)
     {
-	m_interpolateZ	= 0.;
+	parms.m_interpolateZ	= 0.;
 	zBin 		= s_maxBinZ - 1;
     }
-    m_complementZ	= 1. - m_interpolateZ;
+    parms.m_complementZ	= 1. - parms.m_interpolateZ;
     
-    int	thetaBin 	= static_cast<int>(s_binInvSizeTheta*m_cotTheta);
-    m_interpolateTheta = m_cotTheta*s_binInvSizeTheta - double(thetaBin);
+    int	thetaBin 	= static_cast<int>(s_binInvSizeTheta*parms.m_cotTheta);
+    parms.m_interpolateTheta = parms.m_cotTheta*s_binInvSizeTheta - double(thetaBin);
     if (thetaBin > s_maxBinTheta - 3)
     {
-	m_interpolateTheta	= 0.;
+	parms.m_interpolateTheta	= 0.;
 	thetaBin 		= s_maxBinTheta - 2;
     }
-    m_complementTheta	= 1. - m_interpolateTheta;
-    // std::cout << " m_zAtAxis " << m_zAtAxis
-    // 	      << "   m_cotTheta " << m_cotTheta
+    parms.m_complementTheta	= 1. - parms.m_interpolateTheta;
+    // std::cout << " zAtAxis " << zAtAxis
+    // 	      << "   cotTheta " << cotTheta
     // 	      << "   zBin " << zBin
-    // 	      << "   interpolateZ " << m_interpolateZ
+    // 	      << "   interpolateZ " << parms.m_interpolateZ
     // 	      << "   thetaBin " << thetaBin
-    // 	      << "   interpolateTheta " << m_interpolateTheta << std::endl;
+    // 	      << "   interpolateTheta " << parms.m_interpolateTheta << std::endl;
     
     return 2*s_numberParameters*(s_maxBinTheta*zBin + thetaBin);
 }
@@ -143,7 +166,8 @@ inline void
 SolenoidParametrization::integrate(double& 	firstIntegral,
 				   double& 	secondIntegral,
 				   double 	zBegin,
-				   double 	zEnd) const
+				   double 	zEnd,
+                                   const Parameters& parms) const
 { 
     double	zDiff	=  zEnd - zBegin;
     double 	zBeg2	=  zBegin*zBegin;
@@ -152,29 +176,30 @@ SolenoidParametrization::integrate(double& 	firstIntegral,
     double 	zEnd3	=  zEnd2*zEnd;
     double	zDiff4	=  0.25*(zEnd2 + zBeg2)*(zEnd2 - zBeg2);
     
-    firstIntegral	+= m_fieldAtOrigin*zDiff +
-			   m_quadraticTerm*(zEnd3 - zBeg3)*0.333333333333 +
-			   m_cubicTerm*zDiff4;
+    firstIntegral	+= parms.m_fieldAtOrigin*zDiff +
+			   parms.m_quadraticTerm*(zEnd3 - zBeg3)*0.333333333333 +
+			   parms.m_cubicTerm*zDiff4;
     double   zDiffInv	=  1./zDiff;
-    secondIntegral	+= m_fieldAtOrigin*zDiff +
- 			   m_quadraticTerm*(zDiffInv*zDiff4 - zBeg3)*0.666666666667 +
-			   m_cubicTerm*(0.1*zDiffInv*(zEnd2*zEnd3 - zBeg2*zBeg3) - 0.5*zBeg2*zBeg2);
+    secondIntegral	+= parms.m_fieldAtOrigin*zDiff +
+ 			   parms.m_quadraticTerm*(zDiffInv*zDiff4 - zBeg3)*0.666666666667 +
+			   parms.m_cubicTerm*(0.1*zDiffInv*(zEnd2*zEnd3 - zBeg2*zBeg3) - 0.5*zBeg2*zBeg2);
 }
 
 inline double
 SolenoidParametrization::interpolate(int key1,
-		       int key2,
-		       int key3,
-		       int key4) const
+                                     int key2,
+                                     int key3,
+                                     int key4,
+                                     const Parameters& parms) const
 {
-    return ((s_parameters[key1]*m_complementZ +
-	     s_parameters[key2]*m_interpolateZ)*m_complementTheta +
-	    (s_parameters[key3]*m_complementZ +
-	     s_parameters[key4]*m_interpolateZ)*m_interpolateTheta);
+    return ((m_parameters[key1]*parms.m_complementZ +
+	     m_parameters[key2]*parms.m_interpolateZ)*parms.m_complementTheta +
+	    (m_parameters[key3]*parms.m_complementZ +
+	     m_parameters[key4]*parms.m_interpolateZ)*parms.m_interpolateTheta);
 }
 
 inline void
-SolenoidParametrization::setTerms(int key1)
+SolenoidParametrization::setTerms(int key1, Parameters& parms) const
 {
     int		key2   	= key1 + s_numberParameters;
     int		key3   	= key2 + s_numberParameters;
@@ -182,52 +207,34 @@ SolenoidParametrization::setTerms(int key1)
 
     assert (key1 >= 0);
     assert (key4 < 14688);
-    assert (s_parameters[key1] != 0.);
-    assert (s_parameters[key3] != 0.);
-    if (m_cotTheta < 7.)
+    assert (m_parameters[key1] != 0.);
+    assert (m_parameters[key3] != 0.);
+    if (parms.m_cotTheta < 7.)
     {
-	assert (s_parameters[key2] != 0.);
-	assert (s_parameters[key4] != 0.);
+	assert (m_parameters[key2] != 0.);
+	assert (m_parameters[key4] != 0.);
     }
     
     
-    m_fieldAtOrigin	= interpolate(key1++,key2++,key3++,key4++);
-    m_quadraticTerm 	= interpolate(key1++,key2++,key3++,key4++);
-    m_cubicTerm       	= interpolate(key1,key2,key3,key4);
+    parms.m_fieldAtOrigin	= interpolate(key1++,key2++,key3++,key4++,parms);
+    parms.m_quadraticTerm 	= interpolate(key1++,key2++,key3++,key4++,parms);
+    parms.m_cubicTerm       	= interpolate(key1,key2,key3,key4,parms);
 }
 
 //<<<<<< INLINE PUBLIC MEMBER FUNCTIONS                                 >>>>>>
 
-// class does not work without magnetic field service
-//inline SolenoidParametrization*
-//SolenoidParametrization::instance()
-//{
-//    if (s_instance == 0) s_instance = new SolenoidParametrization();
-//    return s_instance;
-//}
-
-inline SolenoidParametrization*
-SolenoidParametrization::instance(MagField::IMagFieldSvc* magFieldSvc)
-{
-    // this method is provided to configure the initialization.
-    // It should not be called more than once without an intervening clearInstance().
-    assert (s_instance == 0);
-    s_instance = new SolenoidParametrization(magFieldSvc);
-    return s_instance;
-}
-
 inline double
 SolenoidParametrization::centralField (void) const
-{ return s_centralField; }
+{ return m_centralField; }
 
 inline double
-SolenoidParametrization::fieldComponent (double z) const
+SolenoidParametrization::fieldComponent (double z, const Parameters& parms) const
 {
-    double	z_local		= m_signTheta*z - m_zAtAxis;
+    double	z_local		= parms.m_signTheta*z - parms.m_zAtAxis;
     double	z_squared	= z_local*z_local;
-    double    	value		= m_fieldAtOrigin +
-				  m_quadraticTerm*z_squared +
-				  m_cubicTerm*z_squared*z_local;
+    double    	value		= parms.m_fieldAtOrigin +
+				  parms.m_quadraticTerm*z_squared +
+				  parms.m_cubicTerm*z_squared*z_local;
     return value;
 }
 
@@ -244,32 +251,29 @@ inline void
 SolenoidParametrization::fieldIntegrals(double&	firstIntegral,
 					double&	secondIntegral,
 					double 	zBegin,
-					double 	zEnd) 
+					double 	zEnd,
+                                        Parameters& parms) const
 {
-    zBegin	= m_signTheta*zBegin;
-    zEnd	= m_signTheta*zEnd;
+    zBegin	= parms.m_signTheta*zBegin;
+    zEnd	= parms.m_signTheta*zEnd;
     if (zEnd < s_zInner || zBegin > s_zInner)
     {
-	integrate(firstIntegral,secondIntegral,zBegin-m_zAtAxis,zEnd-m_zAtAxis);
+	integrate(firstIntegral,secondIntegral,zBegin-parms.m_zAtAxis,zEnd-parms.m_zAtAxis, parms);
     }
     else
     {
-	integrate(firstIntegral,secondIntegral,zBegin-m_zAtAxis,s_zInner);
-	int	key	= fieldKey() + s_numberParameters/2;
-	setTerms(key);
-	integrate(firstIntegral,secondIntegral,s_zInner,zEnd-m_zAtAxis);
+	integrate(firstIntegral,secondIntegral,zBegin-parms.m_zAtAxis,s_zInner, parms);
+	int	key	= fieldKey(parms) + s_numberParameters/2;
+	setTerms(key, parms);
+	integrate(firstIntegral,secondIntegral,s_zInner,zEnd-parms.m_zAtAxis,parms);
     }
 	
     // std::cout << " zBegin < 0. " << zBegin
     // 	      << "   zEnd " << zEnd
-    // 	      << "   m_signTheta " << m_signTheta
-    // 	      << "   m_zAtAxis " << m_zAtAxis << std::endl;
+    // 	      << "   m_signTheta " << parms.m_signTheta
+    // 	      << "   m_zAtAxis " << parms.m_zAtAxis << std::endl;
 }
 
-inline bool
-SolenoidParametrization::hasParametrization (void) const
-{ return m_hasParametrization; }
-   
 inline double
 SolenoidParametrization::maximumR (void) const
 { return s_rInner; }
@@ -278,32 +282,8 @@ inline double
 SolenoidParametrization::maximumZ (void) const
 { return s_zInner; }
 
-inline void
-SolenoidParametrization::setParameters (double r, double z, double cotTheta) 
-{
-    if (cotTheta > 0.)
-    {
-	m_signTheta	= 1.;
-	m_cotTheta	= cotTheta;
-	m_zAtAxis    	= z - r*cotTheta;
-    }
-    else
-    {
-	m_signTheta	= -1.;
-	m_cotTheta	= -cotTheta;
-	m_zAtAxis    	=  r*cotTheta - z;
-    }
-    int	key  		= fieldKey();
-    if (r > s_rInner || m_signTheta*z > s_zInner)
-    {
-	key	+= s_numberParameters/2;
-    }
-//      cout << "r " << r << "   key " << key << endl;
-    setTerms(key);
-}
- 
 inline bool
-SolenoidParametrization::validOrigin(Amg::Vector3D origin) const
+SolenoidParametrization::validOrigin(const Amg::Vector3D& origin) const
 { return (origin.perp()			< s_maximumImpactAtOrigin
 	  && std::abs(origin.z())	< s_maximumZatOrigin); }
 
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidalIntersector.h b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidalIntersector.h
index 94224bcc98782982bade1151291f54e1f128c6d3..1ef2b7b75f8379f3ce80c7fc9609e8f5ee4193a0 100755
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidalIntersector.h
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/TrkExSolenoidalIntersector/SolenoidalIntersector.h
@@ -2,282 +2,287 @@
   Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
-///////////////////////////////////////////////////////////////////
-// SolenoidalIntersector.h, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-
-#ifndef TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
-#define TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
-
-#include <cmath>
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/IIncidentListener.h"
-#include "GaudiKernel/ServiceHandle.h"
-#include "GaudiKernel/ToolHandle.h"
-#include "GeoPrimitives/GeoPrimitives.h"
-#include "MagFieldInterfaces/IMagFieldSvc.h"
-#include "TrkExInterfaces/IIntersector.h"
-#include "TrkExUtils/TrackSurfaceIntersection.h"
-#include "TrkExSolenoidalIntersector/SolenoidParametrization.h"
-
-class IIncidentSvc;
-namespace Trk
-{
-
-class SolenoidalIntersector: public AthAlgTool,
-			     virtual public IIntersector, virtual public IIncidentListener
-{
-    
-public:
-    SolenoidalIntersector	(const std::string& type, 
-				 const std::string& name,
-				 const IInterface* parent);
-    ~SolenoidalIntersector	(void); 	// destructor
-
-    StatusCode			initialize();
-    StatusCode			finalize();
-
-    /** handle for incident service */
-    void 			handle(const Incident& inc) ;
-
-    /**IIntersector interface method for general Surface type */
-    const TrackSurfaceIntersection*		intersectSurface(const Surface&		surface,
-						 const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-						 const double      	qOverP);
-	                                     
-    /**IIntersector interface method for specific Surface type : PerigeeSurface */
-    const TrackSurfaceIntersection*		approachPerigeeSurface(const PerigeeSurface&	surface,
-						       const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-						       const double      	qOverP);
-	
-    /**IIntersector interface method for specific Surface type : StraightLineSurface */
-    const TrackSurfaceIntersection*		approachStraightLineSurface(const StraightLineSurface& surface,
-							    const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-							    const double      	qOverP);
-              
-    /**IIntersector interface method for specific Surface type : CylinderSurface */
-    const TrackSurfaceIntersection*		intersectCylinderSurface (const CylinderSurface& surface,
-							  const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-							  const double      	qOverP);
-
-    /**IIntersector interface method for specific Surface type : DiscSurface */
-    const TrackSurfaceIntersection*		intersectDiscSurface (const DiscSurface&	surface,
-						      const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-						      const double      	qOverP);
-
-    /**IIntersector interface method for specific Surface type : PlaneSurface */
-    const TrackSurfaceIntersection*		intersectPlaneSurface(const PlaneSurface&	surface,
-						      const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
-						      const double      	qOverP);
-
-    /**IIntersector interface method to check validity of parametrization within extrapolation range */
-    bool			isValid (Amg::Vector3D startPosition,
-					 Amg::Vector3D endPosition) const;
-
-    /** tabulate parametrization details */
-    void			validationAction() const;
-    
-private:
-    double					circularArcLength(double, double, double, double, double,
-								    double, double&, double&);
-    double					linearArcLength(double);
-    bool					extrapolateToR(double endRadius);
-    bool					extrapolateToZ(double endZ);
-    const TrackSurfaceIntersection*		intersection(const Surface&	surface);
-    void					setParameters(const TrackSurfaceIntersection*	intersection,
-							      double			qOverP);
-    
-    // services and tools:
-    ServiceHandle<IIncidentSvc>			m_incidentSvc;   //!< IncidentSvc to catch begin of event
-    ServiceHandle<MagField::IMagFieldSvc>	m_magFieldSvc;
-    ToolHandle<IIntersector>			m_rungeKuttaIntersector;
-
-    double					m_cotTheta;
-    float					m_currentMax;
-    float					m_currentMin;
-    double					m_deltaPhiTolerance;
-    Amg::Vector3D				m_direction;
-    unsigned					m_intersectionNumber;
-    double					m_oneOverSinTheta;
-    double					m_pathLength;
-    Amg::Vector3D				m_position;
-    double					m_qOverP;
-    double					m_qOverPt;
-    double					m_radius;
-    double					m_sinTheta;
-    SolenoidParametrization*			m_solenoidParametrization;
-    double					m_surfaceTolerance;
-    double					m_validRadius;
-    double					m_validZ;
-
-    // counters
-    unsigned long long				m_countExtrapolations;
-    unsigned long long				m_countRKSwitches;
-    
-};
-
-
-// arc length to intersect of 2 circles: circular track and circle at (0,0) with radius endRadius
-inline double
-SolenoidalIntersector::circularArcLength(double 	endRadius,
-					 double		radiusOfCurvature,
-					 double		xCentre,
-					 double		yCentre,
-					 double		cosPhi,
-					 double		sinPhi,
-					 double&	cosPhiIntersect,
-					 double&	sinPhiIntersect)
-{
-    int		trapped	= 0;
-    double	radiusSquared 	= xCentre*xCentre + yCentre*yCentre;
-    double	term 		= 0.5*(radiusSquared +
-				       radiusOfCurvature*radiusOfCurvature -
-				       endRadius*endRadius)/(radiusSquared*radiusOfCurvature);
-    if (std::abs(xCentre) < std::abs(yCentre))
-    {
-	double	dx2 = yCentre*yCentre * (1./(radiusSquared*term*term) - 1.);
-	if (dx2 < 0.)
-	{
-	    trapped = 1;
-	}
-	else
-	{
-	    if (yCentre*term > 0.)
-	    {
-		sinPhiIntersect = term*(-xCentre+std::sqrt(dx2));
-	    }
-	    else
-	    {
-		sinPhiIntersect = term*(-xCentre-std::sqrt(dx2));
-	    }
-	    cosPhiIntersect	= (sinPhiIntersect*xCentre + radiusSquared*term)/yCentre;
-	}
-    }
-    else
-    {
-	double	dy2 = xCentre*xCentre * (1./(radiusSquared*term*term) - 1.);
-	if (dy2 < 0.)
-	{
-	    trapped = 1;
-	}
-	else
-	{
-	    if (xCentre*term > 0.)
-	    {
-		cosPhiIntersect = term*(yCentre+std::sqrt(dy2));
-	    }
-	    else
-	    {
-		cosPhiIntersect = term*(yCentre-std::sqrt(dy2));
-	    }
-	    sinPhiIntersect	= (cosPhiIntersect*yCentre - radiusSquared*term)/xCentre;
-	}
-    }
-    if (trapped == 0)
-    {
-	double	deltaPhi;
-	double	sinDeltaPhi	= sinPhiIntersect*cosPhi - cosPhiIntersect*sinPhi;
-	if (std::abs(sinDeltaPhi) > 0.1)
-	{
-	    deltaPhi = asin(sinDeltaPhi);
-	}
-	else
-	{
-	    deltaPhi = sinDeltaPhi*(1. + 0.166667*sinDeltaPhi*sinDeltaPhi);
-	}
-	return (radiusOfCurvature*deltaPhi);
-    }
-    else
-    {
-	cosPhiIntersect	= cosPhi;
-	sinPhiIntersect = sinPhi;
-	return 0.;
-    }
-}    
-	    
-// arc length to intersect of a line to a circle of radius endRadius centred at (0,0)
-// +ve (-ve) endRadius selects the solution on the same (opposite) side of (0,0)
-inline double
-SolenoidalIntersector::linearArcLength(double	endRadius)
-{
-    double 	arcLength     	= (-m_direction.x()*m_position.x() - m_direction.y()*m_position.y()) *
-				  m_oneOverSinTheta;
-    double 	radiusSquared	= endRadius*endRadius - m_radius*m_radius + arcLength*arcLength;
-    if (radiusSquared > 0.)
-    {
-	if (endRadius > 0.)
-	{
-	    arcLength += std::sqrt(radiusSquared);
-	}
-	else
-	{
-	    arcLength -= std::sqrt(radiusSquared);
-	}
-    }
-    return arcLength;
-}
-    
-inline const TrackSurfaceIntersection*
-SolenoidalIntersector::intersection(const Surface&	surface)
-{
-    Intersection SLIntersect	= surface.straightLineIntersection(m_position, m_direction, false, false);
-    if (! SLIntersect.valid)		return 0;
-    
-    const TrackSurfaceIntersection* intersection	= new TrackSurfaceIntersection(SLIntersect.position,
-							   m_direction,
-							   m_pathLength);
-    // // validate
-    // if (! intersection)
-    // {
-    // 	ATH_MSG_WARNING(" this should never fail");
-    // 	return 0;
-    // }
-    
-    // const Amg::Vector2D* localPos = surface.positionOnSurface(intersection->position(), false);
-    // if (! localPos)
-    // {
-    // 	ATH_MSG_INFO("   localPos fails  surface type " << surface.type()
-    // 		     << "   at R,Z " << m_position.perp() << ", " << m_position.z()
-    // 		     << "  surface R " << surface.globalReferencePoint().perp());
-    // 	return 0;
-    // }
-    
-
-    // ATH_MSG_INFO(" serial diff " << intersection->serialNumber() - m_intersectionNumber
-    // 	<< "  at R,Z: " << m_radius << ", " << m_position.z());
-    
-    m_intersectionNumber = intersection->serialNumber();
-    return intersection;
-}
-
-inline void
-SolenoidalIntersector::setParameters(const TrackSurfaceIntersection* trackTrackSurfaceIntersection, double qOverP)
-{
-    if (trackTrackSurfaceIntersection->serialNumber() != m_intersectionNumber || qOverP != m_qOverP)
-    {
-	// ATH_MSG_INFO(" initialize parameters.  Diff: " << trackTrackSurfaceIntersection->serialNumber()-m_intersectionNumber
-	// 	     << "  at R,Z: " << trackTrackSurfaceIntersection->position().perp() << ", " << trackTrackSurfaceIntersection->position().z());
-	++m_countExtrapolations;
-	m_position.x()		= trackTrackSurfaceIntersection->position().x();
-	m_position.y()		= trackTrackSurfaceIntersection->position().y();
-	m_position.z()		= trackTrackSurfaceIntersection->position().z();
-	m_radius		= m_position.perp();
-	m_direction.x()		= trackTrackSurfaceIntersection->direction().x();
-	m_direction.y()		= trackTrackSurfaceIntersection->direction().y();
-	m_direction.z()		= trackTrackSurfaceIntersection->direction().z();
-	m_sinTheta		= m_direction.perp();
-	m_oneOverSinTheta	= 1./m_sinTheta;
-	m_cotTheta		= m_direction.z() * m_oneOverSinTheta;
-	m_pathLength		= trackTrackSurfaceIntersection->pathlength();
-	m_qOverP		= qOverP;
-	m_qOverPt		= qOverP * m_oneOverSinTheta;
-	m_solenoidParametrization->setParameters(m_radius,m_position.z(),m_cotTheta);
-    }
-}
-
-} // end of namespace
-
-
-#endif // TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
-
-
+///////////////////////////////////////////////////////////////////
+// SolenoidalIntersector.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
+#define TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
+
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ContextSpecificPtr.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "MagFieldInterfaces/IMagFieldSvc.h"
+#include "TrkExInterfaces/IIntersector.h"
+#include "TrkExUtils/TrackSurfaceIntersection.h"
+#include "TrkExSolenoidalIntersector/SolenoidParametrization.h"
+#include "CxxUtils/checker_macros.h"
+#include <mutex>
+#include <cmath>
+
+class IIncidentSvc;
+namespace Trk
+{
+
+class SolenoidalIntersector: public extends<AthAlgTool, IIntersector>
+{
+    
+public:
+    /**
+     * @brief Constants of motion and other cached values.
+     *
+     * There is some data we want to persist across calls to intersectSurface()
+     * for a single trajectory.  We do this by attaching this structure
+     * as a cache block to TrackSurfaceIntersection.  Some of these are
+     * actually constants of motion for a helical trajectory.  We also
+     * include here the solenoidal parametrization.  This gets updated
+     * as we step through the field; including it here avoids a reevaluation
+     * at the start of the next call.  We also include the position at the
+     * end of the stepping phase, m_lastPosition.  This is because before
+     * after we finish stepping but before we return, we improve the
+     * estimate of the intersection by calculating the straight line
+     * intersection with the surface.  But if we then calcuate a further
+     * intersection with the same trajectory, we want to start at the
+     * point at the end of the previous stepping, not the position
+     * we returned.
+     */
+    struct Constants
+      : public TrackSurfaceIntersection::IIntersectionCache
+    {
+      Constants (const SolenoidParametrization& solpar,
+                 const TrackSurfaceIntersection& trackTrackSurfaceIntersection,
+                 const double qOverP);
+      virtual std::unique_ptr<IIntersectionCache> clone() const override
+      { return std::make_unique<Constants> (*this); }
+
+      double m_sinTheta;
+      double m_oneOverSinTheta;
+      double m_cotTheta;
+      double m_qOverPt;
+      const SolenoidParametrization& m_solPar;
+      Amg::Vector3D m_lastPosition;
+      SolenoidParametrization::Parameters m_solParams;
+    };
+    SolenoidalIntersector	(const std::string& type, 
+				 const std::string& name,
+				 const IInterface* parent);
+    ~SolenoidalIntersector	(void); 	// destructor
+
+    StatusCode			initialize();
+    StatusCode			finalize();
+
+    /**IIntersector interface method for general Surface type */
+    const TrackSurfaceIntersection*		intersectSurface(const Surface&		surface,
+						 const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+						 const double      	qOverP);
+	                                     
+    /**IIntersector interface method for specific Surface type : PerigeeSurface */
+    const TrackSurfaceIntersection*		approachPerigeeSurface(const PerigeeSurface&	surface,
+						       const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+						       const double      	qOverP);
+	
+    /**IIntersector interface method for specific Surface type : StraightLineSurface */
+    const TrackSurfaceIntersection*		approachStraightLineSurface(const StraightLineSurface& surface,
+							    const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+							    const double      	qOverP);
+              
+    /**IIntersector interface method for specific Surface type : CylinderSurface */
+    const TrackSurfaceIntersection*		intersectCylinderSurface (const CylinderSurface& surface,
+							  const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+							  const double      	qOverP);
+
+    /**IIntersector interface method for specific Surface type : DiscSurface */
+    const TrackSurfaceIntersection*		intersectDiscSurface (const DiscSurface&	surface,
+						      const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+						      const double      	qOverP);
+
+    /**IIntersector interface method for specific Surface type : PlaneSurface */
+    const TrackSurfaceIntersection*		intersectPlaneSurface(const PlaneSurface&	surface,
+						      const TrackSurfaceIntersection*	trackTrackSurfaceIntersection,
+						      const double      	qOverP);
+
+    /**IIntersector interface method to check validity of parametrization within extrapolation range */
+    bool			isValid (Amg::Vector3D startPosition,
+					 Amg::Vector3D endPosition) const;
+
+    /** tabulate parametrization details */
+    void			validationAction() const;
+    
+private:
+    const SolenoidParametrization*              getSolenoidParametrization() const;
+
+    double					circularArcLength(double, double, double, double, double,
+								    double, double&, double&) const;
+    double					linearArcLength(const TrackSurfaceIntersection& isect,
+                                                                const Constants& com,
+                                                                const double radius2,
+                                                                const double endRadius) const;
+    bool					extrapolateToR(TrackSurfaceIntersection& isect,
+                                                               double& radius2,
+                                                               Constants&   com,
+                                                               const double endRadius) const;
+    bool					extrapolateToZ(TrackSurfaceIntersection& isect,
+                                                               Constants&   com,
+                                                               const double endZ) const;
+    const TrackSurfaceIntersection*		intersection(std::unique_ptr<TrackSurfaceIntersection> isect,
+                                                             Constants&     com,
+                                                             const Surface& surface) const;
+
+   std::unique_ptr<TrackSurfaceIntersection>
+   newIntersection (const TrackSurfaceIntersection& oldIsect,
+                    const SolenoidParametrization& solpar,
+                    const double qOverP,
+                    Constants*& com) const;
+
+    ServiceHandle<MagField::IMagFieldSvc>	m_magFieldSvc;
+    ToolHandle<IIntersector>			m_rungeKuttaIntersector;
+
+    double					m_deltaPhiTolerance;
+    double					m_surfaceTolerance;
+
+    // counters
+    mutable std::atomic<unsigned long long>	m_countExtrapolations;
+    mutable std::atomic<unsigned long long>	m_countRKSwitches;
+
+    mutable std::mutex m_mutex;
+    mutable Gaudi::Hive::ContextSpecificPtr<const SolenoidParametrization> m_lastSolenoidParametrization ATLAS_THREAD_SAFE;
+    // List of active solenoid parametrizations.  Second element of the pair
+    // is a use count.
+    typedef std::list<std::pair<SolenoidParametrization, int> > Parmlist_t;
+    mutable Parmlist_t m_solenoidParametrizations ATLAS_THREAD_SAFE;
+};
+
+
+// arc length to intersect of 2 circles: circular track and circle at (0,0) with radius endRadius
+inline double
+SolenoidalIntersector::circularArcLength(double 	endRadius,
+					 double		radiusOfCurvature,
+					 double		xCentre,
+					 double		yCentre,
+					 double		cosPhi,
+					 double		sinPhi,
+					 double&	cosPhiIntersect,
+					 double&	sinPhiIntersect) const
+{
+    int		trapped	= 0;
+    double	radiusSquared 	= xCentre*xCentre + yCentre*yCentre;
+    double	term 		= 0.5*(radiusSquared +
+				       radiusOfCurvature*radiusOfCurvature -
+				       endRadius*endRadius)/(radiusSquared*radiusOfCurvature);
+    if (std::abs(xCentre) < std::abs(yCentre))
+    {
+	double	dx2 = yCentre*yCentre * (1./(radiusSquared*term*term) - 1.);
+	if (dx2 < 0.)
+	{
+	    trapped = 1;
+	}
+	else
+	{
+	    if (yCentre*term > 0.)
+	    {
+		sinPhiIntersect = term*(-xCentre+std::sqrt(dx2));
+	    }
+	    else
+	    {
+		sinPhiIntersect = term*(-xCentre-std::sqrt(dx2));
+	    }
+	    cosPhiIntersect	= (sinPhiIntersect*xCentre + radiusSquared*term)/yCentre;
+	}
+    }
+    else
+    {
+	double	dy2 = xCentre*xCentre * (1./(radiusSquared*term*term) - 1.);
+	if (dy2 < 0.)
+	{
+	    trapped = 1;
+	}
+	else
+	{
+	    if (xCentre*term > 0.)
+	    {
+		cosPhiIntersect = term*(yCentre+std::sqrt(dy2));
+	    }
+	    else
+	    {
+		cosPhiIntersect = term*(yCentre-std::sqrt(dy2));
+	    }
+	    sinPhiIntersect	= (cosPhiIntersect*yCentre - radiusSquared*term)/xCentre;
+	}
+    }
+    if (trapped == 0)
+    {
+	double	deltaPhi;
+	double	sinDeltaPhi	= sinPhiIntersect*cosPhi - cosPhiIntersect*sinPhi;
+	if (std::abs(sinDeltaPhi) > 0.1)
+	{
+	    deltaPhi = asin(sinDeltaPhi);
+	}
+	else
+	{
+	    deltaPhi = sinDeltaPhi*(1. + 0.166667*sinDeltaPhi*sinDeltaPhi);
+	}
+	return (radiusOfCurvature*deltaPhi);
+    }
+    else
+    {
+	cosPhiIntersect	= cosPhi;
+	sinPhiIntersect = sinPhi;
+	return 0.;
+    }
+}    
+	    
+// arc length to intersect of a line to a circle of radius endRadius centred at (0,0)
+// +ve (-ve) endRadius selects the solution on the same (opposite) side of (0,0)
+inline double
+SolenoidalIntersector::linearArcLength(const TrackSurfaceIntersection& isect,
+                                       const Constants& com,
+                                       const double	radius2,
+                                       const double	endRadius) const
+{
+    const Amg::Vector3D& pos = isect.position();
+    const Amg::Vector3D& dir = isect.direction();
+
+    double 	arcLength     	= (-dir.x()*pos.x() - dir.y()*pos.y()) *
+				  com.m_oneOverSinTheta;
+    double 	radiusSquared	= endRadius*endRadius - radius2 + arcLength*arcLength;
+    if (radiusSquared > 0.)
+    {
+	if (endRadius > 0.)
+	{
+	    arcLength += std::sqrt(radiusSquared);
+	}
+	else
+	{
+	    arcLength -= std::sqrt(radiusSquared);
+	}
+    }
+    return arcLength;
+}
+    
+inline const TrackSurfaceIntersection*
+SolenoidalIntersector::intersection(std::unique_ptr<TrackSurfaceIntersection> isect,
+                                    Constants&          com,
+                                    const Surface&	surface) const
+{
+    // Improve the estimate of the intersection by calculating
+    // the straight-line intersection.
+    Intersection SLIntersect	= surface.straightLineIntersection(isect->position(), isect->direction(), false, false);
+    if (SLIntersect.valid)
+    {
+        // But first save our current position, so that we can
+        // start from here on the next call.
+        com.m_lastPosition = isect->position();
+        isect->position() = SLIntersect.position;
+	return isect.release();
+    }
+
+    return nullptr;
+}
+
+} // end of namespace
+
+
+#endif // TRKEXSOLENOIDALINTERSECTOR_SOLENOIDALINTERSECTOR_H
+
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/share/SolenoidalIntersector_test.ref b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/share/SolenoidalIntersector_test.ref
index ed9b945fd7666d51c4696af3ae0592c981a261cb..e22da5001735f61591b92f6c498f47418c906d1c 100644
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/share/SolenoidalIntersector_test.ref
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/share/SolenoidalIntersector_test.ref
@@ -10,7 +10,7 @@ JobOptionsSvc        INFO Job options successfully read in from ../share/Solenoi
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v27r1p99)
-                                          running on karma on Tue Jan 29 12:11:05 2019
+                                          running on karma on Sun Feb  3 21:41:27 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AtlasFieldSvc        INFO initialize() ...
@@ -34,9 +34,8 @@ AtlasFieldSvc        INFO Initialized the field map from /home/sss/nobackup/atla
 AtlasFieldSvc        INFO Currents imported and map initialized
 AtlasFieldSvc        INFO BeginRun incident handled
 AtlasFieldSvc        INFO incidents handled successfully
- SolenoidParametrization: centralField      2T  - please be patient while the solenoid is parametrised !! 
-ToolSvc.Trk::So...   INFO  SolenoidParametrization  current: 7730  valid radius,Z : 570, 2150
 test_plane
+ SolenoidParametrization: centralField      2T  - please be patient while the solenoid is parametrised !! 
 test_line
 test_cylinder
 test_disc
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidParametrization.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidParametrization.cxx
index 21236565d5b8b139c0d055b0afb51cdfeed15012..3dc8e769667d14ca16f5b9fadfd3160c09d83289 100755
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidParametrization.cxx
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidParametrization.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017, 2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -46,8 +46,6 @@ const double   	SolenoidParametrization::s_binInvSizeTheta	= 1./0.1;
 const double   	SolenoidParametrization::s_binInvSizeZ		= 1./20.*Gaudi::Units::mm;
 const double   	SolenoidParametrization::s_binZeroTheta		= 0.;
 const double   	SolenoidParametrization::s_binZeroZ		= -160.*Gaudi::Units::mm;
-double		SolenoidParametrization::s_centralField		= 0.;
-SolenoidParametrization*	SolenoidParametrization::s_instance		= 0;
 const double   	SolenoidParametrization::s_lightSpeed		= -1.*299792458*Gaudi::Units::m/Gaudi::Units::s;
 const int      	SolenoidParametrization::s_maxBinTheta 		= 72;
 const int      	SolenoidParametrization::s_maxBinZ		= 17;
@@ -58,38 +56,74 @@ const double   	SolenoidParametrization::s_rInner		= 570.*Gaudi::Units::mm;
 const double   	SolenoidParametrization::s_rOuter		= 1050.*Gaudi::Units::mm;
 const double   	SolenoidParametrization::s_zInner		= 2150.0*Gaudi::Units::mm;  // just after wheel #7
 const double   	SolenoidParametrization::s_zOuter		= 2800.0*Gaudi::Units::mm;  // just after wheel #9
-double		SolenoidParametrization::s_parameters[]      	= {14688*0.};
+
+
+SolenoidParametrization::BinParameters::BinParameters (const double r,
+                                                       const double z,
+                                                       const double cotTheta)
+{
+  if (cotTheta > 0) {
+    m_signTheta = 1;
+    m_cotTheta  = cotTheta;
+    m_zAtAxis  	= z - r*cotTheta;
+  }
+  else {
+    m_signTheta = -1;
+    m_cotTheta = -cotTheta;
+    m_zAtAxis  =  r*cotTheta - z;
+  }
+}
+
+
+SolenoidParametrization::Parameters::Parameters (const SolenoidParametrization& spar,
+                                                 const double r,
+                                                 const double z,
+                                                 const double cotTheta)
+  : BinParameters (r, z, cotTheta)
+{
+  int	key  		= fieldKey(*this);
+  if (r > s_rInner || m_signTheta*z > s_zInner)
+  {
+    key	+= s_numberParameters/2;
+  }
+  spar.setTerms (key, *this);
+}
+
 
 //<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
 
 // note: both constructors are private
 // SolenoidParametrization::SolenoidParametrization(void)
-//     :	m_hasParametrization	(false)
 // {
 //    // field component not defined without a m_magFieldSvc
 //    // get central field value in units required for fast tracking
-//    s_centralField    	= fieldComponent(0.,0.,0.);
+//    m_centralField    	= fieldComponent(0.,0.,0.);
 //
 //    // note field = B*c 
 //    RestoreIOSFlags restore(std::cout);
 //    std::cout << " SolenoidParametrization: centralField "
-//              << std::setw(6) << std::setprecision(3) << s_centralField/s_lightSpeed /Gaudi::Units::tesla
+//              << std::setw(6) << std::setprecision(3) << m_centralField/s_lightSpeed /Gaudi::Units::tesla
 //              << "T" << std::endl;
 //}
 
 SolenoidParametrization::SolenoidParametrization(MagField::IMagFieldSvc* magFieldSvc)
-    :	m_hasParametrization	(false),
-	m_magFieldSvc		(magFieldSvc)
+  : m_magFieldSvc	    (magFieldSvc),
+    m_parameters            ()
 {
-    // get central field value in units required for fast tracking (i.e. field = B*c)
+    // allow 0.1% fluctuation in current.
+    double current = magFieldSvc->solenoidCurrent();
+    m_currentMax	 = 1.001*current;
+    m_currentMin	 = 0.999*current;
+
+  // get central field value in units required for fast tracking (i.e. field = B*c)
     if (!m_magFieldSvc)
        throw std::logic_error("fieldComponent not defined without magnetic field service.");
-    s_centralField    	= fieldComponent(0.,0.,0.);
+    m_centralField    	= fieldComponent(0.,0.,0.);
     RestoreIOSFlags restore(std::cout);
     std::cout << " SolenoidParametrization: centralField "
-              << std::setw(6) << std::setprecision(3) << s_centralField/s_lightSpeed /Gaudi::Units::tesla
+              << std::setw(6) << std::setprecision(3) << m_centralField/s_lightSpeed /Gaudi::Units::tesla
 	      << "T";
-    
+
     // now parametrise field - if requested
     //if (magFieldSvc)
     {
@@ -104,31 +138,28 @@ SolenoidParametrization::SolenoidParametrization(MagField::IMagFieldSvc* magFiel
 void
 SolenoidParametrization::parametrizeSolenoid(void)
 {
-    m_hasParametrization = true;
-    
     // set parametrisation granularity (up to cotTheta = 7.)
     // get value of cubic term for approx: Bz = Bcentral*(1 - term * z^3)
     // 'fit' to average over cotTheta lines
-    m_signTheta	= 1.;
     double	smallOffset	= 0.0000000000001; // avoid FPE
-    m_zAtAxis 	= s_binZeroZ;	// + smallOffset ? 
+    double zAtAxis 	= s_binZeroZ;	// + smallOffset ? 
     
     for (int binZ = 0; binZ < s_maxBinZ; ++binZ)
     { 
-	m_cotTheta 	= smallOffset; 
+        double cotTheta	= smallOffset; 
 	for (int binTheta = 0; binTheta < s_maxBinTheta - 1; ++binTheta)
 	{
 	    double 	r      	= 0.;
-	    double 	z      	= m_zAtAxis;
+	    double 	z      	= zAtAxis;
 	    int 	n      	= 200;
 	    double	dr;
-	    if (m_cotTheta < s_zOuter/s_rOuter)
+	    if (cotTheta < s_zOuter/s_rOuter)
 	    {
 		dr = s_rOuter/double(n);
 	    }
 	    else
 	    {
-		dr = s_zOuter/(m_cotTheta*double(n));
+		dr = s_zOuter/(cotTheta*double(n));
 	    }
 
 	    Amg::VectorX difference(n);
@@ -136,9 +167,9 @@ SolenoidParametrization::parametrizeSolenoid(void)
 	    for (int k = 0; k < n; ++k)
 	    {
 		r 			+= dr;
-		z 			+= dr*m_cotTheta;
+		z 			+= dr*cotTheta;
 		double	w		= (n - k)*(n - k);
-		double	zLocal		= z - m_zAtAxis;
+		double	zLocal		= z - zAtAxis;
 		if (r > s_rInner || z > s_zInner)
 		{
 		    // derivative(k,0)	= 0.;
@@ -157,31 +188,32 @@ SolenoidParametrization::parametrizeSolenoid(void)
 		    // derivative(k,4)	= 0.;
 		    // derivative(k,5)	= 0.;
 		}
-		difference(k)		= w*(fieldComponent(r,z,m_cotTheta) - s_centralField);
+		difference(k)		= w*(fieldComponent(r,z,cotTheta) - m_centralField);
 	    }
 
 	    // solve for parametrization coefficients
 	    Amg::VectorX solution	= derivative.colPivHouseholderQr().solve(difference);
+            BinParameters parms (zAtAxis, cotTheta);
 	    
-	    int			key    		= fieldKey();
-	    assert (s_parameters[key] == 0.);
-	    s_parameters[key++]		= s_centralField + solution(0);
-	    s_parameters[key++]		= solution(1);
-	    s_parameters[key++]		= solution(2);
-	    s_parameters[key++]		= s_centralField + solution(3);
-	    s_parameters[key++]		= solution(4);
-	    s_parameters[key++]		= solution(5);
+	    int			key    		= fieldKey(parms);
+	    assert (m_parameters[key] == 0.);
+	    m_parameters[key++]		= m_centralField + solution(0);
+	    m_parameters[key++]		= solution(1);
+	    m_parameters[key++]		= solution(2);
+	    m_parameters[key++]		= m_centralField + solution(3);
+	    m_parameters[key++]		= solution(4);
+	    m_parameters[key++]		= solution(5);
 
 	    // duplicate last z-bin for contiguous neighbour lookup
 	    if (binZ == s_maxBinZ - 1)
 	    {
-		assert (s_parameters[key] == 0.);
-		s_parameters[key++]    	= s_centralField + solution(0);
-		s_parameters[key++]    	= solution(1);
-		s_parameters[key++]    	= solution(2);
-		s_parameters[key++]    	= s_centralField + solution(3);
-		s_parameters[key++]    	= solution(4);
-		s_parameters[key++]    	= solution(5);
+		assert (m_parameters[key] == 0.);
+		m_parameters[key++]    	= m_centralField + solution(0);
+		m_parameters[key++]    	= solution(1);
+		m_parameters[key++]    	= solution(2);
+		m_parameters[key++]    	= m_centralField + solution(3);
+		m_parameters[key++]    	= solution(4);
+		m_parameters[key++]    	= solution(5);
 		key	-= s_numberParameters;
 	    }
 
@@ -189,13 +221,13 @@ SolenoidParametrization::parametrizeSolenoid(void)
 	    if (binZ > 0)
 	    {
 		key	-= 2*s_numberParameters*s_maxBinTheta;
-		assert (s_parameters[key] == 0.);
-		s_parameters[key++]    	= s_centralField + solution(0);
-		s_parameters[key++]    	= solution(1);
-		s_parameters[key++]    	= solution(2);
-		s_parameters[key++]    	= s_centralField + solution(3);
-		s_parameters[key++]    	= solution(4);
-		s_parameters[key++]    	= solution(5);
+		assert (m_parameters[key] == 0.);
+		m_parameters[key++]    	= m_centralField + solution(0);
+		m_parameters[key++]    	= solution(1);
+		m_parameters[key++]    	= solution(2);
+		m_parameters[key++]    	= m_centralField + solution(3);
+		m_parameters[key++]    	= solution(4);
+		m_parameters[key++]    	= solution(5);
 	    }
 
 	    // some debug print
@@ -204,66 +236,54 @@ SolenoidParametrization::parametrizeSolenoid(void)
 //  		|| key >= s_numberParameters*s_maxBinTheta*(s_maxBinZ - 2))
 //  	    {
 //  		double	z_max;
-//  		if (m_cotTheta < s_zInner/s_rInner)
+//  		if (cotTheta < s_zInner/s_rInner)
 //  		{
-//  		    z_max = s_rInner*m_cotTheta + m_zAtAxis;
+//  		    z_max = s_rInner*cotTheta + zAtAxis;
 //  		}
 //  		else
 //  		{
 //  		    z_max = s_zInner;
 //  		}
 //  		cout << std::setiosflags(std::ios::fixed) << key
-//  		     << "   cotTheta " 	<< std::setw(7)  << std::setprecision(2)  << m_cotTheta
+//  		     << "   cotTheta " 	<< std::setw(7)  << std::setprecision(2)  << cotTheta
 //  		     << "   inner terms:  z0 "<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key]/s_centralField
+//  		     << m_parameters[key]/m_centralField
 //  		     << "   z^2 "<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key+1]*z_max*z_max/s_centralField
+//  		     << m_parameters[key+1]*z_max*z_max/m_centralField
 //  		     << "   z^3 "	<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key+2]*z_max*z_max*z_max/s_centralField
+//  		     << m_parameters[key+2]*z_max*z_max*z_max/m_centralField
 //  		     << "   outer terms:  z0 "<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key+3]/s_centralField
+//  		     << m_parameters[key+3]/m_centralField
 //  		     << "   z^2 "<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key+4]*z_max*z_max/s_centralField
+//  		     << m_parameters[key+4]*z_max*z_max/m_centralField
 //  		     << "   z^3 "	<< std::setw(6) << std::setprecision(3)
-//  		     << s_parameters[key+5]*z_max*z_max*z_max/s_centralField
+//  		     << m_parameters[key+5]*z_max*z_max*z_max/m_centralField
 //  		     << std::resetiosflags(std::ios::fixed) << endl;
 //  	    }
-	    m_cotTheta	+= 1./s_binInvSizeTheta;
+	    cotTheta	+= 1./s_binInvSizeTheta;
 	}
-	m_zAtAxis 	+= 1./s_binInvSizeZ;
+	zAtAxis 	+= 1./s_binInvSizeZ;
     }
 
     // duplicate end theta-bins for contiguous neighbour lookup
-    m_zAtAxis 	= s_binZeroZ;	// + smallOffset ?? 
+    zAtAxis 	= s_binZeroZ;	// + smallOffset ?? 
     for (int binZ = 0; binZ < s_maxBinZ; ++binZ)
     { 
-	m_cotTheta 	= double(s_maxBinTheta)/s_binInvSizeTheta;
-	int	key    	= fieldKey();
+	double cotTheta	= double(s_maxBinTheta)/s_binInvSizeTheta;
+        BinParameters parms (zAtAxis, cotTheta);
+	int	key    	= fieldKey(parms);
 	for (int k = 0; k < 2*s_numberParameters; ++k)
 	{
-	    assert (s_parameters[key+2*s_numberParameters] == 0.);
-	    s_parameters[key+2*s_numberParameters] = s_parameters[key];
+	    assert (m_parameters[key+2*s_numberParameters] == 0.);
+	    m_parameters[key+2*s_numberParameters] = m_parameters[key];
 	    ++key;
 	}
-	m_zAtAxis 	+= 1./s_binInvSizeZ;
+	zAtAxis 	+= 1./s_binInvSizeZ;
     }
 }
 
 //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS                             >>>>>>
 
-SolenoidParametrization::~SolenoidParametrization()
-{}
-
-void
-SolenoidParametrization::clearInstance(void)
-{
-    delete s_instance;
-    s_instance = 0;
-    std::fill (s_parameters,
-	       s_parameters + sizeof(s_parameters)/sizeof(s_parameters[0]),
-	       0);
-}
-
 void
 SolenoidParametrization::printFieldIntegrals (void) const
 {
@@ -392,16 +412,15 @@ SolenoidParametrization::printFieldIntegrals (void) const
 }
 
 void
-SolenoidParametrization::printParametersForEtaLine (double eta, double z_origin) 
+SolenoidParametrization::printParametersForEtaLine (double eta, double z_origin) const
 {
-    m_signTheta		= 1.;
-    m_zAtAxis		= z_origin;
-    m_cotTheta 		= 1./std::tan(2.*std::atan(1./std::exp(eta)));
-    int		key    	= fieldKey();
+    double cotTheta	= 1./std::tan(2.*std::atan(1./std::exp(eta)));
+    BinParameters parms (z_origin, cotTheta);
+    int		key    	= fieldKey(parms);
     double	z_max;
-    if (m_cotTheta < s_zInner/s_rInner)
+    if (cotTheta < s_zInner/s_rInner)
     {
-	z_max = s_rInner*m_cotTheta;
+	z_max = s_rInner*cotTheta;
     }
     else
     {
@@ -411,25 +430,23 @@ SolenoidParametrization::printParametersForEtaLine (double eta, double z_origin)
 	      << "SolenoidParametrization:  line with eta "  << std::setw(6) << std::setprecision(2) << eta
 	      << "   from (r,z)  0.0,"         << std::setw(6) << std::setprecision(1) << z_origin
 	      << "   inner terms:  z0 "<< std::setw(6) << std::setprecision(2)
-	      << s_parameters[key]/s_centralField
+	      << m_parameters[key]/m_centralField
 	      << "   z^2 "<< std::setw(6) << std::setprecision(3)
-	      << s_parameters[key+1]*z_max*z_max/s_centralField
+	      << m_parameters[key+1]*z_max*z_max/m_centralField
 	      << "   z^3 "	<< std::setw(6) << std::setprecision(3)
-	      << s_parameters[key+2]*z_max*z_max*z_max/s_centralField
+	      << m_parameters[key+2]*z_max*z_max*z_max/m_centralField
 	      << "    outer terms:  z0 "<< std::setw(6) << std::setprecision(3)
-	      << s_parameters[key+3]/s_centralField
+	      << m_parameters[key+3]/m_centralField
 	      << "   z^2 "<< std::setw(6) << std::setprecision(3)
-	      << s_parameters[key+4]*z_max*z_max/s_centralField
+	      << m_parameters[key+4]*z_max*z_max/m_centralField
 	      << "   z^3 "	<< std::setw(6) << std::setprecision(3)
-	      << s_parameters[key+5]*z_max*z_max*z_max/s_centralField
+	      << m_parameters[key+5]*z_max*z_max*z_max/m_centralField
 	      << std::resetiosflags(std::ios::fixed) << std::endl;
 }
         
 void
-SolenoidParametrization::printResidualForEtaLine (double eta, double zOrigin) 
+SolenoidParametrization::printResidualForEtaLine (double eta, double zOrigin) const
 {
-    m_signTheta			= 1.;
-    m_zAtAxis			= zOrigin;
     double 	cotTheta 	= 1./std::tan(2.*std::atan(1./std::exp(std::abs(eta))));
     double 	z		= zOrigin;
     double 	r 		= 0.;
@@ -455,8 +472,8 @@ SolenoidParametrization::printResidualForEtaLine (double eta, double zOrigin)
     for (int k = 0; k < n; ++k)
     {
 	double	b 	= fieldComponent(r,z,cotTheta);
-	setParameters(r,z,cotTheta);
-	double	diff 	= (fieldComponent(z) - b)/s_lightSpeed;
+        Parameters parms (*this, r, z, cotTheta);
+	double	diff 	= (fieldComponent(z, parms) - b)/s_lightSpeed;
 	
 	if (r > s_rInner || z > s_zInner)
 	{
@@ -472,7 +489,7 @@ SolenoidParametrization::printResidualForEtaLine (double eta, double zOrigin)
 	if (std::abs(diff) > worstDiff)
 	{
 	    worstDiff  	= std::abs(diff);
-	    worstBCalc	= fieldComponent(z);
+	    worstBCalc	= fieldComponent(z, parms);
 	    worstBTrue	= b;
 	    worstR	= r;
 	    worstZ	= z;
@@ -496,6 +513,14 @@ SolenoidParametrization::printResidualForEtaLine (double eta, double zOrigin)
 	      << std::resetiosflags(std::ios::fixed) << std::endl;
 }
 
+
+bool SolenoidParametrization::currentMatches (double current) const
+{
+  // allow 0.1% fluctuation
+  return current >= m_currentMin && current < m_currentMax;
+}
+
+
 } // end of namespace
 
     
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx
index a39a899db30b6fe10d306662872735892fd36af6..dea5a22d9103975fc2c2eb0d509ee58bd2c23d35 100755
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/src/SolenoidalIntersector.cxx
@@ -1,466 +1,545 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017, 2019 CERN for the benefit of the ATLAS collaboration
 */
 
-///////////////////////////////////////////////////////////////////
-// SolenoidalIntersector.cxx, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-
-#include "GaudiKernel/Incident.h"
-#include "GaudiKernel/SystemOfUnits.h"
-#include "TrkExSolenoidalIntersector/SolenoidalIntersector.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkSurfaces/CylinderSurface.h"
-#include "TrkSurfaces/DiscSurface.h"
-#include "TrkSurfaces/PerigeeSurface.h"
-#include "TrkSurfaces/PlaneSurface.h"
-#include "TrkSurfaces/StraightLineSurface.h"
-#include "TrkSurfaces/Surface.h"
-
-namespace Trk
-{
-SolenoidalIntersector::SolenoidalIntersector (const std::string&	type,
-					      const std::string&	name, 
-					      const IInterface*		parent)
-    :	AthAlgTool			(type, name, parent),
-	m_incidentSvc			("IncidentSvc", name),
-	m_magFieldSvc			("MagField::AtlasFieldSvc/AtlasFieldSvc", name),
-	m_rungeKuttaIntersector		("Trk::RungeKuttaIntersector/RungeKuttaIntersector"),
-	m_cotTheta			(0.),
-	m_currentMax			(0.),
-	m_currentMin			(0.),
-	m_deltaPhiTolerance		(0.01),	// upper limit for small angle approx
-	m_intersectionNumber		(0),
-	m_oneOverSinTheta		(1.),
-	m_pathLength			(0.),
-	m_qOverP			(0.),
-	m_qOverPt			(0.),
-	m_radius			(0.),
-	m_sinTheta			(1.),
-	m_solenoidParametrization	(0),
-	m_surfaceTolerance		(2.0*Gaudi::Units::micrometer),
-	m_validRadius			(0.),
-	m_validZ			(0.),
-	m_countExtrapolations		(0),
-	m_countRKSwitches		(0)
-{
-    declareInterface<Trk::IIntersector>(this);
-    declareProperty("MagFieldSvc",		m_magFieldSvc );
-    declareProperty("RungeKuttaIntersector",	m_rungeKuttaIntersector);
-    declareProperty("SurfaceTolerance",		m_surfaceTolerance);
-}
-
-SolenoidalIntersector::~SolenoidalIntersector (void)
-{}
- 
-StatusCode
-SolenoidalIntersector::initialize()
-{
-    // print name and package version
-    ATH_MSG_INFO( "SolenoidalIntersector::initialize() - package version " << PACKAGE_VERSION );
-
-    if (m_incidentSvc.retrieve().isFailure())
-    {
-	ATH_MSG_FATAL( "Failed to retrieve service " << m_incidentSvc );
-	return StatusCode::FAILURE;
-    }
-    // register to the incident service:
-    // 	BeginEvent needed to ensure the solenoid field parametrization is still valid
-    m_incidentSvc->addListener( this, IncidentType::BeginEvent);
-
-    if (! m_magFieldSvc.empty())
-    {
-	if (m_magFieldSvc.retrieve().isFailure())
-	{
-	    ATH_MSG_FATAL( "Failed to retrieve service " << m_magFieldSvc );
-	    return StatusCode::FAILURE;
-	}
-	else
-	{
-	    ATH_MSG_INFO( "Retrieved service " << m_magFieldSvc );
-	}
-    }
-
-    if (m_rungeKuttaIntersector.retrieve().isFailure())
-    {
-	ATH_MSG_FATAL( "Failed to retrieve tool " << m_rungeKuttaIntersector );
-	return StatusCode::FAILURE;
-    }
-    else
-    {
-	ATH_MSG_INFO( "Retrieved tool " << m_rungeKuttaIntersector );
-    }
-
-    return StatusCode::SUCCESS;
-}
-
-StatusCode
-SolenoidalIntersector::finalize()
-{
-    ATH_MSG_INFO( "finalized after " << m_countExtrapolations << " extrapolations with "
-		  << m_countRKSwitches << " switches to RK integration");
-
-    return StatusCode::SUCCESS;
-}
-
-/** handle for incident service */    
-void
-SolenoidalIntersector::handle(const Incident& inc)
-{
-    // (re)parametrize the solenoidal field whenever necessary at BeginEvent
-    if (inc.type() == IncidentType::BeginEvent )
-    {
-	// intersector invalid when field off
-	if (! m_magFieldSvc->solenoidOn())
-	{
-	    m_currentMax	= 0.;
-	    m_validRadius	= 0.;
-	    m_validZ		= 0.;
-	    return;
-	}
-    
-	if (m_magFieldSvc->solenoidCurrent()	> m_currentMax
-	    || m_magFieldSvc->solenoidCurrent()	< m_currentMin)
-	{
-	    // allow 0.1% fluctuation
-	    m_currentMax	 = 1.001*m_magFieldSvc->solenoidCurrent();
-	    m_currentMin	 = 0.999*m_magFieldSvc->solenoidCurrent();
-	
-	    // instantiate the field parametrisation
-	    SolenoidParametrization::clearInstance();
-	    m_solenoidParametrization	= SolenoidParametrization::instance(&*m_magFieldSvc);
-	
-	    // set limit of validity (cylinder bounds)
-	    if (! m_solenoidParametrization)
-	    {
-		m_validRadius	= 0.;
-		m_validZ	= 0.;
-		ATH_MSG_WARNING(" mag field parametrization fails" );
-		return;
-	    }
-	    m_validRadius	= m_solenoidParametrization->maximumR();
-	    m_validZ		= m_solenoidParametrization->maximumZ();
-	    ATH_MSG_INFO( " SolenoidParametrization  current: " << m_magFieldSvc->solenoidCurrent()
-			  << "  valid radius,Z : " << m_validRadius << ", " << m_validZ);
-
-	    if (msgLvl(MSG::DEBUG)) validationAction();
-	}
-    }
-}	
-
-/**IIntersector interface method for general Surface type */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::intersectSurface(const Surface&		surface,
-					const TrackSurfaceIntersection*	trackIntersection,
-					const double      	qOverP)
-{
-    const PlaneSurface* plane			= dynamic_cast<const PlaneSurface*>(&surface);
-    if (plane)		return intersectPlaneSurface(*plane,trackIntersection,qOverP);
-    
-    const StraightLineSurface* straightLine	= dynamic_cast<const StraightLineSurface*>(&surface);
-    if (straightLine)	return m_rungeKuttaIntersector->approachStraightLineSurface
-			    (*straightLine, trackIntersection, qOverP);
-    
-    const CylinderSurface* cylinder		= dynamic_cast<const CylinderSurface*>(&surface);
-    if (cylinder)	return intersectCylinderSurface(*cylinder,trackIntersection,qOverP);
-
-    const DiscSurface* disc			= dynamic_cast<const DiscSurface*>(&surface);
-    if (disc)		return intersectDiscSurface(*disc,trackIntersection,qOverP);
-
-    const PerigeeSurface* perigee		= dynamic_cast<const PerigeeSurface*>(&surface);
-    if (perigee)	return m_rungeKuttaIntersector->approachPerigeeSurface
-			    (*perigee, trackIntersection, qOverP);
-    
-    ATH_MSG_WARNING( " unrecognized Surface" );
-    return 0;
-}
-	           
-/**IIntersector interface method for specific Surface type : PerigeeSurface */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::approachPerigeeSurface(const PerigeeSurface&	surface,
-					      const TrackSurfaceIntersection*	trackIntersection,
-					      const double      	qOverP)
-{ return m_rungeKuttaIntersector->approachPerigeeSurface(surface, trackIntersection, qOverP); }
-	
-/**IIntersector interface method for specific Surface type : StraightLineSurface */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::approachStraightLineSurface(const StraightLineSurface& surface,
-						   const TrackSurfaceIntersection*	trackIntersection,
-						   const double      	qOverP)
-{ return m_rungeKuttaIntersector->approachStraightLineSurface(surface, trackIntersection, qOverP); }
-              
-/**IIntersector interface method for specific Surface type : CylinderSurface */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::intersectCylinderSurface(const CylinderSurface&	surface,
-						const TrackSurfaceIntersection*	trackIntersection,
-						const double      	qOverP)
-{
-    double endRadius		= surface.globalReferencePoint().perp();
-    if (endRadius > m_validRadius)
-	return m_rungeKuttaIntersector->intersectCylinderSurface(surface, trackIntersection, qOverP);
-    
-    // set member data unless extrapolation from existing parameters
-    setParameters(trackIntersection, qOverP);
-
-    if (std::abs(endRadius -trackIntersection->position().perp()) > m_surfaceTolerance
-	&& ! extrapolateToR(endRadius))			return 0;
-    return intersection(surface);
-}
-
-/**IIntersector interface method for specific Surface type : DiscSurface */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::intersectDiscSurface (const DiscSurface&		surface,
-					     const TrackSurfaceIntersection*	trackIntersection,
-					     const double      		qOverP)
-{
-    double endZ	= surface.center().z();
-    if (std::abs(endZ) > m_validZ)
-	return m_rungeKuttaIntersector->intersectDiscSurface(surface, trackIntersection, qOverP);
-
-    // set member data unless extrapolation from existing parameters
-    setParameters(trackIntersection, qOverP);
-    if (std::abs(endZ -trackIntersection->position().z()) > m_surfaceTolerance
-	&& ! extrapolateToZ(endZ))
-    {
-	return 0;
-    }
-    
-    return intersection(surface);
-}
-
-/**IIntersector interface method for specific Surface type : PlaneSurface */
-const Trk::TrackSurfaceIntersection*
-SolenoidalIntersector::intersectPlaneSurface(const PlaneSurface&	surface,
-					     const TrackSurfaceIntersection*	trackIntersection,
-					     const double      		qOverP)
-{
-    if (std::abs(surface.center().z())	> m_validZ
-    	|| surface.center().perp()	> m_validRadius)
-	return m_rungeKuttaIntersector->intersectPlaneSurface(surface, trackIntersection, qOverP);
-
-    // set member data unless extrapolation from existing parameters
-    setParameters(trackIntersection, qOverP);
-
-    // step until sufficiently near to plane surface
-    // this gives wrong answer!
-    // DistanceSolution solution	= surface.straightLineDistanceEstimate(m_position,m_direction);
-    // if (! solution.signedDistance())						return 0;
-    // double distance		= solution.currentDistance(true);
-
-    int numberSteps	= 0;
-    double dot		= surface.normal().dot(m_direction);
-    double offset	= surface.normal().dot(surface.center() - m_position);
-
-    while (std::abs(offset) > m_surfaceTolerance*std::abs(dot))
-    {
-	// take care if grazing incidence - quit if looper
-	if (std::abs(dot) < 0.0001) 						return 0;
-	double distance	= offset/dot;
-
-	// extrapolate
-	if (m_sinTheta < 0.9)
-	{
-	    if (! extrapolateToZ(m_position.z()+distance*m_direction.z()))	return 0;
-	}
-	else
-	{
-	    if (! extrapolateToR((m_position+distance*m_direction).perp()))	return 0;
-	}
-
-	// check we are getting closer to the plane, switch to RK in case of difficulty
-	dot		= surface.normal().dot(m_direction);
-	offset		= surface.normal().dot(surface.center() - m_position);
-	if (std::abs(offset) > m_surfaceTolerance*std::abs(dot)
-	    && (++numberSteps > 5 || std::abs(offset) > 0.5*std::abs(distance*dot)))
-	{
-	    ++m_countRKSwitches;
-	    ATH_MSG_DEBUG(" switch to RK after " << numberSteps << " steps at offset "
-			 << offset << "   dot " << surface.normal().dot(m_direction));
-	    
-	    return m_rungeKuttaIntersector->intersectPlaneSurface(surface, trackIntersection, qOverP);
-	}
-    };
-
-     return intersection(surface);
-}
-
-/**IIntersector interface method to check validity of parametrization within extrapolation range */
-bool
-SolenoidalIntersector::isValid (Amg::Vector3D startPosition, Amg::Vector3D endPosition) const
-{
-    // check cylinder bounds for valid parametrization
-    if (std::abs(endPosition.z())	< m_validZ
-	&& endPosition.perp()		< m_validRadius
-	&& m_solenoidParametrization->validOrigin(startPosition))
-    {
-	// ATH_MSG_INFO("  choose solenoidal");
-	
-	return true;
-    }
-    
-    // ATH_MSG_INFO("  choose rungeKutta");
-	
-    return false;
-}
-
-/** tabulate parametrization details */ 
-void
-SolenoidalIntersector::validationAction() const
-{
-    // validate parametrization
-    if (m_solenoidParametrization)
-    {
-	for (int ieta = 0; ieta != 27; ++ieta)
-	{
-	    double eta	= 0.05 + 0.1*static_cast<double>(ieta);
-	    m_solenoidParametrization->printParametersForEtaLine(+eta,0.);
-	    m_solenoidParametrization->printParametersForEtaLine(-eta,0.);
-	}
-	for (int ieta = 0; ieta != 27; ++ieta)
-	{
-	    double eta	= 0.05 + 0.1*static_cast<double>(ieta);
-	    m_solenoidParametrization->printResidualForEtaLine(+eta,0.);
-	    m_solenoidParametrization->printResidualForEtaLine(-eta,0.);
-	}
-	m_solenoidParametrization->printFieldIntegrals();
-    }
-}
-
-// private methods
-
-
-bool
-SolenoidalIntersector::extrapolateToR(double 	endR)
-{
-    // ATH_MSG_INFO(" extrapolateToR  endR " << endR << " from " << m_position.z()
-    // 		 << "   r " << m_radius << "  cotTheta " << m_cotTheta);
-    
-    double	fieldComponent	= m_solenoidParametrization->fieldComponent(m_position.z());
-    double	curvature	= fieldComponent*m_qOverPt;
-    double	arcLength     	= linearArcLength(endR);
-    if (std::abs(arcLength*curvature) > m_deltaPhiTolerance)
-    {
-	double radiusOfCurvature	= 1./curvature;
-	double xCentre			= m_position.x() -
-					  radiusOfCurvature*m_direction.y()*m_oneOverSinTheta;
-	double yCentre   		= m_position.y() +
-					  radiusOfCurvature*m_direction.x()*m_oneOverSinTheta;
-	double cosPhi;
-	double sinPhi;
-	arcLength = circularArcLength(endR,
-				      radiusOfCurvature,
-				      xCentre,
-				      yCentre,
-				      m_direction.x() * m_oneOverSinTheta,
-				      m_direction.y() * m_oneOverSinTheta,
-				      cosPhi,
-				      sinPhi);
-	if (std::abs(arcLength*m_cotTheta) < m_surfaceTolerance)
-	{
-	    m_position.x()	=  xCentre + radiusOfCurvature*sinPhi;
-	    m_position.y()	=  yCentre - radiusOfCurvature*cosPhi;
-	    m_position.z()	+= arcLength*m_cotTheta;
-	    m_radius		=  endR;
-	    m_direction.x()	=  cosPhi*m_sinTheta;
-	    m_direction.y()	=  sinPhi*m_sinTheta;
-	    m_pathLength	+= arcLength*m_oneOverSinTheta;
-	    arcLength		=  0.;
-	}
-    }
-		
-    double	deltaZ	= arcLength*m_cotTheta;
-    if (std::abs(deltaZ) < m_surfaceTolerance)	// avoid FPE with constant curvature parabolic approx
-    {
-	double cosPhi	= m_direction.x()*m_oneOverSinTheta;
-	double sinPhi	= m_direction.y()*m_oneOverSinTheta;
-	if (std::abs(arcLength) > m_surfaceTolerance)
-	{
-	    double sinDPhi	= 0.5*arcLength*curvature;
-	    double cosDPhi	= 1. - 0.5*sinDPhi*sinDPhi *
-				  (1.0+0.25*sinDPhi*sinDPhi);
-	    double temp		= cosPhi;
-	    cosPhi 		= temp*cosDPhi - sinPhi*sinDPhi;
-	    sinPhi 		= temp*sinDPhi + sinPhi*cosDPhi;
-	    m_direction.x()	= (cosPhi*cosDPhi - sinPhi*sinDPhi)*m_sinTheta;
-	    m_direction.y()	= (sinPhi*cosDPhi + cosPhi*sinDPhi)*m_sinTheta;
-	}
-		    
-	m_position.x()	+= arcLength*cosPhi;
-	m_position.y()	+= arcLength*sinPhi;
-	m_position.z()	+= arcLength*m_cotTheta;
-	m_radius	=  endR;
-	m_pathLength	+= arcLength*m_oneOverSinTheta;
-    }
-    else
-    {
-	extrapolateToZ(m_position.z() + deltaZ);
-	if (std::abs(endR - m_radius) > m_surfaceTolerance)
-	{
-	    deltaZ	= linearArcLength(endR) * m_cotTheta;
-	    extrapolateToZ(m_position.z() + deltaZ);
-	}
-    }
-
-    return true;
-}
-
-bool
-SolenoidalIntersector::extrapolateToZ(double endZ)
-{
-    double 	firstIntegral	= 0.;
-    double 	secondIntegral	= 0.;
-    m_solenoidParametrization->fieldIntegrals(firstIntegral,
-					      secondIntegral,
-					      m_position.z(),
-					      endZ);
-    // ATH_MSG_INFO(" extrapolateToZ  firstIntegral, secondIntegral " << 1.E6*firstIntegral
-    // 		 << ", " << 1.E6*secondIntegral);
-    double 	DFiMax 		= 0.1;
-    double	cosPhi		= m_direction.x()*m_oneOverSinTheta;
-    double	sinPhi		= m_direction.y()*m_oneOverSinTheta;
-    double	cosBeta;
-    double	sinBeta;
-    double	deltaPhi2	= secondIntegral*m_qOverPt/std::abs(m_cotTheta);
-    if (std::abs(deltaPhi2) < DFiMax)
-    {
-	double	deltaPhi2Squared= deltaPhi2*deltaPhi2;
-	sinBeta      		= 1. - 0.166667*deltaPhi2Squared;
-	cosBeta      		= -0.5*deltaPhi2*(1.-0.083333*deltaPhi2Squared);
-    }
-    else if (2.*std::abs(deltaPhi2) < M_PI)
-    {
-	sinBeta	= std::sin(deltaPhi2) / deltaPhi2;
-	cosBeta	= (std::cos(deltaPhi2) - 1.) / deltaPhi2;
-    }
-    else
-    {
-	return false;
-    }
-    
-    double radialDistance	=  (endZ - m_position.z()) / m_cotTheta;
-    m_position.x()		+= radialDistance*(sinPhi*cosBeta + cosPhi*sinBeta);
-    m_position.y()		+= radialDistance*(sinPhi*sinBeta - cosPhi*cosBeta);
-    m_position.z()		=  endZ;
-    m_radius			=  m_position.perp();
-    m_pathLength		+= radialDistance*m_oneOverSinTheta;
-    
-    double	cosAlpha;
-    double	sinAlpha;
-    double    	deltaPhi1     	=  firstIntegral*m_qOverPt / std::abs(m_cotTheta);
-    if (std::abs(deltaPhi1) < DFiMax)
-    {
-	double	deltaPhi1Squared= deltaPhi1*deltaPhi1;
-	sinAlpha      		= deltaPhi1*(1. - 0.166667*deltaPhi1Squared);
-	cosAlpha      		= 1. - 0.5*deltaPhi1Squared*(1.-0.083333*deltaPhi1Squared);
-    }
-    else
-    {
-	sinAlpha		= std::sin(deltaPhi1);
-	cosAlpha		= std::cos(deltaPhi1);
-    }
-    m_direction.x()	= (cosPhi*cosAlpha - sinPhi*sinAlpha)*m_sinTheta;
-    m_direction.y()	= (sinPhi*cosAlpha + cosPhi*sinAlpha)*m_sinTheta;;
-    return true;
-}
-
-} // end of namespace
+///////////////////////////////////////////////////////////////////
+// SolenoidalIntersector.cxx, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#include "GaudiKernel/SystemOfUnits.h"
+#include "TrkExSolenoidalIntersector/SolenoidalIntersector.h"
+#include "TrkParameters/TrackParameters.h"
+#include "TrkSurfaces/CylinderSurface.h"
+#include "TrkSurfaces/DiscSurface.h"
+#include "TrkSurfaces/PerigeeSurface.h"
+#include "TrkSurfaces/PlaneSurface.h"
+#include "TrkSurfaces/StraightLineSurface.h"
+#include "TrkSurfaces/Surface.h"
+
+namespace Trk
+{
+
+SolenoidalIntersector::Constants::Constants (const SolenoidParametrization& solpar,
+                                             const TrackSurfaceIntersection& trackTrackSurfaceIntersection,
+                                             const double qOverP)
+  : m_sinTheta (trackTrackSurfaceIntersection.direction().perp()),
+    m_oneOverSinTheta (1./m_sinTheta),
+    m_cotTheta (trackTrackSurfaceIntersection.direction().z() * m_oneOverSinTheta),
+    m_qOverPt (qOverP * m_oneOverSinTheta),
+    m_solPar (solpar),
+    m_lastPosition (trackTrackSurfaceIntersection.position()),
+    m_solParams (solpar,
+                 trackTrackSurfaceIntersection.position().perp(),
+                 trackTrackSurfaceIntersection.position().z(),
+                 m_cotTheta)
+{
+}
+
+
+SolenoidalIntersector::SolenoidalIntersector (const std::string&	type,
+					      const std::string&	name, 
+					      const IInterface*		parent)
+    :	base_class			(type, name, parent),
+	m_magFieldSvc			("MagField::AtlasFieldSvc/AtlasFieldSvc", name),
+	m_rungeKuttaIntersector		("Trk::RungeKuttaIntersector/RungeKuttaIntersector"),
+	m_deltaPhiTolerance		(0.01),	// upper limit for small angle approx
+	m_surfaceTolerance		(2.0*Gaudi::Units::micrometer),
+	m_countExtrapolations		(0),
+	m_countRKSwitches		(0)
+{
+    declareInterface<Trk::IIntersector>(this);
+    declareProperty("MagFieldSvc",		m_magFieldSvc );
+    declareProperty("RungeKuttaIntersector",	m_rungeKuttaIntersector);
+    declareProperty("SurfaceTolerance",		m_surfaceTolerance);
+}
+
+SolenoidalIntersector::~SolenoidalIntersector (void)
+{}
+ 
+StatusCode
+SolenoidalIntersector::initialize()
+{
+    // print name and package version
+    ATH_MSG_INFO( "SolenoidalIntersector::initialize() - package version " << PACKAGE_VERSION );
+
+    if (! m_magFieldSvc.empty())
+    {
+	if (m_magFieldSvc.retrieve().isFailure())
+	{
+	    ATH_MSG_FATAL( "Failed to retrieve service " << m_magFieldSvc );
+	    return StatusCode::FAILURE;
+	}
+	else
+	{
+	    ATH_MSG_INFO( "Retrieved service " << m_magFieldSvc );
+	}
+    }
+
+    if (m_rungeKuttaIntersector.retrieve().isFailure())
+    {
+	ATH_MSG_FATAL( "Failed to retrieve tool " << m_rungeKuttaIntersector );
+	return StatusCode::FAILURE;
+    }
+    else
+    {
+	ATH_MSG_INFO( "Retrieved tool " << m_rungeKuttaIntersector );
+    }
+
+    return StatusCode::SUCCESS;
+}
+
+StatusCode
+SolenoidalIntersector::finalize()
+{
+    ATH_MSG_INFO( "finalized after " << m_countExtrapolations << " extrapolations with "
+		  << m_countRKSwitches << " switches to RK integration");
+
+    return StatusCode::SUCCESS;
+}
+
+
+const SolenoidParametrization*
+SolenoidalIntersector::getSolenoidParametrization() const
+{
+  double current = m_magFieldSvc->solenoidCurrent();
+
+  // Check to see if the last one we used is ok.
+  const SolenoidParametrization* lastpar = m_lastSolenoidParametrization.get();
+  if (lastpar && lastpar->currentMatches (current)) {
+    return lastpar;
+  }
+
+  std::lock_guard<std::mutex> lock (m_mutex);
+
+  // Search for a new one, and release the reference count on the old one.
+  const SolenoidParametrization* thispar = nullptr;
+  Parmlist_t::iterator todel = m_solenoidParametrizations.end();
+  for (Parmlist_t::iterator it = m_solenoidParametrizations.begin();
+       it != m_solenoidParametrizations.end() && (lastpar || !thispar);
+       ++it)
+  {
+    if (&it->first == lastpar) {
+      lastpar = nullptr;
+      if (--it->second <= 0) {
+        todel = it;
+      }
+    }
+    else if (!thispar && it->first.currentMatches (current)) {
+      thispar = &it->first;
+      ++it->second;
+    }
+  }
+
+  if (todel != m_solenoidParametrizations.end()) {
+    m_solenoidParametrizations.erase (todel);
+  }
+
+  if (!thispar) {
+    // Didn't find one; make a new one.
+    m_solenoidParametrizations.emplace_back (&*m_magFieldSvc, 1);
+    thispar = &m_solenoidParametrizations.back().first;
+  }
+
+  // Remember which one we used last.
+  m_lastSolenoidParametrization.set (thispar);
+
+  return thispar;
+}
+
+
+/**IIntersector interface method for general Surface type */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::intersectSurface(const Surface&		surface,
+					const TrackSurfaceIntersection*	trackIntersection,
+					const double      	qOverP)
+{
+    const PlaneSurface* plane			= dynamic_cast<const PlaneSurface*>(&surface);
+    if (plane)		return intersectPlaneSurface(*plane,trackIntersection,qOverP);
+    
+    const StraightLineSurface* straightLine	= dynamic_cast<const StraightLineSurface*>(&surface);
+    if (straightLine)	return m_rungeKuttaIntersector->approachStraightLineSurface
+			    (*straightLine, trackIntersection, qOverP);
+    
+    const CylinderSurface* cylinder		= dynamic_cast<const CylinderSurface*>(&surface);
+    if (cylinder)	return intersectCylinderSurface(*cylinder,trackIntersection,qOverP);
+
+    const DiscSurface* disc			= dynamic_cast<const DiscSurface*>(&surface);
+    if (disc)		return intersectDiscSurface(*disc,trackIntersection,qOverP);
+
+    const PerigeeSurface* perigee		= dynamic_cast<const PerigeeSurface*>(&surface);
+    if (perigee)	return m_rungeKuttaIntersector->approachPerigeeSurface
+			    (*perigee, trackIntersection, qOverP);
+    
+    ATH_MSG_WARNING( " unrecognized Surface" );
+    return 0;
+}
+	           
+/**IIntersector interface method for specific Surface type : PerigeeSurface */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::approachPerigeeSurface(const PerigeeSurface&	surface,
+					      const TrackSurfaceIntersection*	trackIntersection,
+					      const double      	qOverP)
+{ return m_rungeKuttaIntersector->approachPerigeeSurface(surface, trackIntersection, qOverP); }
+	
+/**IIntersector interface method for specific Surface type : StraightLineSurface */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::approachStraightLineSurface(const StraightLineSurface& surface,
+						   const TrackSurfaceIntersection*	trackIntersection,
+						   const double      	qOverP)
+{ return m_rungeKuttaIntersector->approachStraightLineSurface(surface, trackIntersection, qOverP); }
+              
+/**IIntersector interface method for specific Surface type : CylinderSurface */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::intersectCylinderSurface(const CylinderSurface&	surface,
+						const TrackSurfaceIntersection*	trackIntersection,
+						const double      	qOverP)
+{
+    const SolenoidParametrization* solenoidParametrization =
+      getSolenoidParametrization();
+
+    double endRadius		= surface.globalReferencePoint().perp();
+    if (!solenoidParametrization || endRadius > solenoidParametrization->maximumR())
+	return m_rungeKuttaIntersector->intersectCylinderSurface(surface, trackIntersection, qOverP);
+
+    Constants* com = nullptr;
+    std::unique_ptr<TrackSurfaceIntersection> isect =
+      newIntersection (*trackIntersection,
+                       *solenoidParametrization,
+                       qOverP,
+                       com);
+    ++m_countExtrapolations;
+
+    double radius2 = isect->position().perp2();
+    if (std::abs(endRadius - sqrt(radius2)) > m_surfaceTolerance
+	&& ! extrapolateToR(*isect, radius2, *com, endRadius))	return 0;
+    return intersection(std::move(isect), *com, surface);
+}
+
+/**IIntersector interface method for specific Surface type : DiscSurface */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::intersectDiscSurface (const DiscSurface&		surface,
+					     const TrackSurfaceIntersection*	trackIntersection,
+					     const double      		qOverP)
+{
+    const SolenoidParametrization* solenoidParametrization =
+      getSolenoidParametrization();
+
+    double endZ	= surface.center().z();
+    if (!solenoidParametrization || std::abs(endZ) > solenoidParametrization->maximumZ())
+	return m_rungeKuttaIntersector->intersectDiscSurface(surface, trackIntersection, qOverP);
+
+    Constants* com = nullptr;
+    std::unique_ptr<TrackSurfaceIntersection> isect =
+      newIntersection (*trackIntersection,
+                       *solenoidParametrization,
+                       qOverP,
+                       com);
+                                                             
+    ++m_countExtrapolations;
+
+    if (std::abs(endZ -trackIntersection->position().z()) > m_surfaceTolerance
+	&& ! extrapolateToZ(*isect, *com, endZ))
+    {
+	return 0;
+    }
+    
+    return intersection(std::move(isect), *com, surface);
+}
+
+/**IIntersector interface method for specific Surface type : PlaneSurface */
+const Trk::TrackSurfaceIntersection*
+SolenoidalIntersector::intersectPlaneSurface(const PlaneSurface&	surface,
+					     const TrackSurfaceIntersection*	trackIntersection,
+					     const double      		qOverP)
+{
+    const SolenoidParametrization* solenoidParametrization =
+      getSolenoidParametrization();
+
+    if (!solenoidParametrization ||
+        std::abs(surface.center().z())	> solenoidParametrization->maximumZ()
+    	|| surface.center().perp()	> solenoidParametrization->maximumR())
+	return m_rungeKuttaIntersector->intersectPlaneSurface(surface, trackIntersection, qOverP);
+
+    Constants* com = nullptr;
+    std::unique_ptr<TrackSurfaceIntersection> isect =
+      newIntersection (*trackIntersection,
+                       *solenoidParametrization,
+                       qOverP,
+                       com);
+    Amg::Vector3D& pos = isect->position();
+    Amg::Vector3D& dir = isect->direction();
+    ++m_countExtrapolations;
+    double radius2 = pos.perp2();
+
+    // step until sufficiently near to plane surface
+    // this gives wrong answer!
+    // DistanceSolution solution	= surface.straightLineDistanceEstimate(pos,dir);
+    // if (! solution.signedDistance())						return 0;
+    // double distance		= solution.currentDistance(true);
+
+    int numberSteps	= 0;
+    double dot		= surface.normal().dot(dir);
+    double offset	= surface.normal().dot(surface.center() - pos);
+
+    while (std::abs(offset) > m_surfaceTolerance*std::abs(dot))
+    {
+	// take care if grazing incidence - quit if looper
+	if (std::abs(dot) < 0.0001) 						return 0;
+	double distance	= offset/dot;
+
+	// extrapolate
+	if (com->m_sinTheta < 0.9)
+	{
+            if (! extrapolateToZ(*isect, *com, pos.z()+distance*dir.z()))	return 0;
+            radius2 = pos.perp2();
+	}
+	else
+	{
+	    if (! extrapolateToR(*isect, radius2,  *com, (pos+distance*dir).perp())) return 0;
+	}
+
+	// check we are getting closer to the plane, switch to RK in case of difficulty
+	dot		= surface.normal().dot(dir);
+	offset		= surface.normal().dot(surface.center() - pos);
+	if (std::abs(offset) > m_surfaceTolerance*std::abs(dot)
+	    && (++numberSteps > 5 || std::abs(offset) > 0.5*std::abs(distance*dot)))
+	{
+	    ++m_countRKSwitches;
+	    ATH_MSG_DEBUG(" switch to RK after " << numberSteps << " steps at offset "
+			 << offset << "   dot " << surface.normal().dot(dir));
+	    
+	    return m_rungeKuttaIntersector->intersectPlaneSurface(surface, trackIntersection, qOverP);
+	}
+    };
+
+    return intersection(std::move(isect), *com, surface);
+}
+
+/**IIntersector interface method to check validity of parametrization within extrapolation range */
+bool
+SolenoidalIntersector::isValid (Amg::Vector3D startPosition, Amg::Vector3D endPosition) const
+{
+    const SolenoidParametrization* solenoidParametrization =
+      getSolenoidParametrization();
+
+    // check cylinder bounds for valid parametrization
+    if (solenoidParametrization &&
+        std::abs(endPosition.z())	< solenoidParametrization->maximumZ()
+	&& endPosition.perp()		< solenoidParametrization->maximumR()
+	&& getSolenoidParametrization()->validOrigin(startPosition))
+    {
+	// ATH_MSG_INFO("  choose solenoidal");
+	
+	return true;
+    }
+    
+    // ATH_MSG_INFO("  choose rungeKutta");
+	
+    return false;
+}
+
+/** tabulate parametrization details */ 
+void
+SolenoidalIntersector::validationAction() const
+{
+    const SolenoidParametrization* solenoidParametrization =
+      getSolenoidParametrization();
+
+    // validate parametrization
+    if (solenoidParametrization)
+    {
+	for (int ieta = 0; ieta != 27; ++ieta)
+	{
+	    double eta	= 0.05 + 0.1*static_cast<double>(ieta);
+	    solenoidParametrization->printParametersForEtaLine(+eta,0.);
+	    solenoidParametrization->printParametersForEtaLine(-eta,0.);
+	}
+	for (int ieta = 0; ieta != 27; ++ieta)
+	{
+	    double eta	= 0.05 + 0.1*static_cast<double>(ieta);
+	    solenoidParametrization->printResidualForEtaLine(+eta,0.);
+	    solenoidParametrization->printResidualForEtaLine(-eta,0.);
+	}
+	solenoidParametrization->printFieldIntegrals();
+    }
+}
+
+// private methods
+
+
+bool
+SolenoidalIntersector::extrapolateToR(TrackSurfaceIntersection& isect,
+                                      double& radius2,
+                                      Constants&        com,
+                                      const double 	endR) const
+{
+    Amg::Vector3D& pos = isect.position();
+    Amg::Vector3D& dir = isect.direction();
+
+    // ATH_MSG_INFO(" extrapolateToR  endR " << endR << " from " << pos.z()
+    // 		 << "   r " << sqrt(radius2) << "  cotTheta " << com.m_cotTheta);
+    
+    double	fieldComponent	= com.m_solPar.fieldComponent(pos.z(), com.m_solParams);
+    double	curvature	= fieldComponent*com.m_qOverPt;
+    double	arcLength     	= linearArcLength(isect, com, radius2, endR);
+    if (std::abs(arcLength*curvature) > m_deltaPhiTolerance)
+    {
+	double radiusOfCurvature	= 1./curvature;
+	double xCentre			= pos.x() -
+					  radiusOfCurvature*dir.y()*com.m_oneOverSinTheta;
+	double yCentre   		= pos.y() +
+					  radiusOfCurvature*dir.x()*com.m_oneOverSinTheta;
+	double cosPhi;
+	double sinPhi;
+	arcLength = circularArcLength(endR,
+				      radiusOfCurvature,
+				      xCentre,
+				      yCentre,
+				      dir.x() * com.m_oneOverSinTheta,
+				      dir.y() * com.m_oneOverSinTheta,
+				      cosPhi,
+				      sinPhi);
+	if (std::abs(arcLength*com.m_cotTheta) < m_surfaceTolerance)
+	{
+	    pos.x()		=  xCentre + radiusOfCurvature*sinPhi;
+	    pos.y()		=  yCentre - radiusOfCurvature*cosPhi;
+	    pos.z()		+= arcLength*com.m_cotTheta;
+	    radius2		=  endR*endR;
+	    dir.x()		=  cosPhi*com.m_sinTheta;
+	    dir.y()		=  sinPhi*com.m_sinTheta;
+            isect.pathlength()  += arcLength*com.m_oneOverSinTheta;
+	    arcLength		=  0.;
+	}
+    }
+		
+    double	deltaZ	= arcLength*com.m_cotTheta;
+    if (std::abs(deltaZ) < m_surfaceTolerance)	// avoid FPE with constant curvature parabolic approx
+    {
+	double cosPhi	= dir.x()*com.m_oneOverSinTheta;
+	double sinPhi	= dir.y()*com.m_oneOverSinTheta;
+	if (std::abs(arcLength) > m_surfaceTolerance)
+	{
+	    double sinDPhi	= 0.5*arcLength*curvature;
+	    double cosDPhi	= 1. - 0.5*sinDPhi*sinDPhi *
+				  (1.0+0.25*sinDPhi*sinDPhi);
+	    double temp		= cosPhi;
+	    cosPhi 		= temp*cosDPhi - sinPhi*sinDPhi;
+	    sinPhi 		= temp*sinDPhi + sinPhi*cosDPhi;
+	    dir.x()		= (cosPhi*cosDPhi - sinPhi*sinDPhi)*com.m_sinTheta;
+	    dir.y()		= (sinPhi*cosDPhi + cosPhi*sinDPhi)*com.m_sinTheta;
+	}
+		    
+	pos.x()		+= arcLength*cosPhi;
+	pos.y()		+= arcLength*sinPhi;
+	pos.z()		+= arcLength*com.m_cotTheta;
+	radius2		=  endR*endR;
+        isect.pathlength() += arcLength*com.m_oneOverSinTheta;
+    }
+    else
+    {
+        extrapolateToZ(isect, com, pos.z() + deltaZ);
+        radius2 = pos.perp2();
+	if (std::abs(endR - sqrt(radius2)) > m_surfaceTolerance)
+	{
+            deltaZ	= linearArcLength(isect, com, radius2, endR) * com.m_cotTheta;
+	    extrapolateToZ(isect, com, pos.z() + deltaZ);
+            radius2 = pos.perp2();
+	}
+    }
+
+    return true;
+}
+
+bool
+SolenoidalIntersector::extrapolateToZ(TrackSurfaceIntersection& isect,
+                                      Constants&   com,
+                                      const double endZ) const
+{
+    Amg::Vector3D& pos = isect.position();
+    Amg::Vector3D& dir = isect.direction();
+
+    double 	firstIntegral	= 0.;
+    double 	secondIntegral	= 0.;
+    com.m_solPar.fieldIntegrals(firstIntegral,
+                                secondIntegral,
+                                pos.z(),
+                                endZ,
+                                com.m_solParams);
+    // ATH_MSG_INFO(" extrapolateToZ  firstIntegral, secondIntegral " << 1.E6*firstIntegral
+    // 		 << ", " << 1.E6*secondIntegral);
+    double 	DFiMax 		= 0.1;
+    double	cosPhi		= dir.x()*com.m_oneOverSinTheta;
+    double	sinPhi		= dir.y()*com.m_oneOverSinTheta;
+    double	cosBeta;
+    double	sinBeta;
+    double	deltaPhi2	= secondIntegral*com.m_qOverPt/std::abs(com.m_cotTheta);
+    if (std::abs(deltaPhi2) < DFiMax)
+    {
+	double	deltaPhi2Squared= deltaPhi2*deltaPhi2;
+	sinBeta      		= 1. - 0.166667*deltaPhi2Squared;
+	cosBeta      		= -0.5*deltaPhi2*(1.-0.083333*deltaPhi2Squared);
+    }
+    else if (2.*std::abs(deltaPhi2) < M_PI)
+    {
+	sinBeta	= std::sin(deltaPhi2) / deltaPhi2;
+	cosBeta	= (std::cos(deltaPhi2) - 1.) / deltaPhi2;
+    }
+    else
+    {
+	return false;
+    }
+    
+    double radialDistance	=  (endZ - pos.z()) / com.m_cotTheta;
+    pos.x()			+= radialDistance*(sinPhi*cosBeta + cosPhi*sinBeta);
+    pos.y()			+= radialDistance*(sinPhi*sinBeta - cosPhi*cosBeta);
+    pos.z()			=  endZ;
+    isect.pathlength()		+= radialDistance*com.m_oneOverSinTheta;
+    
+    double	cosAlpha;
+    double	sinAlpha;
+    double    	deltaPhi1     	=  firstIntegral*com.m_qOverPt / std::abs(com.m_cotTheta);
+    if (std::abs(deltaPhi1) < DFiMax)
+    {
+	double	deltaPhi1Squared= deltaPhi1*deltaPhi1;
+	sinAlpha      		= deltaPhi1*(1. - 0.166667*deltaPhi1Squared);
+	cosAlpha      		= 1. - 0.5*deltaPhi1Squared*(1.-0.083333*deltaPhi1Squared);
+    }
+    else
+    {
+	sinAlpha		= std::sin(deltaPhi1);
+	cosAlpha		= std::cos(deltaPhi1);
+    }
+    dir.x()		= (cosPhi*cosAlpha - sinPhi*sinAlpha)*com.m_sinTheta;
+    dir.y()		= (sinPhi*cosAlpha + cosPhi*sinAlpha)*com.m_sinTheta;
+    return true;
+}
+
+
+std::unique_ptr<TrackSurfaceIntersection>
+SolenoidalIntersector::newIntersection (const TrackSurfaceIntersection& isect,
+                                        const SolenoidParametrization& solpar,
+                                        const double qOverP,
+                                        Constants*& com) const
+{
+  const TrackSurfaceIntersection::IIntersectionCache* oldCache = isect.cache();
+  std::unique_ptr<Constants> cache;
+  const Amg::Vector3D* lastPosition = nullptr;
+  if (oldCache && typeid(*oldCache) == typeid(Constants)) {
+    cache = std::make_unique<Constants> (*static_cast<const Constants*> (oldCache));
+    lastPosition = &cache->m_lastPosition;
+  }
+  else {
+    cache = std::make_unique<Constants> (solpar, isect, qOverP);
+  }
+
+  com = cache.get();
+  auto newIsect = std::make_unique<TrackSurfaceIntersection> (isect,
+                                                              std::move (cache));
+  if (lastPosition) {
+    newIsect->position() = *lastPosition;
+  }
+  return newIsect;
+}
+
+
+} // end of namespace
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx
index 305f0173d80e76b6190b54109fe5c47f84100bd0..24348ab7dbe290620b4e3864a7c4c7705419c04a 100644
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidParametrization_test.cxx
@@ -32,9 +32,7 @@ void test1 (Trk::SolenoidParametrization& sol)
 {
   std::cout << "test1\n";
 
-  assert (sol.hasParametrization());
-  sol.setParameters (/*r=*/30*cm, /*z=*/123*cm, /*cotTheta=*/1);
-  assert (sol.hasParametrization());
+  Trk::SolenoidParametrization::Parameters parms (sol, /*r=*/30*cm, /*z=*/123*cm, /*cotTheta=*/1);
 
   assert( sol.validOrigin (Amg::Vector3D ({10, 10, 10})) );
   assert( !sol.validOrigin (Amg::Vector3D ({50, 10, 10})) );
@@ -44,14 +42,14 @@ void test1 (Trk::SolenoidParametrization& sol)
   assert( Athena_test::isEqual (sol.maximumZ(), 2150) );
   assert( Athena_test::isEqual (sol.centralField(), -0.598746) );
 
-  assert( Athena_test::isEqual (sol.fieldComponent (123*cm), -0.592178) );
+  assert( Athena_test::isEqual (sol.fieldComponent (123*cm, parms), -0.592178) );
   assert( Athena_test::isEqual (sol.fieldComponent (30*cm, 123*cm, 1),
                                 -0.551903) );
 
   double firstIntegral = 0;
   double secondIntegral = 0;
   sol.fieldIntegrals (firstIntegral, secondIntegral,
-                      100*cm, 150*cm);
+                      100*cm, 150*cm, parms);
   assert( Athena_test::isEqual (firstIntegral, -295.526) );
   assert( Athena_test::isEqual (secondIntegral, -296.768) );
 }
@@ -66,10 +64,8 @@ int main()
   Incident inc_br ("test", IncidentType::BeginRun);
   dynamic_cast<IIncidentListener*>(&*field)->handle (inc_br);
 
-  Trk::SolenoidParametrization* sol =
-    Trk::SolenoidParametrization::instance (&*field);
-
-  test1 (*sol);
+  Trk::SolenoidParametrization sol (&*field);
+  test1 (sol);
   
   return 0;
 }
diff --git a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx
index 8e972966b1d0fa8becfd881baad5c031308e84d3..b505fe9d4581da7428311dc74e378ae77d673592 100644
--- a/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx
+++ b/Tracking/TrkExtrapolation/TrkExSolenoidalIntersector/test/SolenoidalIntersector_test.cxx
@@ -290,8 +290,6 @@ int main()
   ServiceHandle<MagField::IMagFieldSvc> field ("MagField::AtlasFieldSvc/AtlasFieldSvc", "test");
   Incident inc_br ("test", IncidentType::BeginRun);
   dynamic_cast<IIncidentListener*>(&*field)->handle (inc_br);
-  Incident inc_be ("test", IncidentType::BeginEvent);
-  dynamic_cast<IIncidentListener*>(&*tool)->handle (inc_be);
   
   test_plane (*tool);
   test_line (*tool);
diff --git a/Trigger/TrigFTK/TrigFTKByteStream/TrigFTKByteStream/TrigFTKByteStreamCnv.h b/Trigger/TrigFTK/TrigFTKByteStream/TrigFTKByteStream/TrigFTKByteStreamCnv.h
index 796c429292ceec702e36104d84c3a71175398bb2..34e22a0d94a5a60e4a879916e26e1c91f85520a9 100755
--- a/Trigger/TrigFTK/TrigFTKByteStream/TrigFTKByteStream/TrigFTKByteStreamCnv.h
+++ b/Trigger/TrigFTK/TrigFTKByteStream/TrigFTKByteStream/TrigFTKByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TrigTrigFTKByteStreamCnv_h
@@ -12,9 +12,6 @@
  *
  * @brief  Gaudi bytestream Converter for the TrigFTK class
  *
- *
- * File and Version Information:
- * $Id:
  **********************************************************************************/
 
 #include "GaudiKernel/Converter.h"
@@ -24,16 +21,10 @@
 
 #include "TrigFTKByteStream/TrigFTKByteStreamTool.h"
 
-//#include <string>
-
 // forward declarations
 class IROBDataProviderSvc;
 class IByteStreamEventAccess;
 
-
-// Externals
-extern unsigned char ByteStream_StorageType;
-
 namespace FTK {
 
   class FTKByteStreamTool;
@@ -79,7 +70,7 @@ namespace FTK {
     virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr); //!< create bytestream from RDOs (TrigFTK)
 
     // Storage type and class ID
-    static unsigned char storageType()     { return ByteStream_StorageType; } //!< used for the converter
+    static unsigned char storageType()     { return ByteStreamAddress::storageType(); } //!< used for the converter
     static const CLID& classID(); //!< CLID
 
     long repSvcType() const { return i_repSvcType(); } //!< return repSvcType
diff --git a/Trigger/TrigFTK/TrigFTKByteStream/src/TrigFTKByteStreamCnv.cxx b/Trigger/TrigFTK/TrigFTKByteStream/src/TrigFTKByteStreamCnv.cxx
index 82c13c99b19e84cbdb2627244eadc8a89d181c55..6a5ccd81255d61a46bce4af51a723d7746de0cf5 100755
--- a/Trigger/TrigFTK/TrigFTKByteStream/src/TrigFTKByteStreamCnv.cxx
+++ b/Trigger/TrigFTK/TrigFTKByteStream/src/TrigFTKByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "ByteStreamData/ROBData.h"
@@ -22,7 +22,7 @@
 
 //------------------------------------------------------------------------------
 FTK::TrigFTKByteStreamCnv::TrigFTKByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc),
+  Converter(storageType(), classID(),svcloc),
   m_log(0),
   m_tool("FTK::TrigFTKByteStreamTool"),
   m_ByteStreamEventAccess("ByteStreamCnvSvc", "TrigFTKByteStreamCnv"),
diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetEtHypoTool.py b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetEtHypoTool.py
index fb9689679cae1c158c052358bc6bae2c1bde743f..3f849855c65d286a471e1f99c21169e9b38795cc 100644
--- a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetEtHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetEtHypoTool.py
@@ -9,26 +9,29 @@ from AthenaCommon.Constants import VERBOSE,DEBUG
 
 ####################################################################################################
 
-def TrigBjetEtHypoToolFromName_j( name, conf ):
+def TrigBjetEtHypoToolFromDict_j( chainDict ):
+
     from AthenaCommon.Constants import DEBUG
     """ set the name of the EtHypoTool (name=chain) and figure out the threshold and selection from conf """
+    name    = chainDict['chainName']
+    chainPart = chainDict['chainParts'][0]
     
-    default_conf = { 'threshold' : '0',
-                     'multiplicity' : '1',
-                     'gscThreshold' : '0',
-                     'bTag' : 'offperf',
-                     'bConfig' : 'EF',
-                     'minEta' : '0',
-                     'maxEta' : '320',
-                     'L1' : None }
+    conf_dict = { 'threshold' : chainPart['threshold'],
+                  'multiplicity' : '1',
+                  'gscThreshold' : '0',
+                  'bTag' : 'offperf',
+                  'bConfig' : 'EF',
+                  'minEta' : chainPart['etaRange'].split('eta')[0],
+                  'maxEta' : chainPart['etaRange'].split('eta')[1],
+                  'L1' : None }
     
-    chain = conf
-    match = re_Bjet.match( chain )
-    conf_dict = match.groupdict()
+    # chain = conf
+    # match = re_Bjet.match( chain )
+    # conf_dict = match.groupdict()
 
-    for k, v in default_conf.items():
-        if k not in conf_dict: conf_dict[k] = v
-        if conf_dict[k] == None: conf_dict[k] = v
+    # for k, v in default_conf.items():
+    #     if k not in conf_dict: conf_dict[k] = v
+    #     if conf_dict[k] == None: conf_dict[k] = v
 
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoTool        
     tool = TrigBjetEtHypoTool( name )
@@ -41,26 +44,40 @@ def TrigBjetEtHypoToolFromName_j( name, conf ):
     print "TrigBjetEtHypoToolFromName_j: name = %s, cut_j = %s "%(name,tool.EtThreshold)
     return tool
 
-def TrigBjetEtHypoToolFromName_gsc( name, conf ):
+def TrigBjetEtHypoToolFromName_j( name, conf ):
+    from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import DictFromChainName   
+    
+    decoder = DictFromChainName()        
+    decodedDict = decoder.analyseShortName(conf, [], "") # no L1 info        
+    decodedDict['chainName'] = name # override
+	
+    return TrigBjetEtHypoToolFromDict_j( decodedDict )
+    
+
+def TrigBjetEtHypoToolFromDict_gsc( chainDict ):
     from AthenaCommon.Constants import DEBUG
     """ set the name of the EtHypoTool (name=chain) and figure out the threshold and selection from conf """
+
+    name    = chainDict['chainName']
+    chainPart = chainDict['chainParts'][0]
+
     
-    default_conf = { 'threshold' : '0',
-                     'multiplicity' : '1',
-                     'gscThreshold' : '0',
-                     'bTag' : 'offperf',
-                     'bConfig' : 'EF',
-                     'minEta' : '0',
-                     'maxEta' : '320',
-                     'L1' : None }
+    conf_dict = { 'threshold' : '0',
+                  'multiplicity' : '1',
+                  'gscThreshold' : '0' if 'gscThreshold' not in chainPart else chainPart['gscThreshold'].replace('gsc',''),
+                  'bTag' : 'offperf',
+                  'bConfig' : 'EF',
+                  'minEta' : chainPart['etaRange'].split('eta')[0],
+                  'maxEta' : chainPart['etaRange'].split('eta')[1],
+                  'L1' : None }
     
-    chain = conf
-    match = re_Bjet.match( chain )
-    conf_dict = match.groupdict()
+    # chain = conf
+    # match = re_Bjet.match( chain )
+    # conf_dict = match.groupdict()
 
-    for k, v in default_conf.items():
-        if k not in conf_dict: conf_dict[k] = v
-        if conf_dict[k] == None: conf_dict[k] = v
+    # for k, v in default_conf.items():
+    #     if k not in conf_dict: conf_dict[k] = v
+    #     if conf_dict[k] == None: conf_dict[k] = v
 
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoTool        
     tool = TrigBjetEtHypoTool( name )
@@ -72,6 +89,16 @@ def TrigBjetEtHypoToolFromName_gsc( name, conf ):
 
     print "TrigBjetEtHypoToolFromName_gsc: name = %s, cut_j = %s "%(name,tool.EtThreshold)
     return tool
+
+def TrigBjetEtHypoToolFromName_gsc( name, conf ):
+    from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import DictFromChainName   
+    
+    decoder = DictFromChainName()        
+    decodedDict = decoder.analyseShortName(conf, [], "") # no L1 info        
+    decodedDict['chainName'] = name # override
+
+    return TrigBjetEtHypoToolFromDict_gsc( decodedDict )
+    
     
 ####################################################################################################
 
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigL2CaloHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigL2CaloHypoTool.py
index 9f9bf2d3898e05009f4d13952f87b0b56638d291..188fa526cce207224a3b580c9c01f176751d13f1 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigL2CaloHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigL2CaloHypoTool.py
@@ -78,7 +78,7 @@ def _IncTool(name, threshold, sel):
         tool.CARCOREthr     = same( -9999. ) 
         tool.CAERATIOthr    = same( -9999. )
 
-    elif sel == "etcut":
+    elif "etcut" in sel: # stcut is part of the name, it can as well be etcut1step (test chains)
         tool.ETthr          = same( ( float( threshold ) -  3 )*GeV ) 
         # No other cuts applied
         tool.dETACLUSTERthr = 9999.
@@ -155,20 +155,23 @@ def TrigL2CaloHypoToolFromName( name, conf ):
 if __name__ == "__main__":    
     from TriggerJobOpts.TriggerFlags import TriggerFlags
     TriggerFlags.enableMonitoring=['Validation']
-    t = TrigL2CaloHypoToolFromName( "HLT_e10_nocut", "HLT_e10_nocut" )
-    assert t, "cant configure NoCut"    
+    # t = TrigL2CaloHypoToolFromName( "HLT_e10_nocut", "HLT_e10_nocut" )
+    # assert t, "cant configure NoCut"    
+    # not possible after recent trimming in SignatureDict, will be restored
     #print t
 
     t = TrigL2CaloHypoToolFromName( "HLT_e10_etcut","HLT_e10_etcut" )
     assert t, "cant configure EtCut"
     print t
 
-    t  = TrigL2CaloHypoToolFromName( "HLT_e10_tight", "HLT_e10_tight" )
-    assert t, "cant configure rel selection - tight"
+    # t  = TrigL2CaloHypoToolFromName( "HLT_e10_tight", "HLT_e10_tight" )
+    # assert t, "cant configure rel selection - tight"
+    # not possible after recent trimming in SignatureDict, will be restored
     #print t    
 
-    t  = TrigL2CaloHypoToolFromName( "HLT_e10_perf", "HLT_e10_perf" )
-    assert t, "cant configure rel selection - perf"
+    # t  = TrigL2CaloHypoToolFromName( "HLT_e10_perf", "HLT_e10_perf" )
+    # assert t, "cant configure rel selection - perf"
+    # not possible after recent trimming in SignatureDict, will be restored
     #print t    
 
     t = TrigL2CaloHypoToolFromName( "HLT_2e5_etcut", "HLT_2e5_etcut" )
diff --git a/Trigger/TrigHypothesis/TrigMissingETHypo/TrigMissingETHypo/ITrigMissingETHypoToolMT.h b/Trigger/TrigHypothesis/TrigMissingETHypo/TrigMissingETHypo/ITrigMissingETHypoToolMT.h
index 4f031b271de4c36ac98ce66a514573a5c2a3b1e9..2a3a5dda8c0473550691e01b880c8064a4ea553c 100644
--- a/Trigger/TrigHypothesis/TrigMissingETHypo/TrigMissingETHypo/ITrigMissingETHypoToolMT.h
+++ b/Trigger/TrigHypothesis/TrigMissingETHypo/TrigMissingETHypo/ITrigMissingETHypoToolMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGMISSINGET_ITRIGMISSINGETHYPOTOOLMT_H
@@ -11,9 +11,6 @@
 #include "DecisionHandling/HLTIdentifier.h"
 
 
-using TrigCompositeUtils::DecisionID;
-
-
 class ITrigMissingETHypoToolMT : virtual public::IAlgTool {
     
 public:
diff --git a/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigMissingETHypoAlgMT.h b/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigMissingETHypoAlgMT.h
index 1c699b0b0ce81c782f6fb6577536ed52d37c9ec2..7fabfe2491eec618f5ea16fcba913fd7e3d93dfd 100644
--- a/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigMissingETHypoAlgMT.h
+++ b/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigMissingETHypoAlgMT.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 #ifndef TRIGMISSINGETHYPO_TRIGMISSINGETHYPOALGMT_H
 #define TRIGMISSINGETHYPO_TRIGMISSINGETHYPOALGMT_H
@@ -14,8 +14,6 @@
 #include "TrigMissingETHypo/ITrigMissingETHypoToolMT.h"
 #include "xAODTrigMissingET/TrigMissingETContainer.h"
 
-using TrigCompositeUtils::DecisionContainer;
-
 /**
  * @class TrigMissingETHypoAlgMT
  * @brief Implements MET selection for the HLT framework
@@ -36,7 +34,7 @@ class TrigMissingETHypoAlgMT : public ::HypoBase {
   // TODO: Consider taking muonContainer etc in case they are needed in future.
   StatusCode decide(const xAOD::TrigMissingETContainer*,
                     TrigCompositeUtils::DecisionContainer* newDecisions,
-                    const DecisionContainer* previousDecisions
+                    const TrigCompositeUtils::DecisionContainer* previousDecisions
         ) const;
 
   ToolHandleArray<ITrigMissingETHypoToolMT> m_hypoTools {
diff --git a/Trigger/TrigHypothesis/TrigTauHypo/python/TrigL2TauHypoTool.py b/Trigger/TrigHypothesis/TrigTauHypo/python/TrigL2TauHypoTool.py
index fff2b2041718f4e111969ebdc88b655b9bddcf96..94cdc988aeaba1a661baca411ab5b8dc628cbe0d 100644
--- a/Trigger/TrigHypothesis/TrigTauHypo/python/TrigL2TauHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigTauHypo/python/TrigL2TauHypoTool.py
@@ -1,14 +1,18 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
-def TrigTauHypoProvider( name, conf ):
-    part='calo'
-    threshold='25'
-    criteria='medium1'
-    strategy='tracktwo'
+def TrigL2TauHypoToolFromDict( chainDict ):
+
+    name = chainDict['chainName']
+    chainPart = chainDict['chainParts'][0]
 
+    part='calo'
+    threshold='25' # chainPart['threshold'] else not quite testing anything, leaving to experts
+    criteria= 'medium1' # likely chainPart['selection']
+    strategy='tracktwo' # do not know which chain property maps here, experts need to look
     print "TrigL2TauHypoTool: name = ", name
 
     # Simple implementation of 2015 pre-selection
-    currentHypoKey = 'l2'+part+'_tau'+threshold+'_'+criteria+'_'+strategy
+    #currentHypoKey = 'l2'+part+'_tau'+threshold+'_'+criteria+'_'+strategy
 
     # Re-define the calo part using the generic hypo
     if part == 'calo':
@@ -31,3 +35,16 @@ def TrigTauHypoProvider( name, conf ):
        currentHypo.Formulas = theFormulas
 
     return currentHypo
+
+
+def TrigTauHypoProvider( name, conf ):
+    from AthenaCommon.Constants import DEBUG
+    """ Configure a b-jet hypo tool from chain name. """
+
+    from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import DictFromChainName
+
+    decoder = DictFromChainName()
+    decodedDict = decoder.analyseShortName(conf, [], "") # no L1 info
+    decodedDict['chainName'] = name # override
+
+    return TrigL2TauHypoToolFromDict( decodedDict )
diff --git a/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx b/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
index 34e8daff94ef8b8512f7772a1db49870f88b440e..9b121848d24b869fdaa2590d3790890f12822916 100644
--- a/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
+++ b/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
@@ -122,7 +122,13 @@ StatusCode InputMakerBase::debugPrintOut(const EventContext& context, const std:
   for ( auto inputKey: decisionInputs() ) {
     auto inputHandle = SG::makeHandle( inputKey, context );
     ATH_MSG_DEBUG(" " << inputKey.key() << " " << (inputHandle.isValid()? "valid": "not valid" ) );
-    if (inputHandle.isValid()) validInput++;
+    if (inputHandle.isValid()) {
+      if (inputHandle->size() > 0) {
+        validInput++;
+      } else {
+        ATH_MSG_DEBUG("   " << inputKey.key() << " actually NOT valid due to size() == 0");
+      }
+    }
   }
   size_t validOutput=0;
   ATH_MSG_DEBUG( "number of implicit ReadHandles for input decisions is " << decisionInputs().size() << ", " << validInput << " are valid" );
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.h b/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.h
index a503fd99c27fa95eed128335db5b6fa482922a78..acd3d26850196d06f64bb1465ff7c792e3c3be8f 100755
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.h
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TrigHLTResultByteStreamCnv_h
@@ -16,7 +16,6 @@
  *
  *
  * File and Version Information:
- * $Id: HLTResultByteStreamCnv.h,v 1.4 2009-02-26 16:29:25 tbold Exp $
  **********************************************************************************/
 
 #include <string>
@@ -38,9 +37,6 @@ class IAddressCreator;
 class MsgStream;
 
 
-// Externals
-extern unsigned char ByteStream_StorageType;
-
 namespace HLT {
 
   class HLTResultByteStreamTool;
@@ -85,8 +81,7 @@ namespace HLT {
     virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); //!< create RDO (HLTResult) from bytestream
     virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr); //!< create bytestream from RDOs (HLTResult)
 
-    // Storage type and class ID
-    static unsigned char storageType()     { return ByteStream_StorageType; } //!< used for the converter
+    static long storageType();    //!< storageType
     static const CLID& classID(); //!< CLID
 
     long repSvcType() const { return i_repSvcType(); } //!< return repSvcType
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.icc b/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.icc
deleted file mode 100755
index da5df67e347bcb8f7cee62f7e8c3544d8d440112..0000000000000000000000000000000000000000
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultByteStreamCnv.icc
+++ /dev/null
@@ -1,176 +0,0 @@
-// -*- c++ -*-
-
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#include "TrigHLTResultByteStream/HLTResultByteStreamTool.h"
-#include "TrigHLTResultByteStream/HLTSrcIdMap.h"
-
-#include "ByteStreamCnvSvcBase/ByteStreamAddressL1R.h"
-#include "ByteStreamData/RawEvent.h"
-//#include "eformat/RawMemoryFragment.h"
-//#include "eformat/RawMemorySimpleFragment.h"
-
-#include "GaudiKernel/MsgStream.h"
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/DataObject.h"
-#include "GaudiKernel/IRegistry.h"
-
-#include "TrigSteeringEvent/HLTResult.h"
-
-#include "StoreGate/StoreGate.h"
-//#include "StoreGate/tools/ClassID_traits.h"
-#include "AthenaKernel/CLASS_DEF.h"
-
-// Tool
-#include "GaudiKernel/IToolSvc.h"
-
-#include <map>
-
-/**
-    Constructor
-*/
-template <class ROBF>
-HLT::HLTResultByteStreamCnv<ROBF>::HLTResultByteStreamCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc)
-{
-}
-
-/**
-   CLID
-*/
-template <class ROBF>
-const CLID& HLT::HLTResultByteStreamCnv<ROBF>::classID(){
-return ClassID_traits<HLTResult>::ID() ;
-}
-
-
-/**
-    Init method gets all necessary services etc.
-*/
-template <class ROBF>
-StatusCode HLT::HLTResultByteStreamCnv<ROBF>::initialize()
-{
-   StatusCode sc = Converter::initialize();
-   if(StatusCode::SUCCESS!=sc)
-   {
-    return sc;
-   }
-
-   m_log = new MsgStream(msgSvc(), "HLTResultByteStreamCnv");
-   (*m_log) << MSG::DEBUG<< " initialize " <<endmsg;
-
-   // Check ByteStreamCnvSvc
-   IService* svc ;
-   sc = serviceLocator()->getService("ByteStreamCnvSvc", svc);
-   if(sc != StatusCode::SUCCESS ) {
-     (*m_log)<<MSG::ERROR << " HLTResultByteStreamCnv: Can't get ByteStreamCnvSvc " <<endmsg;
-     return sc ;
-   }
-
-/*
-   m_eventAccess = dynamic_cast<IByteStreamEventAccess*> (svc);
-   if(m_eventAccess == 0 ) {
-     (*m_log)<<MSG::ERROR<< " HLTResultByteStreamCnv: Can't cast to IByteStreamEventAccess " <<endmsg;
-     return StatusCode::FAILURE ;
-   }
-*/
-
-
-   //IByteStreamEventAccess* m_eventAccess ;
-   sc = service("ByteStreamCnvSvc", m_eventAccess);
-   if(m_eventAccess==0){
-     (*m_log)<<MSG::ERROR<< "  Cant cast to  IByteStreamEventAccess " <<endmsg;
-     return StatusCode::FAILURE ;
-   }
-
-
-   /* retrieve Tool */
-
-   IToolSvc* toolSvc;
-   if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-     (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-     return StatusCode::FAILURE;
-   }
-
-   std::string toolType = "HLTResultByteStreamTool" ;
-   if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-   {
-     (*m_log) << MSG::ERROR << " Can't get ByteStreamTool " << endmsg;
-     return StatusCode::FAILURE;
-   }
-
-   return StatusCode::SUCCESS;
-}
-
-
-/**
-    Finalize method gets all necessary services etc.
-*/
-template <class ROBF>
-StatusCode HLT::HLTResultByteStreamCnv<ROBF>::finalize()
-{
-  delete m_log;
-  return StatusCode::SUCCESS;
-}
-
-/**
-   createObj should create the RDO from bytestream.
- */
-template <class ROBF>
-StatusCode
-HLT::HLTResultByteStreamCnv<ROBF>::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
-{
-
-
-  ByteStreamAddressL1R *pAddrL2;
-  pAddrL2 = dynamic_cast<ByteStreamAddressL1R*>(pAddr);
-  if(!pAddrL2) {
-    (*m_log) << MSG::ERROR << " Cannot cast to ByteStreamAddress " << endmsg ;
-    return StatusCode::FAILURE;
-  }
-
-  //HLTResult* result ;
-  HLTResult* result=new HLTResult();
-
-//  const ROBF* rob = (const ROBF*) pAddrL2->getPointer();
-  const ROBF* rob =  pAddrL2->getPointer();
-
-  // Convert to Object
-  m_tool->convert(rob, result, m_log);
-
-  (*m_log) << MSG::DEBUG<<" Created Objects   "<< *(pAddrL2->par())<<endmsg;
-
-  pObj = StoreGateSvc::asStorable( result ) ;
-  return StatusCode::SUCCESS;
-
-}
-
-/**
-   createRep should create the bytestream from RDOs.
- */
-template <class ROBF>
-StatusCode
-HLT::HLTResultByteStreamCnv<ROBF>::createRep(DataObject* pObj, IOpaqueAddress*& pAddr)
-{
-
-   RawEvent* re = m_eventAccess->getRawEvent();
-
-   HLTResult* result;
-   StoreGateSvc::fromStorable(pObj,result);
-   if(!result){
-    (*m_log) << MSG::ERROR << " Cannot cast to HLTResult " << endmsg ;
-    return StatusCode::FAILURE;
-   }
-
-   std::string nm = pObj->registry()->name();
-
-   ByteStreamAddressL1R* addr = new ByteStreamAddressL1R(classID(),nm,"");
-
-   pAddr = addr;
-
-   return m_tool->convert(result, re, m_log);
-
-}
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultMTByteStreamCnv.h b/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultMTByteStreamCnv.h
index f138432c30f606cdea0245b9bb135f325ff906ac..5280dfd0949a0f21e759b04a702425b315a8f58c 100644
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultMTByteStreamCnv.h
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/TrigHLTResultByteStream/HLTResultMTByteStreamCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGHLTRESULTBYTESTREAM_HLTResultMTByteStreamCnv_H
@@ -16,9 +16,6 @@
 // Gaudi includes
 #include "GaudiKernel/Converter.h"
 
-// Externals
-extern unsigned char ByteStream_StorageType;
-
 namespace HLT {
   /** @class HLTResultMTByteStreamCnv
    *  @brief ByteStream converter for HLTResultMT
@@ -41,7 +38,7 @@ namespace HLT {
 
     // ------------------------- Converter definition helpers ------------------
     /// Storage type used by this converter
-    static unsigned char storageType() {return ByteStream_StorageType;}
+    static long storageType();
     /// CLID of the class HLTResultMT converted by this converter
     static const CLID& classID();
 
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultByteStreamCnv.cxx b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultByteStreamCnv.cxx
index 7527cbe684831745abcde86763c4b199ac229bb2..25810048b1e68b1b4d277dbc9ac89b44b14769c6 100755
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultByteStreamCnv.cxx
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultByteStreamCnv.cxx
@@ -1,14 +1,13 @@
 // -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "TrigHLTResultByteStream/HLTResultByteStreamCnv.h"
 #include "TrigHLTResultByteStream/HLTResultByteStreamTool.h"
 
 #include "ByteStreamData/ROBData.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
 #include "ByteStreamCnvSvcBase/ByteStreamCnvSvcBase.h"
 #include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
@@ -33,7 +32,7 @@
 */
 
 HLT::HLTResultByteStreamCnv::HLTResultByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(),svcloc),
+  Converter(storageType(), classID(),svcloc),
   m_log(0),
   m_tool("HLT::HLTResultByteStreamTool"),
   m_ByteStreamEventAccess("ByteStreamCnvSvc", "HLTResultByteStreamCnv"),
@@ -48,6 +47,11 @@ const CLID& HLT::HLTResultByteStreamCnv::classID()
   return ClassID_traits<HLT::HLTResult>::ID() ;
 }
 
+long HLT::HLTResultByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 StatusCode  HLT::HLTResultByteStreamCnv::finalize()
 {
   delete m_log;
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
index e4b4f0f51c55f2f13512386cbd8a0032604142ac..8c01b1710da3ebaa48e5a9ed20876fbac9fe7180 100644
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // Trigger includes
@@ -25,7 +25,7 @@
 // Standard constructor
 // =============================================================================
 HLT::HLTResultMTByteStreamCnv::HLTResultMTByteStreamCnv(ISvcLocator* svcLoc) :
-  Converter(ByteStream_StorageType, classID(), svcLoc),
+  Converter(storageType(), classID(), svcLoc),
   AthMessaging(msgSvc(), "HLTResultMTByteStreamCnv"),
   m_ByteStreamEventAccess("ByteStreamCnvSvc", "HLTResultMTByteStreamCnv") {
     m_fullEventAssembler.idMap().setDetId(eformat::TDAQ_HLT);
@@ -153,9 +153,13 @@ StatusCode HLT::HLTResultMTByteStreamCnv::createRep(DataObject* pObj, IOpaqueAdd
 }
 
 // =============================================================================
-// CLID
+// CLID / storageType
 // =============================================================================
 const CLID& HLT::HLTResultMTByteStreamCnv::classID() {
   return ClassID_traits<HLT::HLTResultMT>::ID();
 }
 
+long HLT::HLTResultMTByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
diff --git a/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx b/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
index 760bbce003027c2563526961121a8e1567867a8e..d57eb54ae630416e72dc05b6803fd53269ebac54 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
+++ b/Trigger/TrigSteer/TrigOutputHandling/src/StreamTagMakerTool.cxx
@@ -23,13 +23,7 @@ StatusCode StreamTagMakerTool::initialize() {
   ATH_CHECK( m_pebDecisionKeys.initialize() );
   ATH_CHECK( m_finalChainDecisions.initialize() );
   // Transform string->vector<string> map from the ChainToStream property into id->StreamTagInfo map
-#if __cplusplus >= 201500L // C++17 needed for structured binding
   for (const auto& [chainName, streamTagInfoAsStringVec] : m_chainToStreamProperty) {
-#else // standard older than C++17 - remove when ATLAS moves to C++17 with gcc8
-  for (const auto& chainAndStream: m_chainToStreamProperty) {
-    const std::string& chainName = chainAndStream.first;
-    const std::vector<std::string>& streamTagInfoAsStringVec = chainAndStream.second;
-#endif
     if (streamTagInfoAsStringVec.size()!=4) {
       ATH_MSG_ERROR("Invalid StreamTagInfo object, expected 4 elements {name,type,obeysLumiBlock,forceFullEventBuilding}, but received"
                     << streamTagInfoAsStringVec.size() << " elements for chain " << chainName);
@@ -96,16 +90,7 @@ StatusCode StreamTagMakerTool::fill( HLT::HLTResultMT& resultToFill ) const {
       return StatusCode::FAILURE;
     }
 
-    #if __cplusplus >= 201500L // C++17 needed for structured binding
-      auto [st_name, st_type, obeysLB, forceFullEvent] = mappingIter->second;
-    #else // standard older than C++17 - remove when ATLAS moves to C++17 with gcc8
-      std::string st_type;
-      std::string st_name;
-      bool obeysLB;
-      bool forceFullEvent;
-      std::tie(st_name, st_type, obeysLB, forceFullEvent) = mappingIter->second;
-    #endif
-
+    auto [st_name, st_type, obeysLB, forceFullEvent] = mappingIter->second;
     std::set<uint32_t> robs;
     std::set<eformat::SubDetector> subdets;
     if (!forceFullEvent) {
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.cxx b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.cxx
index f07dcfd148d6852fb93eb0b43c8929b24a429d35..3a51437959444e7fd5961a2a355b7eea01547618 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 // ============================================================================
@@ -51,7 +51,7 @@
 
 namespace LVL1BS {
 L1TopoByteStreamAuxCnv::L1TopoByteStreamAuxCnv(ISvcLocator* svcloc)
-    : Converter(ByteStream_StorageType, classID(), svcloc),
+    : Converter(storageType(), classID(), svcloc),
       AthMessaging(svcloc != 0 ? msgSvc() : 0, "L1TopoByteStreamAuxCnv"),
       m_name("L1TopoByteStreamAuxCnv"),
       m_readTool("L1TopoByteStreamTool/L1TopoByteStreamTool") {}
@@ -60,11 +60,12 @@ const CLID& L1TopoByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::L1TopoRawDataAuxContainer>::ID();
 }
 
+long L1TopoByteStreamAuxCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode L1TopoByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG("Initializing " << m_name << " - package version "
                                 << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.h b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.h
index 92c22406a88897d1f5a3d67418770bfc0f4a31d2..2567286ab785de006a746421144504292b2ef870 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamAuxCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGT1CALOBYTESTREAM_L1TOPOBYTESTREAMAUXCNV_H
@@ -25,9 +25,6 @@ class StatusCode;
 template <typename>
 class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
-
 class L1TopoByteStreamTool;
 
 namespace LVL1BS {
@@ -52,8 +49,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType; }
-  static long storageType() { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.cxx b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.cxx
index f57f623cd3a52abe8a9621bf602c246bf2fdc2d1..2acce428a2873ffa454fb9f125eac63e027d845f 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -27,7 +27,7 @@
  * base class in the correct way.
  */
 L1TopoByteStreamCnv::L1TopoByteStreamCnv(ISvcLocator* svcloc)
-    : Converter(ByteStream_StorageType, classID(), svcloc),
+    : Converter(storageType(), classID(), svcloc),
       AthMessaging(svcloc != 0 ? msgSvc() : 0, "L1TopoByteStreamCnv"),
       m_tool("L1TopoByteStreamTool"),
       m_srcIdMap(0),
@@ -53,6 +53,10 @@ const CLID& L1TopoByteStreamCnv::classID() {
   return ClassID_traits<L1TopoRDOCollection>::ID();
 }
 
+long L1TopoByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 /**
  * Init method gets all necessary services etc.
  */
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.h b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.h
index 56a840733a0dd41fe72b621ab132359f47d080fb..1e3e06f4011557d74e3d0acc6bfe7cba1c17da78 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamCnv.h
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef L1TOPOBYTESTREAM_L1TOPOBYTESTREAMCNV_H
@@ -23,9 +23,6 @@
 // Forward declaration(s):
 class L1TopoSrcIdMap;
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the L1TopoRDOCollection
  *
@@ -61,9 +58,9 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.cxx b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.cxx
index 054bb441c64e1a689fde3583763b4b2777acf100..1ea5ad3c01b800ca3d5439d5e62e9b3ff7e0ea9d 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <vector>
@@ -31,7 +31,7 @@
 namespace LVL1BS {
 
 L1TopoByteStreamxAODCnv::L1TopoByteStreamxAODCnv(ISvcLocator* svcloc)
-    : Converter(ByteStream_StorageType, classID(), svcloc),
+    : Converter(storageType(), classID(), svcloc),
       AthMessaging(svcloc != 0 ? msgSvc() : 0, "L1TopoByteStreamxAODCnv"),
       m_name("L1TopoByteStreamxAODCnv") {}
 
@@ -41,11 +41,11 @@ const CLID& L1TopoByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::L1TopoRawDataContainer>::ID();
 }
 
-//  Init method gets all necessary services etc.
+long L1TopoByteStreamxAODCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
+//  Init method gets all necessary services etc.
 
 StatusCode L1TopoByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG("Initializing " << m_name << " - package version "
diff --git a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.h b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.h
index 56286fb3802de7ba538452f8cbbf4feebccb0889..4a42a813844690ca5e3b7b96fd797c75f4345298 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoByteStream/src/L1TopoByteStreamxAODCnv.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGT1CALOBYTESTREAM_L1TOPOBYTESTREAMXAODCNV_H
@@ -23,8 +23,6 @@ class StatusCode;
 template <typename>
 class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -47,8 +45,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType; }
-  static long storageType() { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.cxx b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.cxx
index f3b76ad4a015e78fc477d56f1addacf34e61af17..7ee1bc2ae4c61d85133bafd6e9de0e276de827cd 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.cxx
@@ -72,7 +72,6 @@ L1TopoSimulation::L1TopoSimulation(const std::string &name, ISvcLocator *pSvcLoc
    m_jetInputProvider("LVL1::JetInputProvider/JetInputProvider", this),
    m_energyInputProvider("LVL1::EnergyInputProvider/EnergyInputProvider", this),
    m_muonInputProvider("LVL1::MuonInputProvider/MuonInputProvider", this),
-//   m_EventInfoKey("EventInfo"),
    m_topoSteering( unique_ptr<TCS::TopoSteering>(new TCS::TopoSteering()) )
 {
    declareProperty( "TrigConfigSvc", m_l1topoConfigSvc, "Service to provide the L1Topo menu");
@@ -138,7 +137,7 @@ L1TopoSimulation::initialize() {
 
    CHECK(m_topoCTPLocation.initialize());
    CHECK(m_topoOverflowCTPLocation.initialize());
-//   CHECK(m_EventInfoKey.initialize());
+   CHECK(m_EventInfoKey.initialize());
 
    ATH_MSG_DEBUG("Prescale factor set to " << m_prescale);
    ATH_MSG_DEBUG("PrescaleDAQROBAccess factor set to " << m_prescaleForDAQROBAccess);
@@ -249,12 +248,9 @@ L1TopoSimulation::execute() {
    TCS::TopoInputEvent & inputEvent = m_topoSteering->inputEvent();
 
    // Event Info
-//ReadHandle doesn't seem to work yet for eventinfo
-//   SG::ReadHandle< EventInfo > evt(m_EventInfoKey);
-//   CHECK(evt.isValid());
-   const EventInfo *evt;
-   CHECK(evtStore()->retrieve(evt));
-   inputEvent.setEventInfo(evt->event_ID()->run_number(),evt->event_ID()->event_number(),evt->event_ID()->lumi_block(),evt->event_ID()->bunch_crossing_id());
+   SG::ReadHandle< xAOD::EventInfo > evt(m_EventInfoKey);
+
+   inputEvent.setEventInfo(evt->runNumber(),evt->eventNumber(),evt->lumiBlock(),evt->bcid());
 
    // EM TAU
    CHECK(m_emtauInputProvider->fillTopoInputEvent(inputEvent));
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.h b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.h
index aa554494b412ea2af42e58a4be1c766bd0ba7738..1b5064e5d175ec779f9f089fa21c5430753499ab 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/L1TopoSimulation.h
@@ -10,8 +10,7 @@
 
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "TrigInterfaces/IMonitoredAlgo.h"
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
+#include "xAODEventInfo/EventInfo.h"
 
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
@@ -20,6 +19,8 @@
 
 #include "TrigT1Interfaces/FrontPanelCTP.h"
 
+#include "StoreGate/ReadHandleKey.h"
+
 class TH1;
 class IMonitorToolBase;
 class ITHistSvc;
@@ -85,7 +86,7 @@ namespace LVL1 {
       BooleanProperty m_enableInputDump { false }; // for enabling input dumping
       BooleanProperty m_enableBitwise { false }; // for enabling bitwise algorithms
       StringProperty  m_inputDumpFile { "inputdump.txt" }; // input dump file
-//      SG::ReadHandleKey<EventInfo> m_EventInfoKey;
+      SG::ReadHandleKey<xAOD::EventInfo> m_EventInfoKey{this,"EventInfoKey","EventInfo","RHK for EventInfo"};
       SG::WriteHandleKey<LVL1::FrontPanelCTP>  m_topoCTPLocation { "" }; ///< SG key of decision bits for CTP
       SG::WriteHandleKey<LVL1::FrontPanelCTP>  m_topoOverflowCTPLocation { "" }; ///< SG key of overflow bits for CTP
       int m_topoOutputLevel{TrigConf::MSGTC::WARNING};                                  // property to set the outputlevel of the topo algorithms
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.cxx
old mode 100755
new mode 100644
index 4e7d20f1e3dc7d26784257f9793521730555e847..e93d5ae36e174e267e513e79ee120e4bcd3aad21
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 CpByteStreamCnv::CpByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpByteStreamCnv"),
       m_tool("LVL1BS::CpByteStreamTool/CpByteStreamTool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& CpByteStreamCnv::classID()
   return ClassID_traits<LVL1::CPBSCollection>::ID();
 }
 
+long CpByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.h
old mode 100755
new mode 100644
index 361ded10ce81f4b1354783200b88cb74b770fec4..3f995f7dea0dc807147e21c95321457daa57a1f0
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamTool.cxx
index 73bcb78f9632e6c3485a27ef207ddcb552a9043e..206890ac88dc95991a01148cae49fa175aeb6c62 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamTool.cxx
@@ -92,9 +92,6 @@ CpByteStreamTool::~CpByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.cxx
old mode 100755
new mode 100644
index d74d1ed1f7e5aa0ed6a1015ab85bea657abc1e0d..38b8c76ceca91d324ffa1153335acaca4ee7daa2
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 CpByteStreamV1Cnv::CpByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpByteStreamV1Cnv"),
       m_tool("LVL1BS::CpByteStreamV1Tool/CpByteStreamV1Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& CpByteStreamV1Cnv::classID()
   return ClassID_traits<LVL1::CPBSCollectionV1>::ID();
 }
 
+long CpByteStreamV1Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamV1Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 533a95936a251423d3bf4650a07decd7312a6073..ecc81b558ff1080fab980573f769cda50ea68a11
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Tool.cxx
index 72f6127c1af30a1938e038add25cc6e8a5f7eef5..f0e5e78582629b67bed6b238f5252c03ca575f2f 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV1Tool.cxx
@@ -98,9 +98,6 @@ CpByteStreamV1Tool::~CpByteStreamV1Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamV1Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.cxx
old mode 100755
new mode 100644
index 3767d88840795961ca141dd5488f6c04e8180fd9..569094b68d74c159e6d9a313a0e375f97d8de82f
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 CpByteStreamV2Cnv::CpByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpByteStreamV2Cnv"),
       m_tool("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& CpByteStreamV2Cnv::classID()
   return ClassID_traits<LVL1::CPBSCollectionV2>::ID();
 }
 
+long CpByteStreamV2Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamV2Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 777ce4366ca569211055409d655c925903af9d83..1ea5ead440796023be35bc3d45958b1ea7c1f48f
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Tool.cxx
index aa146ebe7e0fa4649bbae00a8cc6ef0a7703ed73..7a4330c21e977ba9466ff1353a88f7ae729eb597 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpByteStreamV2Tool.cxx
@@ -101,9 +101,6 @@ CpByteStreamV2Tool::~CpByteStreamV2Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpByteStreamV2Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.h
old mode 100755
new mode 100644
index b5968927e5a47e4b03f7afa4e809483fcb6e6d70..7a745443ff47d3829da373f87f32a6e26bc8212e
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -51,8 +49,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.icc
old mode 100755
new mode 100644
index 5b7606dd1c8abff1665a2076c296cdccb218d2c0..303e0273900f4349c6715822ed6cb93cfe7bec08
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamCnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 CpReadByteStreamCnv<Container>::CpReadByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpReadByteStreamCnv"),
       m_tool("LVL1BS::CpByteStreamTool/CpByteStreamTool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,14 @@ const CLID& CpReadByteStreamCnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long CpReadByteStreamCnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode CpReadByteStreamCnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.h
old mode 100755
new mode 100644
index d4ac573ef3d7ec83c12c623a49e3c42a7e8d1026..bf34a314dd9457c8caa8e6f18af940f89692f047
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.icc
old mode 100755
new mode 100644
index d9ed99c4f0bde07eee9f5f1a94407321c46c5462..eb9b9eeceb1c204b43947dd0fd766d156912f130
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1Cnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 CpReadByteStreamV1Cnv<Container>::CpReadByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpReadByteStreamV1Cnv"),
       m_tool("LVL1BS::CpByteStreamV1Tool/CpByteStreamV1Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,14 @@ const CLID& CpReadByteStreamV1Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long CpReadByteStreamV1Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode CpReadByteStreamV1Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.cxx
old mode 100755
new mode 100644
index 99b584b0b51c411e0514aaef1e76d35d954b39b4..9a5b91ff89914788fcc164694c10567c73ce15ac
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.cxx
@@ -33,7 +33,7 @@
 namespace LVL1BS {
 
 CpReadByteStreamV1V2Cnv::CpReadByteStreamV1V2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpReadByteStreamV1V2Cnv"),
       m_tool1("LVL1BS::CpByteStreamV1Tool/CpByteStreamV1Tool"),
       m_tool2("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool"),
@@ -53,11 +53,13 @@ const CLID& CpReadByteStreamV1V2Cnv::classID()
   return ClassID_traits<DataVector<LVL1::CPMTower> >::ID();
 }
 
+long CpReadByteStreamV1V2Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpReadByteStreamV1V2Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.h
old mode 100755
new mode 100644
index 874cfcca17b4d8ff4d517c261b28a554a2d338e6..6b2087b61b043a5a41a74cc290334ef251ce7421
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV1V2Cnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -49,8 +47,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.h
old mode 100755
new mode 100644
index ffef3abf3a7921e67c4253e8d15c35713050b8c8..ee6fa1ac8ed3e971bd964e06b30325cf22a957e5
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.icc
old mode 100755
new mode 100644
index c772bbf604b5c13ab1b0f988d02556e0d281914f..404d8925284be9b70a21825ea3e31efde2b31a90
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpReadByteStreamV2Cnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 CpReadByteStreamV2Cnv<Container>::CpReadByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpReadByteStreamV2Cnv"),
       m_tool("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,14 @@ const CLID& CpReadByteStreamV2Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long CpReadByteStreamV2Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode CpReadByteStreamV2Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.cxx
old mode 100755
new mode 100644
index 36a62aed64717bafb3cd8f5b683725c716d3c7ab..daedba54f63a2a071e3a449305a673013f2d82e0
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CpmRoiByteStreamCnv::CpmRoiByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpmRoiByteStreamCnv"),
       m_tool("LVL1BS::CpmRoiByteStreamTool/CpmRoiByteStreamTool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -52,11 +52,13 @@ const CLID& CpmRoiByteStreamCnv::classID()
   return ClassID_traits<DataVector<LVL1::CPMRoI> >::ID();
 }
 
+long CpmRoiByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.h
old mode 100755
new mode 100644
index 0626179e1dd3d8e0b6ce698bfd9b96f168aa97eb..bfab7240320793db37fef2fca7edadba6ce45b1f
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -53,8 +51,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamTool.cxx
index 165bbb8c1dfb027f910e1899ff6fbef31f63a65e..2ab9fd571828b86b8b8bf2211df82f35cf2a2593 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamTool.cxx
@@ -75,9 +75,6 @@ CpmRoiByteStreamTool::~CpmRoiByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.cxx
old mode 100755
new mode 100644
index acd6f32bae00948ad60c328c7d907610d692a180..44878ee3482062c9b47cbcd0b163ba88dd23e72b
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CpmRoiByteStreamV1Cnv::CpmRoiByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpmRoiByteStreamV1Cnv"),
       m_tool("LVL1BS::CpmRoiByteStreamV1Tool/CpmRoiByteStreamV1Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -52,11 +52,13 @@ const CLID& CpmRoiByteStreamV1Cnv::classID()
   return ClassID_traits<DataVector<LVL1::CPMRoI> >::ID();
 }
 
+long CpmRoiByteStreamV1Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamV1Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 3a39bec7b0fbf94dec694a1e2ee4d689fd2ade98..5f5463f2d7278071618337980350b304ed1f1663
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Cnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -47,8 +45,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Tool.cxx
index 17f8a15f775ddc5d0961aa6728efd10844064915..5778110f761ed0852b7030eb60d8e82ccd052540 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV1Tool.cxx
@@ -81,9 +81,6 @@ CpmRoiByteStreamV1Tool::~CpmRoiByteStreamV1Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamV1Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.cxx
old mode 100755
new mode 100644
index 34387b8f8ee04103b7214692b58dbe2847acc0f1..a34558df2e8b0aeefd5536853c07f4cc9897e2d0
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CpmRoiByteStreamV2Cnv::CpmRoiByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("CpmRoiByteStreamV2Cnv"),
       m_tool("LVL1BS::CpmRoiByteStreamV2Tool/CpmRoiByteStreamV2Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -52,11 +52,13 @@ const CLID& CpmRoiByteStreamV2Cnv::classID()
   return ClassID_traits<DataVector<LVL1::CPMTobRoI> >::ID();
 }
 
+long CpmRoiByteStreamV2Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamV2Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 84f842664b373b703decde9a0febbfac38f77b21..6f80a49e0af6b2c81b6f4af84aefba2ad1297ca1
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Cnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -47,8 +45,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Tool.cxx
index 3acc6eea1936883aa2d0d7fdcc0d27e833fefe40..270c25c0818764ad40e0c783c15a892c8b1a91cf 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/CpmRoiByteStreamV2Tool.cxx
@@ -86,9 +86,6 @@ CpmRoiByteStreamV2Tool::~CpmRoiByteStreamV2Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmRoiByteStreamV2Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.cxx
old mode 100755
new mode 100644
index be58aba4a706da52021c90c0ab0a05fd10aa51e9..b1bb4cebd7d9df3f348c4c420c5f20760fecc6e3
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepByteStreamCnv::JepByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepByteStreamCnv"),
       m_tool("LVL1BS::JepByteStreamTool/JepByteStreamTool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepByteStreamCnv::classID()
   return ClassID_traits<LVL1::JEPBSCollection>::ID();
 }
 
+long JepByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.h
old mode 100755
new mode 100644
index 36b4009d76208f548082464572acffd50868009d..c09e547c2bd74819aada8a971257036fb10cbfb4
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamTool.cxx
index 5d2a3274cee2879b32f0c8c94016dd31290cf9fb..87a9bd94b0d5400a9e9266e7b57d64b3a19e4a98 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamTool.cxx
@@ -97,9 +97,6 @@ JepByteStreamTool::~JepByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.cxx
old mode 100755
new mode 100644
index ff5e4487c02a866bfbe7dfccc37834c5ca9f57c8..acd48877dd647e82c900c1c27675dc0fc568a3e9
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepByteStreamV1Cnv::JepByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepByteStreamV1Cnv"),
       m_tool("LVL1BS::JepByteStreamV1Tool/JepByteStreamV1Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepByteStreamV1Cnv::classID()
   return ClassID_traits<LVL1::JEPBSCollectionV1>::ID();
 }
 
+long JepByteStreamV1Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamV1Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 28ade26af1993f485c1c140c6666ad8c2751daeb..b7242d9814287909cdb4520eb63439fd45e7ec1a
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Tool.cxx
index 800714bf6358589cccf1a7a93af7a4f9f373c13e..3c01bc8b1cf4f83a0e9145e5ffe1daf856cc6c2b 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV1Tool.cxx
@@ -103,9 +103,6 @@ JepByteStreamV1Tool::~JepByteStreamV1Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamV1Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.cxx
old mode 100755
new mode 100644
index bc9b1cd7b15558a2e5f294423cf3b20a7f811698..e4c469825fd63f57ac823eb60c6b1e926b6bff46
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepByteStreamV2Cnv::JepByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepByteStreamV2Cnv"),
       m_tool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepByteStreamV2Cnv::classID()
   return ClassID_traits<LVL1::JEPBSCollectionV2>::ID();
 }
 
+long JepByteStreamV2Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamV2Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 27c1cc8ce6142f1335d4b8e6c329a9877ee26c65..9b438874c5a6a078aa6857aaed709c3160903423
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Tool.cxx
index 5c29b9cfbcde64ca686671063aad32011ed47ff3..421ba532a0bab60f7ae49807910b83f360d9cf78 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepByteStreamV2Tool.cxx
@@ -105,9 +105,6 @@ JepByteStreamV2Tool::~JepByteStreamV2Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepByteStreamV2Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.h
old mode 100755
new mode 100644
index 4556068a8e101252e77246a589fc3756d26d35ce..b3a0a0e911a4602f5cfea83717df2176515f7e0e
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -51,8 +49,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.icc
old mode 100755
new mode 100644
index f11594141cb5dc990a2b8f7f2f3ad3c5951c40d4..59ac60b26053fd703bc29232ef6e23f261af768f
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamCnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 JepReadByteStreamCnv<Container>::JepReadByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepReadByteStreamCnv"),
       m_tool("LVL1BS::JepByteStreamTool/JepByteStreamTool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,13 @@ const CLID& JepReadByteStreamCnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+long JepReadByteStreamCnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepReadByteStreamCnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 08e5805e47199fd34b7a377844f1eecf18ead66f..4d128e9fd83daa095d085dcb2689084a073a6ea2
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -46,8 +44,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.icc
old mode 100755
new mode 100644
index 7a2ca6ec281b03896b596edcee57381e5900bab0..ae49f932598dd02a2b1d1b77b337ff00f1db4016
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1Cnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 JepReadByteStreamV1Cnv<Container>::JepReadByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepReadByteStreamV1Cnv"),
       m_tool("LVL1BS::JepByteStreamV1Tool/JepByteStreamV1Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,14 @@ const CLID& JepReadByteStreamV1Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long JepReadByteStreamV1Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepReadByteStreamV1Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.h
old mode 100755
new mode 100644
index 5c138d4ce6ced7a9dda540ceb245f2198d848766..2a0acf8560adeb4df9a5d47681d8e4e18cb77dbc
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.icc
old mode 100755
new mode 100644
index a2d7d84b76a8a18e039a65ddf0edf3f6d6559564..b1a71bb45d4b6c9d48c0c114e0d937b542381732
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV1V2Cnv.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -31,7 +31,7 @@ namespace LVL1BS {
 
 template <typename Container>
 JepReadByteStreamV1V2Cnv<Container>::JepReadByteStreamV1V2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepReadByteStreamV1V2Cnv"),
       m_tool1("LVL1BS::JepByteStreamV1Tool/JepByteStreamV1Tool"),
       m_tool2("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool"),
@@ -53,11 +53,14 @@ const CLID& JepReadByteStreamV1V2Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long JepReadByteStreamV1V2Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepReadByteStreamV1V2Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 1e300b94ff43c4b7234149d1f2f6a5cef0c9d869..e2c407133c862fa6f9404f16b6d2d611a5fc6442
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.icc
old mode 100755
new mode 100644
index 120acde55a1c42e323ea9f164f978a5a7650c338..92a5f1d292e3a2403b6ae80ad52358d9391cd8a8
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepReadByteStreamV2Cnv.icc
@@ -27,7 +27,7 @@ namespace LVL1BS {
 
 template <typename Container>
 JepReadByteStreamV2Cnv<Container>::JepReadByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepReadByteStreamV2Cnv"),
       m_tool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -48,11 +48,13 @@ const CLID& JepReadByteStreamV2Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+long JepReadByteStreamV2Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepReadByteStreamV2Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.cxx
old mode 100755
new mode 100644
index 94bcc3118c1a0b3f78405676e65b3c12f22de969..5ce5ba0d4fa7e5cb1a9d9d935232c5b367d87db1
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepRoiByteStreamCnv::JepRoiByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiByteStreamCnv"),
       m_tool("LVL1BS::JepRoiByteStreamTool/JepRoiByteStreamTool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepRoiByteStreamCnv::classID()
   return ClassID_traits<LVL1::JEPRoIBSCollection>::ID();
 }
 
+long JepRoiByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.h
old mode 100755
new mode 100644
index decd4d00cc63a4ee8fd37898eae25ba2d3f6e392..86a955aada9dc4b1135cbc110eab88f7a9b9ea6b
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamTool.cxx
index fb386842986ab2bcbde7465b1abad58d92abd794..19792be7efcd23a170517d5dcc3d7ee921ad2d05 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamTool.cxx
@@ -83,9 +83,6 @@ JepRoiByteStreamTool::~JepRoiByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.cxx
old mode 100755
new mode 100644
index 3a347daa2c33c536bef2ec45d58bf94473f87987..41a1faa5e82d879d564201df875c12c8b3cd93b3
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepRoiByteStreamV1Cnv::JepRoiByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiByteStreamV1Cnv"),
       m_tool("LVL1BS::JepRoiByteStreamV1Tool/JepRoiByteStreamV1Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepRoiByteStreamV1Cnv::classID()
   return ClassID_traits<LVL1::JEPRoIBSCollectionV1>::ID();
 }
 
+long JepRoiByteStreamV1Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamV1Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 507875b8b8da5cb3598448e9aab387673d716c61..200e9e8e4277f92cd32cd96e55ac25cf9c4a35d0
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Tool.cxx
index 5f04d58ed238582141f9fa196fad789f5cde9a38..ec41daa19fb2b4408dac7592c8a1ce8661a41d9d 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV1Tool.cxx
@@ -89,9 +89,6 @@ JepRoiByteStreamV1Tool::~JepRoiByteStreamV1Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamV1Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.cxx
old mode 100755
new mode 100644
index e249dad1aae55b0587456877ad1baaa7ec4dd5bd..eb2470f40b394eace32dd993294b8cbe00387608
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.cxx
@@ -30,7 +30,7 @@
 namespace LVL1BS {
 
 JepRoiByteStreamV2Cnv::JepRoiByteStreamV2Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiByteStreamV2Cnv"),
       m_tool("LVL1BS::JepRoiByteStreamV2Tool/JepRoiByteStreamV2Tool"),
       m_ByteStreamEventAccess("ByteStreamCnvSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepRoiByteStreamV2Cnv::classID()
   return ClassID_traits<LVL1::JEPRoIBSCollectionV2>::ID();
 }
 
+long JepRoiByteStreamV2Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamV2Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 5f7348066fded03f384cd361faa6541b0501de5c..c46cb7d96d02a8e8dd978f34ce938eca6e2889a8
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Tool.cxx
index 6771a18a4121892673a3b0449e0cad486912240d..52912acb4f3429eab7345ebe822033c420a29e31 100755
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiByteStreamV2Tool.cxx
@@ -87,9 +87,6 @@ JepRoiByteStreamV2Tool::~JepRoiByteStreamV2Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JepRoiByteStreamV2Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.h
old mode 100755
new mode 100644
index fc47779d44e6cb2fb5fa902a24102256d8947571..dccbab8a0d4da551cc4032801495cf28d7c8f4e5
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -51,8 +49,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.icc
old mode 100755
new mode 100644
index b35a1c86364da63d95ba93f1cc531f3a99c8a731..112e6145cacb0017304a1fb60b01c2491ce84a64
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamCnv.icc
@@ -28,7 +28,7 @@ namespace LVL1BS {
 template <typename Container>
 JepRoiReadByteStreamCnv<Container>::JepRoiReadByteStreamCnv(
       ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiReadByteStreamCnv"),
       m_tool("LVL1BS::JepRoiByteStreamTool/JepRoiByteStreamTool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -49,11 +49,13 @@ const CLID& JepRoiReadByteStreamCnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+long JepRoiReadByteStreamCnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepRoiReadByteStreamCnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.h
old mode 100755
new mode 100644
index 5f9b2f52e553fd0ee11e6ba410f47aafa093dc54..0a1a63d663a763cabfc53aff405191043c3c8d7a
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -46,8 +44,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.icc
old mode 100755
new mode 100644
index ff7d42a8c0d234684f2ec31eaeb56074edbc104e..c75b442e0c8ccd0e599b48c3a244e5e15b8902bc
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV1Cnv.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -28,7 +28,7 @@ namespace LVL1BS {
 template <typename Container>
 JepRoiReadByteStreamV1Cnv<Container>::JepRoiReadByteStreamV1Cnv(
       ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiReadByteStreamV1Cnv"),
       m_tool("LVL1BS::JepRoiByteStreamV1Tool/JepRoiByteStreamV1Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -49,11 +49,14 @@ const CLID& JepRoiReadByteStreamV1Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long JepRoiReadByteStreamV1Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepRoiReadByteStreamV1Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.h
old mode 100755
new mode 100644
index 4d88e8a4c019b91b3078fab65ae6184883df2284..569fe838788c43db7719bd8d657603f2a951c937
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.h
@@ -21,8 +21,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.icc
old mode 100755
new mode 100644
index f8b3a41246a39b600bed699cd12619f856eb592b..8eb3d7a1c6ec5373123453faf2d3f74eba969a76
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/JepRoiReadByteStreamV2Cnv.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -28,7 +28,7 @@ namespace LVL1BS {
 template <typename Container>
 JepRoiReadByteStreamV2Cnv<Container>::JepRoiReadByteStreamV2Cnv(
       ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("JepRoiReadByteStreamV2Cnv"),
       m_tool("LVL1BS::JepRoiByteStreamV2Tool/JepRoiByteStreamV2Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -49,11 +49,14 @@ const CLID& JepRoiReadByteStreamV2Cnv<Container>::classID()
   return ClassID_traits<Container>::ID();
 }
 
+template <typename Container>
+long JepRoiReadByteStreamV2Cnv<Container>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template <typename Container>
 StatusCode JepRoiReadByteStreamV2Cnv<Container>::initialize()
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.cxx
index 42ac996ac97ef6306c958dafadbb0875b08aaf4e..0aa93dd9364302a88e6af9e0b555c8c17061e37a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.cxx
@@ -23,7 +23,7 @@
 namespace LVL1BS {
 
 L1CaloErrorByteStreamCnv::L1CaloErrorByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("L1CaloErrorByteStreamCnv"),
       m_tool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
       m_log(msgSvc(), m_name), m_debug(false)
@@ -41,11 +41,13 @@ const CLID& L1CaloErrorByteStreamCnv::classID()
   return ClassID_traits<std::vector<unsigned int> >::ID();
 }
 
+long L1CaloErrorByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode L1CaloErrorByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.h
index db57d137230be89f4ed33bc7992116fb1a6ee7c7..44f330227ead4694c667007a60882b2bdfb7484e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamCnv.h
@@ -19,8 +19,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -43,8 +41,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamTool.cxx
index eb8346502af93d89d4c3a936adbe23b26ac5d1bb..7c48d50ee4f55d17e2ab6b556d7cd739a6925196 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/L1CaloErrorByteStreamTool.cxx
@@ -41,9 +41,6 @@ L1CaloErrorByteStreamTool::~L1CaloErrorByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode L1CaloErrorByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.cxx
index 34befd8775ec794903ceccfcc2993932c7f928e7..f03157a3df818d102d8bd3963e6671c7e029c703 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 PpmByteStreamV1Cnv::PpmByteStreamV1Cnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("PpmByteStreamV1Cnv"),
       m_tool("LVL1BS::PpmByteStreamV1Tool/PpmByteStreamV1Tool"),
       m_robDataProvider("ROBDataProviderSvc", m_name),
@@ -52,11 +52,13 @@ const CLID& PpmByteStreamV1Cnv::classID()
   return ClassID_traits<DataVector<LVL1::TriggerTower> >::ID();
 }
 
+long PpmByteStreamV1Cnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode PpmByteStreamV1Cnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.h
index 7096df448d1ee5d737efd649245f140ab1dad6dd..c41c9f7c0b95f4727ff95fe8759e32a81e8edc22 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Cnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -48,8 +46,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Tool.cxx
index fddeb1aad8227e943a6331ae3b0cd7a14d685484..e2563bd1372a5fc832ca3a9e2e49d509ed1c0d39 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/PpmByteStreamV1Tool.cxx
@@ -110,9 +110,6 @@ PpmByteStreamV1Tool::~PpmByteStreamV1Tool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode PpmByteStreamV1Tool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.cxx
index f4a116d209cae7e4ad391951bad5ad3bd6158c65..e80e5d042bfc928596dc1b20bea904f2e222ecfb 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.cxx
@@ -31,7 +31,7 @@
 namespace LVL1BS {
 
 RodHeaderByteStreamCnv::RodHeaderByteStreamCnv( ISvcLocator* svcloc )
-    : Converter( ByteStream_StorageType, classID(), svcloc ),
+    : Converter( storageType(), classID(), svcloc ),
       m_name("RodHeaderByteStreamCnv"),
       m_tool("LVL1BS::RodHeaderByteStreamTool/RodHeaderByteStreamTool"),
       m_log(msgSvc(), m_name), m_debug(false)
@@ -49,11 +49,13 @@ const CLID& RodHeaderByteStreamCnv::classID()
   return ClassID_traits<DataVector<LVL1::RODHeader> >::ID();
 }
 
+long RodHeaderByteStreamCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode RodHeaderByteStreamCnv::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.h
index 31d84ff9c7d227478883939f36227b0221bf228e..8a607846a6d7a2042b66deae62d0da458a8e4e45 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamCnv.h
@@ -20,8 +20,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 
@@ -44,8 +42,8 @@ public:
   virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
   static const CLID& classID();
 
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamTool.cxx
index 8ea0ea6579e699fba9dbc0ce497210be0917ae8b..e92cd31d979c2538c65e9e4bf7d0b61945c1261a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/RodHeaderByteStreamTool.cxx
@@ -82,9 +82,6 @@ RodHeaderByteStreamTool::~RodHeaderByteStreamTool()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode RodHeaderByteStreamTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccess.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccess.cxx
index 215089ce65e67db286a42cb458617ab759d75d22..c2a5a9b4ba211c5ca56a857c7712b6506432b48e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccess.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccess.cxx
@@ -49,9 +49,6 @@ TrigT1CaloDataAccess::~TrigT1CaloDataAccess()
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode TrigT1CaloDataAccess::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccessV2.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccessV2.cxx
index 430299620e4eeb6f0f0e3c5fc16f479d60bbe387..e124af91aa490bc336769a83196279ab5f7372c4 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccessV2.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/TrigT1CaloDataAccessV2.cxx
@@ -26,9 +26,6 @@ TrigT1CaloDataAccessV2::TrigT1CaloDataAccessV2(const std::string& name /*="TrigT
 
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode TrigT1CaloDataAccessV2::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/TriggerTowerSelectionTool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/TriggerTowerSelectionTool.cxx
index c0e1e8e25753dc79846c10533ca203fdaca2e658..4ef8fb505b44f1adfb3bf8d670581dca2b96c962 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/TriggerTowerSelectionTool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/TriggerTowerSelectionTool.cxx
@@ -61,9 +61,6 @@ TriggerTowerSelectionTool::~TriggerTowerSelectionTool()
 
 // Initialisation
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode TriggerTowerSelectionTool::initialize()
 {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.cxx
index 3ba04146ab56c6fdf74468afc7f52a5ad5742c45..d8fca11bd96a2f5375f8da0f0a5e9be0c6416dc9 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxCpHitsByteStreamAuxCnv::CmxCpHitsByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxCpHitsByteStreamAuxCnv"),
   m_name("CmxCpHitsByteStreamAuxCnv"),
   m_readTool("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxCpHitsByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXCPHitsAuxContainer>::ID();
 }
 
+long CmxCpHitsByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxCpHitsByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.h
index ac0a6171d83d41bdb3c1ee56bbbfa33fea85fd2e..0a10348ce247454bdcb28357c591fada15350f7a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.cxx
index f37c40ce2f50b564ec638a3c6298f0f0bcef87bf..acd4f9a4827019caf54a76e3807808a62fd12475 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxCpHitsByteStreamxAODCnv::CmxCpHitsByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxCpHitsByteStreamxAODCnv"),
     m_name("CmxCpHitsByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxCpHitsByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXCPHitsContainer>::ID();
 }
 
+long CmxCpHitsByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxCpHitsByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.h
index c1ac193cee7b758913e389134924c96d74c995cb..fefbcf94c7c77336e682770a94a370fd1e2524f3 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpHitsByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.cxx
index a2249222ebdf49a7e18cc34c66290fdaf74c87ad..ca8505b25e5c346e9aa2762c56a64f350cd1479c 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxCpTobByteStreamAuxCnv::CmxCpTobByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxCpTobByteStreamAuxCnv"),
   m_name("CmxCpTobByteStreamAuxCnv"),
   m_readTool("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxCpTobByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXCPTobAuxContainer>::ID();
 }
 
+long CmxCpTobByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxCpTobByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.h
index 8c63be227e576300f0e523487e5fcbbf0fffe1dd..94b668037ff8f70ba85a9054205730126a728bd4 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.cxx
index 09226f308ff8a518c1e48dae4e53a9e4efe0822c..74c51c157fb68b4233bc51ca87aa1ea8d7b3a61b 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxCpTobByteStreamxAODCnv::CmxCpTobByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxCpTobByteStreamxAODCnv"),
     m_name("CmxCpTobByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxCpTobByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXCPTobContainer>::ID();
 }
 
+long CmxCpTobByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxCpTobByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.h
index 4ece851a0cb1d112aa8d994a5e84d29dd957fc1f..a2a485a6b84a77f20f61b925841782b23b827db9 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxCpTobByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.cxx
index d641a0df7338c9d1894b15dbb1e7b0edab7eee93..4d248199ce64aed70f0e1e5bc372f8f286a1b417 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxEtSumsByteStreamAuxCnv::CmxEtSumsByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxEtSumsByteStreamAuxCnv"),
   m_name("CmxEtSumsByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxEtSumsByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXEtSumsAuxContainer>::ID();
 }
 
+long CmxEtSumsByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxEtSumsByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.h
index 14225c0f144a110b2f8bd11156b498f6b8b32648..20f130e9585f221c4a75223ca9e20309acd642f9 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.cxx
index 303bbcf1d24677d7fd5572a185f9e81a21190b75..ad32db8d112d5f191ee40514eb0557d1dafae9d1 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxEtSumsByteStreamxAODCnv::CmxEtSumsByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxEtSumsByteStreamxAODCnv"),
     m_name("CmxEtSumsByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxEtSumsByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXEtSumsContainer>::ID();
 }
 
+long CmxEtSumsByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxEtSumsByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.h
index d8e70b3515ca1960873ba39c5a8a3f080befb136..395865ad5d8f4b70581ffd414fcc81a2d4f68c3e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxEtSumsByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.cxx
index edb3aa653ebc32ca9cc72fc4cc7c3b5105c570d1..a2eb1acd1d02d951ad2d9e970dcbbc4dff3dfc94 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxJetHitsByteStreamAuxCnv::CmxJetHitsByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxJetHitsByteStreamAuxCnv"),
   m_name("CmxJetHitsByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxJetHitsByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXJetHitsAuxContainer>::ID();
 }
 
+long CmxJetHitsByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxJetHitsByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.h
index bfd78a1ea31b255498eb35407de0570cb1023e71..a0a3e4bf3e1af1bc4fc2f668f2efcd8faffc2fb8 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.cxx
index b80710a9a7a344762c30ab132cb90435afbd92ae..826fed8b2fe6950fdbeda9002f820f3e7101d477 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxJetHitsByteStreamxAODCnv::CmxJetHitsByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxJetHitsByteStreamxAODCnv"),
     m_name("CmxJetHitsByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxJetHitsByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXJetHitsContainer>::ID();
 }
 
+long CmxJetHitsByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxJetHitsByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.h
index d5c1ae4d800c9f3934d9bc61ae216d5a40728c1d..449fff92b0e0c1144bcaa0e970a66cb61b76ef0f 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetHitsByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.cxx
index 45590a35156ff95288fd76bbe2e8a7e053636057..2a55c232867203f6e91fb4c9807460c442bba2f0 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxJetTobByteStreamAuxCnv::CmxJetTobByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxJetTobByteStreamAuxCnv"),
   m_name("CmxJetTobByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxJetTobByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXJetTobAuxContainer>::ID();
 }
 
+long CmxJetTobByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxJetTobByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.h
index bf0a72051a39dcaed5c5f5cefebb89d2be27da8f..20809959d9bf3b40ad19038a6fb2edfbba7b05fe 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.cxx
index c216a2890378ad6cb16f5fc8510aa9732ef0dd2b..326d52ed32e8e5a590dcabc7afbcb151e8205d0b 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxJetTobByteStreamxAODCnv::CmxJetTobByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxJetTobByteStreamxAODCnv"),
     m_name("CmxJetTobByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxJetTobByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXJetTobContainer>::ID();
 }
 
+long CmxJetTobByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxJetTobByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.h
index b13fa32e113ee9031a48ec35a551334ceddee6b5..35895447b3c0c88258dd376a026ee3c44863443f 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxJetTobByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.cxx
index 5e4dd99b4f51e89d9026cd0321d770f577d4e84e..15cc5487a9fa7232e1d191b97032f6ca1f7d7de1 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CmxRoIByteStreamAuxCnv::CmxRoIByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxRoIByteStreamAuxCnv"),
   m_name("CmxRoIByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepRoiByteStreamV2Tool/JepRoiByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CmxRoIByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CMXRoIAuxContainer>::ID();
 }
 
+long CmxRoIByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CmxRoIByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.h
index b97f1888a92aec2055337f5861f70815ea9a5489..64427570ba7780dde9c1602b908ab6446a4196e2 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.cxx
index 3fc74ed9903d05101916862065d58d8cbc56ee3f..dcf8927db47a7806a8ddee34cd12aec14f9d62e1 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CmxRoIByteStreamxAODCnv::CmxRoIByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CmxRoIByteStreamxAODCnv"),
     m_name("CmxRoIByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CmxRoIByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CMXRoIContainer>::ID();
 }
 
+long CmxRoIByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CmxRoIByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.h
index f8e3904fd35b25f880702b98e0ea412d4d95d90e..8c90fc6df2c02298d5ecdb205b958b4944f3b33a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CmxRoIByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.cxx
index 607c562e07540e44be38a5251fdc5407385577bc..e6d785af094bc0ed1eec80da83847761c674e81d 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 CpmTobRoiByteStreamAuxCnv::CpmTobRoiByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CpmTobRoiByteStreamAuxCnv"),
   m_name("CpmTobRoiByteStreamAuxCnv"),
   m_readTool("LVL1BS::CpmRoiByteStreamV2Tool/CpmRoiByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& CpmTobRoiByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CPMTobRoIAuxContainer>::ID();
 }
 
+long CpmTobRoiByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CpmTobRoiByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.h
index b0ea22ddd844e7f7a6ca97368a8b93c6ed7c4de9..d877d17bca7c7633574e5351ec540e110b29d009 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.cxx
index 5667258532c6da88a39009e586451e095296fef1..0f1ff6a0529c4d44411166bbb551bd0fff51b49a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CpmTobRoiByteStreamxAODCnv::CpmTobRoiByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CpmTobRoiByteStreamxAODCnv"),
     m_name("CpmTobRoiByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CpmTobRoiByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CPMTobRoIContainer>::ID();
 }
 
+long CpmTobRoiByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmTobRoiByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.h
index 5f9999263bf4505ef7849b8192dd26d7d5dae631..29ee3cce3b90cdda3a98657bcf0cb2a8181e9d8b 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTobRoiByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.cxx
index ce4f208afc4d3b2c35c8bc65123457e428d027aa..6cd78f179eb95b30bbdd62634d6eef64e900c88e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.cxx
@@ -54,7 +54,7 @@
 
 namespace LVL1BS {
 CpmTowerByteStreamAuxCnv::CpmTowerByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "CpmTowerByteStreamAuxCnv"),
   m_name("CpmTowerByteStreamAuxCnv"),
   m_cpmReadTool("LVL1BS::CpByteStreamV2Tool/CpByteStreamV2Tool")
@@ -65,11 +65,13 @@ const CLID& CpmTowerByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::CPMTowerAuxContainer>::ID();
 }
 
+long CpmTowerByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode CpmTowerByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.h
index ffd49a943e329d4e25aca0974bc2bf08291d4e09..9d51145c0d9f66f626da5995daa39a3d08008ef5 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.cxx
index d631210bc62dff298fa081807268e8ab96af892c..4339d333e156795f9f10c5f7be3072994df32925 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 CpmTowerByteStreamxAODCnv::CpmTowerByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "CpmTowerByteStreamxAODCnv"),
     m_name("CpmTowerByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& CpmTowerByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::CPMTowerContainer>::ID();
 }
 
+long CpmTowerByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode CpmTowerByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.h
index 0401231c27588e06810397fb04c94fe4ebf42b5e..7522e24466d95be37b8754ef263476f276b67834 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/CpmTowerByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CpmTowers.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.cxx
index 1b2f3964548a948bfaebcb561d85412825add1fb..f98210fb5e2882b86943b9b172244083d0b720d1 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 JemEtSumsByteStreamAuxCnv::JemEtSumsByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "JemEtSumsByteStreamAuxCnv"),
   m_name("JemEtSumsByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& JemEtSumsByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::JEMEtSumsAuxContainer>::ID();
 }
 
+long JemEtSumsByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode JemEtSumsByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.h
index 975ada118f706b8e6e5c0df3e01eb046fe39069c..13dcff333d5615252d75c357a1ed351818a4965d 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.cxx
index 7dca3de694ccbeb9192639664fac1c583a26f439..c0a7bc01051a38cebb47f5ec70008bcbf4fcf3f5 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 JemEtSumsByteStreamxAODCnv::JemEtSumsByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "JemEtSumsByteStreamxAODCnv"),
     m_name("JemEtSumsByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& JemEtSumsByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::JEMEtSumsContainer>::ID();
 }
 
+long JemEtSumsByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JemEtSumsByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.h
index e152ff4731cdeb96c7abced527e6ece9bb02a7bd..9f9952207a433cb54bc7398e2901fab2b9eafd6b 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemEtSumsByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.cxx
index 5fd93bb48073322acf6728028c9aa43c79e34984..d3ffeb107d050b21c92b621ea8c68bbf347ff87a 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 JemTobRoiByteStreamAuxCnv::JemTobRoiByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "JemTobRoiByteStreamAuxCnv"),
   m_name("JemTobRoiByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepRoiByteStreamV2Tool/JepRoiByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& JemTobRoiByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::JEMTobRoIAuxContainer>::ID();
 }
 
+long JemTobRoiByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode JemTobRoiByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.h
index 0206ffc1b8d8d046b203717ac58b30e65e8a0ec5..2bcfc8881232faa5295cf6f8525d80be0de7a6c8 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.cxx
index 9805a812d23f7de64467b5e1844e3cb4b9fc3c3b..30f68322b4e4267b394a63cba33131e9d43c0c57 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 JemTobRoiByteStreamxAODCnv::JemTobRoiByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "JemTobRoiByteStreamxAODCnv"),
     m_name("JemTobRoiByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& JemTobRoiByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::JEMTobRoIContainer>::ID();
 }
 
+long JemTobRoiByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JemTobRoiByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.h
index 7357271f9c7d5062daf1b3761d6c3c5ccac97897..715edd36ca468536cb4012e46f21e7cd4243a8cd 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JemTobRoiByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for CmxTob.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.cxx
index 885f7e8d09e195c6ca3da42eda15d9a94633f233..2c4c3defa1ccb2cbfcc8d18c886d7987eaa3eb1d 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 JetElementByteStreamAuxCnv::JetElementByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "JetElementByteStreamAuxCnv"),
   m_name("JetElementByteStreamAuxCnv"),
   m_readTool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool")
@@ -63,11 +63,13 @@ const CLID& JetElementByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::JetElementAuxContainer>::ID();
 }
 
+long JetElementByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode JetElementByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.h
index f74316cfa191f89f529c09ad325f5ab423f4888f..290f2a551c8a91dd6c7228953a26ecec18c54f50 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.cxx
index 8dffbf66f1277e6a12231f8a22d55774a37cc5f0..26111b5f66c66309066ee114549c3f56ffe91f59 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 JetElementByteStreamxAODCnv::JetElementByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "JetElementByteStreamxAODCnv"),
     m_name("JetElementByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& JetElementByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::JetElementContainer>::ID();
 }
 
+long JetElementByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode JetElementByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.h
index c0ae4ea347815df765e20012881d50b421a56578..e73191ef243a2781ba9c005c00e7a741704f0b2e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/JetElementByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for JetElement.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.h
index f6ef770b972a2bcd6cbb4c45dc7d2c91009aa61c..effa5d1b2bf726f01cd32d51da911847a6b748c9 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -51,8 +49,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.icc b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.icc
index b72f52d3154cd45799f8578aaafb85959b505fe7..a0bf9e62d4c4c827ce504547f4b4a707b9b09c4b 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.icc
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/L1CaloByteStreamAuxCnv.icc
@@ -31,7 +31,7 @@ namespace LVL1BS {
 
 template<typename ContainerT, typename AuxContainerT>
 L1CaloByteStreamAuxCnv<ContainerT, AuxContainerT>::L1CaloByteStreamAuxCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "L1CaloByteStreamAuxCnv"),
     m_name("L1CaloByteStreamAuxCnv"),
     m_readTool("LVL1BS::L1CaloByteStreamReadTool/L1CaloByteStreamReadTool") {
@@ -44,11 +44,13 @@ const CLID& L1CaloByteStreamAuxCnv<ContainerT,AuxContainerT>::classID() {
   return ClassID_traits<ContainerT>::ID();
 }
 
+long L1CaloByteStreamAuxCnv<ContainerT,AuxContainerT>::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 template<typename ContainerT, typename AuxContainerT>
 StatusCode L1CaloByteStreamAuxCnv<ContainerT, AuxContainerT>::initialize() {
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.cxx
index f7021bd104d4339da2cc887728d067699f535bef..8f28106dad76d55afc1d09d2d663e51e79ec80f8 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.cxx
@@ -36,7 +36,7 @@
 
 namespace LVL1BS {
 PpmByteStreamAuxCnv::PpmByteStreamAuxCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "PpmByteStreamAuxCnv"),
     m_name("PpmByteStreamAuxCnv"),
     m_readTool("LVL1BS::PpmByteStreamReadV1V2Tool/PpmByteStreamReadV1V2Tool"),
@@ -48,11 +48,13 @@ const CLID& PpmByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::TriggerTowerAuxContainer>::ID();
 }
 
+long PpmByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode PpmByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
       "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.h
index 1fb8d5e28f3cb00bad8d62cc2767dd7fe09ed9e4..8ae7542d77f761aa187ae1b27900e9f960d3608e 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamAuxCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 #include "ZdcByteStream/ZdcByteStreamReadV1V2Tool.h"
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamReadV1V2Tool.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamReadV1V2Tool.cxx
index 5a926c38333d7a97d2442723343185c32d12daf5..c67620762b464d23289a2ab013be95dd64c12b26 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamReadV1V2Tool.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamReadV1V2Tool.cxx
@@ -89,9 +89,6 @@ PpmByteStreamReadV1V2Tool::PpmByteStreamReadV1V2Tool(const std::string& name /*=
 // ===========================================================================
 // Initialize
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode PpmByteStreamReadV1V2Tool::initialize() {
   ATH_MSG_INFO(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.cxx
index 8ef8d161bda43d73156391b06cb4040f3cc2a29d..d15bada241012105bfa6576c5bc8f447af752988 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.cxx
@@ -33,7 +33,7 @@
 namespace LVL1BS {
 
 PpmByteStreamxAODCnv::PpmByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "PpmByteStreamxAODCnv"),
     m_name("PpmByteStreamxAODCnv")
 {
@@ -46,11 +46,13 @@ const CLID& PpmByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::TriggerTowerContainer>::ID();
 }
 
+long PpmByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode PpmByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.h
index 5e6b42981e0647ebc8ffca4f4c2e641ca0c64eda..72e1eefbacb4f50248d76973180229c47d64b6f6 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/PpmByteStreamxAODCnv.h
@@ -26,8 +26,6 @@ template <typename> class CnvFactory;
 class StoreGateSvc;
 
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 
@@ -53,8 +51,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.cxx
index e61d084648f8fd5aa656370f13940baaa589d94f..b710f74e30721d59e386062fab87dda9fd4e5b49 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.cxx
@@ -52,7 +52,7 @@
 
 namespace LVL1BS {
 RodHeaderByteStreamAuxCnv::RodHeaderByteStreamAuxCnv(ISvcLocator* svcloc) :
-  Converter(ByteStream_StorageType, classID(), svcloc),
+  Converter(storageType(), classID(), svcloc),
   AthMessaging(svcloc != 0 ? msgSvc() : 0, "RodHeaderByteStreamAuxCnv"),
   m_name("RodHeaderByteStreamAuxCnv"),
   m_readTool("LVL1BS::RodHeaderByteStreamTool/RodHeaderByteStreamTool")
@@ -63,11 +63,13 @@ const CLID& RodHeaderByteStreamAuxCnv::classID() {
   return ClassID_traits<xAOD::RODHeaderAuxContainer>::ID();
 }
 
+long RodHeaderByteStreamAuxCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 StatusCode RodHeaderByteStreamAuxCnv::initialize() {
   ATH_MSG_DEBUG(
     "Initializing " << m_name << " - package version " << PACKAGE_VERSION);
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.h
index d2c292baac82a04da01f85c50388dea8d9433ad0..27b5aa4da4707555652a4d81c3dbf6df5caef111 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamAuxCnv.h
@@ -24,8 +24,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 
-// Externals
-extern long ByteStream_StorageType;
 
 
 namespace LVL1BS {
@@ -50,8 +48,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 private:
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.cxx b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.cxx
index 99273413253c4221a879d7230c19b79af8e56448..6dafd3f4d4590cbc43bf2c585427eb03f534474f 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.cxx
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.cxx
@@ -32,7 +32,7 @@
 namespace LVL1BS {
 
 RodHeaderByteStreamxAODCnv::RodHeaderByteStreamxAODCnv(ISvcLocator* svcloc) :
-    Converter(ByteStream_StorageType, classID(), svcloc),
+    Converter(storageType(), classID(), svcloc),
     AthMessaging(svcloc != 0 ? msgSvc() : 0, "RodHeaderByteStreamxAODCnv"),
     m_name("RodHeaderByteStreamxAODCnv")
 {
@@ -45,11 +45,13 @@ const CLID& RodHeaderByteStreamxAODCnv::classID() {
   return ClassID_traits<xAOD::RODHeaderContainer>::ID();
 }
 
+long RodHeaderByteStreamxAODCnv::storageType()
+{
+  return ByteStreamAddress::storageType();
+}
+
 //  Init method gets all necessary services etc.
 
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
 
 StatusCode RodHeaderByteStreamxAODCnv::initialize() {
   ATH_MSG_DEBUG(
diff --git a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.h b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.h
index b9a4e91b93e31a99b822988d32fea6b3168e1ce0..9095f3909b5c0d6220a4ad40fb3e0a333edde35f 100644
--- a/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.h
+++ b/Trigger/TrigT1/TrigT1CaloByteStream/src/xaod/RodHeaderByteStreamxAODCnv.h
@@ -22,8 +22,6 @@ class StatusCode;
 
 template <typename> class CnvFactory;
 class StoreGateSvc;
-// Externals
-extern long ByteStream_StorageType;
 
 namespace LVL1BS {
 /** ByteStream converter for RodHeader.
@@ -45,8 +43,8 @@ public:
   virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
 
   //  Storage type and class ID
-  virtual long repSvcType() const { return ByteStream_StorageType;}
-  static  long storageType(){ return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
+  static  long storageType();
 
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1CaloSim/src/CPMSim.cxx b/Trigger/TrigT1/TrigT1CaloSim/src/CPMSim.cxx
index a22fb5af832876683d465840f8e1934479790ff4..755f0a3b91ee58d74d1e229d5c57a84aaef7b4b9 100644
--- a/Trigger/TrigT1/TrigT1CaloSim/src/CPMSim.cxx
+++ b/Trigger/TrigT1/TrigT1CaloSim/src/CPMSim.cxx
@@ -29,8 +29,8 @@
 #include "TrigT1CaloEvent/CPMTobRoI_ClassDEF.h"
 #include "TrigT1CaloEvent/CPMCMXData_ClassDEF.h"
 
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
+#include "xAODEventInfo/EventInfo.h"
+
 #include "TrigConfL1Data/CTPConfig.h"
 #include "TrigConfL1Data/Menu.h"
 #include "TrigConfL1Data/TriggerThreshold.h"
@@ -107,9 +107,9 @@ StatusCode CPMSim::execute( )
   ATH_MSG_DEBUG ( "starting CPMSim" ); 
 
   // For RoI output SLink record
-  const EventInfo* evt;
+  const xAOD::EventInfo* evt;
   if (StatusCode::SUCCESS == evtStore()->retrieve(evt)){
-    m_eventNumber = evt->event_ID()->event_number();
+    m_eventNumber =evt->eventNumber();
   }else{
     ATH_MSG_ERROR(" Unable to retrieve EventInfo from StoreGate ");
   }
diff --git a/Trigger/TrigT1/TrigT1CaloSim/src/RoIROD.cxx b/Trigger/TrigT1/TrigT1CaloSim/src/RoIROD.cxx
index 38de92b8423f675a273648abd2dacfe890e47d5e..cf157f22e149d3611ac1b2876b3be3eeafcefbd1 100644
--- a/Trigger/TrigT1/TrigT1CaloSim/src/RoIROD.cxx
+++ b/Trigger/TrigT1/TrigT1CaloSim/src/RoIROD.cxx
@@ -15,10 +15,7 @@
 
 // running in Athena
 #include "TrigT1CaloSim/RoIROD.h"
-
-#include "EventInfo/EventInfo.h"
-#include "EventInfo/EventID.h"
-
+#include "xAODEventInfo/EventInfo.h"
 #include "TrigT1Interfaces/TrigT1Interfaces_ClassDEF.h"
 
 #include <algorithm>
@@ -84,9 +81,9 @@ StatusCode LVL1::RoIROD::execute( )
 {
   ATH_MSG_DEBUG("Executing" );
 
-  const EventInfo* evt;
+  const xAOD::EventInfo* evt;
   if (StatusCode::SUCCESS == evtStore()->retrieve(evt)){
-    m_eventNumber = evt->event_ID()->event_number();
+    m_eventNumber = evt->eventNumber();
   }else{
     ATH_MSG_ERROR( " Unable to retrieve EventInfo from StoreGate ");
   }
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/CTPByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/CTPByteStreamCnv.h
old mode 100755
new mode 100644
index 6036434596b041148d930e844d5ac19c39ab4531..64ebff9fe10e30dadb328245acfff11fd706d84c
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/CTPByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/CTPByteStreamCnv.h
@@ -21,9 +21,6 @@
 // Forward declaration(s):
 class CTPSrcIdMap;
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the CTP_RDO object
  *
@@ -54,9 +51,9 @@ public:
   virtual StatusCode createRep( DataObject* pObj, IOpaqueAddress*& pAddr );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/MuCTPIByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/MuCTPIByteStreamCnv.h
old mode 100755
new mode 100644
index e5eae54bfd743ccb98ea2b597abf4976585d4a52..c0fce9b256991637ca3d51cdd276116c12a85823
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/MuCTPIByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/MuCTPIByteStreamCnv.h
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGT1RESULTBYTESTREAM_MUCTPIBYTESTREAMCNV_H
@@ -31,9 +31,6 @@
 // Forward declaration(s):
 class MuCTPISrcIdMap;
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the MuCTPI_RDO object
  *
@@ -66,9 +63,9 @@ public:
   virtual StatusCode createRep( DataObject* pObj, IOpaqueAddress*& pAddr );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecCTPByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecCTPByteStreamCnv.h
old mode 100755
new mode 100644
index 0a5eed5e95a1c28ee60ffd649b39eda3603e5237..08482adb2a75b85ce85fb65816a393487117ebf2
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecCTPByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecCTPByteStreamCnv.h
@@ -21,9 +21,6 @@
 // Forward declaration(s):
 class CTPSrcIdMap;
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the CTP_RIO object
  *
@@ -52,9 +49,9 @@ public:
   virtual StatusCode createObj( IOpaqueAddress* pAddr, DataObject*& pObj );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecMuCTPIByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecMuCTPIByteStreamCnv.h
old mode 100755
new mode 100644
index 3e2dfbddf3c3c663cf0cf8f60b8f8076221a9875..ff17922350b39cc182455935c1b744baf2f3d520
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecMuCTPIByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecMuCTPIByteStreamCnv.h
@@ -21,9 +21,6 @@
 // Forward declaration(s):
 class MuCTPISrcIdMap;
 
-// Externals
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the MuCTPI_RIO object
  *
@@ -54,9 +51,9 @@ public:
   virtual StatusCode createObj( IOpaqueAddress* pAddr, DataObject*& pObj );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.h
old mode 100755
new mode 100644
index 35ca48a44166999cf83d01abfa0cbbbb5643549a..2861b3fba3870271e8b57c97961f22f9f04e7c17
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.h
@@ -14,9 +14,6 @@
 // Local include(s):
 #include "TrigT1ResultByteStream/RecRoIBResultByteStreamTool.h"
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the RecRoIBResult object
  *
@@ -44,9 +41,9 @@ public:
   virtual StatusCode createObj( IOpaqueAddress* pAddr, DataObject*& pObj );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.icc b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.icc
index 4ae484f8d9dbcd5fcb6853de0af459726dae796c..6d500e02df8c542eb0dbc336f9dedef3cc13e854 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.icc
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RecRoIBResultByteStreamCnv.icc
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGT1RESULTBYTESTREAM_RECROIBRESULTBYTESTREAMCNV_ICC
@@ -28,7 +28,7 @@
  */
 template< class ROBF >
 RecRoIBResultByteStreamCnv< ROBF >::RecRoIBResultByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "RecRoIBResultByteStreamTool" ) {
 
 }
@@ -44,6 +44,10 @@ const CLID& RecRoIBResultByteStreamCnv< ROBF >::classID() {
 
 }
 
+template< class ROBF >
+long RecRoIBResultByteStreamCnv< ROBF >::storageType() {
+  return ByteStreamAddress::storageType();
+}
 
 /**
  * Init method gets all necessary services etc.
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.h b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.h
old mode 100755
new mode 100644
index 1e6f4be66fc4c6b4b000d0c65cfa6cf28d3d4c2f..c0bded8c16b0e8686035d2f94459dfb9960c7f56
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.h
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.h
@@ -17,9 +17,6 @@
 // Local include(s):
 #include "TrigT1ResultByteStream/RoIBResultByteStreamTool.h"
 
-// External(s):
-extern long ByteStream_StorageType;
-
 /**
  *   @short ByteStream converter for the RoIBResult object
  *
@@ -50,9 +47,9 @@ public:
   virtual StatusCode createRep( DataObject* pObj, IOpaqueAddress*& pAddr );
 
   /// Function needed by the framework
-  virtual long repSvcType() const { return ByteStream_StorageType; }
+  virtual long repSvcType() const { return i_repSvcType(); }
   /// Function needed by the framework
-  static long storageType() { return ByteStream_StorageType; }
+  static long storageType();
   /// Function needed by the framework
   static const CLID& classID();
 
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.icc b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.icc
index 621cec82975893bab2431d62023b8a4500b54e5e..e5bdc37697cfb7372cfa9e54d74f9ef0556c22a3 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.icc
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/TrigT1ResultByteStream/RoIBResultByteStreamCnv.icc
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGT1RESULTBYTESTREAM_ROIBRESULTBYTESTREAMCNV_ICC
@@ -29,7 +29,7 @@
  */
 template< class ROBF >
 RoIBResultByteStreamCnv< ROBF >::RoIBResultByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "RoIBResultByteStreamTool" ),
     m_ByteStreamCnvSvc( "ByteStreamCnvSvc", "RoIBResultByteStreamCnv" ) {
 
@@ -44,6 +44,10 @@ const CLID& RoIBResultByteStreamCnv< ROBF >::classID(){
   return ClassID_traits< ROIB::RoIBResult >::ID();
 }
 
+template< class ROBF >
+long RoIBResultByteStreamCnv< ROBF >::storageType() {
+  return ByteStreamAddress::storageType();
+}
 
 /**
  * Init method gets all necessary services etc.
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/src/CTPByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1ResultByteStream/src/CTPByteStreamCnv.cxx
index 23b7841c34e4ed7a251487234873b131693d4208..2847b9b92b9b7d2ce791541891b1eb6aee120a92 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/src/CTPByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/src/CTPByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -23,7 +23,7 @@
  * base class in the correct way.
  */
 CTPByteStreamCnv::CTPByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "CTPByteStreamTool" ), m_srcIdMap( 0 ),
     m_robDataProvider( "ROBDataProviderSvc", "CTPByteStreamCnv" ),
     m_ByteStreamEventAccess( "ByteStreamCnvSvc", "CTPByteStreamCnv" ) {
@@ -53,6 +53,10 @@ const CLID& CTPByteStreamCnv::classID() {
 
 }
 
+long CTPByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 /**
  * Init method gets all necessary services etc.
  */
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/src/MuCTPIByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1ResultByteStream/src/MuCTPIByteStreamCnv.cxx
index 6610c55ed47b906c22483374a7f9b1089b73fd17..d4926702ec997ac10ab818571781f1d46698f5b5 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/src/MuCTPIByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/src/MuCTPIByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -31,7 +31,7 @@
  * base class in the correct way.
  */
 MuCTPIByteStreamCnv::MuCTPIByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "MuCTPIByteStreamTool" ), m_srcIdMap( 0 ),
 #ifdef CTP_MUCTPI_HAVE_SAME_ROS
     m_ctp_tool( "CTPByteStreamTool" ),
@@ -66,6 +66,10 @@ const CLID& MuCTPIByteStreamCnv::classID() {
 
 }
 
+long MuCTPIByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 /**
  * Init method gets all necessary services etc.
  */
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/src/RecCTPByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1ResultByteStream/src/RecCTPByteStreamCnv.cxx
index d270aa8e2900fe701b18bcf3ef2bd0d9faf22830..3830dc9a04e138f6642c7976e83c6514da54aa8a 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/src/RecCTPByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/src/RecCTPByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -23,7 +23,7 @@
  * base class in the correct way.
  */
 RecCTPByteStreamCnv::RecCTPByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "RecCTPByteStreamTool" ), m_srcIdMap( 0 ),
     m_robDataProvider( "ROBDataProviderSvc", "RecCTPByteStreamCnv" ) {
 
@@ -52,6 +52,10 @@ const CLID& RecCTPByteStreamCnv::classID() {
 
 }
 
+long RecCTPByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 /**
  * Init method gets all necessary services etc.
  */
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/src/RecMuCTPIByteStreamCnv.cxx b/Trigger/TrigT1/TrigT1ResultByteStream/src/RecMuCTPIByteStreamCnv.cxx
index e495669ae0ec93ef72af8fb89c329b60a5d58018..15d4cb7496eb136bb552288e58248542d5a2c378 100755
--- a/Trigger/TrigT1/TrigT1ResultByteStream/src/RecMuCTPIByteStreamCnv.cxx
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/src/RecMuCTPIByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -22,7 +22,7 @@
  * base class in the correct way.
  */
 RecMuCTPIByteStreamCnv::RecMuCTPIByteStreamCnv( ISvcLocator* svcloc )
-  : Converter( ByteStream_StorageType, classID(), svcloc ),
+  : Converter( storageType(), classID(), svcloc ),
     m_tool( "RecMuCTPIByteStreamTool" ), m_srcIdMap( 0 ),
     m_robDataProvider( "ROBDataProviderSvc", "RecMuCTPIByteStreamCnv" ) {
 
@@ -51,6 +51,10 @@ const CLID& RecMuCTPIByteStreamCnv::classID() {
 
 }
 
+long RecMuCTPIByteStreamCnv::storageType() {
+  return ByteStreamAddress::storageType();
+}
+
 /**
  * Init method gets all necessary services etc.
  */
diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_physics_pp_v7_rdotobstoesd_build.sh b/Trigger/TrigValidation/TrigAnalysisTest/test/test_physics_pp_v7_rdotobstoesd_build.sh
index baa5b204770015b79bfda6df20e51eab2d1f004f..967ff8d8ee32763f10f654e865bf19181304662e 100755
--- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_physics_pp_v7_rdotobstoesd_build.sh
+++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_physics_pp_v7_rdotobstoesd_build.sh
@@ -28,7 +28,7 @@ export EVENTS="3"
 export JOBOPTION="TrigAnalysisTest/testAthenaTrigRDOtoBS.py"
 
 source exec_athena_art_trigger_validation.sh
-athena.py -c "jp.AthenaCommonFlags.BSRDOInput=['raw.data']" testAthenaTrigBStoESD.py | tee ${JOB_LOG%%.*}2.${JOB_LOG#*.}
+athena.py -c "jp.AthenaCommonFlags.BSRDOInput=['raw.data']" TrigAnalysisTest/testAthenaTrigBStoESD.py | tee ${JOB_LOG%%.*}2.${JOB_LOG#*.}
 echo "art-result: ${PIPESTATUS[0]} ${JOB_LOG%%.*}2"
 
 source exec_art_triggertest_post.sh
diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_run1_bstoesdaod_build.sh b/Trigger/TrigValidation/TrigAnalysisTest/test/test_run1_bstoesdaod_build.sh
index c1e0221acd4559951952964377a93cabd873281d..4a3fa15424b2907ec1621a19f0358509de3b2026 100755
--- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_run1_bstoesdaod_build.sh
+++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_run1_bstoesdaod_build.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 # art-description: Trigger test on Run 1 Bytestream data
-# art-type: grid
+# art-type: build
 # art-include: 21.0/Athena
 # art-include: 21.3/Athena
 # art-include: 21.0-TrigMC/Athena
@@ -50,5 +50,4 @@ else
   echo "art-result: xAODContainers 1"
 fi
 
-source exec_athena_art_trigger_validation.sh
 source exec_art_triggertest_post.sh
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py
index a53c608660cb28e5f3c923e1ceb6573042cfa141..fc01a394e83bd1637afdd3acd5054dea448c5f28 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/CaloMenuDefs.py
@@ -38,8 +38,8 @@ def fastCaloMenuSequence(name):
     CaloMenuDefs.L2CaloClusters = sequenceOut
 
  
-    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromName
+    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromDict
     return MenuSequence( Sequence    = sequence,
                          Maker       = fastCaloViewsMaker, 
                          Hypo        = theFastCaloHypo,
-                         HypoToolGen = TrigL2CaloHypoToolFromName )
+                         HypoToolGen = TrigL2CaloHypoToolFromDict )
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/ElectronMenuConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/ElectronMenuConfig.py
index 0158dfcdb4958240eb4dd13ca46e926cc47f8a97..417d1fbf9f05b0bf62ad307edd62e567665649ef 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/ElectronMenuConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/ElectronMenuConfig.py
@@ -182,7 +182,7 @@ def generateElectronsCfg( flags ):
     acc = ComponentAccumulator()
     from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, ChainStep, Chain, RecoFragmentsPool
 
-    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromName
+    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromDict
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigL2CaloHypoAlgMT
     l2CaloHypo                     = TrigL2CaloHypoAlgMT( 'L2ElectronCaloHypo' )
     l2CaloHypo.CaloClusters        = 'L2CaloEMClusters'
@@ -193,7 +193,7 @@ def generateElectronsCfg( flags ):
     fastCaloSequence = MenuSequence( Sequence    = l2CaloReco.sequence(),
                                      Maker       = l2CaloReco.inputMaker(),
                                      Hypo        = l2CaloHypo,
-                                     HypoToolGen = TrigL2CaloHypoToolFromName )
+                                     HypoToolGen = TrigL2CaloHypoToolFromDict )
 
     fastCaloStep = ChainStep("Electron_step1", [fastCaloSequence])
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureHypoTools.py b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureHypoTools.py
index b6163673e65def6ea31280c819a87f737dc26c45..2ae01830e96dca9d0b0a16bb386c02379fb66203 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureHypoTools.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureHypoTools.py
@@ -10,22 +10,26 @@ def TestHypoTool(name, prop, threshold_value):
     h = HLTTest__TestHypoTool(name, OutputLevel=DEBUG, Threshold=value, Property=prop, LinkName=UseThisLinkName)
     return h
 
-def MuTestHypoTool(name, conf):
+def MuTestHypoTool(chainDict):
     #threshold = conf.replace("HLT_mu","")
+    conf = name = chainDict['chainName']
     threshold = getThreshold(conf, 'mu') 
     return TestHypoTool(name,prop="pt", threshold_value=threshold)
 
-def ElTestHypoTool(name,conf):
+def ElTestHypoTool(chainDict):
     #threshold = conf.replace("HLT_e","")
+    conf = name = chainDict['chainName']
     threshold = getThreshold(conf, 'e') 
     return TestHypoTool(name,prop="et", threshold_value=threshold)
 
-def GammTestHypoTool(name,conf):
+def GammTestHypoTool(chainDict):
+    conf = name = chainDict['chainName']
     threshold = getThreshold(conf, 'g') 
     return TestHypoTool(name,prop="et", threshold_value=threshold)
 
 
-def MuTest2HypoTool(name, conf):
+def MuTest2HypoTool(chainDict):
+    conf = name = chainDict['chainName']
     threshold = getThreshold(conf, 'mu')  
     return TestHypoTool(name,prop="pt2", threshold_value=threshold)
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/PhotonMenuConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/PhotonMenuConfig.py
index 2007bddf05faf7e99d3b3209fa19ad7002b06e3b..28fab911b736a334626462bbf98fd4ab7eca3fd0 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/PhotonMenuConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/PhotonMenuConfig.py
@@ -53,7 +53,7 @@ def generatePhotonsCfg( flags ):
     acc = ComponentAccumulator()
     from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, ChainStep, Chain, RecoFragmentsPool
 
-    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromName
+    from TrigEgammaHypo.TrigL2CaloHypoTool import TrigL2CaloHypoToolFromDict
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigL2CaloHypoAlgMT
     l2CaloHypo              = TrigL2CaloHypoAlgMT("L2PhotonCaloHypo")
     l2CaloHypo.CaloClusters = 'L2CaloEMClusters'
@@ -68,7 +68,7 @@ def generatePhotonsCfg( flags ):
     fastCaloSequence = MenuSequence( Sequence    = l2CaloReco.sequence(),
                                      Maker       = l2CaloReco.inputMaker(),
                                      Hypo        = l2CaloHypo,
-                                     HypoToolGen = TrigL2CaloHypoToolFromName )
+                                     HypoToolGen = TrigL2CaloHypoToolFromDict )
 
     fastCaloStep = ChainStep( "Photon_step1", [fastCaloSequence] )
 
@@ -83,12 +83,12 @@ def generatePhotonsCfg( flags ):
     l2PhotonHypo.RunInView=True
     l2PhotonHypo.OutputLevel = VERBOSE
 
-    from TrigEgammaHypo.TrigL2PhotonHypoTool import TrigL2PhotonHypoToolFromName
+    from TrigEgammaHypo.TrigL2PhotonHypoTool import TrigL2PhotonHypoToolFromDict
 
     l2PhotonSequence = MenuSequence( Sequence    = l2PhotonReco.sequence(),
                                      Maker       = l2PhotonReco.inputMaker(),
                                      Hypo        = l2PhotonHypo,
-                                     HypoToolGen = TrigL2PhotonHypoToolFromName )
+                                     HypoToolGen = TrigL2PhotonHypoToolFromDict )
 
     l2PhotonStep = ChainStep( "Photon_step2", [ l2PhotonSequence] )
     
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
index 0d5284f70b7e4078d4d6b3d7caf2fb4697842ae2..a7d50ce3b0dbaae144e1ce80a58439bc4c115575 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/bjetMenuDefs.py
@@ -105,7 +105,7 @@ def bJetStep1Sequence():
 
     # hypo
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoAlgMT
-    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromName_j
+    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromDict_j
     hypo = TrigBjetEtHypoAlgMT("TrigBjetEtHypoAlgMT_step1")
     hypo.OutputLevel = DEBUG
     hypo.Jets = jetSplitter.OutputJets
@@ -119,7 +119,7 @@ def bJetStep1Sequence():
     return MenuSequence( Sequence    = BjetAthSequence,
                          Maker       = InputMakerAlg,
                          Hypo        = hypo,
-                         HypoToolGen = TrigBjetEtHypoToolFromName_j )
+                         HypoToolGen = TrigBjetEtHypoToolFromDict_j )
 
 def bJetStep1SequenceALLTE():
     # menu components
@@ -178,7 +178,7 @@ def bJetStep1SequenceALLTE():
 
     # hypo
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoAlgMT
-    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromName_j
+    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromDict_j
     hypo = TrigBjetEtHypoAlgMT("TrigBjetEtHypoAlgMT_step1_ALLTE")
     hypo.OutputLevel = DEBUG
     hypo.Jets = jetSplitter.OutputJets
@@ -192,7 +192,7 @@ def bJetStep1SequenceALLTE():
     return MenuSequence( Sequence    = BjetAthSequence,
                          Maker       = InputMakerAlg,
                          Hypo        = hypo,
-                         HypoToolGen = TrigBjetEtHypoToolFromName_j )
+                         HypoToolGen = TrigBjetEtHypoToolFromDict_j )
 
 
 
@@ -235,7 +235,7 @@ def bJetStep2Sequence():
     
     # hypo
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoAlgMT
-    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromName_gsc
+    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromDict_gsc
     hypo = TrigBjetEtHypoAlgMT("TrigBjetEtHypoAlg_step2")
     hypo.OutputLevel = DEBUG
     hypo.RoIs = "step1RoI"
@@ -250,7 +250,7 @@ def bJetStep2Sequence():
     return MenuSequence( Sequence    = BjetAthSequence,
                          Maker       = InputMakerAlg,
                          Hypo        = hypo,
-                         HypoToolGen = TrigBjetEtHypoToolFromName_gsc )
+                         HypoToolGen = TrigBjetEtHypoToolFromDict_gsc )
 
 
 def bJetStep2SequenceALLTE():
@@ -274,7 +274,7 @@ def bJetStep2SequenceALLTE():
 
     # hypo
     from TrigBjetHypo.TrigBjetHypoConf import TrigBjetEtHypoAlgMT
-    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromName_gsc
+    from TrigBjetHypo.TrigBjetEtHypoTool import TrigBjetEtHypoToolFromDict_gsc
     hypo = TrigBjetEtHypoAlgMT("TrigBjetEtHypoAlg_step2ALLTE")
     hypo.OutputLevel = DEBUG
     hypo.Jets = theGSC.JetOutputKey
@@ -288,7 +288,7 @@ def bJetStep2SequenceALLTE():
     return MenuSequence( Sequence    = BjetAthSequence,
                          Maker       = InputMakerAlg,
                          Hypo        = hypo,
-                         HypoToolGen = TrigBjetEtHypoToolFromName_gsc )
+                         HypoToolGen = TrigBjetEtHypoToolFromDict_gsc )
 
 # ==================================================================================================== 
 #    step 3: secondary vertex and b-tagging
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py
index 8c1ddd83339740063c3fb413fb6c585d1a845d90..e4693823ef4e17534013654dfd1daaf552e0e0f0 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/electronMenuDefs.py
@@ -100,10 +100,10 @@ def electronMenuSequence():
     theElectronHypo.RunInView=True
     theElectronHypo.OutputLevel = VERBOSE
 
-    from TrigEgammaHypo.TrigL2ElectronHypoTool import TrigL2ElectronHypoToolFromName
+    from TrigEgammaHypo.TrigL2ElectronHypoTool import TrigL2ElectronHypoToolFromDict
 
     return  MenuSequence( Maker       = l2ElectronViewsMaker,                                        
                           Sequence    = electronAthSequence,
                           Hypo        = theElectronHypo,
-                          HypoToolGen = TrigL2ElectronHypoToolFromName )
+                          HypoToolGen = TrigL2ElectronHypoToolFromDict )
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
index 5082582d2db0ad342a688eba32793ef3d7c6db09..eddd243889e45ad5dc5ba835a9db76524dd2e12c 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/jetMenuDefs.py
@@ -16,7 +16,7 @@ def jetMenuSequence():
      
     #hypo
     from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoAlgMT
-    from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromName
+    from TrigHLTJetHypo.TrigJetHypoToolConfig import trigJetHypoToolFromDict
     hypo = TrigJetHypoAlgMT("TrigJetHypoAlgMT")
     hypo.OutputLevel = DEBUG
     hypo.Jets = sequenceOut
@@ -25,4 +25,4 @@ def jetMenuSequence():
     return  MenuSequence( Sequence    = JetAthSequence,
                           Maker       = InputMakerAlg,
                           Hypo        = hypo,
-                          HypoToolGen = trigJetHypoToolFromName )
+                          HypoToolGen = trigJetHypoToolFromDict )
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/metMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/metMenuDefs.py
index 8d43b41cb4b8f68bbe00b7a4a0a3fb8cbcffff05..0c57a73be3fae3fc354a1420efb7ff79ab7175e6 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/metMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/metMenuDefs.py
@@ -13,7 +13,7 @@ def metCellMenuSequence():
     (metCellSequence, InputMakerAlg, sequenceOut) = RecoFragmentsPool.retrieve(metCellAthSequence,ConfigFlags)
   
     #hypo
-    from TrigMissingETHypo.TrigMissingETHypoConfigMT import MissingETHypoAlgMT, TrigMETCellHypoToolFromName, MissingETHypoToolMT
+    from TrigMissingETHypo.TrigMissingETHypoConfigMT import MissingETHypoAlgMT, TrigMETCellHypoToolFromDict, MissingETHypoToolMT
 
     metHypoAlg = MissingETHypoAlgMT("METHypoAlg")
     metHypoAlg.METContainerKey=sequenceOut
@@ -22,5 +22,5 @@ def metCellMenuSequence():
     return  MenuSequence( Sequence    = metCellSequence,
                           Maker       = InputMakerAlg,
                           Hypo        = metHypoAlg,
-                          HypoToolGen = TrigMETCellHypoToolFromName )
+                          HypoToolGen = TrigMETCellHypoToolFromDict )
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/muMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/muMenuDefs.py
index addc98ddd19e8462a2eeb1f311a44fa9b0d656f9..fc6a247959614bba6c44741a1b1c1634ed2e5763 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/muMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/muMenuDefs.py
@@ -84,12 +84,12 @@ def muFastStep():
     l2muFastSequence = seqAND("l2muFastSequence", [ l2MuViewsMaker, muFastRecoSequence ])
     
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMufastHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMufastHypoToolFromDict
   
     return MenuSequence( Sequence    = l2muFastSequence,
                          Maker       = l2MuViewsMaker,
                          Hypo        = trigMufastHypo,
-                         HypoToolGen = TrigMufastHypoToolFromName )
+                         HypoToolGen = TrigMufastHypoToolFromDict )
 
 
 ### ************* Step2  ************* ###
@@ -118,12 +118,12 @@ def muCombStep():
     
     l2muCombSequence = seqAND("l2muCombSequence", eventAlgs + [l2muCombViewsMaker, muCombRecoSequence] )
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigmuCombHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigmuCombHypoToolFromDict
     
     return MenuSequence( Sequence    = l2muCombSequence,
                          Maker       = l2muCombViewsMaker,
                          Hypo        = trigmuCombHypo,
-                         HypoToolGen = TrigmuCombHypoToolFromName )
+                         HypoToolGen = TrigmuCombHypoToolFromDict )
   
 
 ### ************* Step3  ************* ###
@@ -151,12 +151,12 @@ def muEFMSStep():
     
     muonEFMSonlySequence = seqAND( "muonEFMSonlySequence", [efmsViewsMaker, muEFMSRecoSequence] )
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromDict
     
     return MenuSequence( Sequence    = muonEFMSonlySequence,
                          Maker       = efmsViewsMaker,
                          Hypo        = trigMuonEFMSHypo,
-                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromName )
+                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromDict )
 
 ###  EFSA step ###
 def muEFSAStep():
@@ -181,12 +181,12 @@ def muEFSAStep():
     
     muonEFSAonlySequence = seqAND( "muonEFSAonlySequence", [efsaViewsMaker, muEFSARecoSequence ] )
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromDict
     
     return MenuSequence( Sequence    = muonEFSAonlySequence,
                          Maker       = efsaViewsMaker,
                          Hypo        = trigMuonEFSAHypo,
-                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromName )
+                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromDict )
 
 def muEFCBStep():
 
@@ -215,12 +215,12 @@ def muEFCBStep():
     
     muonEFCBSequence = seqAND( "muonEFCBSequence", [efcbViewsMaker, efcbViewNode] )
 
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFCombinerHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFCombinerHypoToolFromDict
 
     return MenuSequence( Sequence    = muonEFCBSequence,
                          Maker       = efcbViewsMaker,
                          Hypo        = trigMuonEFCBHypo,
-                         HypoToolGen = TrigMuonEFCombinerHypoToolFromName )
+                         HypoToolGen = TrigMuonEFCombinerHypoToolFromDict )
 
 ### EF SA full scan ###
 def muEFSAFSStep():
@@ -245,12 +245,12 @@ def muEFSAFSStep():
 
     muonEFSAFSSequence = seqAND( "muonEFSAFSSequence", [efsafsInputMaker, muEFSAFSRecoSequence ] )
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuonEFMSonlyHypoToolFromDict
     
     return MenuSequence( Sequence    = muonEFSAFSSequence,
                          Maker       = efsafsInputMaker,
                          Hypo        = trigMuonEFSAFSHypo,
-                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromName )
+                         HypoToolGen = TrigMuonEFMSonlyHypoToolFromDict )
 
 
 ### l2Muiso step ###
@@ -277,12 +277,12 @@ def muIsoStep():
     ### Define a Sequence to run for muIso ### 
     l2muIsoSequence = seqAND("l2muIsoSequence", [ l2muIsoViewsMaker, l2muisoRecoSequence ] )
     
-    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuisoHypoToolFromName
+    from TrigMuonHypoMT.TrigMuonHypoMTConfig import TrigMuisoHypoToolFromDict
 
     return MenuSequence( Sequence    = l2muIsoSequence,
                          Maker       = l2muIsoViewsMaker,
                          Hypo        = trigmuIsoHypo,
-                         HypoToolGen = TrigMuisoHypoToolFromName )
+                         HypoToolGen = TrigMuisoHypoToolFromDict )
   
   
 def TMEF_TrkMaterialProviderTool(name='TMEF_TrkMaterialProviderTool',**kwargs):
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/pebMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/pebMenuDefs.py
index 8f2c3935ffdd6b82d831647a34f8884a5e5cac7c..875a6ac94ce56bc398462f46fbdddde9b3172281 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/pebMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/pebMenuDefs.py
@@ -29,7 +29,8 @@ def addHLTResultToROBList(robList, moduleId=0):
     hltResultSID = SourceIdentifier(SubDetector.TDAQ_HLT,moduleId)
     robList.extend([hltResultSID.code()])
 
-def pebInfoWriterToolFromName(name, conf):
+def pebInfoWriterToolFromDict(chainDict):
+    name = chainDict['chainName']
     # pebtestone is a physics-type PEB example, i.e. saves a few detector ROBs and the full HLT result
     if "pebtestone" in name:
         tool = StaticPEBInfoWriterTool(name)
@@ -50,7 +51,7 @@ def pebInfoWriterToolFromName(name, conf):
         log.error("Unknown name %s passed to pebInfoWriterToolFromName" % name)
         sys.exit("Configuration error")
 
-def pebInfoWriterSequence(name,toolGenerator=pebInfoWriterToolFromName):
+def pebInfoWriterSequence(name,toolGenerator=pebInfoWriterToolFromDict):
     """Creates a MenuSequence for PEBInfo writer. The algorithm and tools are given unique names derived from
     the name parameter. This is required to avoid execution stall from having the same algorithm instance configured
     in different steps awaiting different inputs."""
@@ -73,7 +74,8 @@ def dataScoutingResultIDFromName(name):
       log.error("Unknown name %s, cannot assign result ID" % name)
       sys.exit("Configuration error")
 
-def dataScoutingInfoWriter(name, conf):
+def dataScoutingInfoWriter(chainDict):
+    name = chainDict['chainName']
     '''Creates a StaticPEBInfoWriterTool, which adds the data scouting HLT result to the PEBInfo'''
     tool = StaticPEBInfoWriterTool(name)
     moduleId = dataScoutingResultIDFromName(name)
@@ -83,4 +85,4 @@ def dataScoutingInfoWriter(name, conf):
     return tool
 
 def dataScoutingSequence(name):
-    return pebInfoWriterSequence(name,dataScoutingInfoWriter)
\ No newline at end of file
+    return pebInfoWriterSequence(name,dataScoutingInfoWriter)
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
index 2c2629dc1446c29e04231004f16a7fc3d00fdd82..ab324f6ae0223c918be8950628644ceb9621f4b9 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/photonMenuDefs.py
@@ -55,11 +55,11 @@ def photonMenuSequence():
     #electronDecisionsDumper = DumpDecisions("electronDecisionsDumper", OutputLevel=DEBUG, Decisions = theElectronHypo.Output )    
 
     photonAthSequence = seqAND("photonAthSequence",  [l2PhotonViewsMaker, photonInViewAlgs] )
-    from TrigEgammaHypo.TrigL2PhotonHypoTool import TrigL2PhotonHypoToolFromName
+    from TrigEgammaHypo.TrigL2PhotonHypoTool import TrigL2PhotonHypoToolFromDict
 
 
     return MenuSequence( Maker=l2PhotonViewsMaker,
                              Sequence=photonAthSequence,
                              Hypo=thePhotonHypo,
-                             HypoToolGen=TrigL2PhotonHypoToolFromName)
+                             HypoToolGen=TrigL2PhotonHypoToolFromDict)
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py b/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py
index 9e337c0b4e9a3bb2a3087e50439a6d378806da2d..b87be76df1a46b5316ccac566e079dd128672da4 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/tauMenuDefs.py
@@ -10,10 +10,10 @@ import AthenaCommon.CfgMgr as CfgMgr
 
 from InDetRecExample.InDetJobProperties import InDetFlags
 InDetFlags.doCaloSeededBrem = False
-InDetFlags.InDet25nsec = True 
-InDetFlags.doPrimaryVertex3DFinding = False 
+InDetFlags.InDet25nsec = True
+InDetFlags.doPrimaryVertex3DFinding = False
 InDetFlags.doPrintConfigurables = False
-InDetFlags.doResolveBackTracks = True 
+InDetFlags.doResolveBackTracks = True
 InDetFlags.doSiSPSeededTrackFinder = True
 InDetFlags.doTRTPhaseCalculation = True
 InDetFlags.doTRTSeededTrackFinder = True
@@ -24,7 +24,7 @@ InDetFlags.init()
 #include("InDetRecExample/InDetRecConditionsAccess.py")
 from InDetRecExample.InDetKeys import InDetKeys
 
-# menu components   
+# menu components
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence
 
 # ===============================================================================================
@@ -38,7 +38,7 @@ cellMaker.OutputLevel=DEBUG
 from TrigCaloRec.TrigCaloRecConfig import TrigCaloClusterMakerMT_topo
 clusMaker = TrigCaloClusterMakerMT_topo("CaloClusMakerTopo")
 clusMaker.OutputLevel=VERBOSE
- 
+
 from AthenaCommon.CFElements import parOR, seqOR, seqAND, stepSeq
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 
@@ -74,10 +74,10 @@ from TrigTauHypo.TrigTauHypoConf import TrigTauCaloHypoAlgMT
 fastCaloHypo = TrigTauCaloHypoAlgMT("TauGenericHypoMT")
 fastCaloHypo.OutputLevel = DEBUG
 
-from TrigTauHypo.TrigL2TauHypoTool import TrigTauHypoProvider
+from TrigTauHypo.TrigL2TauHypoTool import TrigL2TauHypoToolFromDict
 
 def tauCaloSequence():
     return  MenuSequence( Sequence    = fastCaloAthSequence,
                           Maker       = fastCaloViewsMaker,
                           Hypo        = fastCaloHypo,
-                          HypoToolGen = TrigTauHypoProvider )
+                          HypoToolGen = TrigL2TauHypoToolFromDict )
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
index 874c41acd26867914eeb6295763ad1d80e2df916..c45457cb1e63bba9315d8c580d82f0c73ab23bfb 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/pebTest.py
@@ -20,6 +20,7 @@ testChains = []
 ##################################################################
 from TrigUpgradeTest.pebMenuDefs import pebInfoWriterSequence
 
+
 ##################################################################
 # egamma chains
 ##################################################################
diff --git a/Trigger/TrigValidation/TriggerTest/test/test_slice_bphysics_build.sh b/Trigger/TrigValidation/TriggerTest/test/test_slice_bphysics_build.sh
index 72b925941d2989ecc9c60647bd93d433f8f5a7c2..dcb64a930a65751e153f5e1c695c7e7d4889c717 100755
--- a/Trigger/TrigValidation/TriggerTest/test/test_slice_bphysics_build.sh
+++ b/Trigger/TrigValidation/TriggerTest/test/test_slice_bphysics_build.sh
@@ -25,6 +25,7 @@ export SLICE="bphysics"
 export INPUT="bphysics"
 export EVENTS="10"
 export COST_MONITORING="False"
+export EXTRA="jp.AthenaCommonFlags.SkipEvents.set_Value_and_Lock(3);"
 
 source exec_athena_art_trigger_validation.sh
 source exec_art_triggertest_post.sh
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
index 278b4c6f4507e196ed8c6d876aacc91743e4a376..b9fc1072f79a45dac54d888eeab3455800246283 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
@@ -18,24 +18,24 @@ class Node():
         self.Alg=Alg
         self.inputs=[]
         self.outputs=[]
-        
+
     def addOutput(self, name):
         self.outputs.append(name)
 
     def addInput(self, name):
         self.inputs.append(name)
 
-    def getOutputList(self):        
+    def getOutputList(self):
         return self.outputs
 
-    def getInputList(self):        
+    def getInputList(self):
         return self.inputs
 
     def __str__(self):
         return "Node::%s  [%s] -> [%s]"%(self.Alg.name(), ' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
 
 
-    
+
 class AlgNode(Node):
     """Node class that connects inputs and outputs to basic alg. properties """
     def __init__(self, Alg, inputProp, outputProp):
@@ -46,7 +46,7 @@ class AlgNode(Node):
     def addDefaultOutput(self):
         if self.outputProp is not '':
             self.addOutput(("%s_%s"%(self.Alg.name(),self.outputProp)))
-        
+
     def setPar(self, prop, name):
         cval = self.Alg.getProperties()[prop]
         try:
@@ -75,19 +75,19 @@ class AlgNode(Node):
             else:
                 sys.exit("no OutputProp set")
         Node.addOutput(self, name)
-       
+
 
     def readOutputList(self):
         outputs = []
         cval = self.getPar(self.outputProp)
         if cval == '':
             return outputs
-        if type(cval) == type(list()):  
+        if type(cval) == type(list()):
             outputs.extend(cval)
         else:
             outputs.append(cval)
         return outputs
-  
+
     def addInput(self, name):
         inputs = self.readInputList()
         if name in inputs:
@@ -105,7 +105,7 @@ class AlgNode(Node):
         cval = self.getPar(self.inputProp)
         if cval =='':
             return inputs
-        if type(cval) == type(list()):  
+        if type(cval) == type(list()):
             inputs.extend(cval)
         else:
             inputs.append(cval)
@@ -113,7 +113,7 @@ class AlgNode(Node):
 
     def __str__(self):
         return "Alg::%s  [%s] -> [%s]"%(self.Alg.name(), ' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
-    
+
 
 class HypoToolConf():
     """ Class to group info on hypotools"""
@@ -122,17 +122,22 @@ class HypoToolConf():
         self.name=''
         self.conf=''
 
-    def setName(self, name):
-        self.name=name
+    def setConf( self, chainDict):
+        if type(chainDict) != type({}):
+            raise RuntimeError("Configuring hypo with %s, not good anymore, use chainDict" % str(chainDict) )
+        self.chainDict = chainDict
 
-    def setConf(self, conf):
-        self.conf=conf
+    # def setName(self, name):
+    #     self.name=name
+
+    # def setConf(self, conf):
+    #     self.conf=conf
 
     def create(self):
         """creates instance of the hypo tool"""
-        return self.hypoToolGen( self.name, self.conf )
+        return self.hypoToolGen( self.chainDict )
+
 
-        
 class HypoAlgNode(AlgNode):
     """Node for HypoAlgs"""
     def __init__(self, Alg):
@@ -142,19 +147,19 @@ class HypoAlgNode(AlgNode):
         self.previous=[]
 
     def addHypoTool (self, hypoToolConf):
-        
-        if hypoToolConf.name not in self.tools:
+        print "here", hypoToolConf.chainDict
+        if hypoToolConf.chainDict['chainName'] not in self.tools:
             ## HypoTools are private, so need to be created when added to the Alg
             ## this incantation may seem strange, however it is the only one which works
             ## trying tool = hypoToolConf.create() and then assignement does not work! will be no problem in run3 config
             tools = self.Alg.HypoTools
             self.Alg.HypoTools = tools+[hypoToolConf.create()]
-            self.tools.append( hypoToolConf.name )
+            self.tools.append( self.Alg.HypoTools[-1].getName() ) # should not be needed anymore
         else:
-            raise RuntimeError("The hypo tool of name "+ hypoToolConf.name +" already present")
-           
+            raise RuntimeError("The hypo tool of name "+ hypoToolConf.chainDict['chainName'] +" already present")
+
 
-    def setPreviousDecision(self,prev):        
+    def setPreviousDecision(self,prev):
         self.previous.append(prev)
         return self.addInput(prev)
 
@@ -170,11 +175,11 @@ class SequenceFilterNode(AlgNode):
     """Node for any kind of sequence filter"""
     def __init__(self, Alg, inputProp, outputProp):
         AlgNode.__init__(self,  Alg, inputProp, outputProp)
-              
+
     def setChains(self, name):
         log.debug("Adding Chain %s to filter %s"%(name, self.Alg.name()))
         return self.setPar("Chains", name)
-    
+
     def getChains(self):
         return self.getPar("Chains")
 
@@ -206,16 +211,16 @@ class ComboMaker(AlgNode):
         self.prop="MultiplicitiesMap"
 
 
-    def addChain(self, chain): 
+    def addChain(self, chain):
         log.debug("ComboMaker %s adding chain %s"%(self.Alg.name(),chain))
         from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
         dictDecoding = DictFromChainName.DictFromChainName()
         allMultis = dictDecoding.getChainMultFromName(chain)
         print "chain ", chain
         print "WOOF allMultis", allMultis
-        newdict = {chain : allMultis}        
-        
-        for i in range(1, len(allMultis)): 
+        newdict = {chain : allMultis}
+
+        for i in range(1, len(allMultis)):
             print "MEOW multiplicity ", allMultis[i]
             cval = self.Alg.getProperties()[self.prop]  # check necessary to see if chain was added already?
             print "MEOW cval ", cval
@@ -228,7 +233,7 @@ class ComboMaker(AlgNode):
             else:
                 cval=newdict
             setattr(self.Alg, self.prop, cval)
-                
+
 
 
 #########################################################
@@ -256,7 +261,7 @@ class WrappedList:
     def __setitem__(self, item):
         return self._lst.append(item)
 
-    
+
 #class duplicatedHypos(WrappedList):
 
 ## allAlgs={}
@@ -274,12 +279,12 @@ class WrappedList:
 ##     allAlgs[name] = instance
 ##     return instance
 
-        
+
 ##########################################################
 # NOW sequences and chains
 ##########################################################
 
-       
+
 class MenuSequence():
     """ Class to group reco sequences with the Hypo"""
     def __init__(self, Sequence, Maker,  Hypo, HypoToolGen, CA=None ):
@@ -298,34 +303,34 @@ class MenuSequence():
     def replaceHypoForCombo(self, HypoAlg):
         log.debug("set new Hypo %s for combo sequence %s "%(HypoAlg.name(), self.name))
         self.hypo= HypoAlgNode( Alg=HypoAlg )
-    
+
     def connectToFilter(self, outfilter):
         """ Sets the input and output of the hypo, and links to the input maker """
 
         #### Connect filter to the InputMaker
-        self.maker.addInput(outfilter)       
+        self.maker.addInput(outfilter)
         input_maker_output = CFNaming.inputMakerOutName(self.maker.Alg.name(),outfilter)
-        self.maker.addOutput(input_maker_output)       
+        self.maker.addOutput(input_maker_output)
 
         #### Add input/output Decision to Hypo
         self.hypo.setPreviousDecision( input_maker_output)
         hypo_output = CFNaming.hypoAlgOutName(self.hypo.Alg.name(), input_maker_output)
         if len(self.hypo.getOutputList()):
             log.error("Hypo " + self.hypo.name() +" has already an output configured: you may want to duplicate the Hypo!")
-            sys.exit("ERROR, in chain configuration") 
+            sys.exit("ERROR, in chain configuration")
         self.hypo.addOutput(hypo_output)
 
         # needed for drawing
         self.inputs.append(outfilter)
         self.outputs.append(hypo_output)
 
-       
+
         log.debug("MenuSequence.connectToFilter: connecting InputMaker and HypoAlg, adding: \n\
         InputMaker::%s.output=%s, \n\
         HypoAlg::%s.previousDecision=%s, \n\
         HypoAlg::%s.output=%s",\
                 self.maker.Alg.name(), input_maker_output, self.hypo.Alg.name(), input_maker_output, self.hypo.Alg.name(), hypo_output )
-        
+
     def __str__(self):
         return "MenuSequence::%s \n Hypo::%s \n Maker::%s \n Sequence::%s"%(self.name, self.hypo, self.maker, self.sequence)
 
@@ -348,8 +353,8 @@ def DoMapSeedToL1Decoder(seed):
     stripSeed  = filter(lambda x: x.isalpha(), seed)
     if stripSeed not in mapSeedToL1Decoder:
         log.error("Seed "+ seed + " not mapped to any Decision objects! Available are: " + str(mapSeedToL1Decoder.values()))
-        sys.exit("ERROR, in chain configuration") 
-    return (mapSeedToL1Decoder[stripSeed])   
+        sys.exit("ERROR, in chain configuration")
+    return (mapSeedToL1Decoder[stripSeed])
 
 #################################################
 
@@ -357,10 +362,10 @@ class Chain:
     """Basic class to define the trigger menu """
     def __init__(self, name, Seed, ChainSteps=[]):
         self.name = name
-        self.steps=ChainSteps         
+        self.steps=ChainSteps
         self.seed=Seed
         self.vseeds=[]
-        vseeds = Seed.strip().split("_")        
+        vseeds = Seed.strip().split("_")
         vseeds.pop(0) #remove first L1 string
         # split multi seeds
         for seed in vseeds:
@@ -369,18 +374,18 @@ class Chain:
             if not mult: mult=1
             else: mult=int(mult)
 #            print mult,single
-            for m in range(0,mult): self.vseeds.append(single) 
-            
+            for m in range(0,mult): self.vseeds.append(single)
+
         # group_seed is used to se tthe seed type (EM, MU,JET), removing the actual threshold
         # in practice it is the L1Decoder Decision output
         self.group_seed = [DoMapSeedToL1Decoder(stri) for stri in self.vseeds]
         self.setSeedsToSequences() # save seed of each menuseq
         log.debug("Chain " + name + " with seeds: %s "%str( self.vseeds))
 
-        for step in self.steps:  
+        for step in self.steps:
             if step.isCombo:
                 step.combo.addChain(self.name)
-            
+
     def setSeedsToSequences(self):
         # set the seed to the menusequences
         sequences1=self.steps[0].sequences
@@ -394,32 +399,37 @@ class Chain:
                     seq.seed ="L1"+filter(lambda x: x.isalpha(), seed)
                     log.debug( "Chain %s adding seed %s to sequence %d in step %s"%(self.name, seq.seed, nseq, step.name))
                 nseq+=1
-           
+
         else:
             log.error("found %d sequences in this chain and %d seeds. What to do??", tot_seq, tot_seed)
-            sys.exit("ERROR, in chain configuration") 
-        
+            sys.exit("ERROR, in chain configuration")
+
     def decodeHypoToolConfs(self, allChainDicts):
         """ This is extrapolating the hypotool configuration from the (combined) chain name"""
-        from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import getConfFromChainName
-        signatures = getConfFromChainName(self.name, allChainDicts)
+        #from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import getConfFromChainName
+        from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import getChainDictFromChainName
+        chainDict = getChainDictFromChainName(self.name, allChainDicts)
+
+        print "got here", chainDict
         for step in self.steps:
-            if len(signatures) != len(step.sequences):
-                log.error("Error in step %s: found %d signatures and %d sequences"%(step.name, len(signatures), len(step.sequences)))
+            if len(chainDict['chainParts']) != len(step.sequences):
+                log.error("Error in step %s: found %d chain parts and %d sequences"%(step.name, len(chainDict['chainParts']), len(step.sequences)))
                 sys.exit("ERROR, in chain configuration")
-            nseq=0
-            for seq in step.sequences:
+
+            for seq, chainDictPart in zip(step.sequences, chainDict['chainParts']):
                 if seq.ca != None: # The CA merging took care of everything
                     continue
-                seq.hypoToolConf.setConf(signatures[nseq])
-                seq.hypoToolConf.setName(self.name)
+                import copy
+                onePartChainDict = copy.deepcopy( chainDict )
+                onePartChainDict['chainParts'] = [ chainDictPart ]
+
+                seq.hypoToolConf.setConf( onePartChainDict )
                 seq.hypo.addHypoTool(seq.hypoToolConf)
-                nseq +=1
-                
+
 
 class CFSequence():
     """Class to describe the ChainStep + filter
-   
+
     """
     def __init__(self, ChainStep, FilterAlg):
         self.filter = FilterAlg
@@ -428,7 +438,7 @@ class CFSequence():
 
     def connect(self):
         """Connect filter to ChainStep (all its sequences)
-        if a ChainStep contains the same sequence multiple times (for multi-object chains), 
+        if a ChainStep contains the same sequence multiple times (for multi-object chains),
         the filter is connected only once (to avoid multiple DH links)
         """
 
@@ -442,8 +452,8 @@ class CFSequence():
         if len(filter_output) != len(self.step.sequences):
             log.error("Found %d filter outputs and %d MenuSequences in Step %s"%( len(self.filter.getOutputList()), len(self.step.sequences), self.step.name))
             sys.exit("ERROR: Found %d filter outputs differnt from %d MenuSequences in Step %s"%( len(self.filter.getOutputList()), len(self.step.sequences), self.step.name))
-                        
-        
+
+
         nseq=0
         for seq in self.step.sequences:
             filter_out = filter_output[nseq]
@@ -451,7 +461,7 @@ class CFSequence():
             seq.connectToFilter( filter_out )
             #seq.connectToFilter(self.filter, filter_out )
             nseq+=1
-            
+
 
         if self.step.isCombo: self.connectCombo()
 
@@ -459,7 +469,7 @@ class CFSequence():
         # reset sequence output, they will b ereplaced by new combo outputs
         for seq in self.step.sequences:
             seq.outputs=[]
-            
+
         for seq in self.step.sequences:
             combo_input=seq.hypo.getOutputList()[0]
             self.step.combo.addInput(combo_input)
@@ -470,12 +480,12 @@ class CFSequence():
             self.step.combo.addOutput(combo_output)
             seq.outputs.append(combo_output)
             log.debug("Adding outputs %s to combo %s"%(combo_output, self.step.combo.Alg.name()))
-        
-    
+
+
     def __str__(self):
         return "--- CFSequence ---\n + Filter: %s \n +  %s \n "%(\
             self.filter, self.step )
-          
+
 
 class ChainStep:
     """Class to describe one step of a chain; if more than one menuSequence, then the step is combo"""
@@ -484,27 +494,27 @@ class ChainStep:
         self.sequences=[]
         self.isCombo=len(Sequences)>1
         self.combo=None
-        if self.isCombo:            
+        if self.isCombo:
             self.makeCombo(Sequences)
         else:
-            self.sequences = Sequences          
+            self.sequences = Sequences
 
-    def makeCombo(self, Sequences):        
+    def makeCombo(self, Sequences):
         # For combo sequences, duplicate the sequence, the Hypo with differnt names and create the ComboHypoAlg
         self.combo = ComboMaker(CFNaming.comboHypoName(self.name))
         duplicatedHypos = []
-        for sequence in Sequences:         
+        for sequence in Sequences:
             oldhypo=sequence.hypo.Alg
             duplicatedHypos.append(oldhypo.name())
             ncopy=duplicatedHypos.count(oldhypo.name())
-               
+
             new_sequence=copy.deepcopy(sequence)
             new_sequence.name = CFNaming.comboSequenceCopyName(sequence.name,ncopy, self.name)
-            
+
             newHypoAlgName = CFNaming.comboHypoCopyName(oldhypo.name(),ncopy, self.name)
             new_hypoAlg=oldhypo.clone(newHypoAlgName)
             new_sequence.replaceHypoForCombo(new_hypoAlg)
-            self.sequences.append(new_sequence)            
+            self.sequences.append(new_sequence)
 
     def __str__(self):
         return "--- ChainStep %s ---\n + isCombo: %d \n +  %s \n "%(self.name, self.isCombo, ' '.join(map(str, self.sequences) ))
@@ -513,7 +523,7 @@ class ChainStep:
 
 # this is fragment for New JO
 
-    
+
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 class InEventReco( ComponentAccumulator ):
     """ Class to handle in-event reco """
@@ -531,7 +541,7 @@ class InViewReco( ComponentAccumulator ):
 
         from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
         if viewMaker:
-            self.viewMakerAlg = viewMaker 
+            self.viewMakerAlg = viewMaker
         else:
             from AthenaCommon.Constants import DEBUG
             self.viewMakerAlg = EventViewCreatorAlgorithm(name+'ViewsMaker',
@@ -543,9 +553,9 @@ class InViewReco( ComponentAccumulator ):
                                                           OutputLevel=DEBUG)
 
         self.addEventAlgo( self.viewMakerAlg, self.mainSeq.name() )
-        self.viewsSeq = parOR( self.viewMakerAlg.ViewNodeName )        
+        self.viewsSeq = parOR( self.viewMakerAlg.ViewNodeName )
         self.addSequence( self.viewsSeq, self.mainSeq.name() )
-        
+
     def addInputFromFilter(self, filterAlg ):
         assert len(filterAlg.Output) == 1, "Can only oprate on filter algs with one configured output, use addInput to setup specific inputs"
         self.addInput( filterAlg.Output[0], "Reco_"+( filterAlg.Output[0].replace("Filtered_", "") ) )
@@ -571,7 +581,7 @@ class InViewReco( ComponentAccumulator ):
         return self.mainSeq
 
     def inputMaker( self ):
-        return self.viewMakerAlg 
+        return self.viewMakerAlg
 
 
 class RecoFragmentsPool:
@@ -581,7 +591,7 @@ class RecoFragmentsPool:
     def retrieve( cls,  creator, flags, **kwargs ):
         """ create, or return created earlier reco fragment
 
-        Reco fragment is uniquelly identified by the function and set og **kwargs. 
+        Reco fragment is uniquelly identified by the function and set og **kwargs.
         The flags are not part of unique identifier as creation of new reco fragments should not be caused by difference in the unrelated flags.
         TODO, if that code survives migration to New JO we need to handle the case when the creator is an inner function
         """
@@ -596,7 +606,7 @@ class RecoFragmentsPool:
             log.debug( "reconstruction fragment that would be created from %s is taken from the cache" % creator.func_name )
             return cls.fragments[requestHash]
 
-           
+
 class NJMenuSequence( ComponentAccumulator ):
     def __init__( self, name ):
         super( NJMenuSequence, self ).__init__()
@@ -656,13 +666,13 @@ class HLTMenuAccumulator( ComponentAccumulator ):
 
     def __getOrMakeStepSequence(self, step, isFilter = False ):
        """ Constructs sequence for the step, the filtering step or, reco step will be created depending on isFilter flags
-       
+
        The function assures that all previous steps are aready in place i.e. HLTStep_1_filter, HLTStep_1 ... until HLTStep_N-1 are in place.
        Therefore the steps can be added in any order (not yet sure if that will but better assure robustness now)
        """
        from AthenaCommon.CFElements import parOR
        name = "HLTStep_%d%s" % (step, "_filters" if isFilter else "" )
-        
+
        s  = self.getSequence( name )
        if s:
            return s
@@ -678,9 +688,9 @@ class HLTMenuAccumulator( ComponentAccumulator ):
        return s
 
 
-    def setupSteps( self, steps ):        
+    def setupSteps( self, steps ):
         """ The main menu function, it is responsible for crateion of step sequences and placing slice specific sequencers there.
-                
+
         It would rely on the MenuSeq object API in two aspects, to obtain filter alg and to obtain the reco sequence
         The MenuSeq should already contain all the chains that are needed for the menu setup (chains info can be accessed via flags passed when steps were created)
         """
@@ -688,10 +698,10 @@ class HLTMenuAccumulator( ComponentAccumulator ):
             filterStep = self.__getOrMakeStepSequence( stepNo, isFilter = True )
             filterStep += fhSeq.filter() # FilterHypoSequence API
 
-            recoStep = self.__getOrMakeStepSequence( stepNo, isFilter = False )            
+            recoStep = self.__getOrMakeStepSequence( stepNo, isFilter = False )
             self.addSequence( fhSeq.sequence(), recoStep.name() )
 
-    
+
     def steps( self ):
         """ returns step seqeuncers """
         return self.getSequence("HLTSteps")
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py
index 76141fa52238d5aa4eb0f2f5850536a1a935807c..a05458ebd87796ed02b7fc787fa1bf1c3e17a279 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py
@@ -55,7 +55,11 @@ class TriggerConfigHLT:
 
         log.info("Writing of config files needs to be implemented")
 
-
+__chainsDict = {}
+def getChainDictFromChainName(chainName, allChainDicts = None):
+    if __chainsDict == {}:
+        __chainsDict.update( [ (c['chainName'], c) for c in allChainDicts ] )
+    return __chainsDict[chainName]
 
 ##############################
 # this function was supposed to be part of the class but doesn't work for now
@@ -79,10 +83,6 @@ def getConfFromChainName(chainName, allChainDicts = None):
         if chainName == cDict["chainName"]:
             for cPart in cDict["chainParts"]:
                 cPName = cPart['chainPartName']
-                if "1step" in cPName:
-                    import re
-                    cPName=re.sub('1step', '', cPName)
-                    log.warning("Removing string 1step from hypoTool conf - this needs to be removed eventually")
                 if "HLT_" in cPName:
                     chainPartNames.append(cPName)
                 else: