diff --git a/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt b/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
index b3d9e54616c961917e9e00beac6a3f44354541ef..5309743d9e32f2c9404d53ea6747ed94ab8997b0 100644
--- a/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
+++ b/AtlasGeometryCommon/CavernInfraGeoModel/CMakeLists.txt
@@ -7,8 +7,7 @@ atlas_subdir( CavernInfraGeoModel )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          Control/CLIDSvc
-                          Control/SGTools
+                          Control/AthenaKernel
                           Database/RDBAccessSvc
                           DetectorDescription/GeoModel/GeoModelKernel
                           DetectorDescription/GeoModel/GeoModelUtilities
@@ -27,7 +26,7 @@ atlas_add_component( CavernInfraGeoModel
                      src/*.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} SGTools GeoModelKernel GeoModelUtilities StoreGateLib SGtests GaudiKernel )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} GeoModelKernel GeoModelUtilities StoreGateLib SGtests GaudiKernel )
 
 # Install files from the package:
 atlas_install_headers( CavernInfraGeoModel )
diff --git a/AtlasGeometryCommon/CavernInfraGeoModel/CavernInfraGeoModel/CavernInfraDetectorManager.h b/AtlasGeometryCommon/CavernInfraGeoModel/CavernInfraGeoModel/CavernInfraDetectorManager.h
index 217b73c054c50aa3a888aebb00905cd51f4ea176..151d1c0fcf2b68ce0079755b08d6a4d5fc3cefae 100755
--- a/AtlasGeometryCommon/CavernInfraGeoModel/CavernInfraGeoModel/CavernInfraDetectorManager.h
+++ b/AtlasGeometryCommon/CavernInfraGeoModel/CavernInfraGeoModel/CavernInfraDetectorManager.h
@@ -35,7 +35,7 @@ class CavernInfraDetectorManager : public GeoVDetectorManager
 };
 
 #ifndef GAUDI_NEUTRAL
-#include "CLIDSvc/CLASS_DEF.h" 
+#include "AthenaKernel/CLASS_DEF.h" 
 CLASS_DEF(CavernInfraDetectorManager, 1500000300, 1)
 #endif
 
diff --git a/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolData.h b/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolData.h
index 385f616473b0e126874e8145f5565167d5a4c559..a40d9d02a02faac5e6e1f32f2e253f81fe97bf88 100644
--- a/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolData.h
+++ b/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolData.h
@@ -10,7 +10,7 @@
 
 #include<vector>
 #include<string>
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 class TestCoolRecPoolData {
  public:
diff --git a/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolDataColl.h b/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolDataColl.h
index 9dbbfb1fe14fc71a6641e6d1b0676687f35f630f..96ebf519afe0d86a25127c20782a5ffe20155320 100644
--- a/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolDataColl.h
+++ b/AtlasTest/DatabaseTest/AthenaDBTestRec/AthenaDBTestRec/TestCoolRecPoolDataColl.h
@@ -9,7 +9,7 @@
 // Richard Hawkings, started 16/8/06
 #include "AthenaPoolUtilities/CondMultChanCollection.h"
 #include "AthenaDBTestRec/TestCoolRecPoolData.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 typedef CondMultChanCollection<TestCoolRecPoolData> TestCoolRecPoolDataColl;
 
diff --git a/AtlasTest/DatabaseTest/AthenaDBTestRec/CMakeLists.txt b/AtlasTest/DatabaseTest/AthenaDBTestRec/CMakeLists.txt
index fa78dfc02d36a8c281482a4f71c933b76397bb58..85cc80bc4082db746d6f50676ea59d6978ffece3 100644
--- a/AtlasTest/DatabaseTest/AthenaDBTestRec/CMakeLists.txt
+++ b/AtlasTest/DatabaseTest/AthenaDBTestRec/CMakeLists.txt
@@ -9,8 +9,6 @@ atlas_subdir( AthenaDBTestRec )
 atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           Control/AthenaKernel
-                          Control/CLIDSvc
-                          Control/SGTools
                           Control/StoreGate
                           Database/AthenaPOOL/AthenaPoolUtilities
                           GaudiKernel
@@ -38,31 +36,31 @@ atlas_add_library( AthenaDBTestRecLib
                    src/lib/*.cxx
                    PUBLIC_HEADERS AthenaDBTestRec
                    PRIVATE_INCLUDE_DIRS ${COOL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                   LINK_LIBRARIES AthenaBaseComps AthenaKernel SGTools AthenaPoolUtilities GaudiKernel StoreGateLib SGtests AthenaPoolCnvSvcLib
+                   LINK_LIBRARIES AthenaBaseComps AthenaKernel AthenaPoolUtilities GaudiKernel StoreGateLib SGtests AthenaPoolCnvSvcLib
                    PRIVATE_LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} CollectionBase CollectionUtilities PersistencySvc StorageSvc CoraCool PersistentDataModel EventInfo )
 
 atlas_add_component( AthenaDBTestRec
                      src/components/*.cxx
                      INCLUDE_DIRS ${COOL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel SGTools StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
+                     LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
 
 atlas_add_poolcnv_library( AthenaDBTestRecPoolCnv
                            src/*.cxx
                            FILES AthenaDBTestRec/TestCoolRecPoolData.h AthenaDBTestRec/TestCoolRecPoolDataColl.h
                            MULT_CHAN_TYPES TestCoolRecPoolDataColl
                            INCLUDE_DIRS ${COOL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                           LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel SGTools StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
+                           LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
 
 atlas_add_dictionary( AthenaDBTestRecDataDict
                       AthenaDBTestRec/AthenaDBTestRecDataDict.h
                       AthenaDBTestRec/selection.xml
                       INCLUDE_DIRS ${COOL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel SGTools StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
+                      LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
 
 atlas_add_executable( TestCoolRecWriter
                       src/app/*.cxx
                       INCLUDE_DIRS ${COOL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel SGTools StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
+                      LINK_LIBRARIES ${COOL_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps AthenaKernel StoreGateLib SGtests AthenaPoolUtilities GaudiKernel CollectionBase CollectionUtilities PersistencySvc StorageSvc AthenaPoolCnvSvcLib CoraCool PersistentDataModel EventInfo AthenaDBTestRecLib )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/AtlasTest/TestTools/share/post.sh b/AtlasTest/TestTools/share/post.sh
index 238d519f852609f69cf52da19f4dab5099549818..2ea658f7bcd77ca2c357b9db5e04e22f63f94647 100755
--- a/AtlasTest/TestTools/share/post.sh
+++ b/AtlasTest/TestTools/share/post.sh
@@ -228,6 +228,9 @@ else
          echo "$GREEN post.sh> OK: ${test} exited normally. Output is in $joblog $RESET"
        fi
        reflog=../share/${test}.ref
+       if [ "$reflog_location" != "" ]; then
+         reflog=$reflog_location/${test}.ref
+       fi
 
        # If we can't find the reference file, maybe it's located outside
        # the repo.  With the switch to git, we have to fall back
diff --git a/Calorimeter/CaloCellCorrection/python/CaloCellPedestalCorrDefault.py b/Calorimeter/CaloCellCorrection/python/CaloCellPedestalCorrDefault.py
index 77f6f90e9db9c5f2048cbc40b9a219e03ff0ea38..4a7abc45a5075236e1e4a1d0151d08736cefb2ec 100644
--- a/Calorimeter/CaloCellCorrection/python/CaloCellPedestalCorrDefault.py
+++ b/Calorimeter/CaloCellCorrection/python/CaloCellPedestalCorrDefault.py
@@ -13,29 +13,17 @@ def CaloCellPedestalCorrDefault(name='CaloCellPedestalCorr'):
    except:
        mlog.error("could not get handle to CaloCellPedestalCorr Quit")
        print traceback.format_exc()
-   ToolSvc += theCaloCellPedestalCorr
-
-   try:
-       from CaloRec.CaloRecConf import CaloCellContainerCorrectorTool
-       from CaloIdentifier import SUBCALO
-       thePedestalTool = CaloCellContainerCorrectorTool("PedestalTool",
-                   CaloNums = [ SUBCALO.NSUBCALO],
-                   CellCorrectionToolNames = [theCaloCellPedestalCorr] )
-   except:
-        mlog.error("could not get handle to CaloCellContainerCorrectorTool Quit")
-        print traceback.format_exc()
-        return False
-
+   #ToolSvc += theCaloCellPedestalCorr
 
    if globalflags.DataSource()=='data' :
        from IOVDbSvc.CondDB import conddb
        if conddb.isOnline:
            folder  = '/CALO/Pedestal/CellPedestal'
-           conddb.addFolder('CALO_ONL',folder)
+           conddb.addFolder('CALO_ONL',folder,className="CondAttrListCollection")
        else:
            folder= '/CALO/Ofl/Pedestal/CellPedestal'
-           conddb.addFolder('CALO_OFL',folder)
-       theCaloCellPedestalCorr.FolderName = folder
+           conddb.addFolder('CALO_OFL',folder,className="CondAttrListCollection")
+       theCaloCellPedestalCorr.PedestalShiftFolder = folder
        theCaloCellPedestalCorr.isMC=False
    else:
        theCaloCellPedestalCorr.isMC=True
@@ -44,15 +32,16 @@ def CaloCellPedestalCorrDefault(name='CaloCellPedestalCorr'):
    from CaloRec.CaloCellFlags import jobproperties
    if globalflags.DataSource()=='data' and (not jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr()) and (not athenaCommonFlags.isOnline()):
       lumiFolder = '/TRIGGER/LUMI/LBLESTONL'
-      conddb.addFolder('TRIGGER_ONL',lumiFolder);
+      conddb.addFolder('TRIGGER_ONL',lumiFolder,className="CondAttrListCollection");
       theCaloCellPedestalCorr.Luminosity = -1
       theCaloCellPedestalCorr.LumiFolderName = lumiFolder
 
    if jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr() and (not athenaCommonFlags.isOnline()):
-       from CaloTools.CaloLumiBCIDToolDefault import CaloLumiBCIDToolDefault
-       theCaloLumiBCIDTool = CaloLumiBCIDToolDefault()
-       ToolSvc += theCaloLumiBCIDTool
-       theCaloCellPedestalCorr.LumiBCIDTool = theCaloLumiBCIDTool
-   
+      from CaloRec.CaloBCIDAvgAlgDefault import CaloBCIDAvgAlgDefault
+      CaloBCIDAvgAlgDefault()
+      theCaloCellPedestalCorr.CaloBCIDAverageKey="CaloBCIDAverage"
+   else:
+      theCaloCellPedestalCorr.CaloBCIDAverageKey=""
+
 
-   return thePedestalTool
+   return theCaloCellPedestalCorr
diff --git a/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.cxx b/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.cxx
index dff34577162070668c1eca7c7919c892f9beb259..482ce9e722f6d76a7be68f005d8d9550f74d5c21 100755
--- a/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.cxx
+++ b/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.cxx
@@ -13,7 +13,7 @@
 
 #include "CaloCellPedestalCorr.h"
 
-#include "CaloEvent/CaloCell.h"
+#include "CaloEvent/CaloCellContainer.h"
 #include "CaloDetDescr/CaloDetDescrElement.h"
 
 //=== AttributeList
@@ -32,19 +32,15 @@ CaloCellPedestalCorr::CaloCellPedestalCorr(
 			     const std::string& type, 
 			     const std::string& name, 
 			     const IInterface* parent)
-  : CaloCellCorrection(type, name, parent),
-    m_caloCoolIdTool("CaloCoolIdTool"),
+  : AthAlgTool(type, name, parent),
+    m_caloCoolIdTool("CaloCoolIdTool",this),
     m_cellId(nullptr),
-    m_caloLumiBCIDTool(""),
-    m_isMC(false)
-{
- declareInterface<CaloCellCorrection>(this);
- declareProperty("Luminosity",m_lumi0=0,"Luminosity in 10**33 units");
- declareProperty("CaloCoolIdTool",m_caloCoolIdTool,"Tool for Calo cool Id");
- declareProperty("FolderName",m_folderName="/CALO/Pedestal/CellPedestal");
- declareProperty("LumiFolderName",m_lumiFolderName="/TRIGGER/LUMI/LBLESTONL");
- declareProperty("LumiBCIDTool",m_caloLumiBCIDTool,"Tool for BCID pileup offset average correction");
- declareProperty("isMC",m_isMC,"Data/MC flag");
+    //m_caloLumiBCIDTool(""),
+    m_isMC(false){
+  declareInterface<ICaloCellMakerTool>(this);
+  declareProperty("Luminosity",m_lumi0=0,"Luminosity in 10**33 units");
+  declareProperty("CaloCoolIdTool",m_caloCoolIdTool,"Tool for Calo cool Id");
+  declareProperty("isMC",m_isMC,"Data/MC flag");
 }
 
 //========================================================
@@ -56,133 +52,84 @@ StatusCode CaloCellPedestalCorr::initialize()
 
   ATH_CHECK(detStore()->retrieve(m_cellId, "CaloCell_ID"));
 
-  if (m_lumi0<0) {
-    if (detStore()->contains<CondAttrListCollection>(m_lumiFolderName)) {
-      const DataHandle<CondAttrListCollection> lumiData;
-      ATH_CHECK( detStore()->regFcn(&CaloCellPedestalCorr::updateLumi, this , lumiData, m_lumiFolderName, true) );
-      ATH_MSG_INFO( " Registered a callback for " << m_lumiFolderName << " Cool folder "  );
-    }
-    m_lumi0=0;
+  if (m_lumi0<0 && !m_isMC) {
+    ATH_CHECK(m_lumiFolderName.initialize());
   }
-
-
   if (!m_isMC) {
-    //=== Register callback for this data handle
-    ATH_CHECK( detStore()->regFcn(&CaloCellPedestalCorr::updateMap, this, m_noiseAttrListColl, m_folderName) );
-    ATH_MSG_INFO( " registered a callback for " << m_folderName << " folder "  );
-
+    ATH_CHECK(m_pedShiftFolder.initialize());
     ATH_CHECK(m_caloCoolIdTool.retrieve());
   }
 
-  if (!m_caloLumiBCIDTool.empty() ) {
-    ATH_CHECK(m_caloLumiBCIDTool.retrieve());
+  if (!m_caloBCIDAvg.key().empty()) {
+    ATH_CHECK(m_caloBCIDAvg.initialize());
   }
   
   ATH_MSG_INFO( "CaloCellPedestalCorr initialize() end"  );
-
   return StatusCode::SUCCESS;
-
 }
-
-//______________________________________________________________________________________
-StatusCode
-CaloCellPedestalCorr::updateLumi( IOVSVC_CALLBACK_ARGS )
-{
-  ATH_MSG_INFO( " in updateLumi() "  );
-
-  const CondAttrListCollection* attrListColl = 0;
-  ATH_CHECK(detStore()->retrieve(attrListColl, m_lumiFolderName));
-  // Loop over collection
-  CondAttrListCollection::const_iterator first = attrListColl->begin();
-  CondAttrListCollection::const_iterator last  = attrListColl->end();
-  for (; first != last; ++first) {
-   if ((*first).first == 0) {
-     if (msgLvl(MSG::DEBUG)) {
-       std::ostringstream attrStr1;
-       (*first).second.toOutputStream( attrStr1 );
-       ATH_MSG_DEBUG( "ChanNum " << (*first).first << " Attribute list " << attrStr1.str()  );
-     }
-     const coral::AttributeList& attrList = (*first).second;
-     if (attrList["LBAvInstLumi"].isNull()) {
-       ATH_MSG_WARNING( " NULL Luminosity information in database ... set it to 0 "  );
-       m_lumi0 = 0.;
-     } else {
-       m_lumi0 = attrList["LBAvInstLumi"].data<float>() *1e-3;  // luminosity (from 10**30 units in db to 10*33 units)
-     }
-     break;
-   }
-  }
-  if ( !(m_lumi0 == m_lumi0) ) {
-    ATH_MSG_WARNING( " Luminosity not a number ?  m_lumi0 " << m_lumi0 << "   ... set it to 0 "  );
-    m_lumi0 = 0.;
-  }
-  ATH_MSG_INFO( " Luminosity " << m_lumi0  );
-  return StatusCode::SUCCESS;
+StatusCode CaloCellPedestalCorr::process( CaloCellContainer * theCellContainer) {
+  //This function is a stopgap solution until all CaloCellCorrector tools are const
+  const EventContext& ctx = Gaudi::Hive::currentContext();
+  return this->process(theCellContainer,ctx);
 }
 
+StatusCode CaloCellPedestalCorr::process( CaloCellContainer * theCellContainer, const EventContext& ctx) const {
 
-
-// ===============================================================================
-
-StatusCode CaloCellPedestalCorr::updateMap(IOVSVC_CALLBACK_ARGS_K(keys) )
-{
-  msg(MSG::INFO) << " in updateMap ";
-  std::list<std::string>::const_iterator itr;
-  for (itr=keys.begin(); itr!=keys.end(); ++itr) {
-    msg() << *itr << " ";
-  }
-  msg() << endmsg;
-
-  //=== loop over collection (all cool channels)
-  CondAttrListCollection::const_iterator iColl = m_noiseAttrListColl->begin();
-  CondAttrListCollection::const_iterator last  = m_noiseAttrListColl->end();
-  for (; iColl != last; ++iColl) {
-    
-    //=== COOL channel number is system id
-    unsigned int sysId = static_cast<unsigned int>(iColl->first);
-    
-    //=== delete old CaloCondBlobFlt (which does not own the blob)
-    NoiseBlobMap_t::iterator iOld = m_noiseBlobMap.find(sysId);
-    if(iOld != m_noiseBlobMap.end()){
-      delete iOld->second;
+  const CondAttrListCollection* pedShiftColl=nullptr;
+  float lumi=m_lumi0;
+  if (!m_isMC) {
+    // Get Luminosity estimate
+    if (lumi<0) {
+      SG::ReadCondHandle<CondAttrListCollection> lumiHdl(m_lumiFolderName,ctx);
+      const CondAttrListCollection* attrListColl=(*lumiHdl);
+      const coral::AttributeList& attrList=attrListColl->attributeList(0); //Get channel number 0
+      if (attrList["LBAvInstLumi"].isNull()) {
+	ATH_MSG_WARNING("No valid luminosity information in folder " << m_lumiFolderName.key() << ", attribute LBAvInstLumi");
+	lumi=0;
+      }
+      else {
+	lumi=attrList["LBAvInstLumi"].data<float>() *1e-3;  // luminosity (from 10**30 units in db to 10*33 units)
+      }
     }
-    
-    //=== Get new CaloCondBlobFlt instance, interpreting current BLOB
-    const coral::Blob& blob = (iColl->second)["CaloCondBlob16M"].data<coral::Blob>();
-    const CaloCondBlobFlt* flt = CaloCondBlobFlt::getInstance(blob);
-
-    //=== store new pointer in map
-    m_noiseBlobMap[sysId] = flt;
-    
-  }//end iColl
-  return StatusCode::SUCCESS;
-}
 
-// ============================================================================
+    //Get Pedestal shifts
+    SG::ReadCondHandle<CondAttrListCollection> pedShiftHdl(m_pedShiftFolder,ctx);
+    pedShiftColl=(*pedShiftHdl);   
+  }
 
-void CaloCellPedestalCorr::MakeCorrection (CaloCell* theCell,
-                                           const EventContext& /*ctx*/) const
-{
+  const CaloBCIDAverage* bcidavgshift=nullptr;
+  if (!(m_caloBCIDAvg.key().empty())) {
+    SG::ReadHandle<CaloBCIDAverage> bcidavgshiftHdl(m_caloBCIDAvg,ctx);
+    bcidavgshift=&(*bcidavgshiftHdl);
+  }
 
-  float pedestal=0.;
+  std::pair<unsigned,const CaloCondBlobFlt*> blobCache{999999,nullptr};
+
+  for (CaloCell* theCell : *theCellContainer) {
+    float pedestal=0;
+    if (!m_isMC) { 
+      const unsigned int cellHash=theCell->caloDDE()->calo_hash();
+      unsigned int subHash;
+      const unsigned int iCool = m_caloCoolIdTool->getCoolChannelId(cellHash,subHash);
+      if (iCool!=blobCache.first) {
+	const coral::AttributeList& attrList=pedShiftColl->attributeList(iCool);
+	const coral::Blob& blob = attrList["CaloCondBlob16M"].data<coral::Blob>();
+	//std::unique_ptr<const CaloCondBlobFlt> flt(CaloCondBlobFlt::getInstance(blob));
+	blobCache.first=iCool;
+	delete blobCache.second;
+	blobCache.second=CaloCondBlobFlt::getInstance(blob);
+      }
+
+      const unsigned int dbGain = CaloCondUtils::getDbCaloGain(theCell->gain());
+      pedestal = blobCache.second->getCalib(subHash, dbGain, lumi);
+    }
 
-  if (!m_isMC) {
-    const unsigned int cellHash=theCell->caloDDE()->calo_hash();
-    unsigned int subHash;
-    const unsigned int iCool = m_caloCoolIdTool->getCoolChannelId(cellHash,subHash);
-    //std::cout << "Got iCool=" << iCool << " subhash=" << subHash << std::endl;
-    NoiseBlobMap_t::const_iterator it = m_noiseBlobMap.find (iCool);
-    //The following checks would make sense but were omitted to speed up execution:
-    //1. it!=m_noiseBlobMap.end() eg, if iCool exists
-    //2. subHash < flt->getNChans()
-    const CaloCondBlobFlt* const flt = it->second;
-    const unsigned int dbGain = CaloCondUtils::getDbCaloGain(theCell->gain());
-    pedestal = flt->getCalib(subHash, dbGain, m_lumi0);
-  }
+    if (bcidavgshift) {
+      pedestal = pedestal + bcidavgshift->average(theCell->ID());
+    }
 
-  if (!m_caloLumiBCIDTool.empty() ) {
-    pedestal = pedestal + m_caloLumiBCIDTool->average(theCell,0);
-  }
+    theCell->addEnergy(-pedestal);
+  }//end loop over cell-container
 
-  theCell->addEnergy(-pedestal);
+  return StatusCode::SUCCESS;
 }
diff --git a/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.h b/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.h
index bc022c07ddd981337120559cbdd033349acb9b7e..f36b1e87559ebf50972b40619423d276b20224ee 100644
--- a/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.h
+++ b/Calorimeter/CaloCellCorrection/src/CaloCellPedestalCorr.h
@@ -1,25 +1,25 @@
+//Dear emacs, this is -*-c++-*-
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef CALOCELLCORRECTION_CALOCELLPEDESTALCORR_H
 #define CALOCELLCORRECTION_CALOCELLPEDESTALCORR_H
 
-#include "CaloUtils/CaloCellCorrection.h"
-#include "CaloIdentifier/CaloGain.h"
-#include "AthenaKernel/IOVSvcDefs.h"
-#include "StoreGate/DataHandle.h"
+#include "CaloInterface/ICaloCellMakerTool.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "GaudiKernel/ToolHandle.h"
 #include "CaloCondBlobObjs/ICaloCoolIdTool.h"
-#include "CaloInterface/ICaloLumiBCIDTool.h"
 #include "AthenaPoolUtilities/CondAttrListCollection.h"
-#include "GaudiKernel/ToolHandle.h"
-#include <unordered_map>
+#include "StoreGate/ReadHandle.h"
+#include "CaloEvent/CaloBCIDAverage.h"
 
 class CaloCondBlobFlt;
 class CaloCell;
 class CaloCell_ID;
 
-class CaloCellPedestalCorr : public CaloCellCorrection
+class CaloCellPedestalCorr : public AthAlgTool, 
+			     virtual public ICaloCellMakerTool
 
 {
 
@@ -33,29 +33,25 @@ public:
 
   virtual StatusCode initialize() override;
 
-  void MakeCorrection (CaloCell* theCell,
-                       const EventContext& ctx) const override;
+  StatusCode process( CaloCellContainer * theCellContainer) override;
 
-private:
 
-  //=== callback function for luminosity storate
-  virtual StatusCode updateLumi(IOVSVC_CALLBACK_ARGS);
+  StatusCode process( CaloCellContainer * theCellContainer, 
+		      const EventContext& ctx) const; //override;
+
+private:
+  // const DataHandle<CondAttrListCollection> m_noiseAttrListColl;
 
-  virtual StatusCode updateMap(IOVSVC_CALLBACK_ARGS);
-  //=== blob storage
-  const DataHandle<CondAttrListCollection> m_noiseAttrListColl;
-  typedef std::unordered_map<unsigned int, const CaloCondBlobFlt*> NoiseBlobMap_t;
-  NoiseBlobMap_t m_noiseBlobMap;
 
   ToolHandle<ICaloCoolIdTool> m_caloCoolIdTool;
   float m_lumi0;
-  std::string m_folderName;
-  std::string m_lumiFolderName;
-
+  
+  SG::ReadCondHandleKey<CondAttrListCollection> m_pedShiftFolder{this,"PedestalShiftFolder","/CALO/Pedestal/CellPedestal","SG Key of Attr list containing pedestal shifts"};
+  SG::ReadCondHandleKey<CondAttrListCollection> m_lumiFolderName{this,"LumiFolderName","/TRIGGER/LUMI/LBLESTONL","SG Key of Attr list for Luminosity estimate"};
   const CaloCell_ID* m_cellId;
 
-  ToolHandle<ICaloLumiBCIDTool> m_caloLumiBCIDTool;
- 
+  SG::ReadHandleKey<CaloBCIDAverage> m_caloBCIDAvg{this,"CaloBCIDAverageKey","","SG Key of CaloBCIDAverage object"};
+
   bool m_isMC;
 };
 
diff --git a/Calorimeter/CaloEvent/CMakeLists.txt b/Calorimeter/CaloEvent/CMakeLists.txt
index f746fe7a8346f70286fe4c129296fc2a0c820f96..8e0fb585bfd8bb0e3a7842828486950cded785fa 100644
--- a/Calorimeter/CaloEvent/CMakeLists.txt
+++ b/Calorimeter/CaloEvent/CMakeLists.txt
@@ -16,7 +16,7 @@ atlas_depends_on_subdirs(
    Control/AthAllocators
    Control/AthContainers
    Control/AthLinks
-   Control/CLIDSvc
+   Control/AthenaKernel
    Control/CxxUtils
    Control/Navigation
    DetectorDescription/GeoPrimitives
@@ -24,10 +24,9 @@ atlas_depends_on_subdirs(
    Event/EventKernel
    Event/FourMom
    Event/NavFourMom
+   LArCalorimeter/LArRawConditions #not ideal .. LAr should depend on Calo. 
    PRIVATE
    AtlasTest/TestTools
-   Control/AthenaKernel
-   Control/SGTools
    Control/StoreGate
    DetectorDescription/IdDictParser
    LArCalorimeter/LArRawConditions
@@ -44,8 +43,7 @@ atlas_add_library( CaloEvent CaloEvent/*.h CaloEvent/*.icc src/*.cxx
    LINK_LIBRARIES CaloConditions CaloGeoHelpers CaloIdentifier AthAllocators
    AthContainers AthLinks CxxUtils Navigation GeoPrimitives
    Identifier EventKernel FourMom NavFourMom CaloDetDescrLib
-   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel
-   SGTools )
+   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel )
 
 atlas_add_dictionary( CaloEventDict
    CaloEvent/CaloEventDict.h CaloEvent/selection.xml
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloBCIDAverage.h b/Calorimeter/CaloEvent/CaloEvent/CaloBCIDAverage.h
index f50f74f5a70282f01fc012c490a8f401249a3489..2bb8e71924511e774f1fa7fab2f558331465e3d0 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloBCIDAverage.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloBCIDAverage.h
@@ -15,9 +15,12 @@ class CaloBCIDAverage {
   
   float average(const Identifier id) const {
     const HWIdentifier hwid=m_mcSym->ZPhiSymOfl(id);
+    if (!hwid.is_valid()) return 0; //Catches the tile-case
     const unsigned id32=hwid.get_identifier32().get_compact();
     const auto it=m_avg.find(id32);
-    if (it==m_avg.end()) std::abort();
+    if (it==m_avg.end()) {
+      std::abort();
+    }
     return it->second;
   }
 
@@ -28,7 +31,7 @@ class CaloBCIDAverage {
 };
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 CLASS_DEF(CaloBCIDAverage, 141052237, 1)
 
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCell2ClusterMap.h b/Calorimeter/CaloEvent/CaloEvent/CaloCell2ClusterMap.h
index 351cd38da5248d8090c4c5d7adda476c55c04f87..3d2fbaf86461dcfbc5590149c96e63eca4dca8b8 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCell2ClusterMap.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCell2ClusterMap.h
@@ -19,10 +19,9 @@
  */
 
 #include "AthContainers/DataVector.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "Navigation/Navigable.h"
 #include "CaloEvent/CaloClusterContainer.h"
-#include "CLIDSvc/CLASS_DEF.h"
 
 class CaloCell2ClusterMap : public DataVector< Navigable<CaloClusterContainer> > 
 {
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
index 68004e94934d31b313fb503171612f24900d2a34..e8152d8f962b8c4e09872d40e3ae35d3299e7bce 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainer.h
@@ -41,7 +41,7 @@ MODIFIED: David Rousseau: heavy modification to allow storing all
 ********************************************************************/
 
 #include "AthContainers/DataVector.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloEvent/CaloCell.h"
 
 #include "CaloIdentifier/CaloCell_ID.h"
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainerVector.h b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainerVector.h
index e783f47cc2fdf21519bfd0f65f2a427480f524bb..568ad10bb64f7a7a2b08eca518df1c9571db176f 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCellContainerVector.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCellContainerVector.h
@@ -28,7 +28,7 @@ PURPOSE:  Vector Container for CaloCell
 ********************************************************************/
 
 #include "AthContainers/DataVector.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloEvent/CaloCellContainer.h"
 
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCellLinkContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloCellLinkContainer.h
index 24bef34182c913276cb5e7248b8e5ba3ac4a4a50..37273830f563227927e28a4f88e52c6a6eee74c6 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCellLinkContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCellLinkContainer.h
@@ -16,7 +16,7 @@
 
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "AthContainers/DataVector.h"
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloClusterCellLinkContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloClusterCellLinkContainer.h
index 5f3e984afe9061d4d0e293a44005f86118df3304..6220511c09b8626dce7818d1ceae0ce7fe161a6a 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloClusterCellLinkContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloClusterCellLinkContainer.h
@@ -16,7 +16,7 @@
 
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AthContainers/DataVector.h"
 #include "CaloEvent/CaloClusterCellLink.h"
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h
index 85130c2e5164724e972674d4cb1e1bada2e9ce92..7d6b74a7adc8bde07db7b82e15578095be6dd006 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h
@@ -23,7 +23,7 @@ PURPOSE:  Container for CaloCluster objects
 // INCLUDE HEADER FILES:
 
 #include "AthContainers/DataVector.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "CaloEvent/CaloTowerSeg.h"
 #include "CaloEvent/CaloCluster.h"
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCompactCell.h b/Calorimeter/CaloEvent/CaloEvent/CaloCompactCell.h
index 0ea3cff15bdf720a0d379906edec7930123d5f80..e9e03dce61c07357388f52ef9f96016fa50cd56d 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCompactCell.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCompactCell.h
@@ -18,7 +18,7 @@
  * multiples of 16bit @c shorts. 
  */
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include <vector>
 
 class CaloCompactCell 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloCompactCellContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloCompactCellContainer.h
index 7ae413695db2c586fd65ce16c280e3daceeba198..5a24503299a5570e4872c26c9951b7ac3ef461e4 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloCompactCellContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloCompactCellContainer.h
@@ -23,7 +23,7 @@
  * are produced by the @c CaloCompactCellTool in @c CaloTools.
  */
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloEvent/CaloCompactCell.h"
 #include <vector>
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloShowerContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloShowerContainer.h
index 3f51d288f16cac72da84b03ca15c77cc0d08e0fa..11d7542f53ed5799c6be143ea0b7b466970c0cd6 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloShowerContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloShowerContainer.h
@@ -5,7 +5,7 @@
 #ifndef CALOEVENT_CALOSHOWERCONTAINER_H
 #define CALOEVENT_CALOSHOWERCONTAINER_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "AthContainers/DataVector.h"
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloTopoTowerContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloTopoTowerContainer.h
index f838a0e755dc7197441bf4bf5e1f834c67440043..10f3e753f7c9a1511a1372f8768cf8632ce7e302 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloTopoTowerContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloTopoTowerContainer.h
@@ -29,7 +29,7 @@ UPDATE:   March 15, 2010
 ********************************************************************/
 
 // INCLUDE HEADER FILES:
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "CaloIdentifier/CaloCell_ID.h"
 
diff --git a/Calorimeter/CaloEvent/CaloEvent/CaloTowerContainer.h b/Calorimeter/CaloEvent/CaloEvent/CaloTowerContainer.h
index 51aea65a4ae45ab8fa5cc208466828c87ff96edc..4cf42d20e0b47ee31067a7f95e7c289e5f40d020 100644
--- a/Calorimeter/CaloEvent/CaloEvent/CaloTowerContainer.h
+++ b/Calorimeter/CaloEvent/CaloEvent/CaloTowerContainer.h
@@ -59,7 +59,7 @@ UPDATE:   MAY-11-01
 
 // INCLUDE HEADER FILES:
 #include "AthContainers/DataVector.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "CaloIdentifier/CaloCell_ID.h"
 
diff --git a/Calorimeter/CaloEvent/src/CaloCell.cxx b/Calorimeter/CaloEvent/src/CaloCell.cxx
index dd5896d226ca7c14819060ae05ad6a9dafcd369f..df9d9412e64f6a59c99a9aabbf8f60b9bf7e31eb 100644
--- a/Calorimeter/CaloEvent/src/CaloCell.cxx
+++ b/Calorimeter/CaloEvent/src/CaloCell.cxx
@@ -7,7 +7,7 @@
 #include "CLHEP/Geometry/Vector3D.h"
 #include "CLHEP/Geometry/Point3D.h"
 #include "CaloDetDescr/CaloDetDescrElement.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 #include <cmath>
 
 CaloCell::~CaloCell()
diff --git a/Calorimeter/CaloIdentifier/CMakeLists.txt b/Calorimeter/CaloIdentifier/CMakeLists.txt
index 1627df779dfbd3ba6025d22682379795c848f535..21a2db78159c46c5938b6e4304e59c3697a29a28 100644
--- a/Calorimeter/CaloIdentifier/CMakeLists.txt
+++ b/Calorimeter/CaloIdentifier/CMakeLists.txt
@@ -8,8 +8,7 @@ atlas_subdir( CaloIdentifier )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Calorimeter/CaloGeoHelpers
-                          Control/CLIDSvc
-                          Control/SGTools
+                          Control/AthenaKernel
                           DetectorDescription/AtlasDetDescr
                           DetectorDescription/IdDict
                           DetectorDescription/Identifier
@@ -31,131 +30,131 @@ atlas_add_library( CaloIdentifier
                    PUBLIC_HEADERS CaloIdentifier
                    INCLUDE_DIRS ${Boost_INCLUDE_DIRS}
                    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${Boost_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel StoreGateLib SGtests
+                   LINK_LIBRARIES ${Boost_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel StoreGateLib SGtests
                    PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} TestTools CxxUtils IdDictParser PathResolver )
 
 atlas_add_dictionary( CaloIdentifierDict
                       CaloIdentifier/CaloIdentifierDict.h
                       CaloIdentifier/selection.xml
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
 
 atlas_add_executable( test_lar_id
                       test/test_lar_id.cxx
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
 
 atlas_add_executable( test_calo_dm_id
                       test/test_calo_dm_id.cxx
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
 
 atlas_add_executable( test_cell_id
                       test/test_cell_id.cxx
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
 
 atlas_add_executable( test_lvl1_id
                       test/test_lvl1_id.cxx
                       INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
+                      LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier )
 
 #atlas_add_test( GTower_ID_test
 #                SOURCES
 #                test/GTower_ID_test.cxx
 #                INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-#                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+#                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
 #                EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 #atlas_add_test( JTower_ID_test
 #                SOURCES
 #                test/JTower_ID_test.cxx
 #                INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-#                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+#                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
 #                EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArEM_ID_test
                 SOURCES
                 test/LArEM_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArEM_SuperCell_ID_test
                 SOURCES
                 test/LArEM_SuperCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArHEC_ID_test
                 SOURCES
                 test/LArHEC_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArHEC_SuperCell_ID_test
                 SOURCES
                 test/LArHEC_SuperCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArFCAL_ID_test
                 SOURCES
                 test/LArFCAL_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArFCAL_SuperCell_ID_test
                 SOURCES
                 test/LArFCAL_SuperCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( LArMiniFCAL_ID_test
                 SOURCES
                 test/LArMiniFCAL_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( TileID_test
                 SOURCES
                 test/TileID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( Tile_SuperCell_ID_test
                 SOURCES
                 test/Tile_SuperCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( CaloCell_ID_test
                 SOURCES
                 test/CaloCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( CaloCell_SuperCell_ID_test
                 SOURCES
                 test/CaloCell_SuperCell_ID_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( CaloIDHelper_test
                 SOURCES
                 test/CaloIDHelper_test.cxx
                 INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
-                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers SGTools AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
+                LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} CaloGeoHelpers AthenaKernel AtlasDetDescr IdDict Identifier GaudiKernel TestTools CxxUtils StoreGateLib SGtests IdDictParser PathResolver CaloIdentifier
                 EXTRA_PATTERNS "mask/zero|Reading file|^AtlasDetectorID(Helper)?::" )
 
 atlas_add_test( CaloHelpersTest_test
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_ID.h
index 16060f464b18facb4309071de67b08a70ae10b61..951e99855286e63dc6e6d0843dc7af6a0e7a8692 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_ID.h
@@ -5,13 +5,13 @@
 #ifndef CALOCELL_ID_H
 #define CALOCELL_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 
 #include "CaloIdentifier/CaloID.h"
 #include "CaloIdentifier/CaloCell_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <iostream>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_SuperCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_SuperCell_ID.h
index c4dcb4352b0189a85b72906db2bc1d43f6f90037..b68c76990d2c22f9651e862007fea5c857d0d84d 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_SuperCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloCell_SuperCell_ID.h
@@ -17,14 +17,14 @@
 #define CALOIDENTIFIER_CALOCELL_SUPERCELL_ID_H
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 
 #include "CaloIdentifier/CaloID.h"
 #include "CaloIdentifier/CaloCell_Base_ID.h"
 #include "CaloIdentifier/LArNeighbours.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <iostream>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloDM_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloDM_ID.h
index e5a835a0cf9950f724f4cd8933cd45e6f098303a..10518512911c4c80afa82dde2e904f8fc789445c 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloDM_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloDM_ID.h
@@ -5,7 +5,7 @@
 #ifndef CALODM_ID_H
 #define CALODM_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "Identifier/Range.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloIdManager.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloIdManager.h
index b21c35607b75af4e876f53723660600a3f60c8f1..3e62ccb8cfc41267e724878c439e9ed3ee8e8ad0 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloIdManager.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloIdManager.h
@@ -13,7 +13,7 @@
 #ifndef CALOID_CALOIDMANAGER_H
 # define CALOID_CALOIDMANAGER_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 class CaloCell_ID;
 class CaloCell_SuperCell_ID;
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloLVL1_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloLVL1_ID.h
index a8eb1e3633ff7bc17cdc6c76db4548796d9c2100..13e6c8a57aa3c3a21a12f199bb46c763bb967058 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/CaloLVL1_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/CaloLVL1_ID.h
@@ -5,7 +5,7 @@
 #ifndef CALOLVL1_ID_H
 #define CALOLVL1_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "Identifier/Range.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/GTower_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/GTower_ID.h
index 6c82891d6512c63eee8c5e189f96f27757cd98c3..9e463715a3120f87c806943c4d67594ea36dafc5 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/GTower_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/GTower_ID.h
@@ -5,14 +5,14 @@
 #ifndef GTOWER_ID_H
 #define GTOWER_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
 #include "IdDict/IdDictDefs.h"
 
 #include "CaloIdentifier/JGTowerBase_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <algorithm>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/JGTowerBase_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/JGTowerBase_ID.h
index 12df3a5d80897d15123d5409ee3b1c5eede87db4..17a5a8c6c160266c685fbf76c3119563e6da43fb 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/JGTowerBase_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/JGTowerBase_ID.h
@@ -14,7 +14,7 @@
 #ifndef JGTOWERBASE_ID_H
 #define JGTOWERBASE_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "Identifier/Range.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/JTower_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/JTower_ID.h
index 6aa9057705c044ccafbd242fdeab50161b83da84..88069f8a8da446f78ebc56190dbac56e6c4def42 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/JTower_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/JTower_ID.h
@@ -5,14 +5,14 @@
 #ifndef JTOWER_ID_H
 #define JTOWER_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
 #include "IdDict/IdDictDefs.h"
 
 #include "CaloIdentifier/JGTowerBase_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <algorithm>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_ID.h
index 032cfbcb76380d623502ccbf477aa5cf9b9c1ca0..5c74216f2c9958cb34bc875e4965d3c0b2f5dde6 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_ID.h
@@ -5,7 +5,7 @@
 #ifndef LAREM_ID_H
 #define LAREM_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
@@ -13,7 +13,7 @@
 
 #include "CaloIdentifier/LArID_Exception.h"
 #include "CaloIdentifier/LArEM_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <algorithm>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_SuperCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_SuperCell_ID.h
index 57fe32d783edefcc5a0abf4cb724a94b7ea81f00..6adbcbc9722f6e57057fa244fc8dd327367fdefb 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_SuperCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArEM_SuperCell_ID.h
@@ -16,9 +16,9 @@
 #ifndef CALOIDENTIFIER_LAREM_SUPERCELL_ID_H
 #define CALOIDENTIFIER_LAREM_SUPERCELL_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloIdentifier/LArEM_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 
 /**
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_ID.h
index 84e64285c6787c085c57d1fefd60a1e265156ae6..94a9532d641a5ade7dfd5cff033875fdcf8b1957 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_ID.h
@@ -5,7 +5,7 @@
 #ifndef LARFCAL_ID_H
 #define LARFCAL_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
@@ -13,7 +13,7 @@
 
 #include "CaloIdentifier/LArID_Exception.h"
 #include "CaloIdentifier/LArFCAL_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include "boost/range/iterator_range.hpp"
 #include <vector>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_SuperCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_SuperCell_ID.h
index 0ab894f5df7e5c308592d493ededcdebdb71d297..779eaee166ee2900c21e04e8a639564068e200b6 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_SuperCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArFCAL_SuperCell_ID.h
@@ -5,9 +5,9 @@
 #ifndef CALOIDENTIFIER_LARFCAL_SUPERCELL_ID_H
 #define CALOIDENTIFIER_LARFCAL_SUPERCELL_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloIdentifier/LArFCAL_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include <vector>
 #include <algorithm>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_Base_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_Base_ID.h
index 37ee2db5acf0e9874f5f6b013f5f63fcac9af424..d2b03232e5f5a90471a6f807c63b4bbff96f7b81 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_Base_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_Base_ID.h
@@ -17,7 +17,7 @@
 #define CALOIDENTIFIER_LARHEC_BASE_ID_H
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_ID.h
index b7f80f3dabfab713823a8cb234a2804d5ac93123..53ce898578a971ded7f9eefbc535b137853834ff 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_ID.h
@@ -6,7 +6,7 @@
 #define LARHEC_ID_H
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
@@ -14,7 +14,7 @@
 
 #include "CaloIdentifier/LArHEC_Base_ID.h"
 #include "CaloIdentifier/LArID_Exception.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 #include "boost/range/iterator_range.hpp"
 
 #include <vector>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_SuperCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_SuperCell_ID.h
index c778a2b2cced4565290706c1cd3b03fa160532e8..6c2dc8d50c5da96c007791ba27d688c173359382 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_SuperCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArHEC_SuperCell_ID.h
@@ -17,9 +17,9 @@
 #define CALOIDENTIFIER_LARHEC_SUPERCELL_ID_H
 
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "CaloIdentifier/LArHEC_Base_ID.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/BaseInfo.h"
 
 
 /**  
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
index bfd6a6b6515517c0bf6b3294da2feb1638a337b2..f6328a9af76fb9de246580a2810e10fc8e6597db 100644
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/LArMiniFCAL_ID.h
@@ -5,7 +5,7 @@
 #ifndef LARMiniFCAL_ID_H
 #define LARMiniFCAL_ID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictFieldImplementation.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/TTOnlineID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/TTOnlineID.h
index 487c80581bd51ef30edc78da77d889c9e4452b35..1a23595a0e27d4f41e08aace70fdc73e10c6e169 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/TTOnlineID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/TTOnlineID.h
@@ -5,7 +5,7 @@
 #ifndef CALOIDENTIFIER_TTONLINEID_H
 #define CALOIDENTIFIER_TTONLINEID_H
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include "GaudiKernel/MsgStream.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 #include "Identifier/HWIdentifier.h"
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/TileID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/TileID.h
index a3092279e9e1fead8f193be034a1124a4da7b232..7924db062d3e9dbcd77c29656225d5d83c1fdac0 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/TileID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/TileID.h
@@ -24,8 +24,8 @@
 #include "CaloIdentifier/Tile_Base_ID.h"
 #include "CaloIdentifier/TileID_Exception.h"
 
-#include "CLIDSvc/CLASS_DEF.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/CLASS_DEF.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include "boost/range/iterator_range.hpp"
 #include <string>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_Base_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_Base_ID.h
index 14666ffb77cd1d1dce732fe5ec30d08fa2f05d56..00d1395013237b77afb393c324c9cdc3e62eea32 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_Base_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_Base_ID.h
@@ -22,7 +22,7 @@
 #include "CaloIdentifier/TileID_Exception.h"
 #include "CaloIdentifier/TileNeighbour.h"
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 #include "boost/range/iterator_range.hpp"
 #include <string>
diff --git a/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_SuperCell_ID.h b/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_SuperCell_ID.h
index 245e9e8722672c73f38744d9967c8b2602a05ccc..2316620d3dc6cda73d2c73ad03c8ac5c534580d0 100755
--- a/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_SuperCell_ID.h
+++ b/Calorimeter/CaloIdentifier/CaloIdentifier/Tile_SuperCell_ID.h
@@ -22,8 +22,8 @@
 #include "CaloIdentifier/Tile_Base_ID.h"
 #include "CaloIdentifier/TileID_Exception.h"
 
-#include "CLIDSvc/CLASS_DEF.h"
-#include "SGTools/BaseInfo.h"
+#include "AthenaKernel/CLASS_DEF.h"
+#include "AthenaKernel/BaseInfo.h"
 
 #include "boost/range/iterator_range.hpp"
 #include <string>
diff --git a/Calorimeter/CaloRec/python/CaloBCIDAvgAlgDefault.py b/Calorimeter/CaloRec/python/CaloBCIDAvgAlgDefault.py
index 33a3e23dbaf66d48b106543f4421103e0c1a3ae8..3f0b24063d3a50d53a20aae75d54a18095f1003a 100644
--- a/Calorimeter/CaloRec/python/CaloBCIDAvgAlgDefault.py
+++ b/Calorimeter/CaloRec/python/CaloBCIDAvgAlgDefault.py
@@ -24,10 +24,14 @@ def CaloBCIDAvgAlgDefault():
                 conddb.addFolder("LAR_OFL","/LAR/ElecCalibOfl/LArPileupShape<key>LArShape32</key>",className="LArShape32MC")
                 conddb.addFolder("LAR_OFL","/LAR/ElecCalibOfl/LArPileupAverage",className="LArMinBiasAverageMC")
 
-            #condSequence+=LArCondAlgShapeFlat(ReadKey=
-
             topSequence+=CaloBCIDAvgAlg(isMC=False,LumiTool=theLumiTool,ShapeKey="LArShape32")
         else: #MC case
+            from LArRecUtils.LArOFCCondAlgDefault import LArOFCCondAlgDefault
+            from LArRecUtils.LArAutoCorrTotalCondAlgDefault import  LArAutoCorrTotalCondAlgDefault
+            from LArRecUtils.LArADC2MeVCondAlgDefault import LArADC2MeVCondAlgDefault
+            LArADC2MeVCondAlgDefault()
+            LArAutoCorrTotalCondAlgDefault()
+            LArOFCCondAlgDefault()
             from TrigBunchCrossingTool.BunchCrossingTool import BunchCrossingTool
             theBunchCrossingTool = BunchCrossingTool()
             conddb.addFolder("LAR_OFL","/LAR/ElecCalibMC/Shape",className="LArShape32MC")
diff --git a/Calorimeter/CaloRec/python/CaloCellGetter.py b/Calorimeter/CaloRec/python/CaloCellGetter.py
index 701f4d03b162b0255713e5341d33f2b3b5b8c8bd..68c1f66bb87f8b016e85f022ef20726b2c9da8f7 100644
--- a/Calorimeter/CaloRec/python/CaloCellGetter.py
+++ b/Calorimeter/CaloRec/python/CaloCellGetter.py
@@ -7,6 +7,7 @@ from AthenaCommon.Constants import *
 from RecExConfig.Configured import Configured
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 from RecExConfig.RecFlags import rec
+import traceback
 
 class CaloCellGetter (Configured)  :
     _outputType = "CaloCellContainer"
diff --git a/Calorimeter/CaloSimEvent/CMakeLists.txt b/Calorimeter/CaloSimEvent/CMakeLists.txt
index 8606a9e52a4ac35d3d06ed527ea7c671ab590c25..4c30237f5bba49348db4292d68d40dbd5bcf67e8 100644
--- a/Calorimeter/CaloSimEvent/CMakeLists.txt
+++ b/Calorimeter/CaloSimEvent/CMakeLists.txt
@@ -7,8 +7,7 @@ atlas_subdir( CaloSimEvent )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          Control/CLIDSvc
-                          Control/SGTools
+                          Control/AthenaKernel
                           DetectorDescription/Identifier
                           Simulation/HitManagement
                           PRIVATE
@@ -22,12 +21,12 @@ atlas_add_library( CaloSimEvent
                    src/*.cxx
                    PUBLIC_HEADERS CaloSimEvent
                    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                   LINK_LIBRARIES SGTools Identifier HitManagement
+                   LINK_LIBRARIES Identifier HitManagement
                    PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} GaudiKernel )
 
 atlas_add_dictionary( CaloSimEventDict
                       CaloSimEvent/CaloSimEventDict.h
                       CaloSimEvent/selection.xml
                       INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} SGTools Identifier HitManagement GaudiKernel CaloSimEvent )
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} Identifier HitManagement GaudiKernel CaloSimEvent )
 
diff --git a/Calorimeter/CaloSimEvent/CaloSimEvent/CaloCalibrationHitContainer.h b/Calorimeter/CaloSimEvent/CaloSimEvent/CaloCalibrationHitContainer.h
index 46e22cbf120fb8f1b039fbe3570ef8bb5a93e58a..6e6ca44d1ce941d7e42af5f12d2c9aa0d057e7ad 100755
--- a/Calorimeter/CaloSimEvent/CaloSimEvent/CaloCalibrationHitContainer.h
+++ b/Calorimeter/CaloSimEvent/CaloSimEvent/CaloCalibrationHitContainer.h
@@ -19,7 +19,7 @@
 #include "HitManagement/AthenaHitsVector.h"
 #include "CaloSimEvent/CaloCalibrationHit.h"
 
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 
 class CaloCalibrationHitContainer:public AthenaHitsVector<CaloCalibrationHit>
 {
diff --git a/Calorimeter/CaloTTDetDescr/CMakeLists.txt b/Calorimeter/CaloTTDetDescr/CMakeLists.txt
index 129420422e27ca58d37a6a05d21464cc822236fe..000a484ae74a5e3de38ab8ee433c8dd8df959c47 100644
--- a/Calorimeter/CaloTTDetDescr/CMakeLists.txt
+++ b/Calorimeter/CaloTTDetDescr/CMakeLists.txt
@@ -7,8 +7,7 @@ atlas_subdir( CaloTTDetDescr )
 
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
-                          Control/CLIDSvc
-                          Control/SGTools
+                          Control/AthenaKernel
                           DetectorDescription/Identifier
                           PRIVATE
                           Calorimeter/CaloIdentifier )
@@ -17,6 +16,6 @@ atlas_depends_on_subdirs( PUBLIC
 atlas_add_library( CaloTTDetDescr
                    src/*.cxx
                    PUBLIC_HEADERS CaloTTDetDescr
-                   LINK_LIBRARIES SGTools Identifier
+                   LINK_LIBRARIES Identifier
                    PRIVATE_LINK_LIBRARIES CaloIdentifier )
 
diff --git a/Calorimeter/CaloTTDetDescr/CaloTTDetDescr/CaloTTDescrManager.h b/Calorimeter/CaloTTDetDescr/CaloTTDetDescr/CaloTTDescrManager.h
index 434cbb30af51558cf3cb908a55b3be96019107cb..c874de155aaaaf00c3f830f8bbb25bd120158b04 100755
--- a/Calorimeter/CaloTTDetDescr/CaloTTDetDescr/CaloTTDescrManager.h
+++ b/Calorimeter/CaloTTDetDescr/CaloTTDetDescr/CaloTTDescrManager.h
@@ -14,7 +14,7 @@
 #define CALODETDESCR_CALOTTDESCRMANAGER_H
 
 #include "Identifier/Identifier.h"
-#include "CLIDSvc/CLASS_DEF.h"
+#include "AthenaKernel/CLASS_DEF.h"
 #include <vector>
 #include <map>
 
diff --git a/Database/APR/CollectionBase/test/Factory_test.cxx b/Database/APR/CollectionBase/test/Factory_test.cxx
index fffbfe50c12ecc2a6f80ed123e3dcd7628d464de..6d389082da3af0880606002bc22cfffe6f1fb832 100644
--- a/Database/APR/CollectionBase/test/Factory_test.cxx
+++ b/Database/APR/CollectionBase/test/Factory_test.cxx
@@ -117,8 +117,10 @@ int main(int argc, char** )
        collection = factory->openWithPhysicalName(physicalName, 0);
     }
     cout << (collection ? "OK":"KO") << endl;
+    delete collection;
+    collection = nullptr;
+
 
-    
     cout << "Open collection 1 with guid .... ";
     if(crude) {
        CollectionDescription	desc( guid, "" ); 
@@ -126,6 +128,8 @@ int main(int argc, char** )
     } else
        collection = factory->openWithGuid(guid, 0);
     cout << (collection ? "OK":"KO") << endl;
+    delete collection;
+    collection = nullptr;
     
 
     cout << "Open collection 2 with logical name .... ";
@@ -135,6 +139,8 @@ int main(int argc, char** )
     } else
        collection = factory->openWithLogicalName("logicalName2", 0);
     cout << (collection ? "OK":"KO") << endl;
+    delete collection;
+    collection = nullptr;
         
  
     cout << "Try to create the existing collection 0 ... ";
@@ -153,7 +159,7 @@ int main(int argc, char** )
     }
     
     
-    
+
     cout << "Try to replace the replicated collection 1 ... ";
     physicalName =  collType+"|"+collConnection+"|"+"Collection1";
     try{
@@ -181,13 +187,15 @@ int main(int argc, char** )
      	  CollectionDescription	desc( "Collection0", collType, collConnection ); 
 	  collection = factory->createAndRegister( desc, 0, true, "", collMetaData );
        }
+       delete collection;
+       collection = nullptr;
        cout << "OK, this works" << endl;
     }catch( std::exception& e){
        cout << "ERROR, this should work" << endl;
        std::cout << "Exception: "<<e.what()<<std::endl;
     }
     
-    
+
     cout << "Try to update the NON replicated collection 0 ... ";
     physicalName =  collType+"|"+collConnection+"|"+"Collection0";
     try{
@@ -198,6 +206,8 @@ int main(int argc, char** )
 	  collection = factory->openWithPhysicalName( physicalName, 0, 
 						       ICollection::UPDATE );
        cout << "OK, this works" << endl;
+       delete collection;
+       collection = nullptr;
     }catch( std::exception&e ){
        cout << "ERROR, this should work" << endl;
        std::cout << "Exception: "<<e.what()<<std::endl; 
@@ -227,6 +237,8 @@ int main(int argc, char** )
 	  collection = factory->openWithLogicalName( "logicalName0", 0,// logical name 
 						     false );        // readOnly
        cout << "OK it works" << endl;
+       delete collection;
+       collection = nullptr;
     }catch( std::exception&){
       cout << "ERROR, this should work" << endl;
     }
diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
index dcf2b8e922966d44b8b0dbc00f68793e9df140dc..012694429ff25357cf23d4a3b3bdfc958c9315d7 100644
--- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
+++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx
@@ -705,11 +705,13 @@ const Token* AthenaPoolCnvSvc::registerForWrite(const Placement* placement,
       buffer = nullptr;
       if (!sc.isSuccess()) {
          ATH_MSG_ERROR("Could not share object for: " << placementStr);
+         m_outputStreamingTool[streamClient]->putObject(nullptr, 0).ignore();
          return(nullptr);
       }
       AuxDiscoverySvc auxDiscover;
       if (!auxDiscover.sendStore(m_serializeSvc.get(), m_outputStreamingTool[streamClient].get(), obj, pool::DbReflex::guid(classDesc), placement->containerName()).isSuccess()) {
          ATH_MSG_ERROR("Could not share dynamic aux store for: " << placementStr);
+         m_outputStreamingTool[streamClient]->putObject(nullptr, 0).ignore();
          return(nullptr);
       }
       if (!m_outputStreamingTool[streamClient]->putObject(nullptr, 0).isSuccess()) {
diff --git a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/CMakeLists.txt b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/CMakeLists.txt
index 4a8b00339ac11fe70c88595c594640ee9e06df2c..651307a088a8e6aee037a36a5039b3376f83f4b6 100644
--- a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/CMakeLists.txt
+++ b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/CMakeLists.txt
@@ -95,7 +95,7 @@ _add_test( AthenaPoolExample_Read
 # Read all output including scoped BackNavigation
 _add_test( AthenaPoolExample_ReadBN
    "athena.py AthenaPoolExampleAlgorithms/AthenaPoolExample_ReadBNJobOptions.py"
-   EXTRA_PATTERNS "BYTES_READ|DEBUG lookupPFN|DEBUG registered PFN|XMLCatalog +INFO"
+   EXTRA_PATTERNS "BYTES_READ|DEBUG lookupPFN|DEBUG registered PFN|XMLCatalog +INFO|Found Address:"
    DEPENDS AthenaPoolExampleAlgorithms_AthenaPoolExample_ReWrite_ctest )
 # Read all output w/o BackNavigation
 _add_test( AthenaPoolExample_ReadNoBN
diff --git a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_Read.ref b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_Read.ref
index 6fb1f58a55c5b224125ba2133b96caf7959d9120..eda00b45dab05bd456c42afc93596ad32b94a904 100644
--- a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_Read.ref
+++ b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_Read.ref
@@ -1,11 +1,11 @@
-Tue Sep  4 17:20:15 CEST 2018
+Mon Sep 24 15:28:54 CEST 2018
 Preloading tcmalloc_minimal.so
 Athena               INFO including file "AthenaCommon/Preparation.py"
 Athena               INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Athena               INFO executing ROOT6Setup
 Athena               INFO including file "AthenaCommon/Execution.py"
 Athena               INFO including file "AthenaPoolExampleAlgorithms/AthenaPoolExample_ReadJobOptions.py"
-Py:ConfigurableDb    INFO Read module info for 5519 configurables from 43 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5494 configurables from 54 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Athena               INFO including file "AthenaCommon/runbatch.py"
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -13,7 +13,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v30r3)
-                                          running on lxplus069.cern.ch on Tue Sep  4 17:20:30 2018
+                                          running on lxplus030.cern.ch on Mon Sep 24 15:29:14 2018
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -21,10 +21,10 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 2918 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 2946 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 916 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 889 CLIDRegistry entries for module ALL
 ReadData            DEBUG Property update for OutputLevel : new value = 2
 ReadData             INFO in initialize()
 MetaDataSvc         DEBUG Property update for OutputLevel : new value = 2
@@ -36,8 +36,8 @@ PoolSvc             DEBUG Service base class initialized successfully
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-03T2055/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus069.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-22T2103/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus030.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc             DEBUG OutputLevel is 
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -620,6 +620,7 @@ PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 10 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "EmptyPoolFile.root" from the collection list.
@@ -813,8 +814,8 @@ ReadData             INFO EventInfo event: 0 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 11 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -841,8 +842,8 @@ ReadData             INFO EventInfo event: 1 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 12 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -869,8 +870,8 @@ ReadData             INFO EventInfo event: 2 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 13 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -897,8 +898,8 @@ ReadData             INFO EventInfo event: 3 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 14 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -925,8 +926,8 @@ ReadData             INFO EventInfo event: 4 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 15 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -953,8 +954,8 @@ ReadData             INFO EventInfo event: 5 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 16 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -981,8 +982,8 @@ ReadData             INFO EventInfo event: 6 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 17 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1009,8 +1010,8 @@ ReadData             INFO EventInfo event: 7 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 18 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1037,8 +1038,8 @@ ReadData             INFO EventInfo event: 8 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 19 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1065,8 +1066,8 @@ ReadData             INFO EventInfo event: 9 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 20 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1093,8 +1094,8 @@ ReadData             INFO EventInfo event: 10 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 21 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1121,8 +1122,8 @@ ReadData             INFO EventInfo event: 11 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 22 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1149,8 +1150,8 @@ ReadData             INFO EventInfo event: 12 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 23 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1177,8 +1178,8 @@ ReadData             INFO EventInfo event: 13 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 24 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1205,8 +1206,8 @@ ReadData             INFO EventInfo event: 14 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 25 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1233,8 +1234,8 @@ ReadData             INFO EventInfo event: 15 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 26 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1261,8 +1262,8 @@ ReadData             INFO EventInfo event: 16 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 27 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1289,8 +1290,8 @@ ReadData             INFO EventInfo event: 17 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 28 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1317,8 +1318,8 @@ ReadData             INFO EventInfo event: 18 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 29 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1345,8 +1346,8 @@ ReadData             INFO EventInfo event: 19 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 30 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1374,8 +1375,8 @@ ReadData             INFO EventInfo event: 20 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #20, run #2 31 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1402,8 +1403,8 @@ ReadData             INFO EventInfo event: 21 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #21, run #2 32 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1430,8 +1431,8 @@ ReadData             INFO EventInfo event: 22 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #22, run #2 33 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1458,8 +1459,8 @@ ReadData             INFO EventInfo event: 23 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #23, run #2 34 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1486,8 +1487,8 @@ ReadData             INFO EventInfo event: 24 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #24, run #2 35 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1514,8 +1515,8 @@ ReadData             INFO EventInfo event: 25 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #25, run #2 36 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1542,8 +1543,8 @@ ReadData             INFO EventInfo event: 26 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #26, run #2 37 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1570,8 +1571,8 @@ ReadData             INFO EventInfo event: 27 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #27, run #2 38 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1598,8 +1599,8 @@ ReadData             INFO EventInfo event: 28 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #28, run #2 39 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1626,8 +1627,8 @@ ReadData             INFO EventInfo event: 29 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #29, run #2 40 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1654,8 +1655,8 @@ ReadData             INFO EventInfo event: 30 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #30, run #2 41 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1682,8 +1683,8 @@ ReadData             INFO EventInfo event: 31 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #31, run #2 42 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1710,8 +1711,8 @@ ReadData             INFO EventInfo event: 32 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #32, run #2 43 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1738,8 +1739,8 @@ ReadData             INFO EventInfo event: 33 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #33, run #2 44 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1766,8 +1767,8 @@ ReadData             INFO EventInfo event: 34 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #34, run #2 45 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1794,8 +1795,8 @@ ReadData             INFO EventInfo event: 35 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #35, run #2 46 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1822,8 +1823,8 @@ ReadData             INFO EventInfo event: 36 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #36, run #2 47 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1850,8 +1851,8 @@ ReadData             INFO EventInfo event: 37 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #37, run #2 48 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1878,8 +1879,8 @@ ReadData             INFO EventInfo event: 38 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #38, run #2 49 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1906,10 +1907,11 @@ ReadData             INFO EventInfo event: 39 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20439
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #39, run #2 50 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "SimplePoolFile3.root" from the collection list.
@@ -2140,8 +2142,8 @@ ReadData             INFO Hit x = 20.4945 y = 63.5816 z = 48.1358 detector = Dum
 ReadData             INFO Hit x = 23.7045 y = 57.9027 z = 46.3159 detector = DummyHitDetector
 ReadData             INFO Hit x = 26.9145 y = 52.2238 z = 44.9265 detector = DummyHitDetector
 ReadData             INFO Hit x = 30.1245 y = 46.5449 z = 43.831 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 51 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2187,8 +2189,8 @@ ReadData             INFO Hit x = 120.494 y = 63.5816 z = -51.8642 detector = Du
 ReadData             INFO Hit x = 123.704 y = 57.9027 z = -53.6841 detector = DummyHitDetector
 ReadData             INFO Hit x = 126.915 y = 52.2238 z = -55.0735 detector = DummyHitDetector
 ReadData             INFO Hit x = 130.125 y = 46.5449 z = -56.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 52 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2234,8 +2236,8 @@ ReadData             INFO Hit x = 220.494 y = 63.5816 z = -151.864 detector = Du
 ReadData             INFO Hit x = 223.704 y = 57.9027 z = -153.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 226.915 y = 52.2238 z = -155.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 230.125 y = 46.5449 z = -156.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 53 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2281,8 +2283,8 @@ ReadData             INFO Hit x = 320.495 y = 63.5816 z = -251.864 detector = Du
 ReadData             INFO Hit x = 323.705 y = 57.9027 z = -253.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 326.915 y = 52.2238 z = -255.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 330.125 y = 46.5449 z = -256.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 54 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2328,8 +2330,8 @@ ReadData             INFO Hit x = 420.495 y = 63.5816 z = -351.864 detector = Du
 ReadData             INFO Hit x = 423.705 y = 57.9027 z = -353.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 426.915 y = 52.2238 z = -355.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 430.125 y = 46.5449 z = -356.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 55 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2375,8 +2377,8 @@ ReadData             INFO Hit x = 520.495 y = 63.5816 z = -451.864 detector = Du
 ReadData             INFO Hit x = 523.705 y = 57.9027 z = -453.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 526.914 y = 52.2238 z = -455.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 530.125 y = 46.5449 z = -456.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 56 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2422,8 +2424,8 @@ ReadData             INFO Hit x = 620.495 y = 63.5816 z = -551.864 detector = Du
 ReadData             INFO Hit x = 623.705 y = 57.9027 z = -553.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 626.914 y = 52.2238 z = -555.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 630.125 y = 46.5449 z = -556.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 57 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2469,8 +2471,8 @@ ReadData             INFO Hit x = 720.495 y = 63.5816 z = -651.864 detector = Du
 ReadData             INFO Hit x = 723.705 y = 57.9027 z = -653.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 726.914 y = 52.2238 z = -655.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 730.125 y = 46.5449 z = -656.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 58 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2516,8 +2518,8 @@ ReadData             INFO Hit x = 820.495 y = 63.5816 z = -751.864 detector = Du
 ReadData             INFO Hit x = 823.705 y = 57.9027 z = -753.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 826.914 y = 52.2238 z = -755.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 830.125 y = 46.5449 z = -756.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 59 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2563,8 +2565,8 @@ ReadData             INFO Hit x = 920.495 y = 63.5816 z = -851.864 detector = Du
 ReadData             INFO Hit x = 923.705 y = 57.9027 z = -853.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 926.914 y = 52.2238 z = -855.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 930.125 y = 46.5449 z = -856.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 60 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2610,8 +2612,8 @@ ReadData             INFO Hit x = 1020.49 y = 63.5816 z = -951.864 detector = Du
 ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 61 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2657,8 +2659,8 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 62 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2704,8 +2706,8 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 63 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2751,8 +2753,8 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 64 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2798,8 +2800,8 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 65 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2845,8 +2847,8 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 66 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2892,8 +2894,8 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 67 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2939,8 +2941,8 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 68 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2986,8 +2988,8 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 69 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3033,10 +3035,11 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18960
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 70 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 MetaDataSvc         DEBUG handle() LastInputFile for end
 AthenaEventLoopMgr   INFO No more events in event selection 
@@ -3052,9 +3055,9 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=   30 [ms] Ave/Min/Max= 0.11(+- 1.35)/    0/   20 [ms] #=272
-cObj_ALL             INFO Time User   : Tot=   80 [ms] Ave/Min/Max=0.362(+- 2.49)/    0/   30 [ms] #=221
-ChronoStatSvc        INFO Time User   : Tot= 1.25  [s]                                             #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=0.257(+-  1.8)/    0/   20 [ms] #=272
+cObj_ALL             INFO Time User   : Tot=  210 [ms] Ave/Min/Max= 0.95(+- 5.25)/    0/   60 [ms] #=221
+ChronoStatSvc        INFO Time User   : Tot= 2.02  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadAgain.ref b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadAgain.ref
index fbf7cca53288da16f36376f110fd03bfe9bd3dd9..3b13ef44d385b7662dcf156875d8fe8231e9c608 100644
--- a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadAgain.ref
+++ b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadAgain.ref
@@ -1,11 +1,11 @@
-Tue Sep  4 17:28:49 CEST 2018
+Mon Sep 24 15:52:24 CEST 2018
 Preloading tcmalloc_minimal.so
 Athena               INFO including file "AthenaCommon/Preparation.py"
 Athena               INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Athena               INFO executing ROOT6Setup
 Athena               INFO including file "AthenaCommon/Execution.py"
 Athena               INFO including file "AthenaPoolExampleAlgorithms/AthenaPoolExample_ReadAgainJobOptions.py"
-Py:ConfigurableDb    INFO Read module info for 5519 configurables from 43 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5494 configurables from 54 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Athena               INFO including file "AthenaCommon/runbatch.py"
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -13,7 +13,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v30r3)
-                                          running on lxplus069.cern.ch on Tue Sep  4 17:29:01 2018
+                                          running on lxplus030.cern.ch on Mon Sep 24 15:52:38 2018
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -21,10 +21,10 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 2918 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 2946 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 916 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 889 CLIDRegistry entries for module ALL
 ReadData            DEBUG Property update for OutputLevel : new value = 2
 ReadData             INFO in initialize()
 MetaDataSvc         DEBUG Property update for OutputLevel : new value = 2
@@ -36,8 +36,8 @@ PoolSvc             DEBUG Service base class initialized successfully
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-03T2055/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus069.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-22T2103/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus030.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc             DEBUG OutputLevel is 
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -378,7 +378,7 @@ ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = Dum
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
 ClassIDSvc           INFO  getRegistryEntries: read 10 CLIDRegistry entries for module ALL
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 1 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -411,7 +411,7 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 2 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -444,7 +444,7 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 3 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -477,7 +477,7 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 4 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -510,7 +510,7 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 5 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -543,7 +543,7 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 6 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -576,7 +576,7 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 7 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -609,7 +609,7 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 8 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -642,7 +642,7 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 9 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -675,12 +675,13 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19645
+PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [BYTES_READ]: 19640
 PoolSvc              INFO Database (SimplePoolReplica1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 10 events processed so far  <<<===
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 EventSelector       DEBUG Try item: "EmptyPoolFile.root" from the collection list.
 PersistencySvc:...  DEBUG lookupPFN: EmptyPoolFile.root returned FID: '????' tech=ROOT_All
 DbSession            INFO     Open     DbSession    
@@ -873,8 +874,8 @@ ReadData             INFO EventInfo event: 0 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 11 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -901,8 +902,8 @@ ReadData             INFO EventInfo event: 1 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 12 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -929,8 +930,8 @@ ReadData             INFO EventInfo event: 2 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 13 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -957,8 +958,8 @@ ReadData             INFO EventInfo event: 3 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 14 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -985,8 +986,8 @@ ReadData             INFO EventInfo event: 4 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 15 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1013,8 +1014,8 @@ ReadData             INFO EventInfo event: 5 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 16 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1041,8 +1042,8 @@ ReadData             INFO EventInfo event: 6 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 17 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1069,8 +1070,8 @@ ReadData             INFO EventInfo event: 7 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 18 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1097,8 +1098,8 @@ ReadData             INFO EventInfo event: 8 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 19 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1125,8 +1126,8 @@ ReadData             INFO EventInfo event: 9 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 20 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1153,8 +1154,8 @@ ReadData             INFO EventInfo event: 10 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 21 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1181,8 +1182,8 @@ ReadData             INFO EventInfo event: 11 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 22 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1209,8 +1210,8 @@ ReadData             INFO EventInfo event: 12 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 23 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1237,8 +1238,8 @@ ReadData             INFO EventInfo event: 13 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 24 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1265,8 +1266,8 @@ ReadData             INFO EventInfo event: 14 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 25 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1293,8 +1294,8 @@ ReadData             INFO EventInfo event: 15 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 26 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1321,8 +1322,8 @@ ReadData             INFO EventInfo event: 16 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 27 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1349,8 +1350,8 @@ ReadData             INFO EventInfo event: 17 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 28 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1377,8 +1378,8 @@ ReadData             INFO EventInfo event: 18 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 29 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1405,8 +1406,8 @@ ReadData             INFO EventInfo event: 19 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18812
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 30 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1435,7 +1436,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #20, run #2 31 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1463,7 +1464,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #21, run #2 32 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1491,7 +1492,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #22, run #2 33 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1519,7 +1520,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #23, run #2 34 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1547,7 +1548,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #24, run #2 35 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1575,7 +1576,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #25, run #2 36 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1603,7 +1604,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #26, run #2 37 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1631,7 +1632,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #27, run #2 38 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1659,7 +1660,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #28, run #2 39 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1687,7 +1688,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #29, run #2 40 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1715,7 +1716,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #30, run #2 41 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1743,7 +1744,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #31, run #2 42 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1771,7 +1772,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #32, run #2 43 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1799,7 +1800,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #33, run #2 44 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1827,7 +1828,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #34, run #2 45 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1855,7 +1856,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #35, run #2 46 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1883,7 +1884,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #36, run #2 47 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1911,7 +1912,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #37, run #2 48 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1939,7 +1940,7 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #38, run #2 49 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1967,9 +1968,10 @@ ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
 PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #39, run #2 50 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "SimplePoolFile4.root" from the collection list.
@@ -2257,8 +2259,8 @@ ReadData             INFO Hit x = 20.4945 y = 63.5816 z = 48.1358 detector = Dum
 ReadData             INFO Hit x = 23.7045 y = 57.9027 z = 46.3159 detector = DummyHitDetector
 ReadData             INFO Hit x = 26.9145 y = 52.2238 z = 44.9265 detector = DummyHitDetector
 ReadData             INFO Hit x = 30.1245 y = 46.5449 z = 43.831 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 51 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2304,8 +2306,8 @@ ReadData             INFO Hit x = 120.494 y = 63.5816 z = -51.8642 detector = Du
 ReadData             INFO Hit x = 123.704 y = 57.9027 z = -53.6841 detector = DummyHitDetector
 ReadData             INFO Hit x = 126.915 y = 52.2238 z = -55.0735 detector = DummyHitDetector
 ReadData             INFO Hit x = 130.125 y = 46.5449 z = -56.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 52 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2351,8 +2353,8 @@ ReadData             INFO Hit x = 220.494 y = 63.5816 z = -151.864 detector = Du
 ReadData             INFO Hit x = 223.704 y = 57.9027 z = -153.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 226.915 y = 52.2238 z = -155.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 230.125 y = 46.5449 z = -156.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 53 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2398,8 +2400,8 @@ ReadData             INFO Hit x = 320.495 y = 63.5816 z = -251.864 detector = Du
 ReadData             INFO Hit x = 323.705 y = 57.9027 z = -253.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 326.915 y = 52.2238 z = -255.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 330.125 y = 46.5449 z = -256.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 54 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2445,8 +2447,8 @@ ReadData             INFO Hit x = 420.495 y = 63.5816 z = -351.864 detector = Du
 ReadData             INFO Hit x = 423.705 y = 57.9027 z = -353.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 426.915 y = 52.2238 z = -355.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 430.125 y = 46.5449 z = -356.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 55 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2492,8 +2494,8 @@ ReadData             INFO Hit x = 520.495 y = 63.5816 z = -451.864 detector = Du
 ReadData             INFO Hit x = 523.705 y = 57.9027 z = -453.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 526.914 y = 52.2238 z = -455.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 530.125 y = 46.5449 z = -456.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 56 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2539,8 +2541,8 @@ ReadData             INFO Hit x = 620.495 y = 63.5816 z = -551.864 detector = Du
 ReadData             INFO Hit x = 623.705 y = 57.9027 z = -553.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 626.914 y = 52.2238 z = -555.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 630.125 y = 46.5449 z = -556.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 57 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2586,8 +2588,8 @@ ReadData             INFO Hit x = 720.495 y = 63.5816 z = -651.864 detector = Du
 ReadData             INFO Hit x = 723.705 y = 57.9027 z = -653.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 726.914 y = 52.2238 z = -655.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 730.125 y = 46.5449 z = -656.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 58 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2633,8 +2635,8 @@ ReadData             INFO Hit x = 820.495 y = 63.5816 z = -751.864 detector = Du
 ReadData             INFO Hit x = 823.705 y = 57.9027 z = -753.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 826.914 y = 52.2238 z = -755.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 830.125 y = 46.5449 z = -756.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 59 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2680,8 +2682,8 @@ ReadData             INFO Hit x = 920.495 y = 63.5816 z = -851.864 detector = Du
 ReadData             INFO Hit x = 923.705 y = 57.9027 z = -853.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 926.914 y = 52.2238 z = -855.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 930.125 y = 46.5449 z = -856.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 60 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2727,8 +2729,8 @@ ReadData             INFO Hit x = 1020.49 y = 63.5816 z = -951.864 detector = Du
 ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 61 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2774,8 +2776,8 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 62 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2821,8 +2823,8 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 63 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2868,8 +2870,8 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 64 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2915,8 +2917,8 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 65 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2962,8 +2964,8 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 66 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3009,8 +3011,8 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 67 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3056,8 +3058,8 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 68 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3103,8 +3105,8 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 69 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3150,10 +3152,11 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19014
-PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [BYTES_READ]: 19018
+PoolSvc              INFO Database (SimplePoolFile4.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 70 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 MetaDataSvc         DEBUG handle() LastInputFile for end
 AthenaEventLoopMgr   INFO No more events in event selection 
@@ -3170,9 +3173,9 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=   30 [ms] Ave/Min/Max=0.0965(+- 1.26)/    0/   20 [ms] #=311
-cObj_ALL             INFO Time User   : Tot=   70 [ms] Ave/Min/Max= 0.29(+- 2.48)/    0/   30 [ms] #=241
-ChronoStatSvc        INFO Time User   : Tot= 1.21  [s]                                             #=  1
+cObjR_ALL            INFO Time User   : Tot=   80 [ms] Ave/Min/Max=0.257(+- 1.58)/    0/   10 [ms] #=311
+cObj_ALL             INFO Time User   : Tot=  160 [ms] Ave/Min/Max=0.664(+- 3.81)/    0/   40 [ms] #=241
+ChronoStatSvc        INFO Time User   : Tot= 1.92  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadBN.ref b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadBN.ref
index ae50043be7bfd3fa9e77dec21cdf12a1db78da7a..5d04ca5d9774ea5b5522ab6175514821ef61aa4b 100644
--- a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadBN.ref
+++ b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadBN.ref
@@ -1,11 +1,11 @@
-Tue Sep  4 17:20:15 CEST 2018
+Mon Sep 24 15:58:35 CEST 2018
 Preloading tcmalloc_minimal.so
 Athena               INFO including file "AthenaCommon/Preparation.py"
 Athena               INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Athena               INFO executing ROOT6Setup
 Athena               INFO including file "AthenaCommon/Execution.py"
 Athena               INFO including file "AthenaPoolExampleAlgorithms/AthenaPoolExample_ReadBNJobOptions.py"
-Py:ConfigurableDb    INFO Read module info for 5519 configurables from 43 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5494 configurables from 54 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Athena               INFO including file "AthenaCommon/runbatch.py"
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -13,7 +13,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v30r3)
-                                          running on lxplus069.cern.ch on Tue Sep  4 17:20:30 2018
+                                          running on lxplus030.cern.ch on Mon Sep 24 15:59:02 2018
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -21,10 +21,10 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 2918 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 2946 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 916 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 889 CLIDRegistry entries for module ALL
 ReadData            DEBUG Property update for OutputLevel : new value = 2
 ReadData             INFO in initialize()
 MetaDataSvc         DEBUG Property update for OutputLevel : new value = 2
@@ -36,8 +36,8 @@ PoolSvc             DEBUG Service base class initialized successfully
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-03T2055/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus069.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-22T2103/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus030.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc             DEBUG OutputLevel is 
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -320,7 +320,7 @@ ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = Dum
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
 ClassIDSvc           INFO  getRegistryEntries: read 10 CLIDRegistry entries for module ALL
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 1 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -353,7 +353,7 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 2 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -386,7 +386,7 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 3 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -419,7 +419,7 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 4 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -452,7 +452,7 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 5 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -485,7 +485,7 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 6 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -518,7 +518,7 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 7 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -551,7 +551,7 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 8 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -584,7 +584,7 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 9 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -617,10 +617,11 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20093
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 20091
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 10 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "EmptyPoolFile.root" from the collection list.
@@ -814,8 +815,8 @@ ReadData             INFO EventInfo event: 0 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 11 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -842,8 +843,8 @@ ReadData             INFO EventInfo event: 1 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 12 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -870,8 +871,8 @@ ReadData             INFO EventInfo event: 2 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 13 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -898,8 +899,8 @@ ReadData             INFO EventInfo event: 3 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 14 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -926,8 +927,8 @@ ReadData             INFO EventInfo event: 4 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 15 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -954,8 +955,8 @@ ReadData             INFO EventInfo event: 5 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 16 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -982,8 +983,8 @@ ReadData             INFO EventInfo event: 6 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 17 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1010,8 +1011,8 @@ ReadData             INFO EventInfo event: 7 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 18 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1038,8 +1039,8 @@ ReadData             INFO EventInfo event: 8 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 19 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1066,8 +1067,8 @@ ReadData             INFO EventInfo event: 9 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 20 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1094,8 +1095,8 @@ ReadData             INFO EventInfo event: 10 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 21 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1122,8 +1123,8 @@ ReadData             INFO EventInfo event: 11 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 22 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1150,8 +1151,8 @@ ReadData             INFO EventInfo event: 12 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 23 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1178,8 +1179,8 @@ ReadData             INFO EventInfo event: 13 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 24 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1206,8 +1207,8 @@ ReadData             INFO EventInfo event: 14 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 25 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1234,8 +1235,8 @@ ReadData             INFO EventInfo event: 15 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 26 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1262,8 +1263,8 @@ ReadData             INFO EventInfo event: 16 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 27 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1290,8 +1291,8 @@ ReadData             INFO EventInfo event: 17 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 28 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1318,8 +1319,8 @@ ReadData             INFO EventInfo event: 18 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 29 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1346,8 +1347,8 @@ ReadData             INFO EventInfo event: 19 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18817
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18813
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 30 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1375,8 +1376,8 @@ ReadData             INFO EventInfo event: 20 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #20, run #2 31 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1403,8 +1404,8 @@ ReadData             INFO EventInfo event: 21 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #21, run #2 32 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1431,8 +1432,8 @@ ReadData             INFO EventInfo event: 22 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #22, run #2 33 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1459,8 +1460,8 @@ ReadData             INFO EventInfo event: 23 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #23, run #2 34 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1487,8 +1488,8 @@ ReadData             INFO EventInfo event: 24 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #24, run #2 35 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1515,8 +1516,8 @@ ReadData             INFO EventInfo event: 25 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #25, run #2 36 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1543,8 +1544,8 @@ ReadData             INFO EventInfo event: 26 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #26, run #2 37 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1571,8 +1572,8 @@ ReadData             INFO EventInfo event: 27 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #27, run #2 38 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1599,8 +1600,8 @@ ReadData             INFO EventInfo event: 28 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #28, run #2 39 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1627,8 +1628,8 @@ ReadData             INFO EventInfo event: 29 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #29, run #2 40 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1655,8 +1656,8 @@ ReadData             INFO EventInfo event: 30 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #30, run #2 41 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1683,8 +1684,8 @@ ReadData             INFO EventInfo event: 31 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #31, run #2 42 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1711,8 +1712,8 @@ ReadData             INFO EventInfo event: 32 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #32, run #2 43 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1739,8 +1740,8 @@ ReadData             INFO EventInfo event: 33 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #33, run #2 44 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1767,8 +1768,8 @@ ReadData             INFO EventInfo event: 34 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #34, run #2 45 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1795,8 +1796,8 @@ ReadData             INFO EventInfo event: 35 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #35, run #2 46 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1823,8 +1824,8 @@ ReadData             INFO EventInfo event: 36 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #36, run #2 47 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1851,8 +1852,8 @@ ReadData             INFO EventInfo event: 37 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #37, run #2 48 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1879,8 +1880,8 @@ ReadData             INFO EventInfo event: 38 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #38, run #2 49 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1907,10 +1908,11 @@ ReadData             INFO EventInfo event: 39 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20440
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #39, run #2 50 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "SimplePoolFile3.root" from the collection list.
@@ -2141,8 +2143,8 @@ ReadData             INFO Hit x = 20.4945 y = 63.5816 z = 48.1358 detector = Dum
 ReadData             INFO Hit x = 23.7045 y = 57.9027 z = 46.3159 detector = DummyHitDetector
 ReadData             INFO Hit x = 26.9145 y = 52.2238 z = 44.9265 detector = DummyHitDetector
 ReadData             INFO Hit x = 30.1245 y = 46.5449 z = 43.831 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 51 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2188,8 +2190,8 @@ ReadData             INFO Hit x = 120.494 y = 63.5816 z = -51.8642 detector = Du
 ReadData             INFO Hit x = 123.704 y = 57.9027 z = -53.6841 detector = DummyHitDetector
 ReadData             INFO Hit x = 126.915 y = 52.2238 z = -55.0735 detector = DummyHitDetector
 ReadData             INFO Hit x = 130.125 y = 46.5449 z = -56.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 52 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2235,8 +2237,8 @@ ReadData             INFO Hit x = 220.494 y = 63.5816 z = -151.864 detector = Du
 ReadData             INFO Hit x = 223.704 y = 57.9027 z = -153.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 226.915 y = 52.2238 z = -155.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 230.125 y = 46.5449 z = -156.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 53 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2282,8 +2284,8 @@ ReadData             INFO Hit x = 320.495 y = 63.5816 z = -251.864 detector = Du
 ReadData             INFO Hit x = 323.705 y = 57.9027 z = -253.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 326.915 y = 52.2238 z = -255.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 330.125 y = 46.5449 z = -256.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 54 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2329,8 +2331,8 @@ ReadData             INFO Hit x = 420.495 y = 63.5816 z = -351.864 detector = Du
 ReadData             INFO Hit x = 423.705 y = 57.9027 z = -353.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 426.915 y = 52.2238 z = -355.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 430.125 y = 46.5449 z = -356.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 55 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2376,8 +2378,8 @@ ReadData             INFO Hit x = 520.495 y = 63.5816 z = -451.864 detector = Du
 ReadData             INFO Hit x = 523.705 y = 57.9027 z = -453.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 526.914 y = 52.2238 z = -455.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 530.125 y = 46.5449 z = -456.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 56 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2423,8 +2425,8 @@ ReadData             INFO Hit x = 620.495 y = 63.5816 z = -551.864 detector = Du
 ReadData             INFO Hit x = 623.705 y = 57.9027 z = -553.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 626.914 y = 52.2238 z = -555.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 630.125 y = 46.5449 z = -556.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 57 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2470,8 +2472,8 @@ ReadData             INFO Hit x = 720.495 y = 63.5816 z = -651.864 detector = Du
 ReadData             INFO Hit x = 723.705 y = 57.9027 z = -653.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 726.914 y = 52.2238 z = -655.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 730.125 y = 46.5449 z = -656.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 58 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2517,8 +2519,8 @@ ReadData             INFO Hit x = 820.495 y = 63.5816 z = -751.864 detector = Du
 ReadData             INFO Hit x = 823.705 y = 57.9027 z = -753.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 826.914 y = 52.2238 z = -755.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 830.125 y = 46.5449 z = -756.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 59 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2564,8 +2566,8 @@ ReadData             INFO Hit x = 920.495 y = 63.5816 z = -851.864 detector = Du
 ReadData             INFO Hit x = 923.705 y = 57.9027 z = -853.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 926.914 y = 52.2238 z = -855.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 930.125 y = 46.5449 z = -856.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 60 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2611,8 +2613,8 @@ ReadData             INFO Hit x = 1020.49 y = 63.5816 z = -951.864 detector = Du
 ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 61 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2658,8 +2660,8 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 62 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2705,8 +2707,8 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 63 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2752,8 +2754,8 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 64 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2799,8 +2801,8 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 65 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2846,8 +2848,8 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 66 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2893,8 +2895,8 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 67 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2940,8 +2942,8 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 68 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -2987,8 +2989,8 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 69 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -3034,10 +3036,11 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18966
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18969
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 70 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 MetaDataSvc         DEBUG handle() LastInputFile for end
 AthenaEventLoopMgr   INFO No more events in event selection 
@@ -3053,9 +3056,9 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=   40 [ms] Ave/Min/Max=0.147(+- 1.48)/    0/   20 [ms] #=272
-cObj_ALL             INFO Time User   : Tot=   50 [ms] Ave/Min/Max=0.226(+- 1.77)/    0/   20 [ms] #=221
-ChronoStatSvc        INFO Time User   : Tot= 1.25  [s]                                             #=  1
+cObjR_ALL            INFO Time User   : Tot=   60 [ms] Ave/Min/Max=0.221(+-  1.7)/    0/   20 [ms] #=272
+cObj_ALL             INFO Time User   : Tot=  180 [ms] Ave/Min/Max=0.814(+- 4.78)/    0/   50 [ms] #=221
+ChronoStatSvc        INFO Time User   : Tot= 2.01  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadConcat.ref b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadConcat.ref
index 5b894c9d0d57472dbdba24b45d9e2b4f35fd4c59..e7b54eee8afcbb2cbbb413d4bc9549df16ed10db 100644
--- a/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadConcat.ref
+++ b/Database/AthenaPOOL/AthenaPoolExample/AthenaPoolExampleAlgorithms/share/AthenaPoolExample_ReadConcat.ref
@@ -1,11 +1,11 @@
-Tue Sep  4 17:29:23 CEST 2018
+Mon Sep 24 14:04:29 CEST 2018
 Preloading tcmalloc_minimal.so
 Athena               INFO including file "AthenaCommon/Preparation.py"
 Athena               INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Athena               INFO executing ROOT6Setup
 Athena               INFO including file "AthenaCommon/Execution.py"
 Athena               INFO including file "AthenaPoolExampleAlgorithms/AthenaPoolExample_ReadJobOptions.py"
-Py:ConfigurableDb    INFO Read module info for 5519 configurables from 43 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5494 configurables from 54 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Athena               INFO including file "AthenaCommon/runbatch.py"
 [?1034hApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -13,7 +13,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v30r3)
-                                          running on lxplus069.cern.ch on Tue Sep  4 17:29:37 2018
+                                          running on lxplus007.cern.ch on Mon Sep 24 14:04:40 2018
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -21,10 +21,10 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 2918 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 2946 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 916 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 889 CLIDRegistry entries for module ALL
 ReadData            DEBUG Property update for OutputLevel : new value = 2
 ReadData             INFO in initialize()
 MetaDataSvc         DEBUG Property update for OutputLevel : new value = 2
@@ -36,8 +36,8 @@ PoolSvc             DEBUG Service base class initialized successfully
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-03T2055/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus069.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-22T2103/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus007.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc             DEBUG OutputLevel is 
 PoolSvc              INFO Setting up APR FileCatalog and Streams
@@ -378,7 +378,7 @@ ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = Dum
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
 ClassIDSvc           INFO  getRegistryEntries: read 10 CLIDRegistry entries for module ALL
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 1 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -411,7 +411,7 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 2 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -444,7 +444,7 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 3 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -477,7 +477,7 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 4 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -510,7 +510,7 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 5 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -543,7 +543,7 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 6 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -576,7 +576,7 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 7 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -609,7 +609,7 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 8 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -642,7 +642,7 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 9 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
@@ -675,12 +675,13 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19687
+PoolSvc              INFO Database (SimplePoolFile1.root) attribute [BYTES_READ]: 19691
 PoolSvc              INFO Database (SimplePoolFile1.root) attribute [READ_CALLS]: 23
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 10 events processed so far  <<<===
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 EventSelector       DEBUG Try item: "EmptyPoolFile.root" from the collection list.
 PersistencySvc:...  DEBUG lookupPFN: EmptyPoolFile.root returned FID: '????' tech=ROOT_All
 DbSession            INFO     Open     DbSession    
@@ -873,8 +874,8 @@ ReadData             INFO EventInfo event: 0 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 11 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -901,8 +902,8 @@ ReadData             INFO EventInfo event: 1 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 12 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -929,8 +930,8 @@ ReadData             INFO EventInfo event: 2 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 13 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -957,8 +958,8 @@ ReadData             INFO EventInfo event: 3 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 14 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -985,8 +986,8 @@ ReadData             INFO EventInfo event: 4 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 15 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1013,8 +1014,8 @@ ReadData             INFO EventInfo event: 5 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 16 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1041,8 +1042,8 @@ ReadData             INFO EventInfo event: 6 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 17 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1069,8 +1070,8 @@ ReadData             INFO EventInfo event: 7 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 18 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1097,8 +1098,8 @@ ReadData             INFO EventInfo event: 8 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 19 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1125,8 +1126,8 @@ ReadData             INFO EventInfo event: 9 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 20 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1153,8 +1154,8 @@ ReadData             INFO EventInfo event: 10 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 21 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1181,8 +1182,8 @@ ReadData             INFO EventInfo event: 11 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 22 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1209,8 +1210,8 @@ ReadData             INFO EventInfo event: 12 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 23 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1237,8 +1238,8 @@ ReadData             INFO EventInfo event: 13 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 24 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1265,8 +1266,8 @@ ReadData             INFO EventInfo event: 14 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 25 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1293,8 +1294,8 @@ ReadData             INFO EventInfo event: 15 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 26 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1321,8 +1322,8 @@ ReadData             INFO EventInfo event: 16 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 27 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1349,8 +1350,8 @@ ReadData             INFO EventInfo event: 17 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 28 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1377,8 +1378,8 @@ ReadData             INFO EventInfo event: 18 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 29 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1405,8 +1406,8 @@ ReadData             INFO EventInfo event: 19 run: 1
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18814
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 26
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 18815
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 22
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 30 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1434,8 +1435,8 @@ ReadData             INFO EventInfo event: 20 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #20, run #2 31 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1462,8 +1463,8 @@ ReadData             INFO EventInfo event: 21 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #21, run #2 32 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1490,8 +1491,8 @@ ReadData             INFO EventInfo event: 22 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #22, run #2 33 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1518,8 +1519,8 @@ ReadData             INFO EventInfo event: 23 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #23, run #2 34 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1546,8 +1547,8 @@ ReadData             INFO EventInfo event: 24 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #24, run #2 35 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1574,8 +1575,8 @@ ReadData             INFO EventInfo event: 25 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #25, run #2 36 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1602,8 +1603,8 @@ ReadData             INFO EventInfo event: 26 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #26, run #2 37 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1630,8 +1631,8 @@ ReadData             INFO EventInfo event: 27 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #27, run #2 38 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1658,8 +1659,8 @@ ReadData             INFO EventInfo event: 28 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #28, run #2 39 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1686,8 +1687,8 @@ ReadData             INFO EventInfo event: 29 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #29, run #2 40 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1714,8 +1715,8 @@ ReadData             INFO EventInfo event: 30 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #30, run #2 41 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1742,8 +1743,8 @@ ReadData             INFO EventInfo event: 31 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #31, run #2 42 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1770,8 +1771,8 @@ ReadData             INFO EventInfo event: 32 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #32, run #2 43 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1798,8 +1799,8 @@ ReadData             INFO EventInfo event: 33 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #33, run #2 44 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1826,8 +1827,8 @@ ReadData             INFO EventInfo event: 34 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #34, run #2 45 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1854,8 +1855,8 @@ ReadData             INFO EventInfo event: 35 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #35, run #2 46 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1882,8 +1883,8 @@ ReadData             INFO EventInfo event: 36 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #36, run #2 47 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1910,8 +1911,8 @@ ReadData             INFO EventInfo event: 37 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #37, run #2 48 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1938,8 +1939,8 @@ ReadData             INFO EventInfo event: 38 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #38, run #2 49 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 3
@@ -1966,10 +1967,11 @@ ReadData             INFO EventInfo event: 39 run: 2
 ReadData             INFO Get Smart data ptr 1
 ReadData             INFO Could not find ExampleTrackContainer/MyTracks
 ReadData             INFO Could not find ExampleHitContainer/MyHits
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20437
-PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 30
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [BYTES_READ]: 20438
+PoolSvc              INFO Database (SimplePoolFile2.root) attribute [READ_CALLS]: 25
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #39, run #2 50 events processed so far  <<<===
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 EventSelector       DEBUG Try item: "SimplePoolFile3.root" from the collection list.
@@ -2176,8 +2178,8 @@ ReadData             INFO Hit x = 20.4945 y = 63.5816 z = 48.1358 detector = Dum
 ReadData             INFO Hit x = 23.7045 y = 57.9027 z = 46.3159 detector = DummyHitDetector
 ReadData             INFO Hit x = 26.9145 y = 52.2238 z = 44.9265 detector = DummyHitDetector
 ReadData             INFO Hit x = 30.1245 y = 46.5449 z = 43.831 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #1 51 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2223,8 +2225,8 @@ ReadData             INFO Hit x = 120.494 y = 63.5816 z = -51.8642 detector = Du
 ReadData             INFO Hit x = 123.704 y = 57.9027 z = -53.6841 detector = DummyHitDetector
 ReadData             INFO Hit x = 126.915 y = 52.2238 z = -55.0735 detector = DummyHitDetector
 ReadData             INFO Hit x = 130.125 y = 46.5449 z = -56.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 52 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2270,8 +2272,8 @@ ReadData             INFO Hit x = 220.494 y = 63.5816 z = -151.864 detector = Du
 ReadData             INFO Hit x = 223.704 y = 57.9027 z = -153.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 226.915 y = 52.2238 z = -155.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 230.125 y = 46.5449 z = -156.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 53 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2317,8 +2319,8 @@ ReadData             INFO Hit x = 320.495 y = 63.5816 z = -251.864 detector = Du
 ReadData             INFO Hit x = 323.705 y = 57.9027 z = -253.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 326.915 y = 52.2238 z = -255.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 330.125 y = 46.5449 z = -256.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 54 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2364,8 +2366,8 @@ ReadData             INFO Hit x = 420.495 y = 63.5816 z = -351.864 detector = Du
 ReadData             INFO Hit x = 423.705 y = 57.9027 z = -353.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 426.915 y = 52.2238 z = -355.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 430.125 y = 46.5449 z = -356.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 55 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2411,8 +2413,8 @@ ReadData             INFO Hit x = 520.495 y = 63.5816 z = -451.864 detector = Du
 ReadData             INFO Hit x = 523.705 y = 57.9027 z = -453.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 526.914 y = 52.2238 z = -455.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 530.125 y = 46.5449 z = -456.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 56 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2458,8 +2460,8 @@ ReadData             INFO Hit x = 620.495 y = 63.5816 z = -551.864 detector = Du
 ReadData             INFO Hit x = 623.705 y = 57.9027 z = -553.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 626.914 y = 52.2238 z = -555.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 630.125 y = 46.5449 z = -556.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 57 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2505,8 +2507,8 @@ ReadData             INFO Hit x = 720.495 y = 63.5816 z = -651.864 detector = Du
 ReadData             INFO Hit x = 723.705 y = 57.9027 z = -653.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 726.914 y = 52.2238 z = -655.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 730.125 y = 46.5449 z = -656.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 58 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2552,8 +2554,8 @@ ReadData             INFO Hit x = 820.495 y = 63.5816 z = -751.864 detector = Du
 ReadData             INFO Hit x = 823.705 y = 57.9027 z = -753.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 826.914 y = 52.2238 z = -755.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 830.125 y = 46.5449 z = -756.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 59 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2599,8 +2601,8 @@ ReadData             INFO Hit x = 920.495 y = 63.5816 z = -851.864 detector = Du
 ReadData             INFO Hit x = 923.705 y = 57.9027 z = -853.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 926.914 y = 52.2238 z = -855.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 930.125 y = 46.5449 z = -856.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 60 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2646,8 +2648,8 @@ ReadData             INFO Hit x = 1020.49 y = 63.5816 z = -951.864 detector = Du
 ReadData             INFO Hit x = 1023.7 y = 57.9027 z = -953.684 detector = DummyHitDetector
 ReadData             INFO Hit x = 1026.91 y = 52.2238 z = -955.073 detector = DummyHitDetector
 ReadData             INFO Hit x = 1030.12 y = 46.5449 z = -956.169 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 61 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2693,8 +2695,8 @@ ReadData             INFO Hit x = 1120.49 y = 63.5816 z = -1051.86 detector = Du
 ReadData             INFO Hit x = 1123.7 y = 57.9027 z = -1053.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1126.91 y = 52.2238 z = -1055.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1130.12 y = 46.5449 z = -1056.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 62 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2740,8 +2742,8 @@ ReadData             INFO Hit x = 1220.49 y = 63.5816 z = -1151.86 detector = Du
 ReadData             INFO Hit x = 1223.7 y = 57.9027 z = -1153.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1226.91 y = 52.2238 z = -1155.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1230.12 y = 46.5449 z = -1156.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 63 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2787,8 +2789,8 @@ ReadData             INFO Hit x = 1320.49 y = 63.5816 z = -1251.86 detector = Du
 ReadData             INFO Hit x = 1323.7 y = 57.9027 z = -1253.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1326.91 y = 52.2238 z = -1255.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1330.12 y = 46.5449 z = -1256.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #1 64 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2834,8 +2836,8 @@ ReadData             INFO Hit x = 1420.49 y = 63.5816 z = -1351.86 detector = Du
 ReadData             INFO Hit x = 1423.7 y = 57.9027 z = -1353.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1426.91 y = 52.2238 z = -1355.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1430.12 y = 46.5449 z = -1356.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #1 65 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2881,8 +2883,8 @@ ReadData             INFO Hit x = 1520.49 y = 63.5816 z = -1451.86 detector = Du
 ReadData             INFO Hit x = 1523.7 y = 57.9027 z = -1453.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1526.91 y = 52.2238 z = -1455.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1530.12 y = 46.5449 z = -1456.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #1 66 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2928,8 +2930,8 @@ ReadData             INFO Hit x = 1620.49 y = 63.5816 z = -1551.86 detector = Du
 ReadData             INFO Hit x = 1623.7 y = 57.9027 z = -1553.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1626.91 y = 52.2238 z = -1555.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1630.12 y = 46.5449 z = -1556.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #1 67 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -2975,8 +2977,8 @@ ReadData             INFO Hit x = 1720.49 y = 63.5816 z = -1651.86 detector = Du
 ReadData             INFO Hit x = 1723.7 y = 57.9027 z = -1653.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1726.91 y = 52.2238 z = -1655.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1730.12 y = 46.5449 z = -1656.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #1 68 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -3022,8 +3024,8 @@ ReadData             INFO Hit x = 1820.49 y = 63.5816 z = -1751.86 detector = Du
 ReadData             INFO Hit x = 1823.7 y = 57.9027 z = -1753.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1826.91 y = 52.2238 z = -1755.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1830.12 y = 46.5449 z = -1756.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #1 69 events processed so far  <<<===
 EventSelector       DEBUG Get AttributeList from the collection
 EventSelector       DEBUG AttributeList size 0
@@ -3069,11 +3071,12 @@ ReadData             INFO Hit x = 1920.49 y = 63.5816 z = -1851.86 detector = Du
 ReadData             INFO Hit x = 1923.7 y = 57.9027 z = -1853.68 detector = DummyHitDetector
 ReadData             INFO Hit x = 1926.91 y = 52.2238 z = -1855.07 detector = DummyHitDetector
 ReadData             INFO Hit x = 1930.12 y = 46.5449 z = -1856.17 detector = DummyHitDetector
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18602
-PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 22
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [BYTES_READ]: 18595
+PoolSvc              INFO Database (SimplePoolFile3.root) attribute [READ_CALLS]: 21
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #1 70 events processed so far  <<<===
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] ????
 MetaDataSvc         DEBUG handle() EndInputFile for FID:????
+EventSelector        INFO Disconnecting input sourceID: ????
 MetaDataSvc         DEBUG handle() LastInputFile for end
 AthenaEventLoopMgr   INFO No more events in event selection 
 MetaDataSvc         DEBUG  calling metaDataStop for ToolSvc.IOVDbMetaDataTool
@@ -3088,9 +3091,9 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=   40 [ms] Ave/Min/Max=0.147(+- 1.91)/    0/   30 [ms] #=272
-cObj_ALL             INFO Time User   : Tot=   80 [ms] Ave/Min/Max=0.362(+- 3.13)/    0/   40 [ms] #=221
-ChronoStatSvc        INFO Time User   : Tot= 1.23  [s]                                             #=  1
+cObjR_ALL            INFO Time User   : Tot=   40 [ms] Ave/Min/Max=0.147(+- 1.48)/    0/   20 [ms] #=272
+cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=0.588(+- 4.05)/    0/   50 [ms] #=221
+ChronoStatSvc        INFO Time User   : Tot=  1.9  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/Database/IOVDbSvc/python/IOVDbSvcConfig.py b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
index df76c44879bfccc56d43cbcc2df8c77721a2b77b..adf3fcf265ac1b668681193307a95040c77df44f 100644
--- a/Database/IOVDbSvc/python/IOVDbSvcConfig.py
+++ b/Database/IOVDbSvc/python/IOVDbSvcConfig.py
@@ -92,8 +92,12 @@ def addFolders(configFlags,folderstrings,detDb=None,className=None):
             loadFolders.append((className, _extractFolder(fs)));
         result.getCondAlgo("CondInputLoader").Load+=loadFolders
         #result.addCondAlgo(CondInputLoader(Load=loadFolders))
- 
 
+        from AthenaPoolCnvSvc.AthenaPoolCnvSvcConf import AthenaPoolCnvSvc
+        apcs=AthenaPoolCnvSvc()
+        result.addService(apcs)
+        from GaudiSvc.GaudiSvcConf import EvtPersistencySvc
+        result.addService(EvtPersistencySvc("EventPersistencySvc",CnvServices=[apcs.getFullJobOptName(),]))
 
     
     if detDb is not None:
diff --git a/Event/EventContainers/test/ID_ContainerTest.h b/Event/EventContainers/test/ID_ContainerTest.h
old mode 100644
new mode 100755
diff --git a/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py b/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f85bffd76eb017726336a1f4ae91f65042982c6
--- /dev/null
+++ b/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py
@@ -0,0 +1,458 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon.Logging import logging
+logOverlayPoolReadMetadata = logging.getLogger( 'OverlayPoolReadMetadata' )
+
+def hitColls2SimulatedDetectors(inputlist):
+    """Build a dictionary from the list of containers in the metadata"""
+    simulatedDetectors = []
+    simulatedDictionary = {'PixelHits': 'pixel', 'SCT_Hits': 'SCT', 'TRTUncompressedHits': 'TRT',
+                           'BCMHits': 'BCM', 'LucidSimHitsVector': 'Lucid', 'LArHitEMB': 'LAr',
+                           'LArHitEMEC': 'LAr', 'LArHitFCAL': 'LAr', 'LArHitHEC': 'LAr',
+                           'MBTSHits': 'Tile', 'TileHitVec': 'Tile', 'MDT_Hits': 'MDT',
+                           'MicromegasSensitiveDetector': 'Micromegas',
+                           'sTGCSensitiveDetector': 'sTGC',
+                           'CSC_Hits': 'CSC', 'TGC_Hits': 'TGC', 'RPC_Hits': 'RPC',
+                           'TruthEvent': 'Truth'} #'': 'ALFA', '': 'ZDC',
+    for entry in inputlist:
+        if entry[1] in simulatedDictionary.keys():
+            if simulatedDictionary[entry[1]] not in simulatedDetectors:
+                simulatedDetectors += [simulatedDictionary[entry[1]]]
+    return simulatedDetectors
+
+def checkTileCalibrationHitFormat(inputlist):
+    """Check the Tile CaloCalibrationHit format"""
+    oldnames = ["TileCalibrationCellHitCnt","TileCalibrationDMHitCnt"]
+    newnames = ["TileCalibHitActiveCell","TileCalibHitInactiveCell","TileCalibHitDeadMaterial"]
+    nold = 0
+    nnew = 0
+    for entry in inputlist:
+        if entry[1] in oldnames:
+            logOverlayPoolReadMetadata.debug("found %s in oldnames", entry[1])
+            nold+=1
+        if entry[1] in newnames:
+            logOverlayPoolReadMetadata.debug("found %s in newnames", entry[1])
+            nnew+=1
+    if nold > 0 and nnew > 0:
+        raise SystemExit("Input file contains both old and new style TileCaloCalibrationHit containers, please check your g4sim job.")
+    elif nold > 0:
+        from Digitization.DigitizationFlags import digitizationFlags
+        digitizationFlags.experimentalDigi += ['OldTileCalibHitContainers']
+        logOverlayPoolReadMetadata.info("Input file uses old TileCalibHitContainers names: %s", oldnames);
+    elif nnew > 0:
+        logOverlayPoolReadMetadata.info("Input file uses new TileCalibHitContainers names: %s", newnames);
+    return
+
+## Helper functions
+def skipCheck(key):
+    """This check is not required"""
+    from Digitization.DigitizationFlags import digitizationFlags
+    if key in digitizationFlags.overrideMetadata.get_Value():
+        return True
+    return False
+
+def skipPileUpCheck(key, pileuptype):
+    """This check is not required"""
+    if skipCheck(key):
+        return True
+    pileupkey='%s_%s' %(pileuptype,key)
+    return skipCheck(pileupkey)
+
+def doMC_channel_number(f,pileUpType):
+    print "doMC_channel_number for %s", pileUpType
+    if "mc_channel_number" in f.infos.keys():
+        params = dict()
+        from Digitization.DigitizationFlags import digitizationFlags
+        if digitizationFlags.pileupDSID.statusOn:
+            params = digitizationFlags.pileupDSID.get_Value()
+        print "MC channel number from AthFile %s", f.infos["mc_channel_number"]
+        params[pileUpType]= f.infos["mc_channel_number"]
+        digitizationFlags.pileupDSID = params
+        del params
+    return
+
+def doSpecialConfiguration(f):
+    #safety checks before trying to access metadata
+    if "tag_info" in f.infos.keys():
+        if "specialConfiguration" in f.infos["tag_info"]:
+            item = f.infos["tag_info"]["specialConfiguration"]
+            logOverlayPoolReadMetadata.info("specialConfiguration directive: %s" % item)
+            spcitems = item.split(";")
+            preIncludes=[]
+            params = {}
+            from Digitization.DigitizationFlags import digitizationFlags
+            if digitizationFlags.specialConfiguration.statusOn:
+                logOverlayPoolReadMetadata.info("some spcialConfiguration metadata already exists: %s", str(params))
+                params = digitizationFlags.specialConfiguration.get_Value()
+            for spcitem in spcitems:
+                ## Ignore empty (e.g. from consecutive or trailing semicolons) or "NONE" substrings
+                if not spcitem or spcitem == "NONE":
+                    continue
+                ## If not in key=value format, treat as v, with k="preInclude"
+                if "=" not in spcitem:
+                    spcitem = "preInclude=" + spcitem
+                ## Handle k=v directives
+                k, v = spcitem.split("=")
+                logOverlayPoolReadMetadata.info("specialConfiguration metadata item: %s => %s" % (k, v))
+                ## Store preIncludes for including later.
+                if k == "preInclude":
+                    incfiles = v.split(",")
+                    preIncludes+=incfiles
+                else:
+                    params[k] = v
+            digitizationFlags.specialConfiguration = params
+            ## Now that we've looked at and stored all the evgen metadata keys, we should do any requested preIncludes
+            from AthenaCommon.Include import include
+            for incfile in preIncludes:
+                logOverlayPoolReadMetadata.info("Including %s as instructed by specialConfiguration metadata" % incfile)
+                include(incfile)
+            del preIncludes
+            del params
+
+def buildDict(inputtype, inputfile):
+    """Build a dictionary of KEY:VALUE pairs"""
+    import re
+    import PyUtils.AthFile as af
+    try:
+        f = af.fopen(inputfile)
+    except AssertionError:
+        logOverlayPoolReadMetadata.error("Failed to open input file: %s", inputfile)
+        return dict(),False
+    #check evt_type of input file
+    if 'evt_type' in f.infos.keys():
+        if not re.match(str(f.infos['evt_type'][0]), 'IS_SIMULATION') :
+            logOverlayPoolReadMetadata.error('This input file has incorrect evt_type: %s',str(f.infos['evt_type']))
+            logOverlayPoolReadMetadata.info('Please make sure you have set input file metadata correctly.')
+            logOverlayPoolReadMetadata.info('Consider using the job transforms for earlier steps if you aren\'t already.')
+            #then exit gracefully
+            raise SystemExit("Input file evt_type is incorrect, please check your g4sim and evgen jobs.")
+    else :
+        logOverlayPoolReadMetadata.warning('Could not find \'evt_type\' key in athfile.infos. Unable to that check evt_type is correct.')
+
+    ## Not part of building the metadata dictionary, but this is the
+    ## most convenient time to access this information.
+    doSpecialConfiguration(f)
+    #doMC_channel_number(f,inputtype) #FIXME commented out for now until mc_channel_number is filled properly by AthFile.
+
+    metadatadict = dict()
+    taginfometadata = dict()
+    #safety checks before trying to access metadata
+    if 'metadata' in f.infos.keys():
+        ##if '/TagInfo' in f.infos['metadata'].keys():
+        ##    taginfometadata=f.infos['metadata']['/TagInfo']
+        ##    assert taginfometadata['beam_energy'] is not None
+        ##    print "beamEnergy=%s"%taginfometadata['beam_energy']
+        if '/Simulation/Parameters' in f.infos['metadata'].keys():
+            metadatadict = f.infos['metadata']['/Simulation/Parameters']
+            if isinstance(metadatadict, list):
+                logOverlayPoolReadMetadata.warning("%s inputfile: %s contained %s sets of Simulation Metadata. Using the final set in the list.",inputtype,inputfile,len(metadatadict))
+                metadatadict=metadatadict[-1]
+        ##Get IOVDbGlobalTag
+        if 'IOVDbGlobalTag' not in metadatadict.keys():
+            try:
+                assert f.fileinfos['metadata']['/TagInfo']['IOVDbGlobalTag'] is not None
+                metadatadict['IOVDbGlobalTag'] = f.fileinfos['metadata']['/TagInfo']['IOVDbGlobalTag']
+            except:
+                try:
+                    assert f.fileinfos['conditions_tag'] is not None
+                    metadatadict['IOVDbGlobalTag'] = f.fileinfos['conditions_tag']
+                except:
+                    logOverlayPoolReadMetadata.warning("Failed to find IOVDbGlobalTag.")
+                    return metadatadict,taginfometadata,False
+        if '/Digitization/Parameters' in f.infos['metadata'].keys():
+            ## We have the RDO file here:
+            if len(f.run_numbers)>0 :
+                logOverlayPoolReadMetadata.info("Setting digitizationFlags.dataRunNumber to %i, to match the pre-mixed RDO File", f.run_numbers[0])
+                from Digitization.DigitizationFlags import digitizationFlags
+                digitizationFlags.dataRunNumber = f.run_numbers[0]
+            ##Do useful things with Digi MetaData
+            digimetadatadict = f.infos['metadata']['/Digitization/Parameters']
+            logOverlayPoolReadMetadata.debug("Keys in /Digitization/Parameters MetaData:")
+            logOverlayPoolReadMetadata.debug(digimetadatadict.keys())
+
+            if 'IOVDbGlobalTag' in digimetadatadict.keys():
+                if 'IOVDbGlobalTag' in metadatadict.keys():
+                    if not re.match(metadatadict['IOVDbGlobalTag'], digimetadatadict['IOVDbGlobalTag']):
+                        logOverlayPoolReadMetadata.info("Overriding original SimDict['IOVDbGlobalTag']", metadatadict['IOVDbGlobalTag'])
+                        logOverlayPoolReadMetadata.debug("with RDODict['IOVDbGlobalTag']", digimetadatadict['IOVDbGlobalTag'])
+                        metadatadict['IOVDbGlobalTag'] = digimetadatadict['IOVDbGlobalTag']
+                        logOverlayPoolReadMetadata.debug("Updated SimDict['IOVDbGlobalTag']", metadatadict['IOVDbGlobalTag'])
+            if 'DigitizedDetectors' in digimetadatadict.keys():
+                if 'DigitizedDetectors' in metadatadict.keys():
+                    logOverlayPoolReadMetadata.debug("Overriding original SimDict['SimulatedDetectors']", metadatadict['SimulatedDetectors'])
+                    logOverlayPoolReadMetadata.debug("with RDODict['DigitizedDetectors']", digimetadatadict['DigitizedDetectors'])
+                    metadatadict['SimulatedDetectors'] = digimetadatadict['DigitizedDetectors']
+                    logOverlayPoolReadMetadata.debug("Updated SimDict['SimulatedDetectors']", metadatadict['SimulatedDetectors'])
+            pass
+        if '/TagInfo' in f.infos['metadata'].keys():
+            taginfometadata=f.infos['metadata']['/TagInfo']
+            pass
+    Nkvp = len(metadatadict)
+    ## Dictionary should not be empty
+    if Nkvp==0 :
+        logOverlayPoolReadMetadata.error("Found %s KEY:VALUE pairs in %s Simulation MetaData." , Nkvp,inputtype)
+        return metadatadict,taginfometadata,False
+    else:
+        ##Patch for older hit files
+        if 'hitFileMagicNumber' not in metadatadict.keys():
+            metadatadict['hitFileMagicNumber'] = 0
+            logOverlayPoolReadMetadata.debug("hitFileMagicNumber key missing from %s Simulation MetaData Dictionary. Adding dummy entry.",inputtype)
+        if 'SimulatedDetectors' not in metadatadict.keys():
+            if 'eventdata_items' in f.infos.keys():
+                metadatadict['SimulatedDetectors'] = hitColls2SimulatedDetectors(f.infos['eventdata_items'])
+            else :
+                metadatadict['SimulatedDetectors'] = ['pixel','SCT','TRT','BCM','Lucid','LAr','Tile','MDT','CSC','TGC','RPC','Truth']
+        ## Check whether we should use the old names for the Tile CaloCalibrationHit containers
+        if 'eventdata_items' in f.infos.keys():
+            checkTileCalibrationHitFormat(f.infos['eventdata_items'])
+        else :
+            from Digitization.DigitizationFlags import digitizationFlags
+            digitizationFlags.experimentalDigi += ['OldTileCalibHitContainers']
+
+        ##End of Patch for older hit files
+        logOverlayPoolReadMetadata.debug("%s Simulation MetaData Dictionary Successfully Created.",inputtype)
+        logOverlayPoolReadMetadata.debug("Found %s KEY:VALUE pairs in %s Simulation MetaData." , Nkvp,inputtype)
+        logOverlayPoolReadMetadata.debug("KEYS FOUND: %s", metadatadict.keys())
+        return metadatadict,taginfometadata,True
+
+def signalMetaDataCheck(metadatadict):
+    import re
+    simkeys = metadatadict.keys()
+    logOverlayPoolReadMetadata.info("Checking Digitization properties against Signal Simulation MetaData...")
+    ## Check the PhysicsList set agrees with that used in the simulation
+    if not skipCheck('PhysicsList'):
+        if 'PhysicsList' in simkeys:
+            from Digitization.DigitizationFlags import digitizationFlags
+            if re.match(metadatadict['PhysicsList'], digitizationFlags.physicsList.get_Value()):
+                logOverlayPoolReadMetadata.debug("Digitization properties matches Signal Simulation MetaData. [PhysicsList = %s]", metadatadict['PhysicsList'])
+            else:
+                logOverlayPoolReadMetadata.warning("Digitization properties PhysicsList does not match the PhysicsList used in the Simulation step! Assume the PhysicsList from the Simulation step is correct!")
+                digitizationFlags.physicsList = metadatadict['PhysicsList']
+                logOverlayPoolReadMetadata.info("Set digitizationFlags.physicsList = %s", digitizationFlags.physicsList.get_Value())
+        else:
+            logOverlayPoolReadMetadata.error("PhysicsList key not found in Simulation MetaData!")
+
+    ## Check the DetDescrVersion set agrees with that used in the simulation
+    if not skipCheck('SimLayout'):
+        if 'SimLayout' in simkeys:
+            from AthenaCommon.GlobalFlags import globalflags
+            if re.match(metadatadict['SimLayout'], globalflags.DetDescrVersion.get_Value()):
+                logOverlayPoolReadMetadata.debug("Digitization properties matches Signal Simulation MetaData. [DetDescrVersion = %s]",
+                                            globalflags.DetDescrVersion.get_Value())
+            else:
+                logOverlayPoolReadMetadata.warning("Input DetDescrVersion does not match the value used in the Simulation step!")
+                from AthenaCommon.AppMgr import ServiceMgr
+                ## FIXME - should not be relying on GeoModelSvc being initialized at this point.
+                if hasattr( ServiceMgr, "GeoModelSvc") and ServiceMgr.GeoModelSvc.IgnoreTagDifference==True:
+                    logOverlayPoolReadMetadata.warning("Global jobproperties: [DetDescrVersion = %s], Signal Simulation MetaData: [SimLayout = %s]",
+                                                  globalflags.DetDescrVersion.get_Value(), metadatadict['SimLayout'])
+                    logOverlayPoolReadMetadata.warning("Ignore Tag Difference Requested - doing nothing.")
+                else:
+                    logOverlayPoolReadMetadata.warning("Assume the value from the Simulation step is correct!")
+                    ## needs to be done this way as Digi_tf locks it
+                    if globalflags.DetDescrVersion.is_locked() :
+                        globalflags.DetDescrVersion.unlock()
+                    globalflags.DetDescrVersion.set_Value_and_Lock( metadatadict['SimLayout'] )
+                    logOverlayPoolReadMetadata.warning("Set globalflags.DetDescrVersion = %s",globalflags.DetDescrVersion.get_Value())
+        else:
+            logOverlayPoolReadMetadata.error("SimLayout key not found in Simulation MetaData!")
+
+    ## Check the Conditions Tag set against that used in the simulation
+    if not skipCheck('IOVDbGlobalTag'):
+        if 'IOVDbGlobalTag' in simkeys:
+            from Digitization.DigitizationFlags import digitizationFlags
+            if (digitizationFlags.IOVDbGlobalTag.statusOn):
+                logOverlayPoolReadMetadata.info("Digitization properties: [IOVDbGlobalTag = %s], Signal Simulation MetaData: [IOVDbGlobalTag = %s]",
+                                           digitizationFlags.IOVDbGlobalTag.get_Value(), metadatadict['IOVDbGlobalTag'])
+            else:
+                digitizationFlags.IOVDbGlobalTag = metadatadict['IOVDbGlobalTag']
+                logOverlayPoolReadMetadata.debug("Set Digitization properties to match Signal Simulation Metadata: [IOVDbGlobalTag = %s]",
+                                            digitizationFlags.IOVDbGlobalTag.get_Value())
+        else:
+            logOverlayPoolReadMetadata.error("IOVDbGlobalTag key not found in Simulation MetaData!")
+
+    ## Set the TRTRangeCut digitizationFlag based on what was used during the simulation.
+    if not skipCheck('TRTRangeCut'):
+        if 'TRTRangeCut' in simkeys:
+            from Digitization.DigitizationFlags import digitizationFlags
+            if hasattr( digitizationFlags, 'TRTRangeCut'):
+                digitizationFlags.TRTRangeCut = metadatadict['TRTRangeCut']
+                logOverlayPoolReadMetadata.debug("Set Digitization properties to match Signal Simulation Metadata: [TRTRangeCut = %s]",
+                                            digitizationFlags.TRTRangeCut.get_Value())
+        else:
+            logOverlayPoolReadMetadata.warning("TRTRangeCut key not found in Simulation MetaData!")
+
+    ## Record the G4Version used in the simulation, so that Digitization Algorithms can use this information
+    if not skipCheck('G4Version'):
+        if 'G4Version' in simkeys:
+            from Digitization.DigitizationFlags import digitizationFlags
+            digitizationFlags.SimG4VersionUsed = metadatadict['G4Version']
+            logOverlayPoolReadMetadata.debug("digitizationFlags.SimG4VersionUsed = Value from Sim Metadata = %s ", digitizationFlags.SimG4VersionUsed.get_Value())
+        else:
+            logOverlayPoolReadMetadata.error("G4Version key not found in Simulation MetaData!")
+
+    ## Check which sub-detectors were simulated
+
+    ## Digitization will only digitize detectors which have been simulated.
+    ## If users want to digitize an un simulated detector this will be an expert
+    ## action which will require hacking the python code.
+    from AthenaCommon.DetFlags import DetFlags
+    if not skipCheck('SimulatedDetectors'):
+        if 'SimulatedDetectors' in simkeys:
+            logOverlayPoolReadMetadata.debug("Switching off subdetectors which were not simulated")
+            possibleSubDetectors=['pixel','SCT','TRT','BCM','Lucid','ZDC','ALFA','AFP','FwdRegion','LAr','HGTD','Tile','MDT','CSC','TGC','RPC','Micromegas','sTGC','Truth']
+            switchedOffSubDetectors=[]
+            for subdet in possibleSubDetectors:
+                if not subdet in metadatadict['SimulatedDetectors']:
+                    attrname = subdet+"_setOff"
+                    checkfn = getattr(DetFlags, attrname, None)
+                    if checkfn is not None:
+                        cmd='DetFlags.%s_setOff()' % subdet
+                        logOverlayPoolReadMetadata.debug(cmd)
+                        checkfn()
+                    switchedOffSubDetectors+=[subdet]
+            if switchedOffSubDetectors:
+                logOverlayPoolReadMetadata.info("Ensured %s sub-detectors which were not simulated were switched off: %s", len(switchedOffSubDetectors), switchedOffSubDetectors)
+            else:
+                logOverlayPoolReadMetadata.info("All sub-detectors were simulated, so none needed to be switched off in digitization.")
+            DetFlags.Print()
+
+    ## Any other checks here
+    logOverlayPoolReadMetadata.info("Completed checks of Digitization properties against Signal Simulation MetaData.")
+
+def pileupMetaDataCheck(sigsimdict,pileupsimdict):
+    """Check the metadata for pre-mixed pileup RDO File"""
+    result = True
+    import re
+    pileupkeys = pileupsimdict.keys()
+    sigkeys = sigsimdict.keys()
+    pileuptype = "PreMixed"
+    longpileuptype = "Pre-Mixed Pile-up RDO File"
+    ##Loop over MetaData keys which must have matching values
+    SigkeysToCheck = [ 'PhysicsList', 'SimLayout', 'MagneticField','hitFileMagicNumber' ]#, 'WorldZRange' ]
+    for o in SigkeysToCheck:
+        if skipPileUpCheck(o, pileuptype):
+            continue
+        try:
+            assert o in pileupkeys
+        except AssertionError:
+            logOverlayPoolReadMetadata.error("%s key missing from %s Simulation MetaData!", o, longpileuptype)
+            raise AssertionError("Simulation MetaData key not found")
+        try:
+            assert o in sigkeys
+        except AssertionError:
+            logOverlayPoolReadMetadata.error("%s key missing from Signal Simulation MetaData!", o)
+            raise AssertionError("Simulation MetaData key not found")
+        try:
+            if not isinstance(pileupsimdict[o],type(sigsimdict[o])):
+                assert re.match(str(pileupsimdict[o]), str(sigsimdict[o]))
+            else:
+                if isinstance(pileupsimdict[o],str):
+                    assert re.match(pileupsimdict[o], sigsimdict[o])
+                elif isinstance(pileupsimdict[o],int):
+                    assert (pileupsimdict[o]==sigsimdict[o])
+                else:
+                    assert re.match(str(pileupsimdict[o]), str(sigsimdict[o]))
+        except AssertionError:
+            logOverlayPoolReadMetadata.error("Simulation MetaData mismatch! %s: [%s = %s] Signal: [%s = %s]", longpileuptype, o, pileupsimdict[o], o, sigsimdict[o])
+            raise AssertionError("Simulation MetaData mismatch")
+        logOverlayPoolReadMetadata.debug("%s Sim MetaData matches Signal Sim MetaData. [%s = %s]", longpileuptype, o, sigsimdict[o])
+    ##Ideally these keys would have matching values, but it should be OK if not.
+    WarningKeys = [ 'IOVDbGlobalTag', 'G4Version' ]
+    for o in WarningKeys:
+        if skipPileUpCheck(o, pileuptype):
+            continue
+        try:
+            assert o in pileupkeys
+        except AssertionError:
+            logOverlayPoolReadMetadata.error("%s key missing from %s Simulation MetaData!", o, longpileuptype)
+            raise AssertionError("Simulation MetaData key not found")
+        try:
+            assert o in sigkeys
+        except AssertionError:
+            logOverlayPoolReadMetadata.error("%s key missing from Signal Simulation MetaData!", o, longpileuptype)
+            raise AssertionError("Simulation MetaData key not found")
+        if not re.match(pileupsimdict[o], sigsimdict[o]):
+            logOverlayPoolReadMetadata.warning("Simulation MetaData mismatch! %s: [%s = %s] Signal: [%s = %s]", longpileuptype, o, pileupsimdict[o], o, sigsimdict[o])
+        else:
+            logOverlayPoolReadMetadata.debug("%s Sim MetaData matches Signal Sim MetaData. [%s = %s]", longpileuptype, o, sigsimdict[o])
+
+    ## Check that the same sub-detectors were simulated in signal and background inputs
+    if (not skipPileUpCheck('SimulatedDetectors', pileuptype)) and ('SimulatedDetectors' in sigkeys):
+        switchedOffSubDetectors=[]
+        for subdet in sigsimdict['SimulatedDetectors']:
+            if not subdet in pileupsimdict['SimulatedDetectors']:
+                switchedOffSubDetectors+=[subdet]
+        if switchedOffSubDetectors:
+            logOverlayPoolReadMetadata.error("%s sub-detectors were sinmulated in the signal sample, but not in the %s background sample: %s", len(switchedOffSubDetectors), longpileuptype, switchedOffSubDetectors)
+            raise AssertionError("Some simulated sub-detectors from signal sample are missing in the background samples.")
+        else:
+            logOverlayPoolReadMetadata.debug("All sub-detectors simulated in the signal sample were also simulated in the %s background sample.", longpileuptype)
+
+    return result
+
+
+def tagInfoMetaDataCheck(sigtaginfodict,pileuptaginfodict):
+    result = True
+    """Check the metadata for pre-mixed pileup RDO File"""
+    pileupkeys = pileuptaginfodict.keys()
+    logOverlayPoolReadMetadata.debug("Signal /TagInfo ", sigtaginfodict)
+    logOverlayPoolReadMetadata.debug("Pileup /TagInfo ", pileuptaginfodict)
+    sigkeys = sigtaginfodict.keys()
+    pileupType = "PreMixed"
+    sigOnlyDict = dict()
+    sigOnlyKeySet = set(sigkeys).difference(set(pileupkeys))
+    logOverlayPoolReadMetadata.debug("The following keys only appear in Signal /TagInfo MetaData:")
+    logOverlayPoolReadMetadata.debug(sigOnlyKeySet)
+    for key in sigOnlyKeySet:
+        sigOnlyDict[key] = sigtaginfodict[key]
+        logOverlayPoolReadMetadata.debug("key: ", key, "value: ", sigtaginfodict[key])
+        pass
+    from OverlayCommonAlgs.OverlayFlags import overlayFlags
+    overlayFlags.extraTagInfoPairs = sigOnlyDict
+    keysToCompareSet = set(sigkeys).intersection(set(pileupkeys))
+    logOverlayPoolReadMetadata.debug("The following keys appear in Signal and PreMixed /TagInfo MetaData:")
+    logOverlayPoolReadMetadata.debug(keysToCompareSet)
+    return result
+
+def readInputFileMetadata():
+    logOverlayPoolReadMetadata.info("Checking for Signal Simulation MetaData...")
+    import re
+    import PyUtils.AthFile as af
+    af.server.load_cache('digitization-afcache.ascii')
+
+    #--------------------------------------------------
+    # Check for the Run Number in the first Input file
+    #--------------------------------------------------
+    from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+    from Digitization.DigitizationFlags import digitizationFlags
+    digitizationFlags.simRunNumber = int(digitizationFlags.getHitFileRunNumber(athenaCommonFlags.PoolHitsInput.get_Value()[0]))
+
+    sigsimdict,sigtaginfodict,result = buildDict("Signal", athenaCommonFlags.PoolHitsInput.get_Value()[0])
+    if result :
+        signalMetaDataCheck(sigsimdict)
+
+        ## Check Pileup Simulation Parameters match those used for signal files
+        result = True
+        longpileuptype= "pre-mixed pile-up"
+        logOverlayPoolReadMetadata.info("Checking %s MetaData against Signal Simulation MetaData...", longpileuptype)
+        pileupsimdict,pileuptaginfodict,result = buildDict(longpileuptype, athenaCommonFlags.PoolRDOInput.get_Value()[0])
+        if not result:
+            logOverlayPoolReadMetadata.warning("Failed to Create %s Simulation MetaData Dictionary from file %s.", longpileuptype, pileupfile)
+        else:
+            if pileupMetaDataCheck(sigsimdict,pileupsimdict):
+                logOverlayPoolReadMetadata.info("Pre-mixed RDO File Simulation MetaData matches Signal Simulation MetaData.")
+            if tagInfoMetaDataCheck(sigtaginfodict,pileuptaginfodict):
+                logOverlayPoolReadMetadata.info("Pre-mixed RDO File TagInfo MetaData matches Signal TagInfo MetaData.")
+        ## All checks completed here
+        logOverlayPoolReadMetadata.info("Completed all checks against Signal Simulation MetaData.")
+    else:
+        logOverlayPoolReadMetadata.info("Failed to Create Signal MetaData Dictionaries from file %s", athenaCommonFlags.PoolHitsInput.get_Value()[0])
+
+    ## control where metadata can be used
+    del sigsimdict
+    del sigtaginfodict
+    del pileupsimdict
+    del pileuptaginfodict
+
+    #raise SystemExit("Testing")
diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py b/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
index 0791ca31d52eb760c81acdea7ee0132ad5e3a8df..d56747483a85c5dc873cf8ae764710700d79c7cc 100644
--- a/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
+++ b/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
@@ -69,32 +69,6 @@ rec.projectName = 'IS_SIMULATION'
 DataInputCollections=runArgs.inputRDO_BKGFile
 athenaCommonFlags.PoolRDOInput=runArgs.inputRDO_BKGFile
 
-import MagFieldServices.SetupField
-
-from IOVDbSvc.CondDB import conddb
-
-if hasattr(runArgs, 'conditionsTag') and runArgs.conditionsTag!='NONE' and runArgs.conditionsTag!='':
-    globalflags.ConditionsTag=runArgs.conditionsTag
-    if len(globalflags.ConditionsTag())!=0:
-        conddb.setGlobalTag(globalflags.ConditionsTag())
-
-# LVL1 Trigger Menu
-if hasattr(runArgs, "triggerConfig") and runArgs.triggerConfig!="NONE":
-    # LVL1 Trigger Menu
-    # PJB 9/2/2009 Setup the new triggerConfig flags here
-    from TriggerJobOpts.TriggerFlags import TriggerFlags
-    triggerArg = runArgs.triggerConfig
-    #if not prefixed with LVL1: add it here
-    Args = triggerArg.split(":")
-    if Args[0] != "LVL1":
-        TriggerFlags.triggerConfig ="LVL1:"+triggerArg
-    else:
-        TriggerFlags.triggerConfig =triggerArg
-    overlaylog.info( 'triggerConfig argument is: %s ', TriggerFlags.triggerConfig.get_Value() )
-    from TriggerJobOpts.TriggerConfigGetter import TriggerConfigGetter
-    cfg = TriggerConfigGetter("HIT2RDO")
-
-
 print "================ DetFlags ================ "
 if 'DetFlags' in dir():
     overlaylog.warning("DetFlags already defined! This means DetFlags should have been fully configured already..")
@@ -120,6 +94,40 @@ DetFlags.Print()
 
 globalflags.DataSource.set_Value_and_Lock('geant4')
 
+#--------------------------------------------------------------
+# Read Simulation MetaData (unless override flag set to True)
+#--------------------------------------------------------------
+if 'ALL' in digitizationFlags.overrideMetadata.get_Value():
+    overlaylog.info("Skipping input file MetaData check.")
+else :
+    from EventOverlayJobTransforms.OverlayPoolReadMetaData import readInputFileMetadata
+    readInputFileMetadata()
+
+import MagFieldServices.SetupField
+
+from IOVDbSvc.CondDB import conddb
+
+if hasattr(runArgs, 'conditionsTag') and runArgs.conditionsTag!='NONE' and runArgs.conditionsTag!='':
+   globalflags.ConditionsTag=runArgs.conditionsTag
+   if len(globalflags.ConditionsTag())!=0:
+      conddb.setGlobalTag(globalflags.ConditionsTag())
+
+# LVL1 Trigger Menu
+if hasattr(runArgs, "triggerConfig") and runArgs.triggerConfig!="NONE":
+    # LVL1 Trigger Menu
+    # PJB 9/2/2009 Setup the new triggerConfig flags here
+    from TriggerJobOpts.TriggerFlags import TriggerFlags
+    triggerArg = runArgs.triggerConfig
+    #if not prefixed with LVL1: add it here
+    Args = triggerArg.split(":")
+    if Args[0] != "LVL1":
+        TriggerFlags.triggerConfig ="LVL1:"+triggerArg
+    else:
+        TriggerFlags.triggerConfig =triggerArg
+    overlaylog.info( 'triggerConfig argument is: %s ', TriggerFlags.triggerConfig.get_Value() )
+    from TriggerJobOpts.TriggerConfigGetter import TriggerConfigGetter
+    cfg = TriggerConfigGetter("HIT2RDO")
+
 
 print "================ Start ================= "
 from AthenaCommon.AlgSequence import AlgSequence
@@ -144,6 +152,8 @@ if hasattr( runArgs, 'maxEvents'):
 
 include ( "EventOverlayJobTransforms/ConfiguredOverlay_jobOptions.py" )
 
+include("Digitization/RunNumberOverride.py")
+
 if DetFlags.overlay.Truth_on():
    include ( "EventOverlayJobTransforms/TruthOverlay_jobOptions.py" )
 
@@ -196,5 +206,15 @@ if hasattr(runArgs, "postExec") and runArgs.postExec != 'NONE':
     for cmd in runArgs.postExec:
         exec(cmd)
 
+from AthenaCommon.AppMgr import ServiceMgr
+
+#Patch /TagInfo metadata container
+from OverlayCommonAlgs.OverlayFlags import overlayFlags
+for key in overlayFlags.extraTagInfoPairs.get_Value().keys():
+    ServiceMgr.TagInfoMgr.ExtraTagValuePairs += [str(key), str(overlayFlags.extraTagInfoPairs.get_Value()[key])]
+if hasattr(runArgs, 'AMITag'):
+    if runArgs.AMITag != "NONE":
+        ServiceMgr.TagInfoMgr.ExtraTagValuePairs += ["AMITag", runArgs.AMITag]
+
 #print "OverlayPool_tf.py: at the end. job=\n", job
 print "\nOverlayPool_tf.py: at the end. ServiceMgr=\n", ServiceMgr
diff --git a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
index 5e4a0daf3641a57a8416baa765b4f481656fef01..b8c62e29e6dd359aca6858a1ccc1bcf44c885f0e 100644
--- a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
+++ b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
@@ -57,6 +57,13 @@ class outputStore(JobProperty):
     allowedTypes=['str']
     StoredValue = 'StoreGateSvc'
 
+class extraTagInfoPairs(JobProperty):
+    """ workaround to correctly populate the /TagInfo metadata container
+    """
+    statusOn=False
+    allowedTypes=['dict']
+    StoredValue=dict()
+
 ## Definition and registration of the simulation flag container
 
 class Overlay_Flags(JobPropertyContainer):
diff --git a/InnerDetector/InDetDetDescr/InDetIdentifier/test/test_indet_id.cxx b/InnerDetector/InDetDetDescr/InDetIdentifier/test/test_indet_id.cxx
index c0a1ee0ba58c27fca4822b5ec445dcf4ba41f5d2..1e6376c0050a9559a240f6f01cbf2d3c66ff612d 100755
--- a/InnerDetector/InDetDetDescr/InDetIdentifier/test/test_indet_id.cxx
+++ b/InnerDetector/InDetDetDescr/InDetIdentifier/test/test_indet_id.cxx
@@ -812,7 +812,7 @@ check_pixel_timing(IdDictMgr& idd)
 	    eta_index  = pixel_id.eta_index(pixid);
 	    wafer_id   = pixel_id.wafer_id(pixid);
 	    n         += eta_index + phi_index + pixid.get_compact() + wafer_id.get_compact() +
-              pixel_id.pixel_id(wafer_id, eta_index, phi_index).get_compact();
+              pixel_id.pixel_id(wafer_id, phi_index, eta_index).get_compact();
 	}
     }
 
@@ -2070,7 +2070,7 @@ check_trt_timing(IdDictMgr& idd)
 	    phi_module     = trt_id.phi_module(layer_id);
 	    straw_layer    = trt_id.straw_layer(layer_id);
 	    n         += barrel_ec + layer_or_wheel + straw_layer + phi_module +
-              trt_id.layer_id(barrel_ec, layer_or_wheel, phi_module, straw_layer).get_compact();
+              trt_id.layer_id(barrel_ec, phi_module, layer_or_wheel, straw_layer).get_compact();
 	}
     }
 
diff --git a/InnerDetector/InDetDetDescr/SCT_Cabling/CMakeLists.txt b/InnerDetector/InDetDetDescr/SCT_Cabling/CMakeLists.txt
index 2c26680ffc24e703b533fbd89dff898e68dfac96..3d0bec07ecbed30c7d6ddbf51189ba3a35eacd1e 100644
--- a/InnerDetector/InDetDetDescr/SCT_Cabling/CMakeLists.txt
+++ b/InnerDetector/InDetDetDescr/SCT_Cabling/CMakeLists.txt
@@ -39,4 +39,5 @@ atlas_add_component( SCT_Cabling
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
 atlas_install_runtime( share/*.dat )
+atlas_install_scripts( share/*.sh )
 atlas_install_python_modules( python/*.py )
diff --git a/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.py b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.py
new file mode 100644
index 0000000000000000000000000000000000000000..ced7a83dfd74955ab1f02abdbec7c017e5161f1c
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.py
@@ -0,0 +1,105 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+
+
+def McEventSelectorCfg(configFlags):
+    cfg=ComponentAccumulator()
+
+    from AthenaCommon import AtlasUnixStandardJob
+
+    from McEventSelector.McEventSelectorConf import McCnvSvc
+    mcCnvSvc = McCnvSvc()
+    cfg.addService(mcCnvSvc)
+    from GaudiSvc.GaudiSvcConf import EvtPersistencySvc
+    cfg.addService(EvtPersistencySvc("EventPersistencySvc",CnvServices=[mcCnvSvc.getFullJobOptName(),]))
+
+    from McEventSelector.McEventSelectorConf import McEventSelector
+    evSel=McEventSelector("EventSelector")
+    evSel.RunNumber = configFlags.Input.RunNumber
+    evSel.InitialTimeStamp = configFlags.Input.InitialTimeStamp
+    cfg.addService(evSel)
+    cfg.setAppProperty("EvtSel",evSel.getFullJobOptName())
+
+    return cfg
+
+
+def SCT_CablingFoldersCfg(configFlags):
+    cfg=ComponentAccumulator()
+
+    path="/SCT/DAQ/Config/"
+    if configFlags.IOVDb.DatabaseInstance == "COMP200":
+        path="/SCT/DAQ/Configuration/"
+
+    instance="SCT"
+    if ConfigFlags.Input.isMC:
+        instance="SCT_OFL"
+
+    from IOVDbSvc.IOVDbSvcConfig import addFolders, IOVDbSvcCfg
+    cfg.merge(addFolders(configFlags, [path+"ROD", path+"RODMUR", path+"MUR", path+"Geog"], instance, className="CondAttrListVec")[0])
+
+    return cfg, path
+
+
+def SCT_CablingCondAlgCfg(configFlags):
+    cfg=ComponentAccumulator()
+
+    foldersCfg,path=SCT_CablingFoldersCfg(configFlags)
+    cfg.merge(foldersCfg)
+
+    from SCT_Cabling.SCT_CablingConf import SCT_CablingCondAlgFromCoraCool
+    cfg.addCondAlgo(SCT_CablingCondAlgFromCoraCool(ReadKeyRod=path+"ROD",
+                                                   ReadKeyRodMur=path+"RODMUR",
+                                                   ReadKeyMur=path+"MUR",
+                                                   ReadKeyGeo=path+"Geog"))
+
+    return cfg
+
+
+def SCT_TestCablingAlgCfg(configFlags):
+    cfg=ComponentAccumulator()
+
+    cfg.merge(SCT_CablingCondAlgCfg(configFlags))
+
+    from AtlasGeoModel.GeoModelConfig import GeoModelCfg
+    geoCfg,gms=GeoModelCfg(configFlags)
+    cfg.merge(geoCfg)
+
+    from AthenaCommon.Constants import INFO
+    from AthenaCommon.CfgGetter import getPrivateTool
+    SCT_CablingTool = getPrivateTool("SCT_CablingTool")
+    SCT_CablingTool.DataSource = "COOLVECTOR"
+    SCT_CablingTool.OutputLevel = INFO
+
+    from SCT_Cabling.SCT_CablingConf import SCT_TestCablingAlg
+    testAlg = SCT_TestCablingAlg(SCT_CablingTool = SCT_CablingTool,
+                                 OutputLevel = INFO)
+    cfg.addEventAlgo(testAlg)
+
+    return cfg
+
+
+if __name__=="__main__":
+    from AthenaCommon.Logging import log
+    from AthenaCommon.Constants import DEBUG
+    log.setLevel(DEBUG)
+
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior=1
+    
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    ConfigFlags.Input.isMC = True
+    ConfigFlags.Input.RunNumber = 300000
+    ConfigFlags.addFlag("Input.InitialTimeStamp", 1500000000)
+    # https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/ConditionsRun1RunNumbers
+    ConfigFlags.IOVDb.GlobalTag = "OFLCOND-RUN12-SDR-25"
+    ConfigFlags.GeoModel.AtlasVersion = "ATLAS-R2-2015-03-01-00"
+    ConfigFlags.lock()
+
+    cfg=ComponentAccumulator()
+    cfg.merge(McEventSelectorCfg(ConfigFlags))
+    cfg.merge(SCT_TestCablingAlgCfg(ConfigFlags))
+
+    f=open("TestSCT_CablingCfg.pkl","w")
+    cfg.store(f)
+    f.close()
diff --git a/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.sh b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.sh
new file mode 100644
index 0000000000000000000000000000000000000000..88f32dd6140baf22497cc84561b50b3a4be3c431
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingCfg.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+rm -rf newJOtest.py bootstrap.pkl bootstrap.py
+
+# this is a hack to pre-confgure scheduler and other MT services, 
+#will be taken away once NEW system has better means to influence the bootstrap content
+cat <<EOF >> bootstrap.py
+from AthenaCommon.AppMgr import theApp, ServiceMgr as svcMgr
+svcMgr.AvalancheSchedulerSvc.ShowControlFlow=True
+svcMgr.AvalancheSchedulerSvc.ShowDataDependencies=True
+EOF
+
+athena --threads=1 --config-only=bootstrap.pkl bootstrap.py
+
+get_files -jo SCT_Cabling/TestSCT_CablingCfg.py
+ 
+python TestSCT_CablingCfg.py # generate pickle
+status=$?
+if [ ${status} -ne 0 ] 
+then
+    echo "ERROR in configuration generation stage, stopping"
+    exit -1
+else
+    echo
+    echo "JOs reading stage finished, launching Athena from pickle file"
+    echo 
+    athena --evtMax=2 TestSCT_CablingCfg.pkl
+fi
diff --git a/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingSimple.py b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingSimple.py
new file mode 100644
index 0000000000000000000000000000000000000000..85875c9dc690f51c57fa20e0fd967313a07e2065
--- /dev/null
+++ b/InnerDetector/InDetDetDescr/SCT_Cabling/share/TestSCT_CablingSimple.py
@@ -0,0 +1,99 @@
+################################################################################
+# Job options file to test the Cabling
+################################################################################
+
+from AthenaCommon.AppMgr import theApp
+theApp.EvtMax = 1
+theApp.AuditAlgorithms = True
+
+from AthenaCommon.AppMgr import ServiceMgr
+
+#--------------------------------------------------------------
+# Set output lvl (VERBOSE, DEBUG, INFO, WARNING, ERROR, FATAL)
+#--------------------------------------------------------------
+ServiceMgr.MessageSvc.OutputLevel = INFO
+ServiceMgr.MessageSvc.infoLimit = 100000
+
+#--------------------------------------------------------------
+# Event selector settings. Use McEventSelector
+#--------------------------------------------------------------
+import AthenaCommon.AtlasUnixGeneratorJob
+ServiceMgr.EventSelector.RunNumber = 310809
+# initial time stamp - this is number of seconds since 1st Jan 1970 GMT
+# run 310809 Recording start/end 2016-Oct-17 21:39:18 / 2016-Oct-18 16:45:23 UTC
+ServiceMgr.EventSelector.InitialTimeStamp = 1476741326 # LB 18 of run 310809, 10/17/2016 @ 9:55pm (UTC)
+
+#--------------------------------------------------------------
+# Load IOVDbSvc
+#--------------------------------------------------------------
+from IOVDbSvc.CondDB import conddb
+ServiceMgr.IOVDbSvc.GlobalTag = "OFLCOND-RUN12-SDR-25"
+ServiceMgr.IOVDbSvc.OutputLevel = DEBUG
+
+#--------------------------------------------------------------
+# use auditors
+#--------------------------------------------------------------
+from GaudiSvc.GaudiSvcConf import AuditorSvc
+ServiceMgr += AuditorSvc()
+ServiceMgr.AuditorSvc.Auditors += [ "ChronoAuditor"]
+ServiceMgr.AuditorSvc.Auditors += [ "MemStatAuditor" ]
+
+#--------------------------------------------------------------
+# Load Geometry
+#--------------------------------------------------------------
+from AthenaCommon.GlobalFlags import globalflags
+globalflags.DetDescrVersion = "ATLAS-R2-2015-03-01-00"
+globalflags.DetGeo="atlas"
+globalflags.InputFormat="pool"
+globalflags.DataSource="geant4"
+
+#--------------------------------------------------------------
+# Set Detector setup
+#--------------------------------------------------------------
+# --- switch on InnerDetector
+from AthenaCommon.DetFlags import DetFlags
+DetFlags.ID_setOn()
+DetFlags.Calo_setOff()
+DetFlags.Muon_setOff()
+DetFlags.Truth_setOff()
+DetFlags.LVL1_setOff()
+DetFlags.SCT_setOn()
+DetFlags.pixel_setOff()
+DetFlags.TRT_setOff()
+
+# ---- switch parts of ID off/on as follows
+#switch off tasks
+DetFlags.pileup.all_setOff()
+DetFlags.simulate.all_setOff()
+DetFlags.makeRIO.all_setOff()
+DetFlags.writeBS.all_setOff()
+DetFlags.readRDOBS.all_setOff()
+DetFlags.readRIOBS.all_setOff()
+DetFlags.readRIOPool.all_setOff()
+DetFlags.writeRIOPool.all_setOff()
+
+import AtlasGeoModel.SetGeometryVersion
+import AtlasGeoModel.GeoModelInit
+
+#--------------------------------------------------------------
+# Load CondAlg, Tool and TestAlg
+#--------------------------------------------------------------
+from AthenaCommon.AlgSequence import AthSequencer
+condSeq = AthSequencer("AthCondSeq")
+condAlgName = "SCT_CablingCondAlgFromCoraCool"
+if not hasattr(condSeq, condAlgName):
+  from AthenaCommon.CfgGetter import getAlgorithm
+  SCT_CablingCondAlgFromCoraCool = getAlgorithm(condAlgName)
+  condSeq += SCT_CablingCondAlgFromCoraCool
+
+from AthenaCommon.CfgGetter import getPrivateTool
+SCT_CablingTool = getPrivateTool("SCT_CablingTool")
+SCT_CablingTool.DataSource = "COOLVECTOR"
+SCT_CablingTool.OutputLevel = INFO
+
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+from SCT_Cabling.SCT_CablingConf import SCT_TestCablingAlg
+topSequence += SCT_TestCablingAlg(SCT_CablingTool=SCT_CablingTool,
+                                  OutputLevel = INFO)
+
diff --git a/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx b/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
index a4cc1845a9d290ed18bd2987e4371c189b5f6f39..4afd4454b305ce409508878427f1fac8b91516e3 100644
--- a/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
+++ b/InnerDetector/InDetDigitization/FastSiDigitization/src/SiSmearedDigitizationTool.cxx
@@ -766,21 +766,6 @@ StatusCode SiSmearedDigitizationTool::mergeClusters(Pixel_detElement_RIO_map * c
     }
   }
 
-  // i = cluster_map->begin();
-  // e = cluster_map->end();
-
-  // for (; i != e; i = cluster_map->upper_bound(i->first)){
-  //   IdentifierHash current_id = i->first;
-  //   // Check if clusters with current_id have been already considered
-
-  //   ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: " << cluster_map->count(current_id) << "elements with key " << current_id );
-
-  //   std::pair <Pixel_detElement_RIO_map::iterator, Pixel_detElement_RIO_map::iterator> range = cluster_map->equal_range(current_id);
-  //   for ( Pixel_detElement_RIO_map::iterator iter = range.first; iter != range.second; ++iter){
-  //     ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: Planar Cluster = " << *((*iter).second) );
-  //   }
-  // }
-
   return StatusCode::SUCCESS;
 }
 
@@ -849,21 +834,6 @@ StatusCode SiSmearedDigitizationTool::mergeClusters(SCT_detElement_RIO_map * clu
     }
   }
 
-  // i = cluster_map->begin();
-  // e = cluster_map->end();
-
-  // for (; i != e; i = cluster_map->upper_bound(i->first)){
-  //   IdentifierHash current_id = i->first;
-  //   // Check if clusters with current_id have been already considered
-
-  //   ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: " << cluster_map->count(current_id) << "elements with key " << current_id );
-
-  //   std::pair <SCT_detElement_RIO_map::iterator, SCT_detElement_RIO_map::iterator> range = cluster_map->equal_range(current_id);
-  //   for ( SCT_detElement_RIO_map::iterator iter = range.first; iter != range.second; ++iter){
-  //     ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: Pixel Cluster = " << *((*iter).second) );
-  //   }
-  // }
-
   return StatusCode::SUCCESS;
 }
 
@@ -938,20 +908,6 @@ StatusCode SiSmearedDigitizationTool::mergeClusters(Planar_detElement_RIO_map *
     }
   }
 
-  // i = cluster_map->begin();
-  // e = cluster_map->end();
-
-  // for (; i != e; i = cluster_map->upper_bound(i->first)){
-  //   IdentifierHash current_id = i->first;
-  //   // Check if clusters with current_id have been already considered
-
-  //   ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: " << cluster_map->count(current_id) << "elements with key " << current_id );
-  //   std::pair <Planar_detElement_RIO_map::iterator, Planar_detElement_RIO_map::iterator> range = cluster_map->equal_range(current_id);
-  //   for ( Planar_detElement_RIO_map::iterator iter = range.first; iter != range.second; ++iter){
-  //     ATH_MSG_DEBUG( "--- AFTER MERGING SiSmearedDigitizationTool: Planar Cluster = " << *((*iter).second) );
-  //   }
-  // }
-
   return StatusCode::SUCCESS;
 }
 
@@ -1183,8 +1139,8 @@ StatusCode SiSmearedDigitizationTool::digitize()
           if (hitSurface->type() == Trk::Surface::Disc) {
             m_useDiscSurface = true;
             const Trk::DiscSurface* disc = dynamic_cast<const Trk::DiscSurface*>(hitSurface);
-            Amg::Vector2D polLocalEntry = *(disc->localCartesianToPolar(Amg::Vector2D(localEntry.x(), localEntry.y())));
-            Amg::Vector2D polLocalExit = *(disc->localCartesianToPolar(Amg::Vector2D(localExit.x(), localExit.y())));
+            Amg::Vector2D polLocalEntry {disc->localCartesianToPolarValue(Amg::Vector2D(localEntry.x(), localEntry.y()))};
+            Amg::Vector2D polLocalExit {disc->localCartesianToPolarValue(Amg::Vector2D(localExit.x(), localExit.y()))};
             sct_localStartPosition = HepGeom::Point3D<double>( polLocalEntry.x(), polLocalEntry.y(), localEntry.z());
             sct_localEndPosition = HepGeom::Point3D<double>( polLocalExit.x(), polLocalExit.y(), localExit.z());
           }
@@ -1198,8 +1154,8 @@ StatusCode SiSmearedDigitizationTool::digitize()
         localExitZ  = sct_localEndPosition.z();
       }
 
-      double distX = fabs(fabs(localExitX)-fabs(localEntryX));
-      double distY = fabs(fabs(localExitY)-fabs(localEntryY));
+      double distX = std::fabs(std::fabs(localExitX)-std::fabs(localEntryX));
+      double distY = std::fabs(std::fabs(localExitY)-std::fabs(localEntryY));
 
       if(m_SmearPixel){ // Smear Pixel
         ATH_MSG_DEBUG( "--- SiSmearedDigitizationTool: pixel start position --- " << localEntryX << ",  " << localEntryY << ",  " << localEntryZ );
diff --git a/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py b/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py
index a72d1b3a004a73068c9fe2f60e53558e5bd4a81b..d0c8b10b17be291d4a55f63f88921979324c5774 100755
--- a/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py
+++ b/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py
@@ -168,14 +168,6 @@ GsfExtrapolator = Trk__GsfExtrapolator(name                          = 'GsfExtra
 ToolSvc += GsfExtrapolator
 
 
-from TrkGaussianSumFilter.TrkGaussianSumFilterConf import Trk__BremFind
-BremFind = Trk__BremFind(name = 'BremFind',
-                         UseCalibration = True,
-                         ValidationMode = True )
-                         
-
-ToolSvc += BremFind
-
 from TrkGaussianSumFilter.TrkGaussianSumFilterConf import Trk__GaussianSumFitter
 GSFTrackFitter = Trk__GaussianSumFitter(name                    = 'GSFTrackFitter',
                                           ToolForExtrapolation    = GsfExtrapolator,
@@ -185,8 +177,6 @@ GSFTrackFitter = Trk__GaussianSumFitter(name                    = 'GSFTrackFitte
                                           MakePerigee             = True,
                                           RefitOnMeasurementBase  = True,
                                           DoHitSorting            = True,
-                                          BremFind                = BremFind,
-                                          runBremFinder           = False,
                                           OutputLevel = 3)
 # --- end of fitter loading
 ToolSvc += GSFTrackFitter
diff --git a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/share/ElectronEoverPTracking.py b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/share/ElectronEoverPTracking.py
index 9de3dd15492b83c611bf3e21069c5764f60dab59..50868637b9b5649fc379fbf7683f801fd721cbea 100755
--- a/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/share/ElectronEoverPTracking.py
+++ b/InnerDetector/InDetMonitoring/InDetPerformanceMonitoring/share/ElectronEoverPTracking.py
@@ -170,14 +170,6 @@ GsfExtrapolator = Trk__GsfExtrapolator(name                          = 'GsfExtra
 ToolSvc += GsfExtrapolator
 
 
-from TrkGaussianSumFilter.TrkGaussianSumFilterConf import Trk__BremFind
-BremFind = Trk__BremFind(name = 'BremFind',
-                         UseCalibration = True,
-                         ValidationMode = True )
-
-
-ToolSvc += BremFind
-
 from TrkGaussianSumFilter.TrkGaussianSumFilterConf import Trk__GaussianSumFitter
 GSFTrackFitter = Trk__GaussianSumFitter(name                    = 'GSFTrackFitter',
                                           ToolForExtrapolation    = GsfExtrapolator,
@@ -188,8 +180,6 @@ GSFTrackFitter = Trk__GaussianSumFitter(name                    = 'GSFTrackFitte
                                           RefitOnMeasurementBase  = True,
                                           DoHitSorting            = True,
                                           ValidationMode          = False,
-                                          BremFind                = BremFind,
-                                          runBremFinder           = False,
                                           OutputLevel = 3)
 # --- end of fitter loading
 ToolSvc += GSFTrackFitter
diff --git a/InnerDetector/InDetRecTools/InDetConversionFinderTools/InDetConversionFinderTools/ConversionPostSelector.h b/InnerDetector/InDetRecTools/InDetConversionFinderTools/InDetConversionFinderTools/ConversionPostSelector.h
index bb6bf8caf93a0f188759b094f3e2341ed91e2bf3..44c223cc4f9617bdd2ea3fafaecdfc78d0d40a0b 100644
--- a/InnerDetector/InDetRecTools/InDetConversionFinderTools/InDetConversionFinderTools/ConversionPostSelector.h
+++ b/InnerDetector/InDetRecTools/InDetConversionFinderTools/InDetConversionFinderTools/ConversionPostSelector.h
@@ -6,9 +6,17 @@
 #define INDETCONVERSIONFINDERTOOLS_CONVERSIONPOSTSELECTOR_H
 
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkEventPrimitives/ParticleHypothesis.h"
+#include "TrkEventPrimitives/ParticleHypothesis.h" //ParticleMasses struct
+#include "TrkParameters/TrackParameters.h" //typedef
 #include "xAODTracking/VertexFwd.h"
+#include "GeoPrimitives/GeoPrimitives.h" //Amg::Vector3D typedef
+#include <vector>
+
+
+
+namespace CLHEP{
+  class HepLorentzVector;
+}
 
 namespace InDet {
   
diff --git a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/ConversionPostSelector.cxx b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/ConversionPostSelector.cxx
index 32a2548074548e4e5246749bf6ab6be0b0b1d0ad..b5c87d88fc1e147fcc6a4d1558341bc40a0b00e1 100644
--- a/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/ConversionPostSelector.cxx
+++ b/InnerDetector/InDetRecTools/InDetConversionFinderTools/src/ConversionPostSelector.cxx
@@ -11,13 +11,14 @@
     changes :
 ***************************************************************************/
 #include "InDetConversionFinderTools/ConversionPostSelector.h"
-
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/Vertex.h"
+#include "CLHEP/Vector/LorentzVector.h"
+#include <cmath>
 
-using CLHEP::HepLorentzVector;
-using CLHEP::pi;
-using CLHEP::twopi;
+namespace{
+  constexpr double twopi{2.*M_PI};
+}
 
 namespace InDet {
   
@@ -135,17 +136,17 @@ namespace InDet {
       const Trk::TrackParameters& perigee2 = *(trkAtVx[1].perigeeAtVertex());
       
       //invariant mass
-      HepLorentzVector momentum;
+      CLHEP::HepLorentzVector momentum;
       Amg::Vector3D sum_mom = perigee1.momentum() + perigee2.momentum();
-      double m2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::electron],2);
-      double ee = sqrt(m2 +  perigee1.momentum().mag2()) + sqrt(m2 +  perigee2.momentum().mag2());
+      double m2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::electron],2);
+      double ee = std::sqrt(m2 +  perigee1.momentum().mag2()) + std::sqrt(m2 +  perigee2.momentum().mag2());
       momentum.setPx(sum_mom.x()); momentum.setPy(sum_mom.y()); momentum.setPz(sum_mom.z()); momentum.setE(ee);
       double inv_mass = momentum.m();
-      double photonP = sqrt(momentum.x()*momentum.x() + momentum.y()*momentum.y());
+      double photonP = std::sqrt(momentum.x()*momentum.x() + momentum.y()*momentum.y());
       double pt1 = perigee1.pT(); double pt2 = perigee2.pT();
       
       if (pt1<m_minPt || pt2<m_minPt) pass = false;
-      if (fabs(inv_mass) > invMassCut) pass = false;
+      if (std::fabs(inv_mass) > invMassCut) pass = false;
       if (photonP < fitMomentum) pass = false;
       
       double fR = 1000.;
@@ -158,14 +159,14 @@ namespace InDet {
       if(flag==1 && fR-vtxR<m_maxdR) pass = false;
       
       double PhiVtxTrk = vertex->position().phi() - perigee1.parameters()[Trk::phi0];
-      if (PhiVtxTrk < -pi) PhiVtxTrk += twopi;
-      if (PhiVtxTrk >  pi) PhiVtxTrk -= twopi;
-      if (fabs(PhiVtxTrk)>m_maxPhiVtxTrk) pass = false;
+      if (PhiVtxTrk < -M_PI) PhiVtxTrk += twopi;
+      if (PhiVtxTrk >  M_PI) PhiVtxTrk -= twopi;
+      if (std::fabs(PhiVtxTrk)>m_maxPhiVtxTrk) pass = false;
       
       if (pass && m_decorateVertices)
       {
         ATH_MSG_DEBUG("Decorating vertex with values used in post selector");
-        decorateVertex(*vertex, inv_mass, pt1, pt2, fR, fabs(PhiVtxTrk) );
+        decorateVertex(*vertex, inv_mass, pt1, pt2, fR, std::fabs(PhiVtxTrk) );
       }
       
     }
@@ -239,58 +240,58 @@ namespace InDet {
       if(flag==1 && fR-vtxR<m_maxdR) pass = false;
       
       //invariant mass. First assume K0, if failed assume Lambda
-      HepLorentzVector momentumK0 = fourP(perigee1,perigee2,m_massK0,false);
+      CLHEP::HepLorentzVector momentumK0 = fourP(perigee1,perigee2,m_massK0,false);
       double inv_massK0 = momentumK0.m();
-      if (fabs(inv_massK0-m_massK0) <= m_nsig*m_sigmaK0) isK0 = true;
-      HepLorentzVector momentumL = fourP(perigee1,perigee2,m_massLambda,false);
+      if (std::fabs(inv_massK0-m_massK0) <= m_nsig*m_sigmaK0) isK0 = true;
+      CLHEP::HepLorentzVector momentumL = fourP(perigee1,perigee2,m_massLambda,false);
       double inv_massL = momentumL.m();
-      if (fabs(inv_massL-m_massLambda) <= m_nsig*m_sigmaLambda) isLambda = true;
-      HepLorentzVector momentumLb = fourP(perigee1,perigee2,m_massLambda,true);
+      if (std::fabs(inv_massL-m_massLambda) <= m_nsig*m_sigmaLambda) isLambda = true;
+      CLHEP::HepLorentzVector momentumLb = fourP(perigee1,perigee2,m_massLambda,true);
       double inv_massLb = momentumLb.m();
-      if (fabs(inv_massLb-m_massLambda) <= m_nsig*m_sigmaLambda) isLambdaBar = true;
+      if (std::fabs(inv_massLb-m_massLambda) <= m_nsig*m_sigmaLambda) isLambdaBar = true;
       if (!isLambdaBar && !isLambda && !isK0) pass = false;
-      HepLorentzVector momentum;
+      CLHEP::HepLorentzVector momentum;
       if(isK0 && isLambda && !isLambdaBar)  {momentum = momentumK0; kind = 110;}
       if(isK0 && isLambdaBar && !isLambda)  {momentum = momentumK0; kind = 101;}
       if(isK0 && !isLambda && !isLambdaBar) {momentum = momentumK0; kind = 100;}
       if(!isK0 && isLambda && !isLambdaBar) {momentum = momentumL;  kind = 10;}
       if(!isK0 && isLambdaBar && !isLambda) {momentum = momentumLb; kind = 1;}
       if(!isK0 && isLambda && isLambdaBar)  {momentum = momentumL;  kind = 11;}
-      double particleP = sqrt(momentum.x()*momentum.x() + momentum.y()*momentum.y());
+      double particleP = std::sqrt(momentum.x()*momentum.x() + momentum.y()*momentum.y());
       if (particleP < fitMomentum) pass = false;
     }
     type = kind;
     return pass;
   }
   
-  HepLorentzVector ConversionPostSelector::
-  fourP(const Trk::TrackParameters& per1,const Trk::TrackParameters& per2,double mass, bool isBar){
-    HepLorentzVector momentum;
+  CLHEP::HepLorentzVector 
+  ConversionPostSelector::fourP(const Trk::TrackParameters& per1,const Trk::TrackParameters& per2,double mass, bool isBar){
+    CLHEP::HepLorentzVector momentum;
     Amg::Vector3D sum_mom = per1.momentum() + per2.momentum();
     double mp1 = 0.; double mp2 = 0.;
     if(mass==m_massK0) {
-      mp1 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
-      mp2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+      mp1 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+      mp2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
     }else{
       if(!isBar){
         if(per1.charge()>0) {
-          mp1 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
-          mp2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+          mp1 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
+          mp2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
         } else {
-          mp2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
-          mp1 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+          mp2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
+          mp1 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
         }
       }else{
         if(per1.charge()>0) {
-          mp1 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
-          mp2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
+          mp1 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+          mp2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
         } else {
-          mp2 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
-          mp1 = pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
+          mp2 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::pion],2);
+          mp1 = std::pow(ConversionPostSelector::s_particleMasses.mass[Trk::proton],2);
         }
       }
     }
-    double ee = sqrt(mp1 +  per1.momentum().mag2()) + sqrt(mp2 +  per2.momentum().mag2());
+    double ee = std::sqrt(mp1 +  per1.momentum().mag2()) + std::sqrt(mp2 +  per2.momentum().mag2());
     momentum.setPx(sum_mom.x()); momentum.setPy(sum_mom.y()); momentum.setPz(sum_mom.z()); momentum.setE(ee);
     return momentum;
   }
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
index dd493e5f701419f712768fcbb3da143264d95238..78ec1f649db3e45437612e03b7f0706cbf837edb 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetAdaptiveMultiPriVxFinderTool.cxx
@@ -362,11 +362,9 @@ namespace InDet
         ATH_MSG_DEBUG("No tracks available after track selection for seeding. No finding done.");
         break;
       }
-
       iteration += 1;
       ATH_MSG_DEBUG("Starting iteration number " << iteration << " with " << seedtracknumber << " seed tracks.");
       //now use all the perigee parameters you have so far
-
       if (m_realMultiVertex == true) {
         trkbegin = origTracks.begin();
         trkend = origTracks.end();
@@ -374,14 +372,11 @@ namespace InDet
         trkbegin = seedTracks.begin();
         trkend = seedTracks.end();
       }
-
       std::vector<const Trk::TrackParameters*> perigeeList;
-
       for (std::vector<const Trk::ITrackLink*>::iterator seedtrkAtVtxIter = seedtrkbegin;
            seedtrkAtVtxIter != seedtrkend; ++seedtrkAtVtxIter) {
         perigeeList.push_back((*seedtrkAtVtxIter)->parameters());
       }
-
       xAOD::Vertex* constraintVertex = 0;
       if (m_useBeamConstraint) {
         constraintVertex = new xAOD::Vertex();
@@ -402,7 +397,6 @@ namespace InDet
         constraintVertex->setCovariancePosition(looseConstraintCovariance);
         constraintVertex->setFitQuality(0., -3.);
       }
-
       // TODO: memory leak here with theconstraint when the loop breaks?
       if (actualVertex.z() == 0.) {
         ATH_MSG_DEBUG("No seed found: no further primary vertex finding performed on this event");
@@ -412,31 +406,22 @@ namespace InDet
         constraintVertex = 0;
         break;
       }
-
       //new xAOD::Vertex with this
       xAOD::Vertex* actualcandidate = new xAOD::Vertex;
       actualcandidate->makePrivateStore();
-      actualcandidate->setVertexType(xAOD::VxType::NotSpecified); // to mimic the initialization present in the old EDM
-                                                                  // constructor
+      actualcandidate->setVertexType(xAOD::VxType::NotSpecified); // to mimic the initialization present in the old EDM                                                          // constructor
       // now add decorations!
       MvfFitInfo(*actualcandidate) = new Trk::MvfFitInfo(constraintVertex,
                                                          new Amg::Vector3D(actualVertex),
                                                          new Amg::Vector3D(actualVertex));
       isInitialized(*actualcandidate) = false;
-
       std::vector<Trk::VxTrackAtVertex*> vector_of_tracks(0);
       VTAV(*actualcandidate) = vector_of_tracks; // TODO: maybe needed before push_back?
-
-      //get link to the tracks
-      //std::vector<Trk::VxTrackAtVertex>* tracksOfVertex = &( actualcandidate->vxTrackAtVertex() );
-
       //now iterate on all tracks and find out if they are sufficiently close to the found vertex
 
       ATH_MSG_VERBOSE("Adding all the tracks which are near the seed to the candidate ");
 
       for (std::vector<const Trk::ITrackLink*>::const_iterator trkiter = trkbegin; trkiter != trkend; ++trkiter) {
-        // if (fabs((*trkiter)->parameters()->position()[Trk::z]-actualVertex.position().z())<m_TracksMaxZinterval) {
-
         if (fabs(estimateDeltaZ(*(*trkiter)->parameters(), actualVertex)) < m_TracksMaxZinterval) {
           //accessing corresponding link to vertices
           Trk::TrackToVtxLink* actuallink = TrackLinkOf[*trkiter];
@@ -449,15 +434,12 @@ namespace InDet
                                                                        actuallink));
         }
       }
-
       ATH_MSG_VERBOSE(VTAV(*actualcandidate).size() << " tracks added to vertex candidate due to proximity");
-
       //now consider to recovery from the case where no tracks were added to the vertex
-      if (VTAV(*actualcandidate).size() == 0) {
+      if (VTAV(*actualcandidate).empty()) {
         //you need to define a new seed (because the old one is probably in between two ones...)
         double zdistance = 1e8;
         const Trk::ITrackLink* nearestTrack = 0;
-
         for (std::vector<const Trk::ITrackLink*>::const_iterator seedtrkiter = seedtrkbegin;
              seedtrkiter != seedtrkend; ++seedtrkiter) {
           if (fabs((*seedtrkiter)->parameters()->position()[Trk::z] - actualVertex.z()) < zdistance) {
@@ -465,8 +447,7 @@ namespace InDet
             nearestTrack = *seedtrkiter;
           }
         }
-
-        if (nearestTrack != 0) {
+        if (nearestTrack) {
           double newz = (nearestTrack->parameters())->position()[Trk::z];
           xAOD::Vertex* oldcandidate = actualcandidate; // to placehold old pointers
 
@@ -494,7 +475,7 @@ namespace InDet
           for (std::vector<const Trk::ITrackLink*>::const_iterator trkiter = trkbegin; trkiter != trkend; ++trkiter) {
             // if (fabs((*trkiter)->parameters()->position()[Trk::z]-actualVertex.z())<m_TracksMaxZinterval) {
 
-            if (fabs(estimateDeltaZ(*((*trkiter)->parameters()),
+            if (std::fabs(estimateDeltaZ(*((*trkiter)->parameters()),
                                     actualVertex)) < m_TracksMaxZinterval) {
               //accessing corresponding link to vertices
               Trk::TrackToVtxLink* actuallink = TrackLinkOf[*trkiter];
@@ -508,31 +489,25 @@ namespace InDet
             }
           }
 
-          if (VTAV(*actualcandidate).size() == 0) {
+          if (VTAV(*actualcandidate).empty()) {
             ATH_MSG_DEBUG("No tracks found near seed, while at least one track was expected.");
             break;
           }
         } else {
           ATH_MSG_DEBUG("Nearest track to seed is missing.");
+          delete actualcandidate;
           break;
         }
       }
-
-
       ATH_MSG_VERBOSE("Running addVtxTofit(); The current candidate has " << VTAV(*actualcandidate).size() <<
                       " tracks in the vector");
-
       m_MultiVertexFitter->addVtxTofit(actualcandidate);
-
       ATH_MSG_VERBOSE("After fit the current candidate has z: " << actualcandidate->position()[Trk::z]);
-
       //get link to the tracks (they are now all properly in the std::vector<Trk::VxTrackAtVertex> of the xAOD::Vertex)
       // TODO: maybe I shouldn't be using xAOD::Vertex vector at all for VxTrackAtVertex...
       //std::vector<Trk::VxTrackAtVertex>* tracksOfVertex = &( actualcandidate->vxTrackAtVertex() );
-
       std::vector<Trk::VxTrackAtVertex*>::iterator trkAtVtxbegin = VTAV(*actualcandidate).begin();
       std::vector<Trk::VxTrackAtVertex*>::iterator trkAtVtxend = VTAV(*actualcandidate).end();
-
       //now check that there is at least one track added to the fit
       //(this is not always the case because only tracks above a certain compatibility threshold are considered)
       bool atleastonecompatibletrack = false;
@@ -568,7 +543,6 @@ namespace InDet
       }
 
       bool newVertexIsFine = false;
-
       if (m_addSingleTrackVertices) {
         if (m_useBeamConstraint) {
           if (numberOfCompatibleTracks > 0) {
@@ -586,11 +560,9 @@ namespace InDet
       }
 
       ATH_MSG_VERBOSE("newVertexIsFine = " << newVertexIsFine);
-
       //this now should be so powerful to do everything by itself
       //problem now is to delete the really compatible tracks to this fit from the tracks
       //which still remain to be fitted
-
       if (atleastonecompatibletrack) {
         for (std::vector<Trk::VxTrackAtVertex*>::iterator trkAtVtxIter = trkAtVtxbegin;
              trkAtVtxIter != trkAtVtxend; ++trkAtVtxIter) {
@@ -641,7 +613,6 @@ namespace InDet
               foundTrack = *seedtrkiter;
             }
           }
-
           if (foundTrack != 0) {
             double compatibility = (*trkAtVtxIter)->vtxCompatibility();
             ATH_MSG_VERBOSE("New track has compatibility: " << compatibility);
@@ -653,7 +624,6 @@ namespace InDet
         }
         ATH_MSG_VERBOSE("Highest compatibility track:" << trackHighestCompatibility <<
                         "with compatibility: " << highestcompatibility);
-
         if (trackHighestCompatibility != 0) {
           std::vector<const Trk::ITrackLink*>::iterator foundTrack = seedtrkend;
           for (std::vector<const Trk::ITrackLink*>::iterator seedtrkiter = seedtrkbegin; seedtrkiter != seedtrkend;
@@ -662,7 +632,6 @@ namespace InDet
               foundTrack = seedtrkiter;
             }
           }
-
           if (foundTrack != seedtrkend) {
             seedTracks.erase(foundTrack);
             seedtrkbegin = seedTracks.begin();
@@ -673,10 +642,8 @@ namespace InDet
           }
         } else {
           //alternative method: delete seed track nearest in z to the seed
-
           double zdistance = 1e8;
           const Trk::ITrackLink* nearestTrack = 0;
-
           for (std::vector<const Trk::ITrackLink*>::const_iterator seedtrkiter = seedtrkbegin;
                seedtrkiter != seedtrkend; ++seedtrkiter) {
             if (fabs((*seedtrkiter)->parameters()->position()[Trk::z] - actualVertex.z()) < zdistance) {
@@ -684,7 +651,6 @@ namespace InDet
               nearestTrack = *seedtrkiter;
             }
           }
-
           if (nearestTrack != 0) {
             std::vector<const Trk::ITrackLink*>::iterator foundTrackToDelete =
               std::find(seedtrkbegin, seedtrkend, nearestTrack);
@@ -706,50 +672,38 @@ namespace InDet
 
       ///////////////
       //now break the cycle if you didn't diminish the number of seeds...
-
       ATH_MSG_DEBUG("Remaining seeds: " << seedTracks.size() << " previous round " << seedtracknumber);
-
       bool deleteLastVertex = false;
-
       if (!newVertexIsFine) {
         deleteLastVertex = true;
       } else {
         double contamination = 0.;
-
         double contaminationNum = 0;
         double contaminationDeNom = 0;
-
         std::vector<Trk::VxTrackAtVertex*>::iterator TRKtrkbegin(VTAV(*actualcandidate).begin());
         std::vector<Trk::VxTrackAtVertex*>::iterator TRKtrkend(VTAV(*actualcandidate).end());
-
         for (std::vector<Trk::VxTrackAtVertex*>::iterator TRKtrkiter = TRKtrkbegin; TRKtrkiter != TRKtrkend;
              ++TRKtrkiter) {
           double trackWeight = (*TRKtrkiter)->weight();
           contaminationNum += trackWeight * (1. - trackWeight);
           contaminationDeNom += trackWeight * trackWeight;
         }
-
         if (contaminationDeNom > 0) {
           contamination = contaminationNum / contaminationDeNom;
         }
-
-
         if (contamination > m_maximumVertexContamination) {
           ATH_MSG_VERBOSE(
             "Contamination estimator " << contamination << " fails cut of " << m_maximumVertexContamination);
           deleteLastVertex = true;
         }
-
         //now try to understand if the vertex was merged with another one...
         std::vector<xAODVertex_pair>::iterator vxbegin = myxAODVertices.begin();
         std::vector<xAODVertex_pair>::iterator vxend = myxAODVertices.end();
-
         for (std::vector<xAODVertex_pair>::iterator vxiter = vxbegin; vxiter != vxend; ++vxiter) {
           ATH_MSG_VERBOSE("Estimating compatibility of z positions: " << ((*vxiter).second)->position()[Trk::z] <<
                           " and " << actualcandidate->position()[Trk::z]);
           //in case of no beam spot constraint you should use the full 3d significance on the distance
           double dependence = 0;
-
           if (!m_do3dSplitting) {
             dependence = fabs((*vxiter).second->position()[Trk::z] - actualcandidate->position()[Trk::z]) /
                          TMath::Sqrt((*vxiter).second->covariancePosition()(Trk::z, Trk::z) +
@@ -758,9 +712,7 @@ namespace InDet
             Amg::MatrixX sumCovariances =
               (*vxiter).second->covariancePosition() +
               actualcandidate->covariancePosition();
-
             sumCovariances = sumCovariances.inverse().eval();
-
             Amg::Vector3D hepVectorPosition;
             hepVectorPosition[0] =
               ((*vxiter).second->position() -
@@ -773,9 +725,7 @@ namespace InDet
                actualcandidate->position()).z();
             dependence = sqrt(hepVectorPosition.dot(sumCovariances * hepVectorPosition));
           }
-
           ATH_MSG_VERBOSE("Significance of vertex pair is: " << dependence << "vs. cut at " << m_cutVertexDependence);
-
           if (dependence < m_cutVertexDependence) {
             ATH_MSG_VERBOSE("Deleting last vertex since it was found to be merged with another!");
             deleteLastVertex = true;
@@ -783,16 +733,13 @@ namespace InDet
           }
         }
       }
-
       ATH_MSG_VERBOSE("Decision to delete last vertex: " << deleteLastVertex);
-
       ////////////
       //Ok all tracks in seed were deleted. You can go ahead and discover further vertices...
       //please clean the track to vertices links before (required by real multivertexfit)
       if (deleteLastVertex) {
         std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkAtVtxBegin = VTAV(*actualcandidate).begin();
         std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkAtVtxEnd = VTAV(*actualcandidate).end();
-
         for (std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkIterator = MVFtrkAtVtxBegin;
              MVFtrkIterator != MVFtrkAtVtxEnd; ++MVFtrkIterator) {
           ATH_MSG_VERBOSE("Deleting one vertex from tracklink " <<
@@ -800,29 +747,22 @@ namespace InDet
           (static_cast<Trk::MVFVxTrackAtVertex*>(*MVFtrkIterator))->linkToVertices()->vertices()->pop_back();
         }
         seedtracknumber = seedTracks.size();
-
         ATH_MSG_VERBOSE("Redoing fit after scrapping last vertex");
-
         m_MultiVertexFitter->addVtxTofit(actualcandidate); // TODO: I think this is fine still, but think about it more
-
         releaseCandidate(actualcandidate);
       } else {
         seedtracknumber = seedTracks.size();
         ATH_MSG_VERBOSE("Storing new vertex with " << actualcandidate->vxTrackAtVertex().size() << " tracks");
-        myxAODVertices.push_back
-          (xAODVertex_pair(0,//estimateSignalCompatibility(actualcandidate),
-                           actualcandidate));
+        myxAODVertices.push_back(xAODVertex_pair(0,actualcandidate));
       }
     } while ((
                (m_addSingleTrackVertices && seedTracks.size() > 0) ||
                ((!m_addSingleTrackVertices) && seedTracks.size() > 1))
              && iteration < m_maxIterations);
-
     if (iteration >= m_maxIterations) {
       ATH_MSG_WARNING("Maximum number of iterations (" << m_maxIterations <<
                       ") reached; to reconstruct more vertices, set maxIterations to a higher value.");
     }
-
     ATH_MSG_DEBUG("Primary vertex finding complete with " << iteration <<
                   " iterations and " << myxAODVertices.size() << " vertices found.");
 
@@ -832,14 +772,12 @@ namespace InDet
     //on...)
     std::vector<xAODVertex_pair>::iterator vtxBegin = myxAODVertices.begin();
     std::vector<xAODVertex_pair>::iterator vtxEnd = myxAODVertices.end();
-
     // To make sure that the right tracks are in the std::vector<Trk::VxTrackAtVertex> of each vertex - up until now,
     // they are kept in the VTAV decoration
     for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
       xAOD::Vertex* cand = vtxIter->second;
       std::vector<Trk::VxTrackAtVertex>* tracksOfVertex = &(cand->vxTrackAtVertex());
       tracksOfVertex->clear();
-
       std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkBegin = VTAV(*cand).begin();
       std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkEnd = VTAV(*cand).end();
       for (std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkIter = MVFtrkBegin; MVFtrkIter != MVFtrkEnd;
@@ -847,41 +785,31 @@ namespace InDet
         tracksOfVertex->push_back(**MVFtrkIter);
       }
     }
-
     //before filling the container, you have to decide what is your most probable signal vertex
     for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
       (*vtxIter).first = estimateSignalCompatibility((*vtxIter).second);
     }
-
     std::sort(myxAODVertices.begin(), myxAODVertices.end());
-
     if (msgLvl(MSG::VERBOSE)) {
       ATH_MSG_VERBOSE("Vertex positions after sorting");
       for (std::vector<xAODVertex_pair>::iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
         ATH_MSG_VERBOSE("z position: " << (*vtxIter).second->position().z());
       }
     }
-
     if (myxAODVertices.size() == 0) {
       ATH_MSG_WARNING("No vertices found: returning a place-holder at the beam spot center.");
-
       xAOD::Vertex* beamspotCandidate = new xAOD::Vertex;
       beamspotCandidate->makePrivateStore();
       beamspotCandidate->setPosition(m_iBeamCondSvc->beamVtx().position());
       beamspotCandidate->setCovariancePosition(m_iBeamCondSvc->beamVtx().covariancePosition());
       beamspotCandidate->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
       // TODO: I don't need to set fitQuality too do I?
-
       myxAODVertices.push_back(xAODVertex_pair(0, beamspotCandidate));
     }
-
-
     vtxBegin = myxAODVertices.begin();
     vtxEnd = myxAODVertices.end();
-
     for (std::vector<xAODVertex_pair>::const_iterator vtxIter = vtxBegin; vtxIter != vtxEnd; ++vtxIter) {
       xAOD::Vertex* cand = vtxIter->second;
-
       std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkBegin = VTAV(*cand).begin();
       std::vector<Trk::VxTrackAtVertex*>::iterator MVFtrkEnd = VTAV(*cand).end();
       // TODO: here, I must clean up VTAV decoration separately from vector of VxTrackAtVertex
@@ -892,15 +820,11 @@ namespace InDet
         delete *MVFtrkIter;
         *MVFtrkIter = 0;
       }
-
-
       //delete VTAV( *cand );
       delete MvfFitInfo(*cand);
-
       std::vector<Trk::VxTrackAtVertex>::iterator trkAtVtxBegin = cand->vxTrackAtVertex().begin();
       std::vector<Trk::VxTrackAtVertex>::iterator trkAtVtxEnd = cand->vxTrackAtVertex().end();
-      for (std::vector<Trk::VxTrackAtVertex>::iterator trkAtVtxIter = trkAtVtxBegin; trkAtVtxIter != trkAtVtxEnd; ) {//++trkAtVtxIter)
-                                                                                                                     // {
+      for (std::vector<Trk::VxTrackAtVertex>::iterator trkAtVtxIter = trkAtVtxBegin; trkAtVtxIter != trkAtVtxEnd; ) {//++trkAtVtxIter)                                                                                            // {
         //cleaning up incompatible vertices
         if (((*trkAtVtxIter).vtxCompatibility() > m_maxVertexChi2 && m_useFastCompatibility) ||
             (((*trkAtVtxIter).weight() < m_minweight
@@ -914,16 +838,13 @@ namespace InDet
       }
       theVertexContainer->push_back(cand);
     }
-
     // If track links are to xAOD::TrackParticles, set the links directly in xAOD::Vertex with their weights
     // Needed for weight calculator in sorting tool
     xAOD::VertexContainer::iterator vxBegin = theVertexContainer->begin();
     xAOD::VertexContainer::iterator vxEnd = theVertexContainer->end();
     for (xAOD::VertexContainer::iterator vxIter = vxBegin; vxIter != vxEnd; ++vxIter) {
       std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVtx = &((*vxIter)->vxTrackAtVertex());
-
       if (!myVxTracksAtVtx) continue;
-
       std::vector<Trk::VxTrackAtVertex>::iterator tracksBegin = myVxTracksAtVtx->begin();
       std::vector<Trk::VxTrackAtVertex>::iterator tracksEnd = myVxTracksAtVtx->end();
       for (std::vector<Trk::VxTrackAtVertex>::iterator tracksIter = tracksBegin;
@@ -933,24 +854,18 @@ namespace InDet
           dynamic_cast<Trk::LinkToXAODTrackParticle*>((*tracksIter).trackOrParticleLink());
         if (linkToXAODTP) {
           ATH_MSG_VERBOSE("Iterating over new vertex in fixing xAOD::TrackParticle links... ");
-
           (*vxIter)->addTrackAtVertex(*linkToXAODTP, (*tracksIter).weight());
         } // TODO: esle write in a warning? (if tracks were TrkTracks or Trk::TrackParticleBase) - sorting tool expects
           // there to be xAOD::TrackParticleLinks!
       }
     }
-
     if (m_selectiontype == 1 && m_testingclass != 0) delete m_testingclass;
-
-
     std::vector<Trk::TrackToVtxLink*>::iterator begin = myTrackToVtxLinks.begin();
     std::vector<Trk::TrackToVtxLink*>::iterator end = myTrackToVtxLinks.end();
-
     //delete all TrackToVtxLink objects
     for (std::vector<Trk::TrackToVtxLink*>::iterator iterator = begin; iterator != end; ++iterator) {
       delete *iterator;
     }
-
     //---- add dummy vertex at the end ------------------------------------------------------//
     //---- if one or more vertices are already there: let dummy have same position as primary vertex
     if (theVertexContainer->size() >= 1) {
@@ -978,7 +893,6 @@ namespace InDet
       dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
       dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
     }
-
     // loop over the pile up to set it as pile up (EXCLUDE first and last vertex: loop from 1 to size-1)
     for (unsigned int i = 0; i < theVertexContainer->size() - 1; i++) {
       if (i > 0) {
diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
index b426a3ec7960bf9355c1e82c67d2c592881d4e97..afbdafacc8119f3073b3c71f01313d2a60e1df0b 100755
--- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetPriVxFinderTool.cxx
@@ -433,8 +433,6 @@ namespace InDet
         if (right_seed.size() > 1 && left_seed.size() > 1) {
           seedsVector.push_back(right_seed);
           seedsVector.push_back(left_seed);
-
-          // std::cout<<"Seed vectors of sizes created: "<<right_seed.size()<<" and "<<left_seed.size()<<std::endl;
         }//otherwise making the vector empty and thus no seeds produced at all
       } else seedsVector.push_back(origParameters); // if not creating split vertices
     } else { // if not enabling multiple vertices
@@ -450,7 +448,6 @@ namespace InDet
     //---- validate the element links ---------------//
     for (xAOD::VertexContainer::iterator vxContItr = returnContainers.first->begin(); vxContItr != returnContainers.first->end(); vxContItr++) {
       std::vector<Trk::VxTrackAtVertex>* tmpVxTAVtx = &(*vxContItr)->vxTrackAtVertex();
-
       //assigning the input tracks to the fitted vertices through VxTrackAtVertices
       for (std::vector<Trk::VxTrackAtVertex>::iterator itr = tmpVxTAVtx->begin(); itr != tmpVxTAVtx->end(); itr++) {
         const Trk::TrackParameters* initialPerigee = (*itr).initialPerigee();
@@ -462,7 +459,6 @@ namespace InDet
             continue;
           }
         }
-
         // validate the track link
         if (correspondingTrack != 0) {
           Trk::LinkToXAODTrackParticle* link = new Trk::LinkToXAODTrackParticle;
@@ -500,32 +496,20 @@ namespace InDet
 
   std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
   InDetPriVxFinderTool::findVertex(std::vector< std::vector<const Trk::TrackParameters*> >& zTrackColl) {
-    //   std::cout<<"Starting the main part of the finding "<<std::endl;
-
     //---- Constraint vertex section: if enabled in jobOptions a constraint is assigned --//
     Amg::Vector3D vertex = Amg::Vector3D(0., 0., 0.); //for fit() we need Amg::Vector3D or Trk::RecVertex
     std::vector<Trk::VxTrackAtVertex>* trkAtVtx = nullptr;
-
     // Finding hot spots of z0's in case of pile up.
     std::vector<const Trk::TrackParameters*> zTracks;
-    //typedef std::vector<const Trk::TrackParameters*>::const_iterator zTrkIter;
     zTracks.clear();
-
-    //typedef std::vector<std::vector<const Trk::TrackParameters* > >::iterator zTrkCollIter;
-
     // VertexContainer which takes xAOD::Vertex and is stored in StoreGate
     xAOD::VertexContainer* theVertexContainer = new xAOD::VertexContainer;
     xAOD::VertexAuxContainer* theVertexAuxContainer = new xAOD::VertexAuxContainer;
     theVertexContainer->setStore(theVertexAuxContainer);
-
     std::map<double, xAOD::Vertex*> vertexMap;
     std::vector<xAOD::Vertex*> splitVtxVector;
-
     double vertexPt;
-
     xAOD::Vertex* myxAODVertex = 0;
-    // std::cout<<"Getting to the loop;  size is: "<< zTrackColl.size()<<std::endl;
-
     for (unsigned int i = 0; i < zTrackColl.size(); i++) {
       // std::cout<<"Inside the loop"<<std::endl;
       if (msgLvl(MSG::DEBUG)) msg() << "Fitting vertex of Z-Cluster " << i << " with " << zTrackColl[i].size() << " Tracks" << endmsg;
@@ -533,7 +517,6 @@ namespace InDet
       std::vector<const Trk::TrackParameters*> origParameters;
       origParameters.clear();
       origParameters = zTrackColl[i];
-
       //---- Start of fitting section ------------------------------------------------------//
       if (origParameters.size() == 1 && m_useBeamConstraint) {
         xAOD::Vertex theconstraint;
@@ -545,19 +528,13 @@ namespace InDet
       } else if (origParameters.size() < 2 && m_createSplitVertices) {
         // in the case this is a split vertex and it has only one track
         // we make a dummy vertex and push it back to the container
-
         myxAODVertex = new xAOD::Vertex;
         myxAODVertex->makePrivateStore();
         myxAODVertex->setPosition(m_iBeamCondSvc->beamVtx().position());
         myxAODVertex->setCovariancePosition(m_iBeamCondSvc->beamVtx().covariancePosition());
         myxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
         myxAODVertex->setVertexType(xAOD::VxType::NoVtx);
-
-        // std::cout<<"this is a case when the split seeds are too small, dummy returned"<<std::endl;
       } else if (origParameters.size() > 1) {
-        // std::cout<<"choosing 2nd option"<<std::endl;
-
-        // if(msgLvl(MSG::VERBOSE)) msg() << "First call of fitting tool!" << endmsg;
         if (m_useBeamConstraint) {
           xAOD::Vertex theconstraint;
           theconstraint.makePrivateStore();
@@ -568,27 +545,13 @@ namespace InDet
         } else {
           myxAODVertex = m_iVertexFitter->fit(origParameters, vertex);
         }
-
-        if (myxAODVertex != 0) {
-          // std::cout<< "non-zero xAOD::Vertex!"<<std::endl;
-
+        if (myxAODVertex) {
           /* Get the vertex position */
-          // std::cout<< "position: "<< myxAODVertex->position() <<std::endl;
-
           Amg::Vector3D vertex(myxAODVertex->position());
           trkAtVtx = &(myxAODVertex->vxTrackAtVertex());
-          // std::cout<< "number of fitted tracks"<< trkAtVtx->size()<< std::endl;
-
           /* The fit tool does not return tracks chi2 ordered anymore We have to do it */
           std::vector<int> indexOfSortedChi2;
-          // std::cout<< "Calling the sort " <<std::endl;
-
           sortTracksInChi2(indexOfSortedChi2, myxAODVertex);
-
-          // std::cout<< "Sort done " <<std::endl;
-
-
-
           /*
              If more than 2 tracks were used,
              do a chi2 selection of tracks used in the fit:
@@ -604,24 +567,19 @@ namespace InDet
             // first track
             Trk::VxTrackAtVertex* tmpVTAV = &(*trkAtVtx) [indexOfSortedChi2[0]];
             origParameters.push_back(tmpVTAV->initialPerigee());
-
             // second track
             tmpVTAV = &(*trkAtVtx) [indexOfSortedChi2[1]];
             origParameters.push_back(tmpVTAV->initialPerigee());
-
             for (unsigned int i = 2; i < trkAtVtx->size(); ++i) {
               if ((*trkAtVtx) [indexOfSortedChi2[i]].trackQuality().chiSquared() > m_maxChi2PerTrack) continue;
               tmpVTAV = &(*trkAtVtx) [indexOfSortedChi2[i]];
               origParameters.push_back(tmpVTAV->initialPerigee());
             }
-
-
             // delete old xAOD::Vertex first
-            if (myxAODVertex != 0) {
+            if (myxAODVertex) {
               delete myxAODVertex;
               myxAODVertex = 0;
             }
-
             if (msgLvl(MSG::VERBOSE)) msg() << "Second call of fitting tool!" << endmsg;
             if (m_useBeamConstraint) {
               xAOD::Vertex theconstraint;
@@ -633,10 +591,11 @@ namespace InDet
             } else {
               myxAODVertex = m_iVertexFitter->fit(origParameters, vertex);
             }
-
+            /** This value is never used before it gets overwritten (coverity 111631)
             if (myxAODVertex) {
               trkAtVtx = &(myxAODVertex->vxTrackAtVertex());
             }
+            **/
           }//end of chi2 cut method 1
            /*
               Version 2:
@@ -684,28 +643,22 @@ namespace InDet
       } // end if "more than one track after m_preSelect(...)"
       else if (msgLvl(MSG::DEBUG)) msg() << "Less than two tracks or fitting without constraint - drop candidate vertex." << endmsg;
       // end if preselection for first iteration
-
       if ((origParameters.size() > 1 || (m_useBeamConstraint && origParameters.size() == 1)) && myxAODVertex && !m_createSplitVertices) {
         if (msgLvl(MSG::VERBOSE)) msg() << "Storing the fitted vertex." << endmsg;
-
         /* Store the primary vertex */
         trkAtVtx = &(myxAODVertex->vxTrackAtVertex());
-
         vertexPt = 0.;
         for (unsigned int i = 0; i < trkAtVtx->size(); ++i) {
           const Trk::TrackParameters* tmpTP = dynamic_cast<const Trk::TrackParameters*> ((*(trkAtVtx)) [i].initialPerigee());
           if (tmpTP) vertexPt += tmpTP->pT();
         }
-
         vertexMap[vertexPt] = myxAODVertex;
       } else if (m_createSplitVertices) {
         //storing a split vertex, if did not work - storing a dummy
         if (myxAODVertex) {
-          // std::cout<<"Normal xAOD::Vertex found in the split mode "<<std::endl;
           myxAODVertex->setVertexType(xAOD::VxType::PriVtx);
           splitVtxVector.push_back(myxAODVertex);
         } else {
-          // std::cout<<"No candidate reconstructed, storing the dummy "<<std::endl;
           xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
           dummyxAODVertex->makePrivateStore();
           dummyxAODVertex->setPosition(m_iBeamCondSvc->beamVtx().position());
@@ -719,11 +672,7 @@ namespace InDet
         myxAODVertex = 0;
       }
     }//end of loop over the pre-defined seeds
-
     //no sorting for the split vertices  -otherwise, why splitting at all?
-    // std::cout<<"Past loop over the clusters "<<std::endl;
-
-
     if (!m_createSplitVertices) {
       for (std::map<double, xAOD::Vertex*>::reverse_iterator i = vertexMap.rbegin(); i != vertexMap.rend(); i++) {
         if (msgLvl(MSG::VERBOSE)) msg() << "Sorting the fitted vertices. " << vertexMap.size() << " have been found." << endmsg;
@@ -742,8 +691,6 @@ namespace InDet
       }//end of sorting loop
     } else for (std::vector<xAOD::Vertex*>::iterator l_vt = splitVtxVector.begin(); l_vt != splitVtxVector.end(); ++l_vt)
         theVertexContainer->push_back(*l_vt);
-
-    //     std::cout<<"Past the second loop "<<std::endl;
     //---- add dummy vertex at the end ------------------------------------------------------//
     //---- if one or more vertices are already there: let dummy have same position as primary vertex
     if (theVertexContainer->size() >= 1 && !m_createSplitVertices) {
@@ -787,15 +734,12 @@ namespace InDet
         new_dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
       }
     }
-
     // loop over the pile up to set it as pile up (EXCLUDE first and last vertex: loop from 1 to size-1)
     if (!m_createSplitVertices) {
       for (unsigned int i = 1; i < theVertexContainer->size() - 1; i++) {
         (*theVertexContainer)[i]->setVertexType(xAOD::VxType::PileUp);
       }
     }
-
-    // std::cout<<"returning the container "<<std::endl;
     return std::make_pair(theVertexContainer, theVertexAuxContainer);
   }//end m_find vertex ethod
 
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h
index f192f9ef81402a3383385b03a531d4490b338b8b..452143dc8a6ea52d9d4a3e48e922e259cad6ffe8 100644
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/InDetVKalVxInJetTool/InDetTrkInJetType.h
@@ -23,12 +23,18 @@
 #include <vector>
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "TLorentzVector.h"
 #include "xAODTracking/TrackParticleContainer.h"
-#include  "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
-#include  "Particle/TrackParticle.h"
+#include "TrkVertexFitterInterfaces/IVertexFitter.h"
 //
 
+class TLorentzVector;
+namespace Rec{
+  class TrackParticle;
+}
+
+namespace Trk{
+  class TrkVKalVrtFitter;
+}
 namespace TMVA { class Reader; }
 
 namespace InDet {
@@ -80,23 +86,23 @@ namespace InDet {
     float m_Z0_limUpp;
     std::string m_calibFileName;
     ToolHandle < Trk::IVertexFitter >  m_fitterSvc;
-    Trk::TrkVKalVrtFitter*   m_fitSvc;
-
-    int m_initialised;
-
-    float m_prbS;
-    float m_Sig3D;
-    float m_prbP;
-    float m_d0;
-    float m_vChi2;
-    float m_pTvsJet;
-    float m_prodTJ;
-    float m_SigZ;
-    float m_SigR;
-    float m_ptjet;
-    float m_etajet;
-    float   m_ibl;
-    float   m_bl;
+    Trk::TrkVKalVrtFitter*   m_fitSvc{};
+
+    int m_initialised{};
+
+    float m_prbS{};
+    float m_Sig3D{};
+    float m_prbP{};
+    float m_d0{};
+    float m_vChi2{};
+    float m_pTvsJet{};
+    float m_prodTJ{};
+    float m_SigZ{};
+    float m_SigR{};
+    float m_ptjet{};
+    float m_etajet{};
+    float   m_ibl{};
+    float   m_bl{};
  };
 
 
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx
index e18a662ac0508e9aaa2caf0cdf34e603ef6b097a..ecf1ccae1066ee6bad93e1b4659568b50b1b87ad 100755
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/BTagVrtSec.cxx
@@ -38,8 +38,8 @@ namespace InDet{
     if(N==1) return Vec[0];
     if(N>1){
       std::vector<float> tmp(Vec);
-      std::sort(tmp.begin(),tmp.end());
-      return (tmp[(N-1)/2]+tmp[N/2])/2.;
+      std::sort(tmp.begin(),tmp.end());  //can use nth_element instead of completely sorting, it's quicker
+      return (tmp[(N-1)/2]+tmp[N/2])/2.; //only true if the number of elements is even?
     }
     return 0.;
   }
@@ -340,6 +340,7 @@ namespace InDet{
       Vrt2TrackNumber = (double) ListSecondTracks.size()/2.;
       std::vector<const xAOD::TrackParticle*> saveSecondTracks(ListSecondTracks);
       RemoveDoubleEntries(ListSecondTracks);
+      AnalysisUtils::Sort::pT (&ListSecondTracks);
       for(auto iv0 : TrkFromV0){ auto itf=std::find(SelectedTracks.begin(),SelectedTracks.end(),iv0);
                                  if(itf!=SelectedTracks.end())  SelectedTracks.erase(itf);}
 //---
@@ -758,6 +759,7 @@ namespace InDet{
             }
 	 }
       }
+      if (not m_curTup) return; //something very wrong
       if(m_fillHist){  m_curTup->ptjet=JetDir.Perp();  m_curTup->etajet=fabs(JetDir.Eta()); m_curTup->phijet=JetDir.Phi();
                        m_curTup->nTrkInJet=std::min(NTracks,DevTuple::maxNTrk); };
       if(nTrkHF==0) return; //======  No at all good HF tracks 
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx
index 49a0c844966a441ef511188f7690496bb4749876..174e8787bd3f32e75ecf42572c4eeba3cba4c012 100644
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetTrkInJetType.cxx
@@ -6,6 +6,10 @@
 #include "TMVA/MethodBase.h"
 #include "TMVA/Reader.h"
 #include "PathResolver/PathResolver.h"
+#include "TLorentzVector.h"
+#include "TrkVKalVrtFitter/TrkVKalVrtFitter.h"
+
+#include  "Particle/TrackParticle.h"
 //
 //-------------------------------------------------
 namespace InDet {
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx
index f606e53685d0deb6d435bf48d68c248a142604e9..b947561ad208c494f40304a845dba9f2b627ec26 100755
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/InDetVKalVxInJetTool.cxx
@@ -25,6 +25,9 @@
 //}
 
 namespace InDet {
+
+const int InDetVKalVxInJetTool::DevTuple::maxNTrk;
+
 //
 //Constructor-------------------------------------------------------------- 
 InDetVKalVxInJetTool::InDetVKalVxInJetTool(const std::string& type,
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx
index b1fd5d2caa6a4d85dae19f01904fce3d61d47ff8..5c322d61c54f76eaeb1226dc026a40559d98e2aa 100755
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx
@@ -11,20 +11,21 @@
 //-------------------------------------------------
 // Other stuff
 #include <cmath>
-//#include<iostream>
 
 
 namespace InDet{  
 
   double InDetVKalVxInJetTool::RankBTrk(double TrkPt, double JetPt, double Signif)  const
   {
-     double coeffSig=1.0;
-     double s_prob=(Signif-coeffSig)/Signif;   // Old probability to be b-track
+    //code re-ordered to avoid divide by zero
      double coeffPt=10.;
-     double pfrac=(TrkPt-m_cutPt)/sqrt(JetPt);
+     double pfrac=(TrkPt-m_cutPt)/std::sqrt(JetPt);
      double p_prob= pfrac/(coeffPt+pfrac);    // Old probability to be b-track
+     if (Signif == 0.) return p_prob; //should be less than some epsilon?
+     //
+     double coeffSig=1.0;
+     double s_prob=(Signif-coeffSig)/Signif;   // Old probability to be b-track
      if(TrkPt + JetPt == 0.) return s_prob;
-     else if(Signif == 0.)   return p_prob;
      //----------------------------------Initial definition of selective variable
      double contrib=0.4;
      return (1.+contrib)*std::max(s_prob,0.)+(1.-contrib)*p_prob;
diff --git a/LArCalorimeter/LArCellRec/CMakeLists.txt b/LArCalorimeter/LArCellRec/CMakeLists.txt
index d0622500957196e9853dfefe0b9ffb4c8e3b817d..93ceae22d9bbbb4ab3e8149263ca5b97e9fb48d0 100644
--- a/LArCalorimeter/LArCellRec/CMakeLists.txt
+++ b/LArCalorimeter/LArCellRec/CMakeLists.txt
@@ -41,13 +41,14 @@ atlas_depends_on_subdirs( PUBLIC
 find_package( CLHEP )
 find_package( HepMC )
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+find_package( TBB )
 
 # Component(s) in the package:
 atlas_add_component( LArCellRec
                      src/*.cxx
                      src/components/*.cxx
-                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} CaloConditions CaloDetDescrLib CaloEvent CaloIdentifier CaloRecLib CaloUtilsLib AthAllocators AthenaBaseComps AthenaKernel StoreGateLib SGtests AtlasDetDescr Identifier GaudiKernel LArIdentifier LArRawEvent LArRecConditions LArSimEvent CaloTriggerToolLib AthenaPoolUtilities xAODEventInfo xAODTrigL1Calo GeneratorObjects LArRecEvent LArCablingLib TrigT1CaloCalibConditions TrigT1CaloCondSvcLib )
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} ${TBB_LIBRARIES} CaloConditions CaloDetDescrLib CaloEvent CaloIdentifier CaloRecLib CaloUtilsLib AthAllocators AthenaBaseComps AthenaKernel StoreGateLib SGtests AtlasDetDescr Identifier GaudiKernel LArIdentifier LArRawEvent LArRecConditions LArSimEvent CaloTriggerToolLib AthenaPoolUtilities xAODEventInfo xAODTrigL1Calo GeneratorObjects LArRecEvent LArCablingLib TrigT1CaloCalibConditions TrigT1CaloCondSvcLib )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.cxx b/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.cxx
index dc2fb02a1e928117ad2f0c75484789a6f6eac3cd..d9db0f958b48602b0daadbef6eb93cceb2219eb0 100644
--- a/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.cxx
+++ b/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.cxx
@@ -117,7 +117,7 @@ LArCellDeadOTXCorr::LArCellDeadOTXCorr(
 		const std::string& type, 
 		const std::string& name, 
 		const IInterface* parent)
-  : AthAlgTool(type, name, parent),
+  : base_class(type, name, parent),
     m_cablingService("LArCablingService"),
     m_caloMgr(nullptr),
     m_lvl1Helper(nullptr),
@@ -127,11 +127,10 @@ LArCellDeadOTXCorr::LArCellDeadOTXCorr(
     m_l1CondSvc(nullptr),
     m_ttSvc(nullptr)
 {
-	declareInterface<ICaloCellMakerTool>(this); 
 	declareProperty("triggerTowerLocation", m_TTLocation  = "xAODTriggerTowers");
 	declareProperty("badChannelTool",m_badChannelTool);
 	declareProperty("triggerNoiseCut", m_triggerNoiseCut);
-	declareProperty("useL1CaloDB", m_useL1CaloDB = false);
+	declareProperty("useL1CaloDB", m_useL1CaloDBProp = false);
 	declareProperty("ignoredTTs", m_ignoredTTs);
 
 	declareConstant("etaCalibrationSizes", m_etaCalibrationSizes);
@@ -141,6 +140,7 @@ LArCellDeadOTXCorr::LArCellDeadOTXCorr(
 
 	finish_ctor();
 
+        m_useL1CaloDB = m_useL1CaloDBProp;
 }
 
 StatusCode
@@ -234,6 +234,7 @@ StatusCode LArCellDeadOTXCorr::initialize()
           m_l1CaloTTIdTools = dynamic_cast<L1CaloTTIdTools*> (algtool);
         */
 
+        m_useL1CaloDB = m_useL1CaloDBProp;
 
 	ATH_CHECK( m_badChannelTool.retrieve() );
 	ATH_CHECK( detStore()->retrieve(m_TT_ID) );
@@ -244,7 +245,8 @@ StatusCode LArCellDeadOTXCorr::initialize()
 //  process method
 //
 
-StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ){
+StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ) {
+        const EventContext& ctx = Gaudi::Hive::currentContext();
         ATH_MSG_DEBUG (" in process...");
         ATH_MSG_DEBUG (" Nb of eta calibration factors found : "<<m_etaCalibrations.size());
         for(unsigned int i=0;i<m_etaCalibrations.size();i++)
@@ -255,7 +257,7 @@ StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ){
 	//Retrieve Trigger Towers from SG
 	//const TriggerTowerCollection* storedTTs = 0; 
 	//const xAOD::TriggerTowerContainer* storedTTs = 0;
-	SG::ReadHandle<xAOD::TriggerTowerContainer> storedTTs(m_TTLocation);
+	SG::ReadHandle<xAOD::TriggerTowerContainer> storedTTs(m_TTLocation, ctx);
 	if(!storedTTs.isValid()) { 
 	  ATH_MSG_ERROR("Could not read container " << m_TTLocation.key());
 	  return StatusCode::FAILURE;      
@@ -334,7 +336,7 @@ StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ){
 		Identifier ttId;
 
 
-		std::map<Identifier, Identifier>::iterator itCellTT = m_cellTTMapping.find(cId);
+		auto itCellTT = m_cellTTMapping.find(cId);
 		if(itCellTT!=m_cellTTMapping.end())
 			ttId = itCellTT->second;
 		else
@@ -365,14 +367,12 @@ StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ){
 			trigtow.push_back(ttId);
 
 			bool isBad = false;
-                        std::vector<unsigned int>::iterator itBad = m_ignoredTTs.begin();
-                        std::vector<unsigned int>::iterator itBadE = m_ignoredTTs.end();
 
 			L1CaloCoolChannelId coolChannelId = m_ttSvc->createL1CoolChannelId(m_ttSvc->createTTChannelID(ttId));
 			unsigned int uiId = coolChannelId.id();
-			for(;itBad!=itBadE;++itBad)
-			{
-				if(*itBad == uiId)  
+                        for (unsigned int iBad : m_ignoredTTs)
+                        {
+				if(iBad == uiId)  
 				{
 					isBad = true;
 					break;
@@ -392,7 +392,7 @@ StatusCode  LArCellDeadOTXCorr::process(CaloCellContainer * cellCont ){
 
 				// we first look if the index and type of this TT are already known and if this
 				// index corresponds to the TT we want
-				std::map<Identifier, std::pair<unsigned int, int> >::iterator itTT = m_idIndexMapping.find(ttId);
+				auto itTT = m_idIndexMapping.find(ttId);
 				if(itTT!=m_idIndexMapping.end())
 				{
 					ttIndex = itTT->second.first;
@@ -736,8 +736,8 @@ double LArCellDeadOTXCorr::TTID_phiWidth(double eta) const {
 
 //---- Functions used to calculate a parabola
 double LArCellDeadOTXCorr::getA(double x1, double y1,
-			double x2, double y2,
-			double x3, double y3)
+                                double x2, double y2,
+                                double x3, double y3) const
 {
 	double n = y3-y1 + (x1-x3)*(y2-y1)/(x2-x1);
 	double d = (x3-x1)*(x3-x2);
@@ -745,20 +745,24 @@ double LArCellDeadOTXCorr::getA(double x1, double y1,
 }
 
 double LArCellDeadOTXCorr::getB(double a,
-			double x1, double y1,
-			double x2, double y2)
+                                double x1, double y1,
+                                double x2, double y2) const
 {
 	return (y2-y1 - a*(x2*x2-x1*x1))/(x2-x1);
 }
 double LArCellDeadOTXCorr::getC(double a, double b,
-			double x1, double y1)
+                                double x1, double y1) const
 {
 	return (y1 - a*x1*x1 - b*x1);
 }
 
 
 
-void LArCellDeadOTXCorr::getInitialFitParameters(const std::vector<uint_least16_t> & ADCsamples, double & max, double& maxPos, unsigned int& TTADCMaxIndex)
+void
+LArCellDeadOTXCorr::getInitialFitParameters(const std::vector<uint_least16_t> & ADCsamples,
+                                            double & max,
+                                            double& maxPos,
+                                            unsigned int& TTADCMaxIndex) const
 {
 	max = -9999.;
 	maxPos = -1.;
@@ -794,7 +798,7 @@ void LArCellDeadOTXCorr::getInitialFitParameters(const std::vector<uint_least16_
 }
 
 
-double LArCellDeadOTXCorr::getL1Energy(const std::vector<uint_least16_t> & ADCsamples, int pedestal, double eta, int type)
+double LArCellDeadOTXCorr::getL1Energy(const std::vector<uint_least16_t> & ADCsamples, int pedestal, double eta, int type) const
 {
 	double energy = 0;
 	int nbSamples = ADCsamples.size();
@@ -863,7 +867,7 @@ double LArCellDeadOTXCorr::getL1Energy(const std::vector<uint_least16_t> & ADCsa
 	return energy;
 }
 
-double LArCellDeadOTXCorr::getEtaCalibration(double eta, int type)
+double LArCellDeadOTXCorr::getEtaCalibration(double eta, int type) const
 {
 	unsigned int totalEtaSize = 0;
 
@@ -960,7 +964,7 @@ double LArCellDeadOTXCorr::getEtaCalibration(double eta, int type)
 }
 
 
-double LArCellDeadOTXCorr::getEnergyCalibration(double eta, int type, double energy)
+double LArCellDeadOTXCorr::getEnergyCalibration(double eta, int type, double energy) const
 {
 	unsigned int totalEnergySize = 0;
 
@@ -1064,7 +1068,7 @@ double LArCellDeadOTXCorr::getEnergyCalibration(double eta, int type, double ene
 }
 
 
-double LArCellDeadOTXCorr::getMaxOverSumRatio(const std::vector<uint_least16_t>& ADCsamples, int pedestal)
+double LArCellDeadOTXCorr::getMaxOverSumRatio(const std::vector<uint_least16_t>& ADCsamples, int pedestal) const
 {
         int max = -9999;
 	int sum = 0;
diff --git a/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.h b/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.h
index 5b97a1b6b7b13f93337da5585b136be05881d1a0..d61531cbd87359a01ec507317e671270b146e8e9 100644
--- a/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.h
+++ b/LArCalorimeter/LArCellRec/src/LArCellDeadOTXCorr.h
@@ -42,9 +42,12 @@
 #include "CaloRec/ToolWithConstantsMixin.h"
 #include "xAODTrigL1Calo/TriggerTowerContainer.h"
 
+#include "tbb/concurrent_unordered_map.h"
+
 #include <string>
 #include <vector>
 #include <map>
+#include <atomic>
 
 class LArCablingService;
 class StoreGateSvc;
@@ -66,9 +69,9 @@ class L1CaloCondSvc;
  * Trigger energy is estimated with a Landau-Landau fit on ADC samples. Corrections depending on eta and on the energy are then applied.\n
  * Known cell energies in the trigger tower are removed to this trigger energy, and the result is uniformly divided into the missing layer.
  */
-class LArCellDeadOTXCorr : public AthAlgTool,
-	public CaloRec::ToolWithConstantsMixin,
-	virtual public ICaloCellMakerTool 
+class LArCellDeadOTXCorr
+: public extends<AthAlgTool, ICaloCellMakerTool>,
+  public CaloRec::ToolWithConstantsMixin
 {
 
 	public:
@@ -79,15 +82,15 @@ class LArCellDeadOTXCorr : public AthAlgTool,
 
 		virtual ~LArCellDeadOTXCorr();
 
-		virtual StatusCode initialize() ; 
-		virtual StatusCode process( CaloCellContainer * CellCont) ;
-		virtual StatusCode finalize();
+		virtual StatusCode initialize() override;
+		virtual StatusCode process( CaloCellContainer * CellCont) override;
+		virtual StatusCode finalize() override;
 
 		using AthAlgTool::setProperty;
 
 		virtual StatusCode setProperty (const std::string& propname,
-				const std::string& value);
-		virtual StatusCode setProperty (const Property& p);
+				const std::string& value) override;
+		virtual StatusCode setProperty (const Property& p) override;
 
 
 	private:
@@ -101,7 +104,8 @@ class LArCellDeadOTXCorr : public AthAlgTool,
                 //std::string m_TTLocation;
                 SG::ReadHandleKey<xAOD::TriggerTowerContainer> m_TTLocation;
 		std::vector<double> m_triggerNoiseCut;
-		bool m_useL1CaloDB;
+		bool m_useL1CaloDBProp;
+		mutable std::atomic<bool> m_useL1CaloDB;
 
 		CaloRec::Array<1> m_etaCalibrationSizes;
 		CaloRec::Array<1> m_energyCalibrationTypes;
@@ -115,9 +119,14 @@ class LArCellDeadOTXCorr : public AthAlgTool,
 		std::vector<unsigned int> m_ignoredTTs;
 
 
-		std::map<Identifier, Identifier> m_cellTTMapping;
-		std::map<Identifier, std::pair<unsigned int, int> > m_idIndexMapping;
-
+                struct IdHash 
+                {
+                  size_t operator() (const Identifier& id) const
+                  { return id.get_compact(); }
+                };
+                mutable tbb::concurrent_unordered_map<Identifier,Identifier,IdHash> m_cellTTMapping;
+		mutable tbb::concurrent_unordered_map<Identifier, std::pair<unsigned int, int>, IdHash> m_idIndexMapping;
+                
 		const CaloIdManager* m_caloMgr;
 		const CaloLVL1_ID* m_lvl1Helper;
 		const CaloCell_ID* m_calo_id;
@@ -148,15 +157,15 @@ class LArCellDeadOTXCorr : public AthAlgTool,
 
 		// functions used to calculate trigger energy from parabola fit
 		double getA(double x1, double y1,
-				double x2, double y2,
-				double x3, double y3);
-
+                            double x2, double y2,
+                            double x3, double y3) const;
+                
 		double getB(double a,
-				double x1, double y1,
-				double x2, double y2);
+                            double x1, double y1,
+                            double x2, double y2) const;
 
 		double getC(double a, double b,
-				double x1, double y1);
+                            double x1, double y1) const;
 
 
 		/**
@@ -170,13 +179,16 @@ class LArCellDeadOTXCorr : public AthAlgTool,
 		 *
 		 * Energy is first estimated with a Landau-Landau fit; then a calibration factor depending on eta and the energy is applied.
 		 */
-		double getL1Energy(const std::vector<uint_least16_t> & ADCsamples, int pedestal, double eta, int type);
+		double getL1Energy(const std::vector<uint_least16_t> & ADCsamples, int pedestal, double eta, int type) const;
 
-		void getInitialFitParameters(const std::vector<uint_least16_t> & ADCsamples, double & max, double& maxPos, unsigned int& TTADCMaxIndex);
+		void getInitialFitParameters(const std::vector<uint_least16_t> & ADCsamples,
+                                             double & max,
+                                             double& maxPos,
+                                             unsigned int& TTADCMaxIndex) const;
 
-		double getEtaCalibration(double eta, int type);
-		double getEnergyCalibration(double eta, int type, double energy);
-		double getMaxOverSumRatio(const std::vector<uint_least16_t>& ADCsamples, int pedestal);
+		double getEtaCalibration(double eta, int type) const;
+		double getEnergyCalibration(double eta, int type, double energy) const;
+		double getMaxOverSumRatio(const std::vector<uint_least16_t>& ADCsamples, int pedestal) const;
 
 		static const std::map<int,int> defineSizeType();
 
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
index 42ba96c45ba6f03f9f41a644ce2ac2b62e8e3d4e..53f4892c323570917c97d05fa0bd0b45da0250fb 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/CMakeLists.txt
@@ -12,7 +12,7 @@ atlas_depends_on_subdirs( PUBLIC
                           DetectorDescription/GeoModel/GeoModelUtilities
                           LArCalorimeter/LArGeoModel/LArReadoutGeometry
                           PRIVATE
-                          Control/CLIDSvc
+                          Control/AthenaKernel
                           Control/SGTools
                           Control/StoreGate
                           Database/RDBAccessSvc
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
index 2c0062c07486b94c3c8b0ad83d67fa11eccd3046..dfeda29711ee1f01f1be4ea625c9bbab802cd260 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
@@ -34,7 +34,7 @@
 #include "LArHV/EMBPresamplerHVManager.h"
 #include "LArHV/EMECPresamplerHVManager.h"
 
-#include "CLIDSvc/tools/ClassID_traits.h"
+#include "AthenaKernel/ClassID_traits.h"
 #include "SGTools/DataProxy.h"
 
 // Name of the folder for LAr Alignment information :
diff --git a/LArCalorimeter/LArRawConditions/LArRawConditions/LArMCSym.h b/LArCalorimeter/LArRawConditions/LArRawConditions/LArMCSym.h
index 584f6aac5f144f6f5c48366e8fec86da4848593d..913b55deefb1a4ae591b5325dc91746af2fca686 100755
--- a/LArCalorimeter/LArRawConditions/LArRawConditions/LArMCSym.h
+++ b/LArCalorimeter/LArRawConditions/LArRawConditions/LArMCSym.h
@@ -26,6 +26,7 @@ class LArMCSym {
 	   ); 
    
   HWIdentifier ZPhiSymOfl(const Identifier notSymOffId) const {
+    if (m_caloCellID->is_tile(notSymOffId)) return HWIdentifier();
     const IdentifierHash h=m_caloCellID->calo_cell_hash(notSymOffId);
     return ZPhiSymOfl(h);
   }
diff --git a/MuonSpectrometer/MuonGeoModel/CMakeLists.txt b/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
index 24a0da40e45205f4a5d9a66d6d7572e6104c4aa1..9ded36db091cd38e085f079865d640a2bd29a1b9 100644
--- a/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
+++ b/MuonSpectrometer/MuonGeoModel/CMakeLists.txt
@@ -17,8 +17,6 @@ atlas_depends_on_subdirs( PUBLIC
                           MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry
                           MuonSpectrometer/MuonGMdbObjects
                           PRIVATE
-                          Control/CLIDSvc
-                          Control/SGTools
                           Database/AthenaPOOL/AthenaPoolUtilities
                           Database/RDBAccessSvc
                           DetectorDescription/AGDD/AGDDKernel
@@ -40,12 +38,12 @@ atlas_add_library( MuonGeoModelLib
                    PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
                    LINK_LIBRARIES ${CLHEP_LIBRARIES} AthenaKernel GeoModelKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects StoreGateLib SGtests MuonIdHelpersLib
-                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} SGTools AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils )
+                   PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils )
 
 atlas_add_component( MuonGeoModel
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel StoreGateLib SGtests GeoModelKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects SGTools AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils MuonIdHelpersLib MuonGeoModelLib )
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} AthenaKernel StoreGateLib SGtests GeoModelKernel GeoModelUtilities GaudiKernel MuonCondInterface MuonReadoutGeometry MuonGMdbObjects AthenaPoolUtilities AGDDKernel IdDictDetDescr MuonAGDDDescription MuonDetDescrUtils MuonIdHelpersLib MuonGeoModelLib )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorTool.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorTool.cxx
index c7f0e62a301a917e1ab400609af14e3a6e55e624..b5b0fc811714e6542ce50d32887cbd1c4074d2c4 100755
--- a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorTool.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorTool.cxx
@@ -22,7 +22,7 @@
 #include "AthenaPoolUtilities/CondAttrListCollection.h"
 
 #include <fstream>
-#include "CLIDSvc/tools/ClassID_traits.h"
+#include "AthenaKernel/ClassID_traits.h"
 
 using namespace MuonGM;
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration.py
index a638c6414004c2b7629a42553a7b0fadff7a40b4..2c329e17d688e7809f915c6b4dba2d41924f47f7 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration.py
@@ -14,6 +14,7 @@ from RecExConfig.RecFlags import rec
 # Common tools:
 from BTagging.BTaggingConfiguration_CommonTools import *
 from BTagging.BTaggingConfiguration_InDetVKalVxInJetTool import *
+from BTagging.BTaggingConfiguration_InDetVKalVxTrigInJetTool import *
 from BTagging.BTaggingConfiguration_InDetVKalVxNegativeTagInJetTool import *
 from BTagging.BTaggingConfiguration_InDetVKalVxMultiVxInJetTool import *
 
@@ -27,6 +28,7 @@ from BTagging.BTaggingConfiguration_IP2DNegTag import *
 #from BTagging.BTaggingConfiguration_IP2DSpcPosTag import *
 #from BTagging.BTaggingConfiguration_IP2DSpcTag import *
 from BTagging.BTaggingConfiguration_IP2DTag import *
+from BTagging.BTaggingConfiguration_IP2DTrigTag import *
 #from BTagging.BTaggingConfiguration_IP3DFlipTag import *
 from BTagging.BTaggingConfiguration_IP3DNegTag import *
 #from BTagging.BTaggingConfiguration_IP3DPosTag import *
@@ -35,6 +37,7 @@ from BTagging.BTaggingConfiguration_IP3DNegTag import *
 #from BTagging.BTaggingConfiguration_IP3DSpcPosTag import *
 #from BTagging.BTaggingConfiguration_IP3DSpcTag import *
 from BTagging.BTaggingConfiguration_IP3DTag import *
+from BTagging.BTaggingConfiguration_IP3DTrigTag import *
 from BTagging.BTaggingConfiguration_RNNIPTag import *
 
 # Jet fitter taggers
@@ -53,6 +56,7 @@ from BTagging.BTaggingConfiguration_RNNIPTag import *
 ##from BTagging.BTaggingConfiguration_NewJetFitterTag import *
 
 from BTagging.BTaggingConfiguration_NewJetFitterCollection import * #I collected all jetfitter functions currently needed for rel. 19 into here (Wouter)
+from BTagging.BTaggingConfiguration_NewJetFitterTrigCollection import * #I collected all jetfitter functions currently needed for rel. 19 into here (Wouter)
 from BTagging.BTaggingConfiguration_NewJetFitterIP3DNegCollection import *
 
 # Lepton taggers
@@ -67,6 +71,7 @@ from BTagging.BTaggingConfiguration_SoftMuonTag import *
 from BTagging.BTaggingConfiguration_SV0Tag import *
 from BTagging.BTaggingConfiguration_SV1FlipTag import *
 from BTagging.BTaggingConfiguration_SV1Tag import *
+from BTagging.BTaggingConfiguration_SV1TrigTag import *
 #from BTagging.BTaggingConfiguration_SV2FlipTag import *
 from BTagging.BTaggingConfiguration_SV2Tag import *
 
@@ -89,6 +94,7 @@ from BTagging.BTaggingConfiguration_MV1cFlipTag import *
 from BTagging.BTaggingConfiguration_MV2c00Tag import *
 from BTagging.BTaggingConfiguration_MV2c00FlipTag import *
 from BTagging.BTaggingConfiguration_MV2c10Tag import *
+from BTagging.BTaggingConfiguration_MV2c10TrigTag import *
 from BTagging.BTaggingConfiguration_MV2c10FlipTag import *
 from BTagging.BTaggingConfiguration_MV2c20Tag import *
 from BTagging.BTaggingConfiguration_MV2c20FlipTag import *
@@ -109,6 +115,7 @@ from BTagging.BTaggingConfiguration_ExKtbbTag import *
 
 # MultivariateTagManager
 from BTagging.BTaggingConfiguration_MultivariateTagManager import *
+from BTagging.BTaggingConfiguration_MultivariateTrigTagManager import *
 from BTagging.BTaggingConfiguration_MultivariateFlipTagManager import *
 
 # DL1 tagger
@@ -387,13 +394,13 @@ class Configuration:
               print str(tool)+': ',self._BTaggingConfig_InitializedTools[tool]
 
   def updateBTaggers(self, JetCollection):
-      """Updates the JetBTaggerTool for the selected JetCollection if they already exist. This is in order to keep
+      """Updates the JetBTaggerAlgs for the selected JetCollection if they already exist. This is in order to keep
       them up-to-date, as someone might set up a tool after these main tools already exist. And such a tool might require a new associator
       which we need to add to the main associator tool."""
       if JetCollection in self._BTaggingConfig_JetBTaggerAlgs:
           self.setupJetBTaggerAlgs(JetCollections=JetCollection)
 
-  def setupJetBTaggerAlg(self, ToolSvc=None, JetCollection="", TaggerList=[], SetupScheme="", topSequence=None, Verbose = True, AddToToolSvc = True, options={}, StripJetsSuffix = True):
+  def setupJetBTaggerAlg(self, ToolSvc=None, JetCollection="", TaggerList=[], SetupScheme="", topSequence=None, Verbose = True, options={}, StripJetsSuffix = True):
       """Convenience function which takes only a single jet collection and returns an instance instead
       of a list; see setupJetBTaggerAlgs for more info. This function is mainly here for easy calling BTagging.
 
@@ -405,14 +412,14 @@ class Configuration:
           elif Verbose:
               print(self.BTagTag()+" - DEBUG - Stripping trailing 'jets' from jet collection '"+JetCollection+"' prior to setup.")
           JetCollection = JetCollection[:-4]
-      btagger = self.setupJetBTaggerAlgs(ToolSvc, [JetCollection,], topSequence, Verbose, AddToToolSvc, options, TaggerList, SetupScheme)
+      btagger = self.setupJetBTaggerAlgs(ToolSvc, [JetCollection,], topSequence, Verbose, options, TaggerList, SetupScheme)
       return btagger[0]
 
   def setupJetBTaggerTool(self, ToolSvc=None, JetCollection="", TaggerList=[], SetupScheme="", topSequence=None, Verbose = None, AddToToolSvc = True, options={}, StripJetsSuffix = True):
-      """Convenience function which takes only a single jet collection and returns an instance instead
-      of a list; see setupJetBTaggerTools for more info. This function is mainly here for easy calling for BTagging from JetRec.
-
-      This function also strips any trailing 'Jets' in the JetCollection if StripJetsSuffix=True (which is the default)."""
+  #    """Convenience function which takes only a single jet collection and returns an instance instead
+  #    of a list; see setupJetBTaggerTools for more info. This function is mainly here for easy calling for BTagging from JetRec.
+  
+  #    This function also strips any trailing 'Jets' in the JetCollection if StripJetsSuffix=True (which is the default)."""
       if (JetCollection.lower()).endswith("jets"):
           if Verbose is None:
               if BTaggingFlags.OutputLevel < 3:
@@ -423,7 +430,7 @@ class Configuration:
       btagger = self.setupJetBTaggerTools(ToolSvc, [JetCollection,], topSequence, Verbose, AddToToolSvc, options, TaggerList, SetupScheme)
       return btagger[0]
 
-  def setupJetBTaggerAlgs(self, ToolSvc=None, JetCollections=[], topSequence=None, Verbose = None, AddToToolSvc = True, options={}, TaggerList=[], SetupScheme = ""):
+  def setupJetBTaggerAlgs(self, ToolSvc=None, JetCollections=[], topSequence=None, Verbose = None, options={}, TaggerList=[], SetupScheme = ""):
       """Sets up JetBTaggerAlg tools and adds them to the topSequence (one per jet collection). This function just updates
       the tool if such a tool already exists for the specified jet collections. This function should only be used for
       jet collections that one need reconstruction. Note that it is allowed to set topSequence to None,
@@ -436,7 +443,6 @@ class Configuration:
              JetCollections:   List of jet collection name (can also accept string in the case of one collection).
              topSequence:      The topSequence. (not needed when updating)
              Verbose:          Whether to print some additional information. If None then BTaggingFlags.OutputLevel will be used.
-             AddToToolSvc:     Whether to add the JetBTaggerAlg to the ToolSvc or not.
              options:          List of options to be passed to the JetBTaggerAlgs. This has the following defaults:
 
       OutputLevel:                                  default: BTaggingFlags.OutputLevel
@@ -551,6 +557,7 @@ class Configuration:
       output: List of JetBTaggerTools (this includes those for which no tool was set up because it already existed)."""
       if len(SetupScheme) == 0:
         SetupScheme = BTaggingFlags.ConfigurationScheme
+
       from BTagging.BTaggingConfiguration_LoadTools import SetupJetCollection
       import sys
       if Verbose is None:
@@ -766,9 +773,14 @@ class Configuration:
              track:         The track association.
              jetcol:        The jet collection.
       output: The name of the tool."""
+
+      #GeneralToolSuffix() can not be used here because now tagger in Trig scheme are added with the full name tagger_Trig
+      GeneralToolSuffix = ''
+      if 'Trig' in self._name and 'Trig' not in tool:
+          GeneralToolSuffix = '_Trig';
       # Some tools only need exactly one in ToolSvc
       if getToolMetadata(tool, 'OneInTotal'):
-          return tool+self.GeneralToolSuffix()
+          return tool+GeneralToolSuffix
       # Some tools need one per track association
       if not getToolMetadata(tool, 'OnePerTrackAssociationAndJetCollection'):
           # Append track association if non-default
@@ -776,10 +788,10 @@ class Configuration:
           if not defaulttracks:
               defaulttracks = 'BTagTrackToJetAssociator'
           if track == defaulttracks:
-              return tool+self.GeneralToolSuffix()
-          return tool+'_'+track+self.GeneralToolSuffix()
+              return tool+GeneralToolSuffix
+          return tool+'_'+track+GeneralToolSuffix
       # All others require one per track and per jet collection
-      return jetcol+'_'+tool+'_'+track+self.GeneralToolSuffix()
+      return jetcol+'_'+tool+'_'+track+GeneralToolSuffix
 
   def checkPrerequisites(self, tool_type, TrackCollection="", JetCollection="", CheckOnlyInsideToolCollection=False):
       """Checks whether all prerequisites are met for the tool/tagger. It returns a list of
@@ -1631,14 +1643,14 @@ class Configuration:
           else:
               broker = self._BTaggingConfig_InitializedTools.get(self.getToolName('BTagCalibrationBrokerTool',track,jetcol), None)
               if broker is None:
-                  print self.BTagTag()+' - ERROR - CalibrationBroker not found; calibrations will not function!'
-                  raise ValueError
+                  print self.BTagTag()+' - WARNING - CalibrationBroker not found; The tool is replaced by a condition algorithm'
               elif not hasattr(broker, 'taggers'):
                   print self.BTagTag()+' - ERROR - CalibrationBroker does not have "taggers" as an attribute; calibrations will not function!'
                   raise ValueError
-              for tagger in CalibrationTaggers:
-                  if not tagger in broker.taggers:
-                      broker.taggers.append(tagger)
+              else:
+                  for tagger in CalibrationTaggers:
+                      if not tagger in broker.taggers:
+                          broker.taggers.append(tagger)
       # Set up the actual tool
       try:
           exec('tool = tool'+tool_type+'(**options)')
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_DL1Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_DL1Tag.py
index d4987c58ac21a4c13cb8576767f70b4caf0412e6..5bdaa02b23c65bb880dcb2e76c39f85b113377c2 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_DL1Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_DL1Tag.py
@@ -11,10 +11,8 @@ def buildDL1(basename):
   metaInstance = { 'IsATagger'          : False,
                   'xAODBaseName'       : basename,
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : [basename],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : basename+'Tag'}
 
   def DL1Instance(name, useBTagFlagsDefaults = True, **options):
@@ -51,4 +49,4 @@ def buildDL1(basename):
 
 toolDL1muTag, metaDL1muTag = buildDL1("DL1mu")
 toolDL1Tag, metaDL1Tag = buildDL1("DL1")
-toolDL1rnnTag, metaDL1rnnTag = buildDL1("DL1rnn")
\ No newline at end of file
+toolDL1rnnTag, metaDL1rnnTag = buildDL1("DL1rnn")
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTag.py
index 014fd7adb2a87c1722eaae034f95748f9db04ef6..7be97200485952c9eca905c47ed112e2584a16d7 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTag.py
@@ -27,12 +27,8 @@ metaIP2DTag = { 'IsATagger'         : True,
                 'PassByPointer'     : {'SVForIPTool'                : 'SVForIPTool_IP2D',
                                        'trackSelectorTool'          : 'IP2DTrackSelector',
                                        'trackGradeFactory'          : 'IP2DDetailedTrackGradeFactory',
-#                                       'trackToVertexTool'          : 'BTagTrackToVertexTool',
                                        'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator',
                                        'LikelihoodTool'             : 'IP2DNewLikelihoodTool'},
-#                'PassByName'        : {'SecVxFinderNameForV0Removal' : 'InDetVKalVxInJetTool',
-#                                       'SecVxFinderNameForIPSign'    : 'InDetVKalVxInJetTool'},
-#                'PassTracksAs'      : 'trackAssociation',
                 'PassTracksAs'      : 'trackAssociationName',
                 'JetCollectionList' : 'jetCollectionList',
                 'ToolCollection'    : 'IP2DTag' }
@@ -205,8 +201,6 @@ def toolIP2DTrackSelector(name, useBTagFlagsDefaults = True, **options):
 #------------------------------------------------------------------
 
 metaIP2DNewLikelihoodTool = { 'CalibrationTaggers' : ['IP2D',],
-                              'DependsOn'          : ['BTagCalibrationBrokerTool',],
-                              'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                               'ToolCollection'     : 'IP2DTag' }
 
 def toolIP2DNewLikelihoodTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTrigTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTrigTag.py
new file mode 100644
index 0000000000000000000000000000000000000000..d980efd2f5194db5fbeb376a9000b3ab7d1ac7ca
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP2DTrigTag.py
@@ -0,0 +1,226 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for IP2DTag_Trig
+# Author: Wouter van den Wollenberg (2013-2014)
+from BTagging.BTaggingFlags import BTaggingFlags
+from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags
+from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags
+from IOVDbSvc.CondDB import conddb
+btagrun1=False
+if conddb.dbdata == 'COMP200':
+    btagrun1=True
+elif conddb.isMC:
+    btagrun1 = (commonGeoFlags.Run() == "RUN1" or (commonGeoFlags.Run() == "UNDEFINED" and geoFlags.isIBL() == False))
+
+metaIP2DTag_Trig = { 'IsATagger'         : True,
+                   'xAODBaseName'      : 'IP2D',
+                   'DependsOn'         : ['AtlasExtrapolator',
+                                          'BTagTrackToVertexTool',
+                                          'InDetVKalVxInJetTool_Trig',
+                                          'BTagFullLinearizedTrackFactory',
+                                          'BTagTrackToVertexIPEstimator',
+                                          'IP2DNewLikelihoodTool_Trig',
+                                          'IP2DTrackSelector_Trig',
+                                          'SVForIPTool_IP2D_Trig',
+                                          'IP2DBasicTrackGradeFactory_Trig',
+                                          'IP2DDetailedTrackGradeFactory_Trig'],
+                   'PassByPointer'     : {'SVForIPTool'                : 'SVForIPTool_IP2D_Trig',
+                                          'trackSelectorTool'          : 'IP2DTrackSelector_Trig',
+                                          'trackGradeFactory'          : 'IP2DDetailedTrackGradeFactory_Trig',
+                                          'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator',
+                                          'LikelihoodTool'             : 'IP2DNewLikelihoodTool_Trig'},
+                   'PassTracksAs'      : 'trackAssociationName',
+                   'JetCollectionList' : 'jetCollectionList',
+                   'ToolCollection'    : 'IP2DTag_Trig' }
+
+def toolIP2DTag_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP2DTag_Trig tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    Runmodus                            default: BTaggingFlags.Runmodus
+    referenceType                       default: BTaggingFlags.ReferenceType
+    impactParameterView                 default: "2D"
+    trackGradePartitions                default: [ "Good", "BlaShared", "PixShared", "SctShared", "0HitBLayer" ]
+    RejectBadTracks                     default: False
+    originalTPCollectionName            default: BTaggingFlags.TrackParticleCollectionName
+    jetCollectionList                   default: BTaggingFlags.Jets
+    unbiasIPEstimation                  default: False (switch to true (better!) when creating new PDFs)
+    UseCHypo                            default: True
+    SecVxFinderName                     default: "SV1"
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        grades= [ "0HitIn0HitNInExp2","0HitIn0HitNInExpIn","0HitIn0HitNInExpNIn","0HitIn0HitNIn",
+                  "0HitInExp", "0HitIn",
+                  "0HitNInExp", "0HitNIn",
+                  "InANDNInShared", "PixShared", "SctShared",
+                  "InANDNInSplit", "PixSplit",
+                  "Good"]
+        if btagrun1: grades=[ "Good", "BlaShared", "PixShared", "SctShared", "0HitBLayer" ]
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'Runmodus'                         : BTaggingFlags.Runmodus,
+                     'referenceType'                    : BTaggingFlags.ReferenceType,
+                     'jetPtMinRef'                      : BTaggingFlags.JetPtMinRef,
+                     'impactParameterView'              : '2D',
+                     'trackGradePartitions'             : grades,
+                     'RejectBadTracks'                  : True,
+                     'originalTPCollectionName'         : BTaggingFlags.TrackParticleCollectionName,
+                     'jetCollectionList'                : BTaggingFlags.Jets,
+                     'unbiasIPEstimation'               : False,
+                     'UseCHypo'                         : True,
+                     'SecVxFinderName'                  : 'SV1',
+                     'storeTrackParticles': True,
+                     'storeTrackParameters': True,
+                     'storeIpValues': False,
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__IPTag
+    return Analysis__IPTag(**options)
+
+#---------------------------------------------------------------------
+
+metaIP2DDetailedTrackGradeFactory_Trig = { 'ToolCollection' : 'IP2DTag_Trig' }
+
+def toolIP2DDetailedTrackGradeFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP2DTrigDetailedTrackGradeFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useSharedHitInfo                    default: True
+    useDetailSharedHitInfo              default: True
+    useRun2TrackGrading                 default: False
+    hitBLayerGrade                      default: True
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'            : BTaggingFlags.OutputLevel,
+                     'useSharedHitInfo'       : True,
+                     'useDetailSharedHitInfo' : True,
+                     'useRun2TrackGrading'    : (btagrun1 == False),
+                     'useInnerLayers0HitInfo' : (btagrun1 == False),
+                     'useDetailSplitHitInfo'  : (btagrun1 == False),
+                     'hitBLayerGrade'         : True,
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__DetailedTrackGradeFactory
+    return Analysis__DetailedTrackGradeFactory(**options)
+
+#---------------------------------------------------------------------
+
+metaIP2DBasicTrackGradeFactory_Trig = { 'ToolCollection' : 'IP2DTag_Trig' }
+
+def toolIP2DBasicTrackGradeFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP2DTrigBasicTrackGradeFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useSharedHitInfo                    default: True
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'      : BTaggingFlags.OutputLevel,
+#                     'TrackSummaryTool' : None,
+                     'useSharedHitInfo' : True }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__BasicTrackGradeFactory
+    return Analysis__BasicTrackGradeFactory(**options)
+
+#---------------------------------------------------------------------
+
+metaSVForIPTool_IP2D_Trig = { 'ToolCollection' : 'IP2DTag_Trig' }
+
+def toolSVForIPTool_IP2D_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a SVForIPTool_IP2DTrig tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__SVForIPTool
+    return Analysis__SVForIPTool(**options)
+
+#---------------------------------------------------------------------
+
+metaIP2DTrackSelector_Trig = { 'DependsOn'       : ['BTagTrackToVertexTool',],
+                             'PassedByPointer' : {'trackToVertexTool' : 'BTagTrackToVertexTool'},
+                             'ToolCollection'  : 'IP2DTag_Trig' }
+
+def toolIP2DTrackSelector_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP2DTrigTrackSelector tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useBLayerHitPrediction              default: True
+    usepTDepTrackSel                    default: False
+    nHitBLayer                          default: 0
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'            : BTaggingFlags.OutputLevel,
+                     'useBLayerHitPrediction' : True,
+                     'nHitBLayer'             : 0,
+                     'usepTDepTrackSel'       : False }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__TrackSelector
+    return Analysis__TrackSelector(**options)
+
+#---------------------------------------------------------------------
+
+metaIP2DNewLikelihoodTool_Trig = { 'CalibrationTaggers' : ['IP2D',],
+                                 'ToolCollection'     : 'IP2DTag_Trig' }
+
+def toolIP2DNewLikelihoodTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP2DTrigNewLikelihoodTool tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    taggerName                          default: "IP2D"
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                         : BTaggingFlags.OutputLevel,
+                     'HistosKey'                           : 'TrigJetTagCalibHistosKey',
+                     'taggerName'                          : 'IP2D' }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__NewLikelihoodTool
+    return Analysis__NewLikelihoodTool(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py
index a439cfe1a6e02e7c1bb12e625e4fbe0e572a8f55..7f6e109c628be0d122080cf63a7af58fccf72d31 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTag.py
@@ -32,11 +32,8 @@ metaIP3DTag = { 'IsATagger'         : True,
                                        'InDetTrackSelectionTool'    : 'InDetTrackSelector',
                                        'TrackVertexAssociationTool' : 'SpecialTrackAssociator',
                                        'trackGradeFactory'          : 'IP3DDetailedTrackGradeFactory',
-#                                       'trackToVertexTool'          : 'BTagTrackToVertexTool',
                                        'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator',
                                        'LikelihoodTool'             : 'IP3DNewLikelihoodTool'},
-#                'PassByName'        : {'SecVxFinderNameForV0Removal' : 'InDetVKalVxInJetTool',
-#                                       'SecVxFinderNameForIPSign'    : 'InDetVKalVxInJetTool'},
                 'PassTracksAs'      : 'trackAssociationName',
                 'JetCollectionList' : 'jetCollectionList',
                 'ToolCollection'    : 'IP3DTag' }
@@ -265,8 +262,6 @@ def toolSpecialTrackAssociator(name, useBTagFlagsDefaults = True, **options):
 #------------------------------------------------------------------
 
 metaIP3DNewLikelihoodTool = { 'CalibrationTaggers' : ['IP3D',],
-                              'DependsOn'          : ['BTagCalibrationBrokerTool',],
-                              'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                               'ToolCollection'     : 'IP3DTag' }
 
 def toolIP3DNewLikelihoodTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTrigTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTrigTag.py
new file mode 100644
index 0000000000000000000000000000000000000000..6953e8c374b1f01130c4916796f96ea3d0b9014b
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_IP3DTrigTag.py
@@ -0,0 +1,229 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for IP3DTrigTag
+# Author: Wouter van den Wollenberg (2013-2014)
+from BTagging.BTaggingFlags import BTaggingFlags
+from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags
+from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags
+from IOVDbSvc.CondDB import conddb
+btagrun1=False
+if conddb.dbdata == 'COMP200':
+    btagrun1=True
+elif conddb.isMC:
+    btagrun1 = (commonGeoFlags.Run() == "RUN1" or (commonGeoFlags.Run() == "UNDEFINED" and geoFlags.isIBL() == False))
+
+metaIP3DTag_Trig = { 'IsATagger'         : True,
+                   'xAODBaseName'      : 'IP3D',
+                   'DependsOn'         : ['AtlasExtrapolator',
+                                          'BTagTrackToVertexTool',
+                                          'InDetVKalVxInJetTool_Trig',
+                                          'BTagFullLinearizedTrackFactory',
+                                          'BTagTrackToVertexIPEstimator',
+                                          'IP3DNewLikelihoodTool_Trig',
+                                          'IP3DTrackSelector_Trig',
+                                          'InDetTrackSelector',
+                                          'SpecialTrackAssociator',
+                                          'SVForIPTool_IP3D_Trig',
+                                          'IP3DBasicTrackGradeFactory_Trig',
+                                          'IP3DDetailedTrackGradeFactory_Trig'],
+                   'PassByPointer'     : {'SVForIPTool'                : 'SVForIPTool_IP3D_Trig',
+                                          'trackSelectorTool'          : 'IP3DTrackSelector_Trig',
+                                          'trackGradeFactory'          : 'IP3DDetailedTrackGradeFactory_Trig',
+                                          'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator',
+                                          'InDetTrackSelectionTool'    : 'InDetTrackSelector',
+                                          'TrackVertexAssociationTool' : 'SpecialTrackAssociator',
+                                          'LikelihoodTool'             : 'IP3DNewLikelihoodTool_Trig'},
+                   'PassTracksAs'      : 'trackAssociationName',
+                   'JetCollectionList' : 'jetCollectionList',
+                   'ToolCollection'    : 'IP3DTag_Trig' }
+
+def toolIP3DTag_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP3DTrigTag tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    Runmodus                            default: BTaggingFlags.Runmodus
+    referenceType                       default: BTaggingFlags.ReferenceType
+    impactParameterView                 default: "3D"
+    trackGradePartitions                default: [ "Good", "BlaShared", "PixShared", "SctShared", "0HitBLayer" ]
+    RejectBadTracks                     default: False
+    originalTPCollectionName            default: BTaggingFlags.TrackParticleCollectionName
+    jetCollectionList                   default: BTaggingFlags.Jets
+    unbiasIPEstimation                  default: False (switch to true (better!) when creating new PDFs)
+    UseCHypo                            default: True
+    SecVxFinderName                     default: "SV1"
+    jetPtMinRef                         default: BTaggingFlags.JetPtMinRef
+
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        grades= [ "0HitIn0HitNInExp2","0HitIn0HitNInExpIn","0HitIn0HitNInExpNIn","0HitIn0HitNIn",
+                  "0HitInExp", "0HitIn",
+                  "0HitNInExp", "0HitNIn",
+                  "InANDNInShared", "PixShared", "SctShared",
+                  "InANDNInSplit", "PixSplit",
+                  "Good"]
+        if btagrun1: grades=[ "Good", "BlaShared", "PixShared", "SctShared", "0HitBLayer" ]
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'Runmodus'                         : BTaggingFlags.Runmodus,
+                     'referenceType'                    : BTaggingFlags.ReferenceType,
+                     'impactParameterView'              : '3D',
+                     'trackGradePartitions'             : grades,
+                     'RejectBadTracks'                  : True,
+                     'originalTPCollectionName'         : BTaggingFlags.TrackParticleCollectionName,
+                     'jetCollectionList'                : BTaggingFlags.Jets,
+                     'unbiasIPEstimation'               : False,
+                     'UseCHypo'                         : True,
+                     'SecVxFinderName'                  : 'SV1',
+                     'jetPtMinRef'                      : BTaggingFlags.JetPtMinRef,
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__IPTag
+    return Analysis__IPTag(**options)
+
+#---------------------------------------------------------------------
+
+metaIP3DDetailedTrackGradeFactory_Trig = { 'ToolCollection' : 'IP3DTag_Trig' }
+
+def toolIP3DDetailedTrackGradeFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP3DTrigDetailedTrackGradeFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useSharedHitInfo                    default: True
+    useDetailSharedHitInfo              default: True
+    hitBLayerGrade                      default: True
+    useRun2TrackGrading                 default: False
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'            : BTaggingFlags.OutputLevel,
+                     'useSharedHitInfo'       : True,
+                     'useDetailSharedHitInfo' : True,
+                     'hitBLayerGrade'         : True,
+                     'useRun2TrackGrading'    : (btagrun1 == False),
+                     'useInnerLayers0HitInfo' : (btagrun1 == False),
+                     'useDetailSplitHitInfo'  : (btagrun1 == False),
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__DetailedTrackGradeFactory
+    return Analysis__DetailedTrackGradeFactory(**options)
+
+#---------------------------------------------------------------------
+
+metaIP3DBasicTrackGradeFactory_Trig = { 'ToolCollection' : 'IP3DTag_Trig' }
+
+def toolIP3DBasicTrackGradeFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP3DTrigBasicTrackGradeFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useSharedHitInfo                    default: True
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'      : BTaggingFlags.OutputLevel,
+                     'useSharedHitInfo' : True }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__BasicTrackGradeFactory
+    return Analysis__BasicTrackGradeFactory(**options)
+
+#---------------------------------------------------------------------
+
+metaSVForIPTool_IP3D_Trig = { 'ToolCollection' : 'IP3DTag_Trig' }
+
+def toolSVForIPTool_IP3D_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a SVForIPTool_IP3DTrig tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__SVForIPTool
+    return Analysis__SVForIPTool(**options)
+
+#---------------------------------------------------------------------
+
+metaIP3DTrackSelector_Trig = { 'DependsOn'      : ['BTagTrackToVertexTool',],
+                             'PassByPointer'  : {'trackToVertexTool' : 'BTagTrackToVertexTool'},
+                             'ToolCollection' : 'IP3DTag_Trig' }
+
+def toolIP3DTrackSelector_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP3DTrigTrackSelector tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    useBLayerHitPrediction              default: True
+    usepTDepTrackSel                    default: False
+    nHitBLayer                          default: 0
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'            : BTaggingFlags.OutputLevel,
+                     'useBLayerHitPrediction' : True,
+                     'nHitBLayer'             : 0 ,
+                     'usepTDepTrackSel'       : False }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__TrackSelector
+    return Analysis__TrackSelector(**options)
+
+#---------------------------------------------------------------------
+
+metaIP3DNewLikelihoodTool_Trig = { 'CalibrationTaggers' : ['IP3D',],
+                                 'ToolCollection'     : 'IP3DTag_Trig' }
+
+def toolIP3DNewLikelihoodTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a IP3DTrigNewLikelihoodTool tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    taggerName                          default: "IP3D"
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                         : BTaggingFlags.OutputLevel,
+                     'HistosKey'                           : 'TrigJetTagCalibHistosKey',
+                     'taggerName'                          : 'IP3D' }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__NewLikelihoodTool
+    return Analysis__NewLikelihoodTool(**options)
+
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_InDetVKalVxTrigInJetTool.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_InDetVKalVxTrigInJetTool.py
new file mode 100644
index 0000000000000000000000000000000000000000..273d5616e2db2e82b6f20632b772e305ec3ab1de
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_InDetVKalVxTrigInJetTool.py
@@ -0,0 +1,39 @@
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for InDetVKalVxInJetTool
+# Author: Wouter van den Wollenberg (2013-2014)
+# Note: This tool has its own file because it is common to many different taggers
+#       so deletion of the one tagger that has this function won't break the others.
+from BTagging.BTaggingFlags import BTaggingFlags
+from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags
+
+metaInDetVKalVxInJetTool_Trig = { 'IsAVertexFinder'          : True,
+                             'VertexFinderxAODBaseName' : 'SV1',
+                             'OneInTotal'               : True,
+                             'DependsOn'                : ['BTagFullLinearizedTrackFactory',
+                                                           'BTagTrackToVertexIPEstimator',
+                                                           'BTagTrackToVertexTool',
+                                                           'AtlasExtrapolator'] }
+
+def toolInDetVKalVxInJetTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a InDetVKalVxInJetTool tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    TrackSummaryTool                    default: None (not needed for b-tagging)
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output. Note however
+    that this tool also needs to be added to the main B-tagging tool."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'      : BTaggingFlags.OutputLevel,
+                     'ExistIBL'         : geoFlags.isIBL(),
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from InDetVKalVxInJetTool.InDetVKalVxInJetToolConf import InDet__InDetVKalVxInJetTool
+    return InDet__InDetVKalVxInJetTool(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_JetVertexCharge.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_JetVertexCharge.py
index 00d8b63aa07d1be1595b9a7777b57092f0507cab..0295191e08925b67921cd9e8cb6184be2b97747d 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_JetVertexCharge.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_JetVertexCharge.py
@@ -9,13 +9,11 @@ metaJetVertexCharge = { 'IsATagger'           : True,
                        'DependsOn'            : ['AtlasExtrapolator',
                                                  'BTagTrackToVertexTool',   #LC FIXME  check if it works  
                                                  'NewJetFitterVxFinder',
-                                                 'BTagCalibrationBrokerTool',
                                                  'MuonCorrectionsTool',
                                                  'MuonSelectorTool',
                                                  ],
                         'CalibrationTaggers'  : ['JetVertexCharge',], 
-                        'PassByPointer'       : {'calibrationTool'    : 'BTagCalibrationBrokerTool',
-                                                 'muonCorrectionTool' : 'MuonCorrectionsTool' ,
+                        'PassByPointer'       : {'muonCorrectionTool' : 'MuonCorrectionsTool' ,
                                                  'muonSelectorTool'   : 'MuonSelectorTool' },
                         'ToolCollection'      : 'JetVertexCharge' }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_LoadTools.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_LoadTools.py
index 0095817aba0ce2f248345e18aa196120a0ffe1ef..7258f6fc9bb588e295eb288c0fc869e859e042df 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_LoadTools.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_LoadTools.py
@@ -42,6 +42,7 @@ def Initiate(ConfInstance=None):
   from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags
   from AtlasGeoModel.InDetGMJobProperties import InDetGeometryFlags as geoFlags
   from IOVDbSvc.CondDB import conddb
+  # Declare the COOL folder to the CondInputLoader
   btagrun1=False
   if conddb.dbdata == 'COMP200':
     btagrun1=True
@@ -69,11 +70,6 @@ def Initiate(ConfInstance=None):
   if ConfInstance._name == "Trig":
     BTaggingFlags.MV2c20=True
   
-  if ConfInstance.getTool("BTagCalibrationBrokerTool"):
-    print ConfInstance.BTagTag()+' - INFO - BTagCalibrationBrokerTool already exists prior to default initialization; assuming user set up entire initialization him/herself. Note however that if parts of the initalization were not set up, and a later tool requires them, they will be set up at that point automatically with default settings.'
-    ConfInstance._Initialized = True
-    return True
-
   print ConfInstance.BTagTag()+' - INFO - Initializing default basic tools'
 
   if ConfInstance.checkFlagsUsingBTaggingFlags():
@@ -121,6 +117,11 @@ def Initiate(ConfInstance=None):
       from AthenaCommon.AlgSequence import AlgSequence
       topSequence = AlgSequence()
 
+
+    #Create and add our condition algorithm to the Condition Sequencer
+
+    SetupConditionAlgorithm(ConfInstance)
+
     #
     # ========== Add tools now
     #
@@ -129,11 +130,9 @@ def Initiate(ConfInstance=None):
     from AthenaCommon.AppMgr import ToolSvc
     from AthenaCommon.Resilience import treatException,protectedInclude
     if ConfInstance._name == "":
-      protectedInclude("BTagging/BTagCalibBroker_jobOptions.py") # New file which includes the file from JetCalibration and also registers it via registerTool() so it will be recognized by the various addTool() functions.
-      BTagCalibrationBrokerTool = ConfInstance.getTool("BTagCalibrationBrokerTool") # In case this variable is needed
+      print ConfInstance.BTagTag()+' - No calibration broker setup - The condition algorithm is used'
     elif ConfInstance._name == "Trig":
-      protectedInclude("BTagging/BTagCalibBroker_Trig_jobOptions.py")
-      BTagCalibrationBrokerTool = ConfInstance.getTool("BTagCalibrationBrokerTool")
+      print ConfInstance.BTagTag()+' - No calibration broker setup - The condition algorithm is used'
     elif ConfInstance._name == "AODFix":
       protectedInclude("BTagging/BTagCalibBroker_AODFix_jobOptions.py")
       BTagCalibrationBrokerTool = ConfInstance.getTool("BTagCalibrationBrokerTool")
@@ -151,36 +150,6 @@ def Initiate(ConfInstance=None):
     BTagLeptonTruthTool = None
     thisBTagLabeling = None
 
-    # -- to label jets with truth information
-    #from JetRec.JetRecFlags import jetFlags
-    #if jetFlags.useTruth():
-    #  # Jet Label
-    #  if BTaggingFlags.jetTruthMatching == 'matchQuark' or BTaggingFlags.jetTruthMatching == 'jetTrackTruthMatching':
-    #    BTagJetTruthMatching = addTool("BTagJetTruthMatching",
-    #                                   ToolSvc = ToolSvc,
-    #                                   Verbose = BTaggingFlags.OutputLevel < 3,
-    #                                   options = {'subtype' : BTaggingFlags.jetTruthMatching},
-    #                                   SuppressNonCloneWarning=True)
-    #    BTagJetTruthMatching.McEventCollection = TheTruthCollectionKey
-    #  else:
-    #    BTagJetTruthMatching = None
-    #    print("#BTAG# - WARNING - BTaggingFlags.jetTruthMatching has unsupported value!")
-    #  # Lepton Truth Match
-    #  #BTagLeptonTruthTool = addTool('BTagLeptonTruthTool', ToolSvc = ToolSvc, Verbose = BTaggingFlags.OutputLevel < 3)
-    #  #BTagLeptonTruthTool.McEventCollection = TheTruthCollectionKey
-    #  BTagLeptonTruthTool = None # TEMPORARY: BTagLeptonTruthTool not implemented yet?
-    #  # Labeling tool
-    #  thisBTagLabeling = addTool("thisBTagLabeling", ToolSvc = ToolSvc, Verbose = BTaggingFlags.OutputLevel < 3,
-    #                                        options = {'JetTruthMatchTool' : BTagJetTruthMatching,
-    #                                                   #'LeptonTruthTool'   : BTagLeptonTruthTool}, TEMPORARY: BTagLeptonTruthTool not implemented yet?
-    #                                                   },
-    #                                        SuppressNonCloneWarning=True)
-    #else:
-    #  BTagJetTruthMatching = None
-    #  BTagLeptonTruthTool  = None
-    #  thisBTagLabeling = None
-      # NOTE: These variables no longer serve any purpose, since any tool can be retrieved using getTool
-
     # -- for reference mode:
     if BTaggingFlags.Runmodus == 'reference':
 
@@ -192,6 +161,72 @@ def Initiate(ConfInstance=None):
     print ConfInstance.BTagTag()+' - WARNING - Tool initialization requested but B-Tagging is not possible for the current dataset.'
     return False
 
+def SetupConditionAlgorithm(ConfInstance=None):
+  """General function which can setup condition algorithm
+  Hack: In trigger mode, the online mode is automatically setup.
+  In online mode check that the condition algorithm is not already setup"""
+
+  from AthenaCommon.AlgSequence import AthSequencer
+  condSeq = AthSequencer("AthCondSeq")
+  if hasattr(condSeq, "JetTagCalibHistosKey"):
+    if BTaggingFlags.OutputLevel < 3:
+      print(ConfInstance.BTagTag()+" - DEBUG Default key already defined, another scheme must have been setup before")
+    return True
+  
+ 
+  from IOVDbSvc.CondDB import conddb 
+  if conddb.dbdata == 'COMP200':
+    conddb.addFolder("GLOBAL_ONL", "/GLOBAL/Onl/BTagCalib/RUN12", className='CondAttrListCollection')
+    conddb.addFolder("GLOBAL_ONL", "/GLOBAL/Onl/TrigBTagCalib/RUN12", className='CondAttrListCollection')
+  elif conddb.isMC:
+    conddb.addFolder("GLOBAL_OFL", "/GLOBAL/BTagCalib/RUN12", className='CondAttrListCollection')
+    conddb.addFolder("GLOBAL_OFL", "/GLOBAL/TrigBTagCalib/RUN12", className='CondAttrListCollection')
+
+  if ConfInstance.checkFlagsUsingBTaggingFlags():
+    #IP2D
+    grades= [ "0HitIn0HitNInExp2","0HitIn0HitNInExpIn","0HitIn0HitNInExpNIn","0HitIn0HitNIn",
+                  "0HitInExp", "0HitIn",
+                  "0HitNInExp", "0HitNIn",
+                  "InANDNInShared", "PixShared", "SctShared",
+                  "InANDNInSplit", "PixSplit",
+                  "Good"]
+
+    #IP3D
+    #Same as IP2D. Revisit JetTagCalibCondAlg.cxx if not.
+ 
+    from AthenaCommon.GlobalFlags import globalflags
+
+    from JetTagCalibration.JetTagCalibrationConf import Analysis__JetTagCalibCondAlg as JetTagCalibCondAlg
+    readkeycalibpath = "/GLOBAL/BTagCalib/RUN12"
+    connSchema = "GLOBAL_OFL"
+    if globalflags.DataSource()=='data':
+        readkeycalibpath = readkeycalibpath.replace("/GLOBAL/BTagCalib","/GLOBAL/Onl/BTagCalib")
+        connSchema = "GLOBAL"
+    Taggers = ['IP2D','IP3D','SV1','JetFitterNN','SoftMu', 'MV2c10', 'MV2c100', 'MV2c10mu', 'MV2c10rnn', 'MV2cl100','RNNIP', 'JetVertexCharge', 'MultiSVbb1', 'MultiSVbb2', 'DL1', 'DL1mu', 'DL1rnn']
+    jettagcalibcondalg = "JetTagCalibHistosKey"
+    histoskey = "JetTagCalibHistosKey"
+    conddb.addFolder(connSchema, readkeycalibpath, className='CondAttrListCollection')
+    JetTagCalib = JetTagCalibCondAlg(jettagcalibcondalg, ReadKeyCalibPath=readkeycalibpath, HistosKey = histoskey, taggers = Taggers, channelAliases = BTaggingFlags.CalibrationChannelAliases, IP2D_TrackGradePartitions = grades, RNNIP_NetworkConfig = BTaggingFlags.RNNIPConfig)
+    condSeq += JetTagCalib
+
+
+    if ConfInstance._name == "Trig":
+      readkeycalibpath = "/GLOBAL/TrigBTagCalib/RUN12"
+      connSchema = "GLOBAL_OFL"
+      if globalflags.DataSource()=='data':
+        connSchema = "GLOBAL"
+        readkeycalibpath = readkeycalibpath.replace("/GLOBAL/TrigBTagCalib","/GLOBAL/Onl/TrigBTagCalib")
+      Taggers = BTaggingFlags.TriggerTaggers
+      jettagcalibcondalg += "_Trig"
+      histoskey = "TrigJetTagCalibHistosKey"
+      conddb.addFolder(connSchema, readkeycalibpath, className='CondAttrListCollection')
+      JetTagCalib = JetTagCalibCondAlg(jettagcalibcondalg, ReadKeyCalibPath=readkeycalibpath, HistosKey = histoskey, taggers = Taggers, channelAliases = BTaggingFlags.CalibrationChannelAliases, IP2D_TrackGradePartitions = grades, RNNIP_NetworkConfig = BTaggingFlags.RNNIPConfig)
+      #JetTagCalib.OutputLevel=2
+      condSeq += JetTagCalib
+      
+    return True
+
+
 def SetupJetCollection(JetCollection, TaggerList=[], SetupScheme="Default", ConfInstance=None):
   """General function which can setup up a default B-Tagging configuration. Returns True if successful. Returns False if B-Tagging has
   been disabled for some reason. Also calls Initiate if needed. The function does nothing (and returns True) if a configuration for a given
@@ -624,7 +659,6 @@ def SetupJetCollectionTrig(JetCollection, TaggerList, ConfInstance = None):
   if ConfInstance is None:
     from BTagging.BTaggingConfiguration import getConfiguration
     ConfInstance = getConfiguration()
-
   from AthenaCommon.AppMgr import ToolSvc
 
   # -- setup basic b-tagging tool for this jet collection
@@ -656,46 +690,50 @@ def SetupJetCollectionTrig(JetCollection, TaggerList, ConfInstance = None):
 
   #Now the basic taggers:
   if 'IP2D' in TaggerList:
-    ConfInstance.addTool('IP2DTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'IP2DNeg' in TaggerList:
-    ConfInstance.addTool('IP2DNegTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    ConfInstance.addTool("IP2DTag_Trig", ToolSvc, 'BTagTrackToJetAssociator', JetCollection)
+  #if 'IP2DNeg' in TaggerList:
+    #ConfInstance.addTool('IP2DNegTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
   if 'IP3D' in TaggerList:
-    ConfInstance.addTool('IP3DTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'IP3DNeg' in TaggerList:
-    ConfInstance.addTool('IP3DNegTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    ConfInstance.addTool('IP3DTag_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'IP3DNeg' in TaggerList:
+  #  ConfInstance.addTool('IP3DNegTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
   if 'SV1' in TaggerList:
-    ConfInstance.addTool('SV1Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'SV1Flip' in TaggerList:
-    ConfInstance.addTool('SV1FlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'SV0' in TaggerList:
-    ConfInstance.addTool('SV0Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-
-  if 'MultiSVbb1' in TaggerList:
-    ConfInstance.addTool('MultiSVbb1Tag', ToolSvc, 'BTagTrackToJetAssociatorBB', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'MultiSVbb2' in TaggerList:
-    ConfInstance.addTool('MultiSVbb2Tag', ToolSvc, 'BTagTrackToJetAssociatorBB', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-
-  if 'JetFitterNN' in TaggerList:
-    ConfInstance.addTool('JetFitterTagNN', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-
-  if 'JetFitterCOMBNN' in TaggerList:
-    ConfInstance.addTool('JetFitterTagCOMBNN', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-
-  if 'JetFitterNNFlip' in TaggerList:
-    ConfInstance.addTool('JetFitterTagNNFlip', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-    if 'IP3DNeg' in TaggerList:
-      ConfInstance.addTool('JetFitterTagCOMBNNIP3DNeg', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-
-  if 'MV1' in TaggerList:
-    ConfInstance.addTool('MV1Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'MV1c' in TaggerList:
-    ConfInstance.addTool('MV1cTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'MV1cFlip' in TaggerList:
-    ConfInstance.addTool('MV1cFlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'MV1Flip' in TaggerList:
-    ConfInstance.addTool('MV1FlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-  if 'JetVertexCharge' in TaggerList:   #LC FIXME
-    ConfInstance.addTool('JetVertexCharge', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    ConfInstance.addTool('SV1Tag_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    ConfInstance.addTool('JetFitterTagNN_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'JetFitterNN' in TaggerList:
+  #  ConfInstance.addTool('JetFitterTagNN_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'SV1Flip' in TaggerList:
+  #  ConfInstance.addTool('SV1FlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'SV0' in TaggerList:
+  #  ConfInstance.addTool('SV0Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'MultiSVbb1' in TaggerList:
+  #  ConfInstance.addTool('MultiSVbb1Tag', ToolSvc, 'BTagTrackToJetAssociatorBB', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'MultiSVbb2' in TaggerList:
+  #  ConfInstance.addTool('MultiSVbb2Tag', ToolSvc, 'BTagTrackToJetAssociatorBB', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'JetFitterNN' in TaggerList:
+  #  ConfInstance.addTool('JetFitterTagNN', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'JetFitterCOMBNN' in TaggerList:
+  #  ConfInstance.addTool('JetFitterTagCOMBNN', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'JetFitterNNFlip' in TaggerList:
+  #  ConfInstance.addTool('JetFitterTagNNFlip', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #  if 'IP3DNeg' in TaggerList:
+  #    ConfInstance.addTool('JetFitterTagCOMBNNIP3DNeg', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+
+  #if 'MV1' in TaggerList:
+  #  ConfInstance.addTool('MV1Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'MV1c' in TaggerList:
+  #  ConfInstance.addTool('MV1cTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'MV1cFlip' in TaggerList:
+  #  ConfInstance.addTool('MV1cFlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'MV1Flip' in TaggerList:
+  #  ConfInstance.addTool('MV1FlipTag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #if 'JetVertexCharge' in TaggerList:   #LC FIXME
+  #  ConfInstance.addTool('JetVertexCharge', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
 
   # Activate MultivariateTagManager if any of its taggers are in TaggerList
   #list of mvtm taggers that are also in TaggerList
@@ -704,7 +742,7 @@ def SetupJetCollectionTrig(JetCollection, TaggerList, ConfInstance = None):
 
   #set up MVTM if any of its taggers are active
   if (mvtm_active_taggers):
-    MVTM = ConfInstance.addTool('MultivariateTagManager', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    MVTM = ConfInstance.addTool('MultivariateTagManager_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
     if 'RNNIP' in TaggerList:
       MVTM.arbitraryAuxData = BTaggingFlags.MultivariateTagManagerAuxBranches
     else:
@@ -712,21 +750,21 @@ def SetupJetCollectionTrig(JetCollection, TaggerList, ConfInstance = None):
 
   #set up MVTMFlip
   if (mvtm_active_flip_taggers):
-    MVTMFlip = ConfInstance.addTool('MultivariateFlipTagManager', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    MVTMFlip = ConfInstance.addTool('MultivariateFlipTagManager_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
 
-  if 'TagNtupleDumper' in TaggerList:
-    tag = ConfInstance.addTool('TagNtupleDumper', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
-    MVTM.MVTagToolList.append(tag)
+  #if 'TagNtupleDumper' in TaggerList:
+  #  tag = ConfInstance.addTool('TagNtupleDumper', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+  #  MVTM.MVTagToolList.append(tag)
 
   #add all the taggers that use MVTM
   for mvtm_tagger in mvtm_active_taggers:
-    tag = ConfInstance.addTool(mvtm_tagger+'Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    tag = ConfInstance.addTool(mvtm_tagger+'Tag_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
     if tag not in MVTM.MVTagToolList:
       MVTM.MVTagToolList.append(tag)
 
   #add all the flip taggers that use MVTM
   for mvtm_tagger in mvtm_active_flip_taggers:
-    tag = ConfInstance.addTool(mvtm_tagger+'Tag', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
+    tag = ConfInstance.addTool(mvtm_tagger+'Tag_Trig', ToolSvc, 'BTagTrackToJetAssociator', JetCollection, Verbose = BTaggingFlags.OutputLevel < 3)
     if tag not in MVTMFlip.MVTagToolList:
       MVTMFlip.MVTagToolList.append(tag)
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2Tag.py
index bc28b320b8126b2dda819c0d1cb9aae6263090c4..e3f09fa3924e8e312957ad789ee89c846ff0a30f 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2Tag.py
@@ -7,12 +7,10 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2Tag = { 'IsATagger'          : True,
                'DependsOn'          : ['AtlasExtrapolator',
                                        'BTagTrackToVertexTool',
-                                       'BTagCalibrationBrokerTool',
                                        'IP3DTag',
                                        'JetFitterTagCOMBNN',
                                        'SV1Tag'],
                'CalibrationTaggers' : ['MV2',],
-               'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                'ToolCollection'     : 'MV2Tag' }
 
 def toolMV2Tag(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c100Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c100Tag.py
index 36749e6c69a2d95ab6d3fb757a632c93c51340e4..1d9a68c00838882a4a60ce80c731e6e30d0df77a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c100Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c100Tag.py
@@ -7,10 +7,8 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2c100Tag = { 'IsATagger'          : False,#True,
                   'xAODBaseName'       : 'MV2c100',
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : ['MV2c100',],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : 'MV2c100Tag'}
 
 def toolMV2c100Tag(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10Tag.py
index 25f519551ad03d2c7b46dfdfb81b37983784a57f..6dc9a03afe35ca2ae1eb3698200d8dbccaa95f46 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10Tag.py
@@ -7,10 +7,8 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2c10Tag = { 'IsATagger'          : False,#True,
                   'xAODBaseName'       : 'MV2c10',
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : ['MV2c10',],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : 'MV2c10Tag'}
 
 def toolMV2c10Tag(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10TrigTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10TrigTag.py
new file mode 100644
index 0000000000000000000000000000000000000000..b4d2708d442b824413614e978701165b70aca0a7
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10TrigTag.py
@@ -0,0 +1,49 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for MV2c10Tag
+# Author: Wouter van den Wollenberg (2013-2014)
+from BTagging.BTaggingFlags import BTaggingFlags
+
+metaMV2c10Tag_Trig = { 'IsATagger'          : False,#True,
+                  'xAODBaseName'       : 'MV2c10',
+                  'DependsOn'          : ['AtlasExtrapolator',
+                                          'BTagTrackToVertexTool'],
+                  'CalibrationTaggers' : ['MV2c10',],
+                  'ToolCollection'     : 'MV2c10Tag_Trig'}
+
+def toolMV2c10Tag_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a MV2c10Tag tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    Runmodus                            default: BTaggingFlags.Runmodus
+    taggerName                          default: "MV2c10"
+    taggerNameBase                      default: "MV2c10"
+    forceMV2CalibrationAlias            default: BTaggingFlags.ForceMV2CalibrationAlias
+    MV2CalibAlias                       default: BTaggingFlags.MV2CalibAlias
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    from BTagging.MV2defaultValues import default_values
+    from BTagging.MV2defaultValues import MVTM_varNames
+
+
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'Runmodus'                         : BTaggingFlags.Runmodus,
+                     'taggerName'                       : 'MV2c10',
+                     'taggerNameBase'                   : 'MV2c10',
+                     'forceMV2CalibrationAlias'         : BTaggingFlags.ForceMV2CalibrationAlias,
+                     'MV2CalibAlias'                    : BTaggingFlags.MV2CalibAlias,
+                     'defaultvals'                      : default_values,
+                     'MVTMvariableNames'                : MVTM_varNames,
+                     'HistosKey'                        : 'TrigJetTagCalibHistosKey',
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__MV2Tag
+    return Analysis__MV2Tag(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10muTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10muTag.py
index 2276ff7f029d0309ca58a6a06310d7d7675a4ced..be4ed6ef4e1bb755b8f5d9f05dc75174f5a90443 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10muTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10muTag.py
@@ -7,11 +7,9 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2c10muTag = { 'IsATagger'          : False,#True,
                   'xAODBaseName'       : 'MV2c10mu',
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'SoftMuonTag',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : ['MV2c10mu',],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : 'MV2c10muTag'}
 
 def toolMV2c10muTag(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10rnnTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10rnnTag.py
index c72f0e42a7adc53cb768db8cd12064f936d6ecf6..1ec1a94648662a5063180e847ea58e2cc14ac120 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10rnnTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2c10rnnTag.py
@@ -7,11 +7,9 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2c10rnnTag = { 'IsATagger'          : False,#True,
                   'xAODBaseName'       : 'MV2c10rnn',
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'SoftMuonTag',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : ['MV2c10rnn',],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : 'MV2c10rnnTag'}
 
 def toolMV2c10rnnTag(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2cl100Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2cl100Tag.py
index 0531ddf12de4b5c545f824f26b509d99b2e517c1..129b5719fb2aa66d064ca2d9e0a46599a2def98e 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2cl100Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MV2cl100Tag.py
@@ -7,10 +7,8 @@ from BTagging.BTaggingFlags import BTaggingFlags
 metaMV2cl100Tag = { 'IsATagger'          : False,#True,
                   'xAODBaseName'       : 'MV2cl100',
                   'DependsOn'          : ['AtlasExtrapolator',
-                                          'BTagCalibrationBrokerTool',
                                           'BTagTrackToVertexTool'],
                   'CalibrationTaggers' : ['MV2cl100',],
-                  'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                   'ToolCollection'     : 'MV2cl100Tag'}
 
 def toolMV2cl100Tag(name, useBTagFlagsDefaults = True, **options):
@@ -46,4 +44,4 @@ def toolMV2cl100Tag(name, useBTagFlagsDefaults = True, **options):
             options.setdefault(option, defaults[option])
     options['name'] = name
     from JetTagTools.JetTagToolsConf import Analysis__MV2Tag
-    return Analysis__MV2Tag(**options)
\ No newline at end of file
+    return Analysis__MV2Tag(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb1Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb1Tag.py
index 4bf5ab630bd242bfaa2d20229dd1e255f9f81307..7fe3734ae72cd6c9a052af9736f9edf781ffcb74 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb1Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb1Tag.py
@@ -8,10 +8,8 @@ metaMultiSVbb1Tag = { 'IsATagger'         : True,
                       'xAODBaseName'      : 'MSV',
                       'DependsOn'         : ['AtlasExtrapolator',
                                              'BTagTrackToVertexTool',
-                                             'BTagCalibrationBrokerTool',
                                              'InDetVKalMultiVxInJetTool',],
                       'CalibrationTaggers' : ['MultiSVbb1',],
-                      'PassByPointer'     : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                       'JetCollectionList' : 'jetCollectionList',
                       'DefaultTracks'     : 'BTagTrackToJetAssociatorBB',
                       'ToolCollection'    : 'MultiSVbb1Tag' }
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb2Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb2Tag.py
index 8dbc68264abc0be4a5b44dd0898fda8e16a89a94..feadd77cbb72c9fe5a4b9b41d63796164681b52a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb2Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultiSVbb2Tag.py
@@ -8,10 +8,8 @@ metaMultiSVbb2Tag = { 'IsATagger'         : True,
                       'xAODBaseName'      : 'MSV',
                       'DependsOn'         : ['AtlasExtrapolator',
                                              'BTagTrackToVertexTool',
-                                             'BTagCalibrationBrokerTool',
                                              'InDetVKalMultiVxInJetTool',],
                       'CalibrationTaggers' : ['MultiSVbb2',],
-                      'PassByPointer'     : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                       'JetCollectionList' : 'jetCollectionList',
                       'DefaultTracks'     : 'BTagTrackToJetAssociatorBB',
                       'ToolCollection'    : 'MultiSVbb2Tag' }
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultivariateTrigTagManager.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultivariateTrigTagManager.py
new file mode 100644
index 0000000000000000000000000000000000000000..c450b5b4d5b01abfb539bee45b994dcca2e5ffe1
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_MultivariateTrigTagManager.py
@@ -0,0 +1,42 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for MultivariateTagManager
+# Author: Marie Lanfermann (October 2015)
+from BTagging.BTaggingFlags import BTaggingFlags
+
+metaMultivariateTagManager_Trig = { 'IsATagger'          : True,
+              'DependsOn'          : ['AtlasExtrapolator',
+                                      'BTagTrackToVertexTool',
+                                      'IP2DTag_Trig',
+                                      'IP3DTag_Trig',                                      
+                                      'NewJetFitterVxFinder',
+                                      'SV1Tag_Trig'],
+              'ToolCollection'     : 'MultivariateTagManager_Trig' }
+
+def toolMultivariateTagManager_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a MultivariateTagManager tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    inputSV0SourceName                  default: "SV0"
+    inputSV1SourceName                  default: "SV1"
+    inputIP2DSourceName                 default: "IP2D"
+    inputIP3DSourceName                 default: "IP3D"
+    inputJFSourceName                   default: "JetFitter"
+
+    input:             name: The name of the tool (should be unique).
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'inputSV0SourceName'               : 'SV0',
+                     'inputSV1SourceName'               : 'SV1',
+                     'inputIP2DSourceName'              : 'IP2D',
+                     'inputIP3DSourceName'              : 'IP3D',
+                     'inputJFSourceName'                : 'JetFitter',
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__MultivariateTagManager
+    return Analysis__MultivariateTagManager(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterCollection.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterCollection.py
index d8fbb5cef89b269a3dc96cb49f0fa06b686b27b9..bfcd1ee48679d03586ea7715f7fc583fc69306cc 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterCollection.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterCollection.py
@@ -445,17 +445,15 @@ def toolNeuralNetworkToHistoToolNN(name, useBTagFlagsDefaults = True, **options)
 #-------------------------------------------------------------------------
 
 metaJetFitterNNTool = { 'CalibrationTaggers' : ['JetFitter',],
-                        'DependsOn'          : ['NeuralNetworkToHistoToolNN',
-                                                'BTagCalibrationBrokerTool'],
-                        'PassByPointer'      : {'calibrationTool'          : 'BTagCalibrationBrokerTool',
-                                                'NeuralNetworkToHistoTool' : 'NeuralNetworkToHistoToolNN'},
+                        'DependsOn'          : ['NeuralNetworkToHistoToolNN'],
+                        'PassByPointer'      : {'NeuralNetworkToHistoTool' : 'NeuralNetworkToHistoToolNN'},
                         'ToolCollection'     : 'JetFitterCollection' }
 
 def _slim_jf_options(options):
     new_opts = {}
     removed = set(
         ['CalibrationDirectory', 'CalibrationSubDirectory',
-         'calibrationTool', 'NeuralNetworkToHistoTool'])
+         'NeuralNetworkToHistoTool'])
     kept = set(options) - removed
     for optname in kept:
         new_opts[optname] = options[optname]
@@ -586,10 +584,8 @@ def toolNeuralNetworkToHistoToolCOMBNN(name, useBTagFlagsDefaults = True, **opti
 #-----------------------------------------------------------------------------
 
 metaJetFitterCOMBNNTool = { 'CalibrationTaggers' : ['JetFitter',],
-                            'DependsOn'          : ['NeuralNetworkToHistoToolCOMBNN',
-                                                    'BTagCalibrationBrokerTool'],
-                            'PassByPointer'      : {'calibrationTool'          : 'BTagCalibrationBrokerTool',
-                                                    'NeuralNetworkToHistoTool' : 'NeuralNetworkToHistoToolCOMBNN'},
+                            'DependsOn'          : ['NeuralNetworkToHistoToolCOMBNN'],
+                            'PassByPointer'      : {'NeuralNetworkToHistoTool' : 'NeuralNetworkToHistoToolCOMBNN'},
                             'ToolCollection'     : 'JetFitterCollection' }
 
 def toolJetFitterCOMBNNTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterTrigCollection.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterTrigCollection.py
new file mode 100644
index 0000000000000000000000000000000000000000..c785a0bd656c8cc5fa8ed78f2bc43fee7dd365bc
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_NewJetFitterTrigCollection.py
@@ -0,0 +1,478 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for NewJetFitterTag
+# Author: Wouter van den Wollenberg (2013-2014)
+# Because there are some many different JetFitter tools floating around
+# now, this file was created to contain them all.
+from BTagging.BTaggingFlags import BTaggingFlags
+
+
+metaInDetImprovedJetFitterTrackSelectorTool_Trig = { 'DependsOn'      : ['JetFitterExtrapolator',],
+                                                'PassByPointer'  : {'Extrapolator' : 'JetFitterExtrapolator'},
+                                                'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolInDetImprovedJetFitterTrackSelectorTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a InDetImprovedJetFitterTrackSelectorTool tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    pTMin                               default: 500.0
+    IPd0Max                             default: 7.0
+    IPz0Max                             default: 10.0
+    sigIPd0Max                          default: 0.35
+    sigIPz0Max                          default: 2.5
+    etaMax                              default: 9999.0
+    useTrackSummaryInfo                 default: True
+    nHitBLayer                          default: 0
+    nHitPix                             default: 1
+    nHitSct                             default: 4
+    nHitSi                              default: 7
+    nHitTrt                             default: 0
+    useSharedHitInfo                    default: False
+    useTrackQualityInfo                 default: True
+    fitChi2OnNdfMax                     default: 3.5
+    TrackSummaryTool                    default: None
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'pTMin'                        : 500.0,
+                     'IPd0Max'                      : 7.0,
+                     'IPz0Max'                      : 10.0,
+                     'sigIPd0Max'                   : 0.35,
+                     'sigIPz0Max'                   : 2.5,
+                     'etaMax'                       : 9999.0,
+                     'useTrackSummaryInfo'          : True,
+                     'nHitBLayer'                   : 0,
+                     'nHitPix'                      : 1,
+                     'nHitSct'                      : 4,
+                     'nHitSi'                       : 7,
+                     'nHitTrt'                      : 0,
+                     'useSharedHitInfo'             : False,
+                     'useTrackQualityInfo'          : True,
+                     'fitChi2OnNdfMax'              : 3.5,
+                     'TrackSummaryTool'             : None }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from InDetTrackSelectorTool.InDetTrackSelectorToolConf import InDet__InDetDetailedTrackSelectorTool
+    return InDet__InDetDetailedTrackSelectorTool(**options)
+
+#--------------------------------------------------------------------------
+
+metaJetFitterFullLinearizedTrackFactory_Trig = {'DependsOn'     : ['JetFitterExtrapolator',],
+                                           'PassByPointer' : {'Extrapolator' : 'JetFitterExtrapolator' },
+                                           'ToolCollection': 'JetFitterCollection_Trig' }
+
+def toolJetFitterFullLinearizedTrackFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterFullLinearizedTrackFactory tool and returns it.
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                             Note however that this tool has no BTaggingFlags defaults; the option is
+                             here only for consistency.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    options['name'] = name
+    from TrkVertexFitterUtils.TrkVertexFitterUtilsConf import Trk__FullLinearizedTrackFactory
+    return Trk__FullLinearizedTrackFactory(**options)
+
+#--------------------------------------------------------------------------
+
+metaJetFitterMode3dTo1dFinder_Trig = { 'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolJetFitterMode3dTo1dFinder_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterMode3dTo1dFinder tool and returns it.
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                             Note however that this tool has no BTaggingFlags defaults; the option is
+                             here only for consistency.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    options['name'] = name
+    from TrkVertexSeedFinderUtils.TrkVertexSeedFinderUtilsConf import Trk__Mode3dTo1dFinder
+    return Trk__Mode3dTo1dFinder(**options)
+
+#--------------------------------------------------------------------------
+
+metaJetFitterSequentialVertexSmoother_Trig = { 'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolJetFitterSequentialVertexSmoother_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterSequentialVertexSmoother tool and returns it.
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                             Note however that this tool has no BTaggingFlags defaults; the option is
+                             here only for consistency.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    options['name'] = name
+    from TrkVertexFitters.TrkVertexFittersConf import Trk__SequentialVertexSmoother
+    return Trk__SequentialVertexSmoother(**options)
+
+#--------------------------------------------------------------------------
+
+metaVxInternalEdmFactory_Trig = {'DependsOn'     : ['JetFitterFullLinearizedTrackFactory_Trig',],
+                            'PassByPointer' : {'LinearizedTrackFactory' : 'JetFitterFullLinearizedTrackFactory_Trig' },
+                            'ToolCollection': 'JetFitterCollection_Trig' }
+
+def toolVxInternalEdmFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a VxInternalEdmFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'             : BTaggingFlags.OutputLevel, }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from TrkVxEdmCnv.TrkVxEdmCnvConf import Trk__VxCandidateXAODVertex
+    return Trk__VxCandidateXAODVertex(**options)
+
+#--------------------------------------------------------------------------
+
+metaJetFitterSequentialVertexFitter_Trig = { 'DependsOn'      : ['JetFitterSequentialVertexSmoother_Trig',
+                                                            'JetFitterFullLinearizedTrackFactory_Trig'] ,
+                                        'PassByPointer'  : {'VertexSmoother'         : 'JetFitterSequentialVertexSmoother',
+                                                            'LinearizedTrackFactory' : 'JetFitterFullLinearizedTrackFactory_Trig'},
+
+                                        'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolJetFitterSequentialVertexFitter_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterSequentialVertexFitter tool and returns it.
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                             Note however that this tool has no BTaggingFlags defaults; the option is
+                             here only for consistency.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    options['name'] = name
+    from TrkVertexFitters.TrkVertexFittersConf import Trk__SequentialVertexFitter
+    return Trk__SequentialVertexFitter(**options)
+
+#--------------------------------------------------------------------------
+
+metaImprovedJetFitterInitializationHelper_Trig = { 'DependsOn'      : ['JetFitterFullLinearizedTrackFactory_Trig',],
+                                              'PassByPointer'  : {'LinearizedTrackFactory' : 'JetFitterFullLinearizedTrackFactory_Trig' },
+                                              'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolImprovedJetFitterInitializationHelper_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a ImprovedJetFitterInitializationHelper tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from TrkJetVxFitter.TrkJetVxFitterConf import Trk__JetFitterInitializationHelper
+    return Trk__JetFitterInitializationHelper(**options)
+
+#--------------------------------------------------------------------------
+
+metaTrkDistanceFinderNeutralNeutral_Trig = { 'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolTrkDistanceFinderNeutralNeutral_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a TrkDistanceFinderNeutralNeutral tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from TrkJetVxFitter.TrkJetVxFitterConf import Trk__TrkDistanceFinderNeutralNeutral
+    return Trk__TrkDistanceFinderNeutralNeutral(**options)
+
+#--------------------------------------------------------------------------
+
+metaTrkDistanceFinderNeutralCharged_Trig = { 'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolTrkDistanceFinderNeutralCharged_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a TrkDistanceFinderNeutralCharged tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel' : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from TrkJetVxFitter.TrkJetVxFitterConf import Trk__TrkDistanceFinderNeutralCharged
+    return Trk__TrkDistanceFinderNeutralCharged(**options)
+
+#--------------------------------------------------------------------------
+
+metaImprovedJetFitterRoutines_Trig = { 'DependsOn'      : ['ImprovedJetFitterInitializationHelper_Trig',
+                                                      'TrkDistanceFinderNeutralNeutral_Trig',
+                                                      'TrkDistanceFinderNeutralCharged_Trig'],
+                                  'PassByPointer'  : {'JetFitterInitializationHelper'         : 'ImprovedJetFitterInitializationHelper_Trig',
+                                                      'JetFitterMinimumDistanceFinderNeutral' : 'TrkDistanceFinderNeutralNeutral_Trig',
+                                                      'JetFitterMinimumDistanceFinder'        : 'TrkDistanceFinderNeutralCharged_Trig' },
+                                  'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolImprovedJetFitterRoutines_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a ImprovedJetFitterRoutines tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    BeFast                              default: False
+    maxDRshift                          default: 0.0
+    noPrimaryVertexRefit                default: False
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'          : BTaggingFlags.OutputLevel,
+                     'BeFast'               : False,
+                     'maxDRshift'           : 0.0,
+                     'noPrimaryVertexRefit' : False }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from TrkJetVxFitter.TrkJetVxFitterConf import Trk__JetFitterRoutines
+    return Trk__JetFitterRoutines(**options)
+
+#--------------------------------------------------------------------------
+
+metaInDetJetFitterUtils_Trig = { 'DependsOn'      : ['JetFitterFullLinearizedTrackFactory_Trig',
+                                                'JetFitterExtrapolator'],
+                            'PassByPointer'  : {'LinearizedTrackFactory' : 'JetFitterFullLinearizedTrackFactory_Trig',
+                                               'Extrapolator'           : 'JetFitterExtrapolator' },
+                            'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolInDetJetFitterUtils_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a InDetJetFitterUtils tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'          : BTaggingFlags.OutputLevel }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from InDetSecVxFinderTool.InDetSecVxFinderToolConf import InDet__InDetJetFitterUtils
+    return InDet__InDetJetFitterUtils(**options)
+
+#--------------------------------------------------------------------------
+
+metaNewJetFitterVxFinder_Trig = { 'IsAVertexFinder' : True,
+                             'VertexFinderxAODBaseName' : 'JetFitter',
+                             'VertexFinderPassByPointer': {'JetFitterVariableFactory' : 'JetFitterVariablesFactory_Trig' },
+                             'DependsOn'       : ['BTagTrackToVertexTool',
+                                                  'InDetJetFitterUtils_Trig',
+                                                  'ImprovedJetFitterRoutines_Trig',
+                                                  'TrkDistanceFinderNeutralCharged_Trig',
+                                                  'TrkDistanceFinderNeutralNeutral_Trig',
+                                                  'ImprovedJetFitterInitializationHelper_Trig',
+                                                  'JetFitterSequentialVertexFitter_Trig',
+                                                  'JetFitterSequentialVertexSmoother_Trig',
+                                                  'JetFitterMode3dTo1dFinder_Trig',
+                                                  'InDetImprovedJetFitterTrackSelectorTool_Trig',
+                                                  'JetFitterExtrapolator',
+                                                  'JetFitterFullLinearizedTrackFactory_Trig',
+                                                  'JetFitterVariablesFactory_Trig',
+                                                  'VxInternalEdmFactory_Trig'],
+                             'PassByPointer'    : { 'Mode3dFinder'                  : 'JetFitterMode3dTo1dFinder_Trig',
+                                                    'JetFitterInitializationHelper' : 'ImprovedJetFitterInitializationHelper_Trig',
+                                                    'TrackSelector'                 : 'InDetImprovedJetFitterTrackSelectorTool_Trig',
+                                                    'InDetJetFitterUtils'           : 'InDetJetFitterUtils_Trig',
+                                                    'Extrapolator'                  : 'JetFitterExtrapolator',
+                                                    'SequentialVertexFitter'        : 'JetFitterSequentialVertexFitter_Trig',
+                                                    'JetFitterRoutines'             : 'ImprovedJetFitterRoutines_Trig',
+                                                    'VertexEdmFactory'              : 'VxInternalEdmFactory_Trig' },
+                             'ToolCollection'   : 'JetFitterCollection_Trig' }
+
+def toolNewJetFitterVxFinder_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a NewJetFitterVxFinder tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    VxPrimaryContainer                  default: BTaggingFlags.PrimaryVertexCollectionName
+    MaxNumDeleteIterations              default: 30
+    VertexProbCut                       default: 0.001
+    MaxClusteringIterations             default: 30
+    VertexClusteringProbabilityCut      default: 0.005
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        if not 'InDetKeys' in dir():
+            from InDetRecExample.InDetKeys import InDetKeys
+        defaults = { 'OutputLevel'                         : BTaggingFlags.OutputLevel,
+                     'VxPrimaryContainer'                  : BTaggingFlags.PrimaryVertexCollectionName,
+                     'MaxNumDeleteIterations'              : 30,
+                     'VertexProbCut'                       : 0.001,
+                     'MaxClusteringIterations'             : 30,
+                     'VertexClusteringProbabilityCut'      : 0.005 }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from InDetSecVxFinderTool.InDetSecVxFinderToolConf import InDet__InDetImprovedJetFitterVxFinder
+    return InDet__InDetImprovedJetFitterVxFinder(**options)
+
+#--------------------------------------------------------------------------
+
+metaJetFitterVariablesFactory_Trig = { #'PassByName'     : {'JetFitterInstance' : 'JetFitterTag',
+                                  #                    'secVxFinderName'   : 'JetFitterVxFinder' },
+                                  'ToolCollection' : 'JetFitterCollection_Trig' }
+
+def toolJetFitterVariablesFactory_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a NewJetFitterVariablesFactory tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    JetFitterInstance                   default: "JetFitterTag"
+    secVxFinderName                     default: "JetFitterVxFinder"
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'            : BTaggingFlags.OutputLevel,
+                     'JetFitterInstance'      : 'JetFitterTag',
+                     'secVxFinderName'        : 'JetFitterVxFinder' }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__JetFitterVariablesFactory
+    return Analysis__JetFitterVariablesFactory(**options)
+
+#-------------------------------------------------------------------------
+
+metaJetFitterNNTool_Trig = { 'CalibrationTaggers' : ['JetFitter',],
+                        'DependsOn'          : ['NeuralNetworkToHistoToolNN'],
+                        'PassByPointer'      : {'NeuralNetworkToHistoTool' : 'NeuralNetworkToHistoToolNN'},
+                        'ToolCollection'     : 'JetFitterCollection_Trig' }
+
+def _slim_jf_options(options):
+    new_opts = {}
+    removed = set(
+        ['CalibrationDirectory', 'CalibrationSubDirectory',
+         'NeuralNetworkToHistoTool'])
+    kept = set(options) - removed
+    for optname in kept:
+        new_opts[optname] = options[optname]
+    return new_opts
+
+def toolJetFitterNNTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterNNTool tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    CalibrationDirectory                default: "JetFitter"
+    CalibrationSubDirectory             default: "NeuralNetwork"
+    useCombinedIPNN                     default: False
+    usePtCorrectedMass                  default: True
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'useCombinedIPNN'                  : False,
+                     'CalibrationDirectory'             : 'JetFitter',
+                     'CalibrationSubDirectory'          : 'NeuralNetwork',
+                     'usePtCorrectedMass'               : True, }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__JetFitterNNTool
+    from JetTagTools.JetTagToolsConf import Analysis__JetFitterInputWriter
+    if BTaggingFlags.RunJetFitterNNTool:
+        return Analysis__JetFitterNNTool(**options)
+    else:
+        return Analysis__JetFitterInputWriter(**_slim_jf_options(options))
+
+#-------------------------------------------------------------------------
+
+metaJetFitterTagNN_Trig = { 'IsATagger'         : True,
+                       'xAODBaseName'      : 'JetFitter',
+                       'DependsOn'         : ['AtlasExtrapolator',
+                                              'BTagTrackToVertexTool',
+                                              'NewJetFitterVxFinder',
+                                              'JetFitterNNTool',
+                                              'NeuralNetworkToHistoToolNN',
+                                              'JetFitterNtupleWriterNN'],
+                       'PassByPointer'     : { 'jetfitterClassifier'       : 'JetFitterNNTool',
+                                               'jetfitterNtupleWriter'     : 'JetFitterNtupleWriterNN' },
+                       'JetCollectionList' : 'jetCollectionList',
+                       'ToolCollection'    : 'JetFitterCollection_Trig' }
+
+def toolJetFitterTagNN_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a JetFitterTagNN tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    Runmodus                            default: BTaggingFlags.Runmodus
+    jetCollectionList                   default: BTaggingFlags.Jets
+    SecVxFinderName                     default: "JetFitter"
+    useForcedCalibration                default: False
+    ipinfoTaggerName                    default: ""
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'Runmodus'                         : BTaggingFlags.Runmodus,
+                     'jetCollectionList'                : BTaggingFlags.Jets,
+                     'SecVxFinderName'                  : 'JetFitter',
+                     'useForcedCalibration'             : False,
+                     'ipinfoTaggerName'                 : "",
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__JetFitterTag
+    return Analysis__JetFitterTag(**options)
+
+#-------------------------------------------------------------------------
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_RNNIPTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_RNNIPTag.py
index dd600b9e4ab50978b6760efd179cb7eca8f9557d..6a2f1f18e0cb0d1eb40788143a768f33c9055114 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_RNNIPTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_RNNIPTag.py
@@ -13,7 +13,6 @@ def buildRNNIP(basename, is_flipped=False, calibration=None):
             'xAODBaseName'      : basename,
             'CalibrationTaggers' : [cal_dir],
             'DependsOn'         : ['AtlasExtrapolator',
-                                   'BTagCalibrationBrokerTool',
                                    'BTagTrackToVertexTool',
                                    'InDetVKalVxInJetTool',
                                    'BTagTrackToVertexIPEstimator',
@@ -26,7 +25,6 @@ def buildRNNIP(basename, is_flipped=False, calibration=None):
             'PassByPointer'     : {
                 'SVForIPTool'                : 'SVForIPTool_IP3D',
                 'trackSelectorTool'          : 'IP3DTrackSelector',
-                'calibrationTool'            : 'BTagCalibrationBrokerTool',
                 'trackGradeFactory'          : 'IP3DDetailedTrackGradeFactory',
                 'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator'},
             'PassTracksAs'      : 'trackAssociationName',
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1Tag.py
index 01f3b3be7da0b7d4533d155b11ea8ffc120d06ee..ad5f1e684bd63915ef94795af679d8a69aa7538a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1Tag.py
@@ -11,7 +11,6 @@ metaSV1Tag = { 'IsATagger'         : True,
                                       'InDetVKalVxInJetTool',
                                       'SV1NewLikelihoodTool'],
                'PassByPointer'     : {'LikelihoodTool'  : 'SV1NewLikelihoodTool'},
-#               'PassByName'        : {'SecVxFinderName' : 'InDetVKalVxInJetTool' },
                'JetCollectionList' : 'jetCollectionList',
                'ToolCollection'    : 'SV1Tag' }
 
@@ -53,8 +52,6 @@ def toolSV1Tag(name, useBTagFlagsDefaults = True, **options):
 #-----------------------------------------------------------------
 
 metaSV1NewLikelihoodTool = { 'CalibrationTaggers' : ['SV1',],
-                             'DependsOn'          : ['BTagCalibrationBrokerTool',],
-                             'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool' },
                              'ToolCollection'     : 'SV1Tag' }
 
 def toolSV1NewLikelihoodTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1TrigTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1TrigTag.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f9d6ccb5220f3427e2839ecd19d5fd3b4e189e3
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV1TrigTag.py
@@ -0,0 +1,76 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+# Configuration functions for SV1Tag_Trig
+# Author: Wouter van den Wollenberg (2013-2014)
+from BTagging.BTaggingFlags import BTaggingFlags
+
+metaSV1Tag_Trig = { 'IsATagger'         : True,
+                   'xAODBaseName'      : 'SV1',
+                   'DependsOn'         : ['AtlasExtrapolator',
+                                          'BTagTrackToVertexTool',
+                                          'InDetVKalVxInJetTool_Trig',
+                                          'SV1NewLikelihoodTool_Trig'],
+                   'PassByPointer'     : {'LikelihoodTool'  : 'SV1NewLikelihoodTool_Trig'},
+                   'JetCollectionList' : 'jetCollectionList',
+                   'ToolCollection'    : 'SV1Tag_Trig' }
+
+def toolSV1Tag_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a SV1Tag_Trig tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    Runmodus                            default: BTaggingFlags.Runmodus
+    referenceType                       default: BTaggingFlags.ReferenceType
+    SVAlgType                           default: "SV1"
+    jetCollectionList                   default: BTaggingFlags.Jets
+    SecVxFinderName                     default: "SV1"
+    LikelihoodTool                      default: None
+    UseCHypo                            default: True
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                      : BTaggingFlags.OutputLevel,
+                     'Runmodus'                         : BTaggingFlags.Runmodus,
+                     'referenceType'                    : BTaggingFlags.ReferenceType,
+                     'SVAlgType'                        : 'SV1',
+                     'jetCollectionList'                : BTaggingFlags.Jets,
+                     'SecVxFinderName'                  : 'SV1',
+                     'LikelihoodTool'                   : None,
+                     'UseCHypo'                         : True,
+                     }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__SVTag
+    return Analysis__SVTag(**options)
+
+#---------------------------------------------------------------------
+
+metaSV1NewLikelihoodTool_Trig = { 'CalibrationTaggers' : ['SV1',],
+                                 'ToolCollection'     : 'SV1Tag_Trig' }
+
+def toolSV1NewLikelihoodTool_Trig(name, useBTagFlagsDefaults = True, **options):
+    """Sets up a SV1NewLikelihoodTool_Trig tool and returns it.
+
+    The following options have BTaggingFlags defaults:
+
+    OutputLevel                         default: BTaggingFlags.OutputLevel
+    taggerName                          default: "SV1"
+
+    input:             name: The name of the tool (should be unique).
+      useBTagFlagsDefaults : Whether to use BTaggingFlags defaults for options that are not specified.
+                  **options: Python dictionary with options for the tool.
+    output: The actual tool, which can then by added to ToolSvc via ToolSvc += output."""
+    if useBTagFlagsDefaults:
+        defaults = { 'OutputLevel'                         : BTaggingFlags.OutputLevel,
+                     'HistosKey'                           : 'TrigJetTagCalibHistosKey',
+                     'taggerName'                          : 'SV1' }
+        for option in defaults:
+            options.setdefault(option, defaults[option])
+    options['name'] = name
+    from JetTagTools.JetTagToolsConf import Analysis__NewLikelihoodTool
+    return Analysis__NewLikelihoodTool(**options)
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV2Tag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV2Tag.py
index 4c428ba6f0928e0ae47f388708b33e47b13b87e2..345f41124b2970b1f0ab6e6d3b67ab5e1d19170f 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV2Tag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SV2Tag.py
@@ -52,8 +52,6 @@ def toolSV2Tag(name, useBTagFlagsDefaults = True, **options):
 #-----------------------------------------------------------------
 
 metaSV2NewLikelihoodTool = { 'CalibrationTaggers' : ['SV2',],
-                             'DependsOn'          : ['BTagCalibrationBrokerTool',],
-                             'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool' },
                              'ToolCollection'     : 'SV2Tag' }
 
 def toolSV2NewLikelihoodTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SoftMuonTag.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SoftMuonTag.py
index c90c8ec389f082b4f5dc65e79fc217c25099c146..ad3e36c13b897256acfa9222665c25fc0cc78520 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SoftMuonTag.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTaggingConfiguration_SoftMuonTag.py
@@ -8,7 +8,6 @@ metaSoftMuonTag = { 'IsATagger'            : True,
                     'NeedsMuonAssociator'  : True,
                     'DependsOn'            : ['AtlasExtrapolator',
                                               'BTagTrackToVertexTool',
-					      'BTagCalibrationBrokerTool',
                                               'BTagFullLinearizedTrackFactory',
                                               'BTagTrackToVertexIPEstimator',
                                               'SoftMuonTagNewLikelihoodTool',
@@ -16,7 +15,6 @@ metaSoftMuonTag = { 'IsATagger'            : True,
                     'PassByPointer'        : {'LikelihoodTool'    : 'SoftMuonTagNewLikelihoodTool',
                                               'TrackToVertexIPEstimator'   : 'BTagTrackToVertexIPEstimator',
                                               'muonSelectorTool': 'MuonSelectorTool',
-					      'calibrationTool' : 'BTagCalibrationBrokerTool'
 										   },
 #                                              'TrackToVertexTool' : 'BTagTrackToVertexTool'},
                     'JetCollectionList'    : 'jetCollectionList',
@@ -55,8 +53,6 @@ def toolSoftMuonTag(name, useBTagFlagsDefaults = True, **options):
 #----------------------------------------------------------------------
 
 metaSoftMuonTagNewLikelihoodTool = { 'CalibrationTaggers' : ['SMT',],
-                                     'DependsOn'          : ['BTagCalibrationBrokerTool',],
-                                     'PassByPointer'      : {'calibrationTool' : 'BTagCalibrationBrokerTool'},
                                      'ToolCollection'     : 'SoftMuonTag' }
 
 def toolSoftMuonTagNewLikelihoodTool(name, useBTagFlagsDefaults = True, **options):
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/BTagging_jobOptions.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/BTagging_jobOptions.py
index 17d83b87b1e57b82e596ec5e4e3f0b740b618ad7..379b726c0b33c8bc411802eca755be12b3625d8c 100755
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/BTagging_jobOptions.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/share/BTagging_jobOptions.py
@@ -61,7 +61,6 @@ if not BTaggingFlags.DoNotSetupBTagging: # Temporary measure so the JetRec peopl
     topSequence = AlgSequence()
 
     for i, jet in enumerate(JetCollectionList):
-          #btagger = ConfInstance.setupJetBTaggerTool(ToolSvc, jet) #The [:-4] is not needed here; this function automatically removes trailing 'jets' or 'Jets'.
           btagger = ConfInstance.setupJetBTaggerAlg(ToolSvc, jet) #The [:-4] is not needed here; this function automatically removes trailing 'jets' or 'Jets'.
           if btagger is None:
             continue
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/CMakeLists.txt b/PhysicsAnalysis/JetTagging/JetTagCalibration/CMakeLists.txt
index a3323d66ab8440950fbc983e5e7976d35079cd6e..b82b5150682e4be7a16d448f516ef8cd05589210 100644
--- a/PhysicsAnalysis/JetTagging/JetTagCalibration/CMakeLists.txt
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/CMakeLists.txt
@@ -11,6 +11,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/StoreGate
                           GaudiKernel
                           PRIVATE
+#                          PhysicsAnalysis/JetTagging/JetTagTools
                           Database/APR/FileCatalog
                           Database/AthenaPOOL/AthenaPoolUtilities
                           Database/AthenaPOOL/PoolSvc
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondAlg.h b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondAlg.h
new file mode 100755
index 0000000000000000000000000000000000000000..2c0bb6687f92fae373284e204a22256010b8fba6
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondAlg.h
@@ -0,0 +1,137 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef JETTAGCALIBRATION_JETTAGCALIBCONDALG_H
+#define JETTAGCALIBRATION_JETTAGCALIBCONDALG_H
+
+#include "AthenaBaseComps/AthAlgorithm.h"
+#include "StoreGate/ReadCondHandleKey.h"
+#include "StoreGate/WriteCondHandleKey.h"
+
+#include "GaudiKernel/ICondSvc.h"
+
+#include "AthenaPoolUtilities/CondAttrListCollection.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
+
+#include "TFile.h"
+#include <map>
+#include <string>
+#include <utility>
+#include <set>
+
+class TH2;
+class TObject;
+class IPoolSvc;
+
+namespace Analysis {
+
+  /**
+  @ class JetTagCalibCondAlg
+
+  This class retrieves calibration histograms from COOL for the taggers.
+  A single COOL folder is defined for all the taggers.
+  Each tagger is subdivided in channels, each channel being associated to a jet type
+   (Cone4Topo, Kt6, etc).
+
+  Any further substructure (track categories, signal/background) is hidden to COOL 
+  and is defined by the actual name of the histogram.
+
+  This class holds the collection of maps between the histogram name and the pointer 
+  to the histogram, the latter being kept up-to-date with the condition algorithm mecanism.
+  All the taggers histograms are registered in initialize() method with the 
+  registerHistogram() method. 
+
+  The geometry tag corresponding to the calibrations, the type of physics events used, 
+  the tracking algorithm, etc, are all defined by a DB tag.
+
+  @author emmanuel.le.guirriec@cern.ch
+  */
+
+class JetTagCalibCondAlg : public AthAlgorithm {
+
+ public:
+
+  JetTagCalibCondAlg (const std::string& name, ISvcLocator* pSvcLocator);
+  ~JetTagCalibCondAlg();
+
+  StatusCode initialize();
+  StatusCode execute();
+  StatusCode finalize();
+
+ private:
+  void registerHistogram(const std::string& tagger, const std::string& histoname);
+  void registerHistogram(const std::string& tagger, const std::string& directory, const std::string& histoname);
+  StatusCode createHistoMap(TFile* file, JetTagCalibCondData * histos);
+  StatusCode objectTDirExists(const std::string& histname, TFile* file) const;
+  StatusCode getTObject(const std::string& histname, TFile* file, TObject*& hist) const;
+  std::vector<std::string> tokenize(std::string str, std::string delim);
+  void smoothAndNormalizeHistogram(TObject*& h, const std::string& hname);
+  void smoothASH2D(TH2* input2D, int m1, int m2); 
+  
+  void initializeIPTag();
+  void initializeIP2D();
+  void initializeIP3D();
+  void initializeSVEff(std::string);
+  void initializeSV1();
+  void initializeSV2();
+  void initializeJetFitterNN();
+  void initializeSoftMu();
+  void initializeMV2(std::string);
+  void initializeRNNIP();
+  void initializeJetVertexCharge();
+  void initializeMultiSV(std::string);
+  void initializeDL1(std::string);
+
+  SG::ReadCondHandleKey<CondAttrListCollection> m_readKey{this, "ReadKeyCalibPath", "/GLOBAL/BTagCalib/RUN12", "Key of input (raw) conditions folder of bration path"}; //   /GLOBAL/BTagCalib/Onl/RUN12 online, /GLOBAL/BTagCalib/RUN12 offline
+  SG::WriteCondHandleKey<JetTagCalibCondData> m_writeKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of output (derived) JetTag calibration data"};
+
+  ServiceHandle<ICondSvc> m_condSvc;
+  IPoolSvc* m_poolsvc;
+
+
+  std::vector< std::string > m_taggers;
+  std::unordered_map<std::string,std::string> m_directoryMap;
+  std::vector<std::vector<std::string> > m_taggersHists;
+  std::vector< std::string > m_mappedAlias;
+  std::vector< std::string > m_originalChannels;
+  /* aliases for channels: 
+  * to specifiy an alias, enter a string "channelA->channelAA" (or a list of strings)
+  * this will force to use channelAA from the DB wherever channelA was mentioned */
+  StringArrayProperty m_channelAliases;
+  std::map< std::string, std::vector<std::string> >  m_channelAliasesMultiMap;
+
+  //for IPTag
+  bool m_IPTag_useCHypo;
+  std::vector<std::string> m_IPTag_hypotheses; // hypotheses: b | u
+
+  //for IP2DTag
+  std::vector< std::string > m_IP2D_trackGradePartitions; //could be defined for each tagger
+
+  //for SV1Tag
+  bool  m_useDRJPVSV;
+
+  //for SV2Tag
+  bool m_usePtSV2;
+
+  //for Likelihood tool
+  int m_Likelihood_smoothNTimes;
+  std::vector<std::string> m_Likelihood_vetoSmoothingOf;
+
+  //for JetFitterNNTag
+  std::string m_JetFitterNN_calibrationDirectory;
+  std::string m_JetFitterNN_calibrationSubDirectory;
+  bool m_JetFitterNN_useCombinedIPNN;
+  int m_JetFitterNN_maximumRegisteredLayers;
+
+  //for RNNIP
+  // Initalize with a config name and path to a network If the
+  // network path is empty we read from the calib db Note that this
+  // won't support reading different local files for different jet
+  // collections.
+  std::map<std::string, std::string > m_RNNIP_network_cfg;
+
+  
+};
+}
+#endif // JETTAGCALIBRATION_JETTAGCALIBCONDALG_H
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.h b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.h
new file mode 100644
index 0000000000000000000000000000000000000000..83f851a3d4acd46e1eb036d0856aeba5b9f204eb
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.h
@@ -0,0 +1,63 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file JetTagCalibCondData.h
+ * @author emmanuel.le.guirriec@cern.ch
+**/
+
+#ifndef JETTAGCALIBCONDDATA_H
+#define JETTAGCALIBCONDDATA_H
+
+#include <vector>
+#include <map>
+#include "AthenaKernel/CLASS_DEF.h"
+
+
+class TObject;
+class TH1;
+
+/**
+  * @class JetTagCalibCondData
+  * Concrete class for JetTagging calibration condition data
+**/
+
+namespace Analysis {
+
+class JetTagCalibCondData {
+public:
+  // Constructor
+  JetTagCalibCondData();
+  // Destructor
+  virtual ~JetTagCalibCondData() = default;
+
+  /** Resize the data members */
+  void resize(const std::vector<std::string> sizeHisto);
+  void clear();
+  void printAliasesStatus() const; 
+  void printHistosStatus() const; 
+  std::string getChannelAlias(const std::string& originalChannel) const;
+  void addHisto(const unsigned int indexTagger, const std::string& name, TObject *);
+  void addChannelAlias(const std::string& channel, const std::string& alias);
+  TH1* retrieveHistogram(const std::string& folder, const std::string& channel, const std::string& hname) const; 
+  template <class T> T* retrieveTObject(const std::string& folder, const std::string& channel, const std::string& hname) const;
+  
+  std::string channelName(const std::string& fullHistoName) const;
+  std::string histoName(const std::string& fullHistoName) const ;
+  std::string fullHistoName(const std::string& channel, const std::string& histoName) const;
+  std::vector<std::string> tokenize(std::string str, std::string delim);
+
+private:
+  std::vector< std::map<std::string, TObject*> > m_histos;
+  std::map< std::string, std::string > m_channelAliasesMap;
+  std::vector< std::string> m_taggers;
+
+};
+}
+CLASS_DEF(Analysis::JetTagCalibCondData, 232300155, 1)
+
+#include "AthenaKernel/CondCont.h"
+CONDCONT_DEF(Analysis::JetTagCalibCondData, 197330919);
+#include "JetTagCalibration/JetTagCalibCondData.icc"
+#endif // JETTAGCALIBCONDDATA_H
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.icc b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.icc
new file mode 100755
index 0000000000000000000000000000000000000000..a65075dcfa701445504ece22bcac04c20af72780
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/JetTagCalibration/JetTagCalibCondData.icc
@@ -0,0 +1,44 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TObject.h"
+#include <string>
+#include <utility>
+#include <algorithm>
+#include "AthenaKernel/getMessageSvc.h"
+
+namespace Analysis {
+
+template <class T> T* JetTagCalibCondData::retrieveTObject(const std::string& folder, const std::string& channel, const std::string& hname) const {
+  T* h = 0;
+  std::string channelAlias = this->getChannelAlias(channel);
+  MsgStream log(Athena::getMessageSvc(), "JetTagCalibCondData");
+  log << MSG::DEBUG << "#BTAG# retrieving " << hname 
+	   << " (channel " << channel << " -> " << channelAlias << ") "
+	   << " in folder " << folder << endmsg;
+  for(unsigned int i=0;i<m_taggers.size();i++) {
+      if(folder==m_taggers[i]) {
+        std::string fname = this->fullHistoName(channelAlias,hname);
+        log << MSG::DEBUG << "#BTAG#    folder " << folder << " found in pos " << i
+            << " , retrieving " << fname << endmsg;
+        std::map<std::string, TObject*>::const_iterator mI = m_histos[i].find(fname);
+        std::map<std::string, TObject*>::const_iterator mE = m_histos[i].end();
+        if(mI!=mE) {
+          log << MSG::DEBUG << "#BTAG#    histo found: " << hname << endmsg;
+          h = dynamic_cast<T*> ( (*mI).second);
+          if(h) {
+            log << MSG::DEBUG << "#BTAG#    histo pointer is valid." << endmsg;
+          } else {
+            log << MSG::DEBUG << "#BTAG#    histo pointer is NOT valid." << endmsg;
+          }  
+          break;
+        } else {
+          log << MSG::DEBUG << "#BTAG#    histo not found in folder: " << hname << endmsg;
+        }
+     }
+  }
+  return h;
+}
+
+}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/share/JetTagCalibrationCondAlg_jobOptions.py b/PhysicsAnalysis/JetTagging/JetTagCalibration/share/JetTagCalibrationCondAlg_jobOptions.py
new file mode 100755
index 0000000000000000000000000000000000000000..336d0492ed2b8d5cfa2a7135d261f050aefbe012
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/share/JetTagCalibrationCondAlg_jobOptions.py
@@ -0,0 +1,67 @@
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
+from AthenaCommon.GlobalFlags import globalflags
+if globalflags.DataSource()=='data':
+  BTaggingFlags.CalibrationFolderRoot=BTaggingFlags.CalibrationFolderRoot.replace("/GLOBAL/BTagCalib","/GLOBAL/Onl/BTagCalib")
+  connSchema="GLOBAL"
+  message = "#BTAG# accessing online conditions DB"
+  if not athenaCommonFlags.isOnline():
+    message = message + " (via offline replica)"
+  print message
+else:
+  connSchema="GLOBAL_OFL"
+  print "#BTAG# accessing offline conditions DB"
+
+print "#BTAG# running in reco mode -> btag calibration root folder is CalibrationFolderRoot =", BTaggingFlags.CalibrationFolderRoot
+
+JetCollectionForCalib = []
+JetCollectionForCalib+= BTaggingFlags.Jets
+if "AntiKt4EMTopo" not in JetCollectionForCalib:
+  JetCollectionForCalib+=["AntiKt4EMTopo"]
+
+print "BTAG channel"
+print BTaggingFlags.CalibrationChannelAliases
+
+#IP2D
+grades= [ "0HitIn0HitNInExp2","0HitIn0HitNInExpIn","0HitIn0HitNInExpNIn","0HitIn0HitNIn",
+                  "0HitInExp", "0HitIn",
+                  "0HitNInExp", "0HitNIn",
+                  "InANDNInShared", "PixShared", "SctShared",
+                  "InANDNInSplit", "PixSplit",
+                  "Good"]
+
+from JetTagCalibration.JetTagCalibrationConf import Analysis__JetTagCalibCondAlg
+JetTagCalibrationCondAlg = Analysis__JetTagCalibCondAlg(
+  name = "JetTagCalibrationCondAlg",
+  taggers = [],
+  channels = JetCollectionForCalib,
+  channelAliases = BTaggingFlags.CalibrationChannelAliases,
+  IP2D_TrackGradePartitions = grades,
+  RNNIP_NerworkConfig = BTaggingFlags.RNNIPConfig,
+  OutputLevel = BTaggingFlags.OutputLevel
+)
+ToolSvc += JetTagCalibrationCondAlg
+theApp.Dlls+=['DetDescrCondExample','DetDescrCondTools']
+
+from IOVDbSvc.CondDB import conddb
+
+# with new scheme, only one actual COOL folder:
+folder = BTaggingFlags.CalibrationFolderRoot + 'RUN12'
+
+if BTaggingFlags.CalibrationFromLocalReplica:
+  dbname="OFLP200"
+  #For data, use COMP200 for Run 1, CONDBR2 for Run 2
+  if globalflags.DataSource()=='data':
+    dbname=conddb.dbdata
+  conddb.addFolder("","<dbConnection>sqlite://X;schema=mycool.db;dbname="+dbname+"</dbConnection> "+folder+" <tag>"+BTaggingFlags.CalibrationTag+"</tag>")
+else:
+  if BTaggingFlags.CalibrationFromCERN:
+    conddb.addFolder("","<dbConnection>oracle://ATLAS_COOLPROD;schema=ATLAS_COOLOFL_GLOBAL;dbname=OFLP200</dbConnection> "+folder+" <tag>"+BTaggingFlags.CalibrationTag+"</tag>") 
+  else: 
+    if BTaggingFlags.CalibrationTag == "":
+      conddb.addFolder(connSchema,folder) 
+    else:
+      conddb.addFolder(connSchema,folder+" <tag>"+BTaggingFlags.CalibrationTag+"</tag>") 
+
+if BTaggingFlags.OutputLevel < 3: 
+  print JetTagCalibrationCondAlg
+
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/CalibrationBroker.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/CalibrationBroker.cxx
index 8190d2c619915fa1ec9578a0be92dd6d91a28474..eddec0b2136dfda4631ccd5456573e71a7a168eb 100755
--- a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/CalibrationBroker.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/CalibrationBroker.cxx
@@ -392,7 +392,12 @@ namespace Analysis {
 	std::string hname = histnames[h];
 	ATH_MSG_DEBUG( "#BTAG# registrating tagger "<< m_taggers[i] <<" with " 
 		       << m_channels.size() << " histograms (1 per channel): ");
-	for(uint j=0;j<m_channels.size();j++) {
+	for(uint j=0;j<mappedAlias.size();j++) {
+          std::string fname = this->fullHistoName(mappedAlias[j],hname);
+          TObject* dummy = nullptr;
+          m_histos[i].insert(std::make_pair(fname, std::make_pair(dummy,false)));
+        }
+	/*for(uint j=0;j<m_channels.size();j++) {
 	  if(this->channelAlias(m_channels[j])==m_channels[j]) { // skip aliased channels
 	    std::string fname = this->fullHistoName(m_channels[j],hname);
 	    TObject* dummy = nullptr;
@@ -401,7 +406,7 @@ namespace Analysis {
 	    ATH_MSG_DEBUG( "#BTAG# " << m_channels[j] << " is aliased to " << this->channelAlias(m_channels[j]) 
 			   << " : not registering twice histogram " << hname );
 	  }
-	}
+	}*/
       }
     }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondAlg.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..ca04fe6cf8dd80982ed9738e77bbe2442352ba11
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondAlg.cxx
@@ -0,0 +1,917 @@
+/*
+ *   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ *   */
+
+#include "JetTagCalibration/JetTagCalibCondAlg.h"
+
+//#include "JetTagTools/HistoHelperRoot.h"
+#include "AthenaPoolUtilities/CondAttrListCollection.h"
+#include "PoolSvc/IPoolSvc.h"
+#include "FileCatalog/IFileCatalog.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TObject.h"
+#include <TString.h>
+#include "TTree.h"
+
+namespace Analysis {
+
+  /**
+     @ class JetTagCalibCondAlg
+
+     @author emmanuel.le.guirriec@cern.ch
+  */
+
+
+  JetTagCalibCondAlg::JetTagCalibCondAlg (const std::string& name, ISvcLocator* pSvcLocator)
+    : ::AthAlgorithm( name, pSvcLocator )
+    , m_condSvc("CondSvc", name) ,
+    m_Likelihood_smoothNTimes(1) ,
+    m_JetFitterNN_calibrationDirectory("JetFitter"),
+    m_JetFitterNN_calibrationSubDirectory("NeuralNetwork"),
+    m_JetFitterNN_useCombinedIPNN(false),
+    m_JetFitterNN_maximumRegisteredLayers(4)
+    {
+      declareProperty("taggers", m_taggers);
+      declareProperty("channels", m_originalChannels);
+      declareProperty("channelAliases", m_channelAliases);
+      declareProperty("IPTag_UseCHypo"            , m_IPTag_useCHypo = true);
+      declareProperty("IP2D_TrackGradePartitions", m_IP2D_trackGradePartitions);
+      declareProperty("SV_useDRJPV", m_useDRJPVSV=true);
+      declareProperty("SV2_usePt", m_usePtSV2=false);
+      declareProperty("Likelihood_smoothNTimes",m_Likelihood_smoothNTimes);
+      declareProperty("Likelihood_vetoSmoothingOf",  m_Likelihood_vetoSmoothingOf);
+      declareProperty("JetFitterNN_CalibrationDirectory",m_JetFitterNN_calibrationDirectory);
+      declareProperty("JetFitterNN_CalibrationSubDirectory",m_JetFitterNN_calibrationSubDirectory);
+      declareProperty("JetFitterNN_useCombinedIPNN",m_JetFitterNN_useCombinedIPNN);
+      declareProperty("JetFitterNN_maximumRegisteredLayers",m_JetFitterNN_maximumRegisteredLayers);
+      declareProperty("RNNIP_NetworkConfig", m_RNNIP_network_cfg);
+      m_Likelihood_vetoSmoothingOf.push_back("/N2T");
+      m_Likelihood_vetoSmoothingOf.push_back("/N2TEffSV2");
+      m_Likelihood_vetoSmoothingOf.push_back("/Sip3D");
+    }
+     
+  JetTagCalibCondAlg::~JetTagCalibCondAlg()
+    {
+    }
+
+  StatusCode JetTagCalibCondAlg::initialize() {
+    ATH_MSG_DEBUG("initialize " << name());
+
+    // CondSvc   
+    ATH_CHECK( m_condSvc.retrieve() ); 
+
+    // PoolSvc
+    ATH_CHECK(service("PoolSvc",m_poolsvc));
+  
+    // Condition Handles
+    ATH_CHECK( m_readKey.initialize() );
+    ATH_CHECK( m_writeKey.initialize() );
+
+    // Register write handle
+    if (m_condSvc->regHandle(this, m_writeKey).isFailure()) {
+      ATH_MSG_ERROR("#BTAG# Unable to register WriteCondHandle " << m_writeKey.fullKey() << " with CondSvc");
+      return StatusCode::FAILURE;
+    }
+
+    // Prepare histo maps:
+    if (m_taggers.size() > 0) {
+      ATH_MSG_DEBUG( "#BTAG# List of calibrated taggers");
+      for(uint i=0;i<m_taggers.size();i++) {
+        ATH_MSG_DEBUG("#BTAG# Tagger " << m_taggers[i] );
+        std::vector<std::string> hvect;
+        m_taggersHists.push_back(hvect);
+      }
+    }
+    else {
+      ATH_MSG_ERROR( "#BTAG# No taggers defined");
+    }
+
+    // List of channels:
+    ATH_MSG_DEBUG( "#BTAG# Original channels " );
+    
+    for(uint i=0;i<m_originalChannels.size();i++) {
+      ATH_MSG_DEBUG("#BTAG# Channel " << m_originalChannels[i] );
+    }
+
+    // Decode channel aliases
+    if (m_channelAliases.size() > 0) {
+      for(std::vector<std::string>::const_iterator aliasI = m_channelAliases.value().begin(),
+          aliasE = m_channelAliases.value().end();
+          aliasI != aliasE; aliasI++) {
+        const std::string::size_type delim = aliasI->find("->");
+        if(delim == std::string::npos) {
+          ATH_MSG_ERROR( "#BTAG# Unexpected format in channelAliases: " << (*aliasI));
+        } else {
+          ATH_MSG_DEBUG( "#BTAG# Calibration channel alias: " << aliasI->substr(0, delim) << " -> "
+                      << aliasI->substr(delim+2) );
+          std::string jetc= aliasI->substr(0, delim);
+          std::vector<std::string> jeta = tokenize(aliasI->substr(delim+2), ",");
+          m_channelAliasesMultiMap.insert(std::make_pair(jetc, jeta) );
+          // Add to list of channels to which aliases will be attached
+          // (necessary because getJetAuthor used in taggers does not use
+          //  jet collection name but standardised info)
+          if (std::find(m_originalChannels.begin(), m_originalChannels.end(),jetc)
+                       == m_originalChannels.end()) m_originalChannels.push_back(jetc);
+        }
+      }
+    }
+    else {
+      ATH_MSG_ERROR( "#BTAG# No channel aliases defined");
+    }
+
+    m_directoryMap.clear();
+
+    //IP2D tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "IP2D") != m_taggers.end()) {
+      initializeIP2D();
+    }
+
+    //IP3D tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "IP3D") != m_taggers.end()) {
+      initializeIP3D();
+    }
+
+    //SV1 tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "SV1") != m_taggers.end()) {
+      initializeSV1();
+    }
+
+    //SV2 tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "SV2") != m_taggers.end()) {
+      initializeSV2();
+    }
+
+    //JetFitterNN tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "JetFitterNN") != m_taggers.end()) {
+      initializeJetFitterNN();
+    }
+
+
+    //SoftMu tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "SoftMu") != m_taggers.end()) {
+      initializeSoftMu();
+    }
+
+    //MV2c10 tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MV2c10") != m_taggers.end()) {
+      initializeMV2("MV2c10");
+    }
+
+    //MV2cl100 tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MV2cl100") != m_taggers.end()) {
+      initializeMV2("MV2cl100");
+    }
+
+    //MV2c100 tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MV2c100") != m_taggers.end()) {
+      initializeMV2("MV2c100");
+    }
+
+    //MV2c10mu tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MV2c10mu") != m_taggers.end()) {
+      initializeMV2("MV2c10mu");
+    }
+
+    //MV2c10rnn tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MV2c10rnn") != m_taggers.end()) {
+      initializeMV2("MV2c10rnn");
+    }
+   
+    //RNNIP tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "RNNIP") != m_taggers.end()) {
+      initializeRNNIP();
+    }
+
+    //JetVertexCharge tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "JetVertexCharge") != m_taggers.end()) {
+      initializeJetVertexCharge();
+    }
+
+    //MultiSV tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MultiSVbb1") != m_taggers.end()) {
+      initializeMultiSV("MultiSVbb1");
+    }
+
+    //MultiSV tagger
+    if (std::find(m_taggers.begin(), m_taggers.end(), "MultiSVbb2") != m_taggers.end()) {
+      initializeMultiSV("MultiSVbb2");
+    }
+
+    //Dl1 taggers
+    if (std::find(m_taggers.begin(), m_taggers.end(), "DL1") != m_taggers.end()) {
+      initializeDL1("DL1");
+      initializeDL1("DL1mu");
+      initializeDL1("DL1rnn");
+    }
+
+
+    return StatusCode::SUCCESS;
+  }
+
+ 
+  void JetTagCalibCondAlg::initializeIPTag() {
+    ATH_MSG_DEBUG("initialize IPTag paths of the calibration file");
+     m_IPTag_hypotheses.push_back("B");
+     m_IPTag_hypotheses.push_back("U");
+     if(m_IPTag_useCHypo){
+       m_IPTag_hypotheses.push_back("C");
+     }
+  }
+ 
+  void JetTagCalibCondAlg::initializeIP2D() {
+    ATH_MSG_DEBUG("initialize IP2D paths of the calibration file");
+
+    this->initializeIPTag();
+
+    //check that grades are defined
+       
+    //check that hypotheses for likelihood tool are defined
+    std::string hName;
+    for(unsigned int i=0;i<m_IP2D_trackGradePartitions.size();i++) {
+      for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+        hName = m_IPTag_hypotheses[ih]+"/"+m_IP2D_trackGradePartitions[i]+"/SipA0";
+        registerHistogram("IP2D", hName);          
+      }
+    }
+  }
+ 
+ 
+  void JetTagCalibCondAlg::initializeIP3D() {
+    ATH_MSG_DEBUG("initialize IP3D paths of the calibration file");
+
+    this->initializeIPTag();
+
+    
+    //check that hypotheses for likelihood tool are defined
+    std::string hName;
+    for(unsigned int i=0;i<m_IP2D_trackGradePartitions.size();i++) {
+      for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+        hName = m_IPTag_hypotheses[ih]+"/"+m_IP2D_trackGradePartitions[i]+"/Sip3D";
+        registerHistogram("IP3D", hName);          
+      }
+    }
+  }
+
+  void JetTagCalibCondAlg::initializeSVEff(std::string SVmode) {
+    // for SV efficiencies, add a few histograms:
+    std::string hName;
+    for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+	hName = m_IPTag_hypotheses[ih]+"/N2TEff"+SVmode;
+        registerHistogram(SVmode, hName);
+	hName = m_IPTag_hypotheses[ih]+"/N2TNorm"+SVmode;
+        registerHistogram(SVmode, hName);
+    }
+  }
+
+  
+  void JetTagCalibCondAlg::initializeSV1() {
+    ATH_MSG_DEBUG("initialize SV1 paths of the calibration file");
+
+    this->initializeIPTag();
+
+    std::string hName;
+    for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+      hName = m_IPTag_hypotheses[ih]+"/N2T";
+      registerHistogram("SV1", hName);
+      hName = m_IPTag_hypotheses[ih]+"/BidimME";
+      registerHistogram("SV1", hName);
+        if(m_useDRJPVSV) {
+          hName = m_IPTag_hypotheses[ih]+"/DRJPVSV";
+          registerHistogram("SV1", hName);
+      }
+    }
+
+    this->initializeSVEff("SV1");
+  }
+
+  void JetTagCalibCondAlg::initializeSV2() {
+    ATH_MSG_DEBUG("initialize SV2 paths of the calibration file");
+
+    this->initializeIPTag();
+
+    std::string hName;
+    if(m_usePtSV2){
+      for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+        hName = m_IPTag_hypotheses[ih]+"/TridimMENPt";
+        registerHistogram("SV2", hName);
+        hName = m_IPTag_hypotheses[ih]+"/N2TEffSV2";
+        registerHistogram("SV2", hName);
+       }
+    }else{
+      for(unsigned int ih=0;ih<m_IPTag_hypotheses.size();ih++) {
+        hName = m_IPTag_hypotheses[ih]+"/TridimMEN2T";
+        registerHistogram("SV2", hName);
+      }
+    }
+
+    this->initializeSVEff("SV2");
+  }
+
+  
+  void JetTagCalibCondAlg::initializeJetFitterNN()
+  {
+    
+    TString directory(m_JetFitterNN_calibrationSubDirectory);
+    directory+="/";
+    if (m_JetFitterNN_useCombinedIPNN)
+    {
+      directory+="comb";
+    }
+    else
+    {
+      directory+="standalone";
+    }
+    directory+="/";
+    
+    this->registerHistogram("JetFitterNN", m_JetFitterNN_calibrationDirectory,
+                                         std::string((const char*)(directory+"LayersInfo")));
+    
+    Int_t nHidden=m_JetFitterNN_maximumRegisteredLayers-2;
+    
+    for (Int_t i=0;i<nHidden+1;++i)
+    {
+      
+      TString weightName("Layer");
+      weightName+=i;
+      weightName+="_weights";
+      
+      TString thresholdName("Layer");
+      thresholdName+=i;
+      thresholdName+="_thresholds";
+      
+      this->registerHistogram("JetFitterNN", m_JetFitterNN_calibrationDirectory,
+                                           std::string((const char*)(directory+weightName)));
+      
+      this->registerHistogram("JetFitterNN", m_JetFitterNN_calibrationDirectory,
+                                           std::string((const char*)(directory+thresholdName)));
+    }
+    ATH_MSG_DEBUG(" Registered NN histograms with directory: " << m_JetFitterNN_calibrationDirectory << " and subdirectory " << directory);
+
+  }
+
+
+  void JetTagCalibCondAlg::initializeSoftMu()
+  {
+    std::string taggerNameBase("SMT");
+    std::string treeName("BDT");
+    std::string varStrName("variables");
+    ATH_MSG_DEBUG("#BTAG# Folder I look into: "<< taggerNameBase+"Calib/"+treeName);
+    this->registerHistogram("SoftMu", taggerNameBase, taggerNameBase+"Calib/"+treeName);
+    this->registerHistogram("SoftMu", taggerNameBase, taggerNameBase+"Calib/"+varStrName);
+  } 
+
+
+  void JetTagCalibCondAlg::initializeMV2(std::string taggerNameBase)
+  {
+    std::string treeName("BDT");
+    std::string varStrName("variables");
+    ATH_MSG_DEBUG("#BTAG# Folder I look into: "<< taggerNameBase+"Calib/"+treeName);
+
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib/"+treeName);
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib/"+varStrName);
+  }
+
+  void JetTagCalibCondAlg::initializeRNNIP()
+  {
+    for (const auto& rnn_name_pair: m_RNNIP_network_cfg) {
+      if (rnn_name_pair.second.size() == 0) {
+        ATH_MSG_VERBOSE("registering RNN " << rnn_name_pair.first);
+        this->registerHistogram("RNNIP",rnn_name_pair.first);
+        ATH_MSG_DEBUG(" #BTAG# Registered NN histograms with directory: " <<
+		  "RNNIP");
+      }
+    }
+  }
+
+  
+  void JetTagCalibCondAlg::initializeJetVertexCharge()
+  {
+    std::string taggerNameBase = "JetVertexCharge";
+    //MVA xml files
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib_cat_JC_SVC_noMu");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib_cat_JC_SVC_incMu");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib_cat_JC_SVC_TVC_noMu");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib_cat_JC_SVC_TVC_incMu");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib_cat_JC_incMu");
+
+    //reference histos
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_noMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_noMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_incMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_incMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_TVC_noMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_TVC_noMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_TVC_incMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_SVC_TVC_incMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_incMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_incMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_noMu_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_noMu_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_SVC_b");
+    this->registerHistogram(taggerNameBase, "jvc_SVC_bbar");
+    this->registerHistogram(taggerNameBase, "jvc_JC_all_b");
+    this->registerHistogram(taggerNameBase, "jvc_JC_all_bbar");
+  }
+
+  void JetTagCalibCondAlg::initializeMultiSV(std::string taggerNameBase)
+  {
+    ATH_MSG_DEBUG("#BTAG# taggerNameBase " << taggerNameBase);
+    std::string treeName = "BDT";
+    std::string varStrName = "variables";
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib");
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib/"+treeName);
+    this->registerHistogram(taggerNameBase, taggerNameBase+"Calib/"+varStrName);
+  }
+
+  void JetTagCalibCondAlg::initializeDL1(std::string taggerNameBase)
+  {
+    std::string file_name = "net_configuration"; // directory of NN calibration (starting from specific jet collection directory) in COOL db
+    this->registerHistogram(taggerNameBase, file_name);  //register the calibration file for later access
+
+    ATH_MSG_DEBUG(" #BTAG# Registered NN histograms with directory: " << taggerNameBase);
+  }    
+
+  void JetTagCalibCondAlg::registerHistogram(const std::string& tagger, const std::string& hname) {
+    std::string dir(tagger);
+    this->registerHistogram(tagger,dir,hname);
+  }
+
+  void JetTagCalibCondAlg::registerHistogram(const std::string& tagger, const std::string& directory, const std::string& hname) {
+    ATH_MSG_DEBUG(  "#BTAG# registering histogram " << hname << " in tagger " << tagger );
+    m_directoryMap[tagger] = directory;
+    bool registered = false;
+    for(uint i=0;i<m_taggers.size();i++) {
+      if(tagger==m_taggers[i]) {
+        ATH_MSG_DEBUG( "#BTAG# tagger " << tagger << " found in pos " << i
+                       << " , registrating " << hname );
+
+        m_taggersHists[i].push_back(hname);
+        registered = true;
+      }
+    }
+    if(!registered) {
+      ATH_MSG_DEBUG( "#BTAG# tagger " << tagger << " not found."
+                     << " Registrating of " << hname << " not possible.");
+    }
+  }
+
+
+  StatusCode JetTagCalibCondAlg::execute() {
+    ATH_MSG_DEBUG("execute " << name());
+    m_mappedAlias.clear();
+
+    // Read Cond Handle - GUID
+    SG::ReadCondHandle<CondAttrListCollection> readHandle{m_readKey};
+    const CondAttrListCollection* atrcol{*readHandle};
+    if(atrcol==nullptr) {
+      ATH_MSG_ERROR("#BTAG# Cannot retrieve CondAttrListCollection for " << m_readKey.key());
+      return StatusCode::FAILURE;
+    }
+
+
+    // Construct the output Cond Object and fill it in
+    std::unique_ptr<JetTagCalibCondData> writeCdo{std::make_unique<JetTagCalibCondData>()};
+    writeCdo->resize(m_taggers);
+
+    // Define validity of the output cond object and record it
+    EventIDRange rangeW;
+    if(!readHandle.range(rangeW)) {
+      ATH_MSG_ERROR("#BTAG# Failed to retrieve validity range for " << readHandle.key());
+      return StatusCode::FAILURE;
+    }
+
+
+    unsigned int channel=1; //Always 1 in old version with CoolHistSvc
+    CondAttrListCollection::const_iterator citr = atrcol->chanAttrListPair(channel);
+    if (citr==atrcol->end()) {
+      ATH_MSG_WARNING("#BTAG# Cannot find valid reference for " << readHandle.key() << " channel " << channel);
+      return StatusCode::FAILURE;
+    }
+
+    const std::string coolguid=citr->second["fileGUID"].data<std::string>();
+    ATH_MSG_DEBUG("#BTAG# Folder key "+ readHandle.key()+" has current file GUID "+coolguid);
+
+    // Open the file
+    std::string pfname, tech;
+    m_poolsvc->catalog()->getFirstPFN(coolguid, pfname, tech );
+    TFile* pfile = TFile::Open(pfname.c_str(),"READ");
+    if (pfile==nullptr || !pfile->IsOpen()) {
+      delete pfile;
+      ATH_MSG_WARNING("Problems opening input file "+pfname);
+      return StatusCode::FAILURE;
+    }
+
+    StatusCode sc = createHistoMap(pfile, writeCdo.get());
+    if(sc != StatusCode::SUCCESS){
+    // do nothing for the moment
+    }
+
+    for(uint i=0;i<m_taggers.size();i++) {
+      std::string tagger = m_taggers[i];
+
+      ATH_MSG_DEBUG( "#BTAG# registrating tagger "<< m_taggers[i]);
+      std::vector<std::string> histnames = m_taggersHists[i];
+      for(unsigned int h=0; h<histnames.size(); ++h){
+	std::string hname = histnames[h];
+	for(uint j=0;j<m_mappedAlias.size();j++) {
+          std::string fname = writeCdo->fullHistoName(m_mappedAlias[j],hname);
+          ATH_MSG_DEBUG( "#BTAG# Retrieving " << tagger <<":"<< fname );
+          std::string channel = writeCdo->channelName(fname);
+          std::string hname = writeCdo->histoName(fname);
+          std::string hFullName(m_directoryMap[tagger]);
+          hFullName+="/"; hFullName+=channel; 
+          hFullName+="/"; hFullName+=hname;
+          ATH_MSG_DEBUG( "#BTAG#     histo name in physical file= " << hFullName );
+          TObject* hPointer = nullptr;
+          if (getTObject(hFullName, pfile, hPointer)) {
+            if(hPointer) {
+              ATH_MSG_DEBUG( "#BTAG# Cached pointer to histogram: " << hPointer);
+              if (tagger == "IP2D" || tagger == "IP3D" || tagger == "SV1") {
+                ATH_MSG_VERBOSE("#BTAG# Smoothing histogram " << hname << " ...");
+                smoothAndNormalizeHistogram(hPointer, hname);
+              }
+              const TString rootClassName=hPointer->ClassName();
+              if (rootClassName=="TTree") {
+                ((TTree*)hPointer)->LoadBaskets();
+                ((TTree*)hPointer)->SetDirectory(0);
+              } 
+            
+            writeCdo->addHisto(i,fname,hPointer);
+            } else {
+              ATH_MSG_ERROR( "#BTAG# Could not cache pointer to histogram " << fname );
+            }
+          } else {
+            ATH_MSG_WARNING("#BTAG# error: histogram "<<hFullName
+                          <<" does not exist - you are probably using an old database tag");
+          }
+
+        } //end loop mapped alias
+      } //end loop histograms
+    } //end loop tagger
+          
+    // Write Cond Handle
+    SG::WriteCondHandle<JetTagCalibCondData > histoWriteHandle{m_writeKey};
+    if(histoWriteHandle.record(rangeW,std::move(writeCdo)).isFailure()) {
+      ATH_MSG_ERROR("#BTAG# Could not record vector of histograms maps " << histoWriteHandle.key()
+         		  << " with EventRange " << rangeW
+	 		  << " into Conditions Store");
+      return StatusCode::FAILURE;
+    }
+    ATH_MSG_INFO("recorded new CDO " << histoWriteHandle.key() << " with range " << rangeW << " into Conditions Store");
+              
+    // close the file
+    pfile->Close();
+    delete pfile;
+
+    return StatusCode::SUCCESS;
+  }
+ 
+  StatusCode JetTagCalibCondAlg::createHistoMap(TFile* pfile, JetTagCalibCondData * histosCdo){
+
+    ATH_MSG_DEBUG("#BTAG# in createHistoMap" );
+    std::vector< std::string > channels;
+
+    for(unsigned int j=0; j<m_originalChannels.size(); ++j){
+      channels.push_back(m_originalChannels[j]);
+    }
+
+    std::string folder(m_readKey.key());
+    
+
+    for(uint i=0;i<m_taggers.size();++i) {
+      std::string tagger = m_taggers[i];
+
+      for(unsigned int j=0; j<m_originalChannels.size(); ++j){
+        /// get all aliases
+        std::map<std::string, std::vector<std::string> >::iterator ialiaslist 
+          = m_channelAliasesMultiMap.find(m_originalChannels[j]);
+	if(ialiaslist == m_channelAliasesMultiMap.end()){
+	  ATH_MSG_DEBUG( "#BTAG#  no alias for original channel" << m_originalChannels[j] );
+	  if(!objectTDirExists(tagger+"/"+m_originalChannels[j], pfile)){
+	    ATH_MSG_WARNING( "#BTAG# no calibration for jet collection " << m_originalChannels[j]
+			   << " consider using aliases " );
+	  }
+	  continue;
+	}
+	std::vector<std::string> aliaslist = ialiaslist->second;
+	if(aliaslist.size() == 1){
+	  if("none" == aliaslist[0]){
+	    ATH_MSG_DEBUG("#BTAG#  no alias for original channel" << m_originalChannels[j]);
+				
+            if(objectTDirExists(tagger+"/"+m_originalChannels[j], pfile)){
+	      ATH_MSG_WARNING( "#BTAG# no calibration for jet collection " << m_originalChannels[j]
+				     << " consider using aliases " );
+            }
+            continue;
+	  }
+	}
+
+	bool foundalias=false;
+
+	for(unsigned int k=0; k<aliaslist.size(); ++k){
+
+	  std::string aliasentry = aliaslist[k];
+	  if("none" == aliasentry){
+	    ATH_MSG_DEBUG("#BTAG# first alias entry is none - replace with original channel" 
+				<< m_originalChannels[j] );
+            aliasentry= m_originalChannels[j];
+	  }
+	  /// now see if the jet collection exists in db
+	  std::string hFullName(tagger); 
+	  hFullName+="/"; hFullName+=aliasentry; 
+          // Check if jet collection already in channel alias map
+          if (std::count(m_mappedAlias.begin(), m_mappedAlias.end(), aliasentry) > 0) {
+	    ATH_MSG_DEBUG( "#BTAG# found alias entry in Map " << aliasentry );
+            histosCdo->addChannelAlias(m_originalChannels[j],aliasentry);
+            foundalias=true;
+            break;
+          }
+          else {
+            if (objectTDirExists(hFullName, pfile)) {
+	      ATH_MSG_DEBUG( "#BTAG# found alias entry in DB " << aliasentry );
+              if("none"!=aliaslist[k]){
+		std::vector<std::string>::const_iterator pos = find(channels.begin(), 
+								channels.end(), aliasentry);
+		if(pos==channels.end()) {
+		  ATH_MSG_DEBUG("#BTAG# Alias is pointing to undefined channel: " <<  aliasentry
+				    << ". Adding it to channel list.");
+		  channels.push_back(aliasentry);
+	        }
+                histosCdo->addChannelAlias(m_originalChannels[j],aliasentry);
+                m_mappedAlias.push_back(aliasentry);
+	      }
+	      foundalias=true;
+	      break;
+	    }
+	    else{
+	      ATH_MSG_DEBUG( "#BTAG# no alias entry " << aliasentry 
+		       << " trying next alias ");
+	    }
+	  }
+	}
+	if(!foundalias){
+	  ATH_MSG_WARNING( "#BTAG# none of the aliases exist for jet collection " 
+			 << m_originalChannels[j]);
+	}
+
+      }
+      break ; /// check alias for the first tagger. same jet collections for all taggers for now
+
+    }
+
+    ATH_MSG_DEBUG( "#BTAG# final registered channels " );
+    for(uint i=0;i<channels.size();++i) {
+      ATH_MSG_DEBUG( "#BTAG# Channel " << channels[i] );
+    }
+
+    //print alias map
+    histosCdo->printAliasesStatus();
+
+    return StatusCode::SUCCESS;
+
+  }
+
+
+
+  std::vector<std::string> JetTagCalibCondAlg::tokenize(std::string str, std::string delim){
+    std::vector<std::string> tokens;
+    std::string::size_type sPos, sEnd, sLen;
+    // if str starts with a character in delim, do you want an empty string in tokens?
+    // sPos = 0; // if answer is yes
+    sPos = str.find_first_not_of(delim);  // if answer is no
+    while(sPos != std::string::npos){
+      sEnd = str.find_first_of(delim, sPos);
+      if(sEnd == std::string::npos) sEnd = str.length();
+      sLen = sEnd - sPos;
+      std::string token = str.substr(sPos, sLen);
+      tokens.push_back(token);
+      sPos = str.find_first_not_of(delim, sEnd);
+    }
+    return tokens;
+  }
+
+  StatusCode JetTagCalibCondAlg::finalize() {
+    ATH_MSG_DEBUG("finalize " << name());
+    return StatusCode::SUCCESS;
+  }
+
+  StatusCode JetTagCalibCondAlg::objectTDirExists(const std::string& histname, TFile * pfile) const {
+    
+    ATH_MSG_DEBUG("#BTAG# in objectTDirExists" );
+
+     // now read the histogram into memory
+     ATH_MSG_DEBUG("Getting object "+histname+" from file");
+     TObject* hist = nullptr;
+     pfile->GetObject(histname.c_str(),hist);
+     if (hist==nullptr) {
+       ATH_MSG_DEBUG("#BTAG# Could not load TObject " << histname);
+       return StatusCode::FAILURE;
+     }
+
+     return StatusCode::SUCCESS;
+  }
+
+  StatusCode JetTagCalibCondAlg::getTObject(const std::string& histname, TFile * pfile, TObject*& hist) const {
+     // now read the histogram into memory
+     ATH_MSG_DEBUG("Getting object "+histname+" from file");
+     pfile->GetObject(histname.c_str(),hist);
+     if (hist==nullptr) {
+       ATH_MSG_DEBUG("#BTAG# Could not load TObject " << histname);
+       return StatusCode::FAILURE;
+     }
+     else {
+       // make this histogram unassociated with the TFile, so file can be closed
+       // only for histogram objects, others do not get associated
+       // TTrees have special treatment 
+       TH1* ihist=dynamic_cast<TH1*>(hist);
+       if (ihist!=nullptr) ihist->SetDirectory(0);
+       // if it is a TDirectory, also need special treatment to unassociate parent
+       TDirectory* idir=dynamic_cast<TDirectory*>(hist);
+       if (idir!=nullptr) {
+         TDirectory* mdir=idir->GetMotherDir();
+         if (mdir!=nullptr) {
+           ATH_MSG_DEBUG("Disconnecting TDirectory "+histname+" from parent");
+           mdir->GetList()->Remove(idir);
+           idir->SetMother(0);
+         } else {
+           ATH_MSG_WARNING("Could not get MotherDir for TDirectory "+histname);
+         }
+       }
+     }
+
+     return StatusCode::SUCCESS;
+   }
+  
+  void JetTagCalibCondAlg::smoothAndNormalizeHistogram(TObject*& hist, const std::string& hname) {
+    //Select small part of NewLikelihoodTool to reproduce CalibrationBroker behaviour (smooth and normalize histogram)
+    TH1* h = dynamic_cast<TH1*>(hist);
+    if(h) {
+      double norm = h->Integral();
+      if(norm) {
+        // check if smoothing of histogram is not vetoed:
+        bool veto = false;
+        for(unsigned int iv=0; iv<m_Likelihood_vetoSmoothingOf.size(); iv++) {
+          if(hname.find(m_Likelihood_vetoSmoothingOf[iv])!=std::string::npos) {
+            veto = true;
+            ATH_MSG_VERBOSE("#BTAG# Smoothing of " << hname << " is vetoed !");
+            break;
+          }
+        }
+        if(1==h->GetDimension() && m_Likelihood_smoothNTimes) {
+          if(!veto) {
+            if(norm>10000)h->Smooth(m_Likelihood_smoothNTimes);
+            else h->Smooth((int)(m_Likelihood_smoothNTimes*100./sqrt(norm)));
+          }
+        }
+        if(2==h->GetDimension()) {
+          int m2d=3;
+          if(!veto) {
+	    TH2 * dc_tmp = dynamic_cast<TH2*>(h);
+	    if (dc_tmp) {
+              this->smoothASH2D(dc_tmp, m2d, m2d);
+            }
+          }
+        }
+        if(3==h->GetDimension()) {
+          ATH_MSG_WARNING("#BTAG# Code needs to be migrated from NewLikelihoodTool");
+        }
+        // normalize:
+        norm = h->Integral();
+        h->Scale(1./norm);
+      } else {
+        ATH_MSG_DEBUG("#BTAG# Histo "<<h<<" is empty!");
+      }
+    }
+  }
+
+void JetTagCalibCondAlg::smoothASH2D(TH2* input2D, int m1, int m2) {
+
+  ATH_MSG_DEBUG("Smoothing a two dimensional histogram "<< input2D->GetName()
+              << " " << m1 << " " << m2);
+  ATH_MSG_DEBUG("First (1-3, 1-3) 3x3 bins before smoothing: ");
+  for(int i=1;i<4;i++) {
+    for(int j=1;j<4;j++) {
+      ATH_MSG_DEBUG(i<<" "<<j<<" : "<<input2D->GetBinContent(i,j)<< " / ");
+    }
+  }
+  int ioffset = input2D->GetNbinsX() / 2 ;
+  int joffset = input2D->GetNbinsY() / 2 ;
+  ATH_MSG_DEBUG("Middle (" << ioffset+1 << "-" << ioffset+4 << ", ("
+              << joffset+1 << "-" << joffset+4 << ") 3x3 bins before smoothing: ");
+  for(int i=1;i<4;i++) {
+    for(int j=1;j<4;j++) {
+      ATH_MSG_DEBUG(i<<" "<<j<<" : "<<input2D->GetBinContent(i+ioffset,j+joffset)<< " / ");
+    }
+  }
+
+  //
+  const int lsup = 20;
+  if (m1 > lsup || m2 > lsup) {
+    ATH_MSG_DEBUG("HistoHelperRoot::smoothASH2D: m1 or m2 too big !");
+    return;
+  } else {
+    int nx = input2D->GetNbinsX()+1;
+    int ny = input2D->GetNbinsY()+1;
+    float **h, **res;
+    h   = new float*[nx-1];
+    res = new float*[nx-1];
+    for (int i = 0;i < nx-1;i++) {
+      h[i]   = new float[ny-1];
+      res[i] = new float[ny-1];
+    }
+    for (int iy = 1;iy<ny;iy++) {
+      for (int ix = 1;ix<nx;ix++) {
+        h[ix-1][iy-1] = (float) input2D->GetBinContent(ix,iy);
+      }
+    }
+    //
+    int i,j,k,l;
+    float wk1[41],wk2[41],wgt[100][100];
+    double wk[41][41],wks = 0.;
+    float ai,am1 = float(m1), am2 = float(m2);
+    const float am12 = am1*am1, am22 = am2*am2;
+    const float inv_am1_am2 = 1. / (am1 * am2);
+    const float inv_am12 = 1. / am12;
+    const float inv_am22 = 1. / am22;
+    // Initialisation
+    for (k = 0;k<nx-1;k++) {
+      for (l = 0;l<ny-1;l++) {
+        res[k][l] = 0.; wgt[k][l] = 0.;
+      }
+    }
+    // Weights
+    for (i = lsup+1-m1;i<lsup+m1;i++) {
+      ai = float(i-lsup)*float(i-lsup);
+      wk1[i] = 15./16.*(1.-ai*inv_am12)*(1.-ai*inv_am12);
+      wks = wks + wk1[i];
+    }
+    const double fac1 = am1 / wks;
+    for (i = lsup+1-m1;i<lsup+m1;i++) {
+      wk1[i] =  wk1[i]*fac1;
+    }
+    wks = 0.;
+    for (i = lsup+1-m2;i<lsup+m2;i++) {
+      ai = float(i-lsup)*float(i-lsup);
+      wk2[i] = 15./16.*(1.-ai*inv_am22)*(1.-ai*inv_am22);
+      wks = wks + wk2[i];
+    }
+    const double fac2 = am2 / wks;
+    for (i = lsup+1-m2;i<lsup+m2;i++) {
+      wk2[i] =  wk2[i]*fac2;
+    }
+    for (i = lsup+1-m1;i<lsup+m1;i++) {
+      for (j = lsup+1-m2;j<lsup+m2;j++) {
+        wk[i][j] = wk1[i]*wk2[j];
+      }
+    }
+    //
+    for (k = 0;k<nx-1;k++) {
+      for (l = 0;l<ny-1;l++) {
+        for (i = std::max(0,k-m1+1);i<std::min(nx-1,k+m1);i++) {
+          for (j = std::max(0,l-m2+1);j<std::min(ny-1,l+m2);j++) {
+            res[i][j] = res[i][j] + wk[lsup+i-k][lsup+j-l]*h[k][l];
+            wgt[i][j] = wgt[i][j] + wk[lsup+i-k][lsup+j-l];
+          }
+        }
+      }
+    }
+    for (k = 0;k<nx-1;k++) {
+      for (l = 0;l<ny-1;l++) {
+        res[k][l] = res[k][l]*inv_am1_am2;
+        if (wgt[k][l] != 0.) {res[k][l] = res[k][l]/wgt[k][l];}
+      }
+    }
+    // replace the histo content with the result of smoothing:
+    input2D->Reset();
+    for (int iy = 1;iy<ny;iy++) {
+      for (int ix = 1;ix<nx;ix++) {
+        input2D->SetBinContent(ix,iy,res[ix-1][iy-1]);
+      }
+    }
+    for (i = 0; i < nx-1; i++){
+      delete[] h[i];
+      delete[] res[i];
+    }
+    delete[] h;
+    delete[] res;
+  }
+  ATH_MSG_DEBUG("First (1-3, 1-3) 3x3 bins after smoothing: ");
+  for(int i=1;i<4;i++) {
+    for(int j=1;j<4;j++) {
+      ATH_MSG_DEBUG(i<<" "<<j<<" : "<<input2D->GetBinContent(i,j)<< " / ");
+    }
+  }
+  ioffset = input2D->GetNbinsX() / 2 ;
+  joffset = input2D->GetNbinsY() / 2 ;
+  ATH_MSG_DEBUG("Middle (" << ioffset+1 << "-" << ioffset+4 << ", ("
+              << joffset+1 << "-" << joffset+4 << ") 3x3 bins after smoothing: ");
+  for(int i=1;i<4;i++) {
+    for(int j=1;j<4;j++) {
+      ATH_MSG_DEBUG(i<<" "<<j<<" : "<<input2D->GetBinContent(i+ioffset,j+joffset)<< " / ");
+    }
+  }
+}
+
+}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondData.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondData.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..13796054ce51be6d6021843356b425a91afca3b4
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/JetTagCalibCondData.cxx
@@ -0,0 +1,134 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "JetTagCalibration/JetTagCalibCondData.h"
+// Gaudi includes
+#include "GaudiKernel/MsgStream.h"
+#include "AthenaKernel/getMessageSvc.h"
+
+#include "TObject.h"
+#include "TH1.h"
+#include "TTree.h"
+
+/**
+ * @file JetTagCalibCondData.cxx
+ * @author emmanuel.le.guirriec@cern.ch
+**/
+
+
+namespace Analysis {
+
+JetTagCalibCondData::JetTagCalibCondData()
+  {
+    MsgStream log(Athena::getMessageSvc(), "JetTagCalibCondData");
+    log << MSG::DEBUG << "#BTAG# addChannelAlias : map size" << m_channelAliasesMap.size() << endmsg;
+    m_channelAliasesMap.clear();
+  }
+
+
+void JetTagCalibCondData::resize(const std::vector<std::string> taggers) {
+    m_histos.reserve(taggers.size());
+    for(uint i=0;i<taggers.size();i++) {
+      m_taggers.push_back(taggers[i]);
+      std::map<std::string, TObject* > hmap;
+      m_histos.push_back(hmap);
+    }  
+}
+
+void JetTagCalibCondData::clear() {
+    m_channelAliasesMap.clear();
+}
+
+void JetTagCalibCondData::addHisto(const unsigned int indexTagger, const std::string& name, TObject * obj) {
+  m_histos[indexTagger].insert(std::make_pair(name, obj));
+}
+
+void JetTagCalibCondData::addChannelAlias(const std::string& channel, const std::string& alias) {
+  MsgStream log(Athena::getMessageSvc(), "JetTagCalibCondData");
+  log << MSG::DEBUG << "#BTAG# addChannelAlias : map size" << m_channelAliasesMap.size() << endmsg;
+  log << MSG::DEBUG << "#BTAG# addChannelAlias : " << channel << " : " << alias << endmsg;
+  std::pair<std::string,std::string> chan = std::make_pair(channel,alias);
+  m_channelAliasesMap.insert(chan);
+}
+
+std::string JetTagCalibCondData::getChannelAlias(const std::string& originalChannel) const {
+  std::string alias = originalChannel;
+  std::map< std::string, std::string>::const_iterator pos;
+  pos = m_channelAliasesMap.find(originalChannel);
+  if (pos != m_channelAliasesMap.end()) alias = pos->second;
+  return alias;
+}
+
+void JetTagCalibCondData::printAliasesStatus() const {
+  MsgStream log(Athena::getMessageSvc(), "JetTagCalibCondData");
+  log << MSG::DEBUG << "#BTAG# final registered aliases ";
+  std::map<std::string,std::string>::const_iterator iter = m_channelAliasesMap.begin();
+  for(;iter!=m_channelAliasesMap.end();++iter) {
+    log << MSG::DEBUG << "#BTAG# Channel alias " << iter->first <<"->"<<iter->second;
+  }
+  log << endmsg;
+}
+
+
+void JetTagCalibCondData::printHistosStatus() const {
+  MsgStream log(Athena::getMessageSvc(), "JetTagCalibCondData");
+  log << MSG::DEBUG << "#BTAG# histograms retrieved from DB" << endmsg;
+  std::map<std::string, TObject*>::const_iterator iter_hist;
+  for(unsigned int i=0;i<m_histos.size();i++) {
+    iter_hist = m_histos[i].begin();
+    for(;iter_hist!=m_histos[i].end();++iter_hist) {
+      log << MSG::DEBUG << "#BTAG# histogram name: "<< iter_hist->first << endmsg;
+    }
+  }
+}
+
+TH1* JetTagCalibCondData::retrieveHistogram(const std::string& folder, const std::string& channel, const std::string& hname) const {
+  return this->retrieveTObject<TH1>(folder,channel,hname);
+}
+
+
+
+std::vector<std::string> JetTagCalibCondData::tokenize(std::string str, std::string delim){
+  std::vector<std::string> tokens;
+  std::string::size_type sPos, sEnd, sLen;
+  // if str starts with a character in delim, do you want an empty string in tokens?
+  // sPos = 0; // if answer is yes
+  sPos = str.find_first_not_of(delim);  // if answer is no
+  while(sPos != std::string::npos){
+    sEnd = str.find_first_of(delim, sPos);
+    if(sEnd == std::string::npos) sEnd = str.length();
+    sLen = sEnd - sPos;
+    std::string token = str.substr(sPos, sLen);
+    tokens.push_back(token);
+    sPos = str.find_first_not_of(delim, sEnd);
+  }
+  return tokens;
+}
+
+std::string JetTagCalibCondData::channelName(const std::string& fname) const {
+  const std::string delim("#");
+  std::string::size_type sPos;
+  sPos = fname.find_first_of(delim);
+  std::string channel = fname.substr(0,sPos);
+  return channel;
+}
+
+std::string JetTagCalibCondData::histoName(const std::string& fname) const {
+  const std::string delim("#");
+  std::string::size_type sPos;
+  sPos = fname.find_first_of(delim);
+  std::string hname = fname.substr(sPos+1);
+  return hname;
+}
+
+std::string JetTagCalibCondData::fullHistoName(const std::string& channel, const std::string& histoName) const {
+  std::string fname = channel + "#" + histoName;
+  return fname;
+}
+
+}
+
+
+
+
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_entries.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_entries.cxx
index a0c82aa9df9a52986e32cffa083a1e60e59fe39a..7dc7daebeaab534991d06ea2bc6059d34e7e2107 100644
--- a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_entries.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_entries.cxx
@@ -1,6 +1,6 @@
 #include "JetTagCalibration/CalibrationBroker.h"
-
+#include "JetTagCalibration/JetTagCalibCondAlg.h"
 using namespace Analysis ;
 
-DECLARE_COMPONENT( Analysis::CalibrationBroker )
-
+DECLARE_COMPONENT( CalibrationBroker )
+DECLARE_COMPONENT( JetTagCalibCondAlg )
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_load.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_load.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..0110b7f79b19cbec2d273b518f8910f16e4136f7
--- /dev/null
+++ b/PhysicsAnalysis/JetTagging/JetTagCalibration/src/components/JetTagCalibration_load.cxx
@@ -0,0 +1,3 @@
+#include "GaudiKernel/LoadFactoryEntries.h"
+
+LOAD_FACTORY_ENTRIES( JetTagCalibCondAlg )
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/DL1Tag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/DL1Tag.h
index 20dccc1eae9851fb8e6e66a466b289c774bfd564..91087e38acf1f09a3db521081a0c2140f37d2091 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/DL1Tag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/DL1Tag.h
@@ -17,6 +17,7 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "JetTagTools/NNLayerConfig.h"
 #include "JetTagTools/IMultivariateJetTagger.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 
 #include <vector>
 #include <istream>
@@ -26,10 +27,6 @@ namespace xAOD {
   typedef Vertex_v1 Vertex;
 }
 
-namespace Analysis {
-    class CalibrationBroker;
-}
-
 namespace lwt {
   class LightweightNeuralNetwork;
 }
@@ -57,8 +54,8 @@ namespace Analysis {
     typedef std::map<std::string, std::vector<lwt::Input> > map_var;
     typedef std::map<std::string, lwt::LightweightNeuralNetwork*> nn_map;
 
-    // load the calibration file from the COOL db
-    void load_calibration_file();
+    /** Key of calibration data: */
+    SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
     void cache_calibration(const std::string& jetauthor);
     std::string get_calib_string(std::string jetauthor);
 
@@ -67,7 +64,6 @@ namespace Analysis {
 
     std::string m_calibrationDirectory;
     std::string m_calibrationSubDirectory;
-    ToolHandle<CalibrationBroker> m_calibrationTool; // pointer to calibration in COOL
     std::string m_xAODBaseName;
     bool m_forceDL1CalibrationAlias;
     std::string m_DL1CalibAlias;
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/HistoHelperRoot.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/HistoHelperRoot.h
index a44dff8d7cff7a9d3474342642823b20bcb13ede..e8d2a40f5a3c14cc9c1a15e37e3a9091f4d0c7e5 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/HistoHelperRoot.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/HistoHelperRoot.h
@@ -46,10 +46,7 @@ class HistoHelperRoot
   TH1* getHisto1D(const std::string& histoName);
   TH2* getHisto2D(const std::string& histoName);
   TH3* getHisto3D(const std::string& histoName);
-  void normalizeHistos();
-  void normalizeHistos(const std::string);
-  void smoothHistos(const std::string);
-  //
+
   // Interpolating
   static double Interpol1d(double, TH1*);
   static double Interpol2d(double, double, TH2*);
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetFitterNNTool.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetFitterNNTool.h
index 44179062a4199a4d06608fd76f97dc5da4fa3b6d..008a1c52f2bc32d564bced120491b47d9fd5451a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetFitterNNTool.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetFitterNNTool.h
@@ -21,6 +21,7 @@
 
 #include "JetTagTools/IJetFitterClassifierTool.h"
 #include "xAODBTagging/BTagging.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 #include <vector>
 #include <string>
 #include <map>
@@ -41,8 +42,6 @@ namespace Analysis {
 
 class IJetFitterTagInfo;
 
-class CalibrationBroker;
-  
 
 static const InterfaceID IID_JetFitterNNTool("Analysis::JetFitterNNTool", 1, 0);
 
@@ -73,8 +72,6 @@ static const InterfaceID IID_JetFitterNNTool("Analysis::JetFitterNNTool", 1, 0);
 
     void loadCalibration(const std::string & jetauthor);
 
-    void initializeCalibrationFile();
-
     std::map<std::string,TTrainedNetwork*> m_NN;
 
     std::string m_calibrationDirectory;
@@ -85,7 +82,8 @@ static const InterfaceID IID_JetFitterNNTool("Analysis::JetFitterNNTool", 1, 0);
     
     bool m_useCombinedIPNN;
     
-    ToolHandle<CalibrationBroker> m_calibrationTool;
+    /** Key of calibration data: */
+    SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
 
     int m_maximumRegisteredLayers;
     bool m_usePtCorrectedMass;
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetVertexCharge.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetVertexCharge.h
index 99ad071ed6ea8f32451fbbaa996b56d84d7b26c4..8b664d68e86d772cc52cb13c76c18321dc4f46d3 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetVertexCharge.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/JetVertexCharge.h
@@ -21,6 +21,7 @@
 #include "GaudiKernel/ToolHandle.h"
 
 #include "JetTagTools/ITagTool.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 
 #include "xAODTracking/TrackParticle.h"
 
@@ -66,7 +67,8 @@ namespace Analysis {
 //      data members
 //------------------------------------------------------------------------            
 
-   ToolHandle<CalibrationBroker> m_calibrationTool;
+   /** Key of calibration data: */
+   SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
    ToolHandle<CP::IMuonSelectionTool> m_muonSelectorTool;
    ToolHandle<CP::IMuonCalibrationAndSmearingTool> m_muonCorrectionTool;
    const xAOD::Vertex *m_primVtx = 0; 
@@ -165,7 +167,7 @@ namespace Analysis {
    bool passTrackCuts( const xAOD::TrackParticle &track ) const; 
 
    int category(); 
-   float logLikelihoodRatio( int cat , float w, std::string author, std::string alias);
+   float logLikelihoodRatio( int cat , float w, std::string author);
 
    StatusCode  SetupReaders( std::string author, std::string alias , int mvaCat, TList* list);
    void PrintVariables();  
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MV2Tag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MV2Tag.h
index 15ab405546563653f1f3c18f4417247c1178cc66..a02927dbedb451b7c52c2127cd4fba75ae4a0593 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MV2Tag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MV2Tag.h
@@ -14,22 +14,11 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "JetTagTools/IMultivariateJetTagger.h"
-//#include "GaudiKernel/ToolHandle.h"
-//#include "JetTagTools/ITagTool.h"
 #include <string>
 #include <map>
 #include <list>
-#include "egammaMVACalib/egammaMVACalib.h"
 #include "MVAUtils/BDT.h"
-
-#include "TMVA/MethodBase.h"
-#include "TMVA/IMethod.h"
-
-namespace TMVA { class Reader; }
-
-namespace Analysis {
-    class CalibrationBroker;
-}
+#include "JetTagCalibration/JetTagCalibCondData.h"
 
 namespace Analysis {
 
@@ -48,7 +37,6 @@ namespace Analysis {
     StatusCode finalize();
     void finalizeHistos() {};
 
-    //StatusCode tagJet(xAOD::Jet& jetToTag, xAOD::BTagging* BTag);
     void assignProbability(xAOD::BTagging* BTag, const std::map<std::string,double>& inputs, const std::string& jetauthor);
 
   private:
@@ -58,11 +46,9 @@ namespace Analysis {
     std::string m_treeName;
     std::string m_varStrName;
 
-    /** pointer to calibration in COOL: */
-    ToolHandle<CalibrationBroker> m_calibrationTool;
+    /** Key of calibration data: */
+    SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
     bool m_forceMV2CalibrationAlias;
-    bool m_useEgammaMethodMV2;
-    //bool m_decorateBTaggingObj;
     std::string m_decTagName;
     std::string m_MV2CalibAlias;
     std::string m_MV2cXX;
@@ -88,10 +74,7 @@ namespace Analysis {
     // points to something in storegate)
     //const xAOD::Vertex* m_priVtx;
 
-    /** reader to define the TMVA algorithms */
-
-    std::map<std::string, TMVA::Reader*> m_tmvaReaders;
-    std::map<std::string, TMVA::MethodBase*> m_tmvaMethod;
+    /** reader to define the MVA algorithms */
     std::map<std::string, MVAUtils::BDT*> m_egammaBDTs;
     std::list<std::string> m_undefinedReaders; // keep track of undefined readers to prevent too many warnings.
 
@@ -112,7 +95,7 @@ namespace Analysis {
     //void PrintInputs();
     void CreateLocalVariables(std::map<std::string, double> var_map);
     void ReplaceNaN_andAssign(std::map<std::string, double> var_map);
-    void SetVariableRefs(const std::vector<std::string> inputVars, TMVA::Reader* tmvaReader,
+    void SetVariableRefs(const std::vector<std::string> inputVars,
 			  unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers);
 
     std::vector<float> GetMulticlassResponse(MVAUtils::BDT* bdt) const {
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultiSVTag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultiSVTag.h
index fa528bc9e5128be0867ab06f53edf26ef65a879e..ee4e4b2ad616ec400989cf53657ae2f7d30d9969 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultiSVTag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultiSVTag.h
@@ -12,6 +12,7 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "JetTagTools/ITagTool.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/TrackParticleContainer.h"
@@ -19,17 +20,7 @@
 #include <vector>
 #include <map>
 #include <list>
-#include "egammaMVACalib/egammaMVACalib.h"
 #include "MVAUtils/BDT.h"
-#include "TMVA/IMethod.h"
-#include "TMVA/MethodBase.h"
-namespace TMVA { class Reader; }
-namespace Analysis { class CalibrationBroker; }
-
-//namespace xAOD { class TrackParticle; class TrackParticleContainer; }
-//namespace Trk { class VxCandidate; class RecVertex;}
-//class Jet;
-//class StoreGateSvc;
 
 namespace Analysis
 {  
@@ -53,7 +44,8 @@ namespace Analysis
       std::string m_treeName;
       std::string m_varStrName;
 
-      ToolHandle<CalibrationBroker> m_calibrationTool;
+      /** Key of calibration data: */
+      SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
       std::string m_MultiSV;
       //
       std::string m_runModus; 
@@ -62,7 +54,6 @@ namespace Analysis
    
       bool m_disableAlgo;
       int  m_warnCounter;
-      bool m_useEgammaMethodMultiSV;
     
       std::vector<std::string> m_jetCollectionList;
       std::vector<std::string> m_hypotheses;
@@ -97,14 +88,12 @@ namespace Analysis
       float m_mx12_DR   ;
       float m_mx12_Angle;
       //...
-      std::map<std::string, TMVA::Reader*> m_tmvaReaders;
-      std::map<std::string, TMVA::MethodBase*> m_tmvaMethod; 
       std::map<std::string, MVAUtils::BDT*> m_egammaBDTs;
       std::list<std::string> m_undefinedReaders;
       std::string m_sv0_infosource;
       std::string m_sv1_infosource;
 
-      void SetVariableRefs(const std::vector<std::string> inputVars, TMVA::Reader* tmvaReader, 
+      void SetVariableRefs(const std::vector<std::string> inputVars, 
 			   unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers);
       double GetClassResponse (MVAUtils::BDT* bdt) const { return (bdt->GetPointers().size() ? bdt->GetGradBoostMVA(bdt->GetPointers()) : -9.); }
     }; // End class
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultivariateTagManager.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultivariateTagManager.h
index ceb159cc7ac076adc1ee81c8d4515c509b4e6ece..2478d1d08502848d87969d79f15c485cb4402868 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultivariateTagManager.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/MultivariateTagManager.h
@@ -15,18 +15,12 @@
     @authors Dan Guest, Marie Lanfermann
 
 ********************************************************/
-// #include "xAODBTagging/BTagging.h"
-// #include "GaudiKernel/ToolHandle.h"
-// #include "AthenaBaseComps/AthAlgTool.h"
+#include "AthenaBaseComps/AthAlgTool.h"
 #include "JetTagTools/ITagTool.h"
 #include "JetTagTools/IMultivariateJetTagger.h"
 
 #include <vector>
 
-namespace Analysis {
-  class CalibrationBroker;
-}
-
 namespace Analysis {
   class IMultivariateJetTagger;
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/NewLikelihoodTool.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/NewLikelihoodTool.h
index 50c3e60a79941d96181fb8e599f6e6223cac1270..f8675f310af3539d2c06d323f805318ba81b61ce 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/NewLikelihoodTool.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/NewLikelihoodTool.h
@@ -13,6 +13,7 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "JetTagTools/LikelihoodComponents.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 #include <string>
 #include <vector>
 
@@ -20,8 +21,6 @@ class TH1;
 
 namespace Analysis {
  
-class CalibrationBroker;
-
 static const InterfaceID IID_NewLikelihoodTool("Analysis::NewLikelihoodTool", 1, 0);
   
 class NewLikelihoodTool : public AthAlgTool {
@@ -60,8 +59,9 @@ class NewLikelihoodTool : public AthAlgTool {
 
   std::string m_taggerName; // tagger this tool refers to
   std::vector<std::string> m_hypotheses; // likelihood hypotheses: usually B or U
-  /** Pointer to the calibration tool: */
-  ToolHandle<CalibrationBroker> m_calibrationTool;
+
+  /** Key of calibration data: */
+  SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
 
   /** Treatment of histograms: */
   bool m_normalizedProb;
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/RNNIPTag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/RNNIPTag.h
index 58ff7d0a53469a4adca47414df9caf54bf481aef..db67066d5dcc63a283451db77370dd1bdd7b9c93 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/RNNIPTag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/RNNIPTag.h
@@ -14,6 +14,7 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "JetTagTools/ITagTool.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 
 #include "xAODTracking/TrackParticleContainerFwd.h"
 
@@ -44,7 +45,6 @@ namespace Analysis {
   class TrackGradePartition;
   class SVForIPTool;
   class ITrackGradeFactory;
-  class CalibrationBroker;
 
   // track struct, and sorting functions
   struct IPxDInfo;
@@ -117,6 +117,8 @@ namespace Analysis {
     /** Name of the track-to-jet association in the BTagging object */
     std::string m_trackAssociationName;
 
+    /** Key of calibration data: */
+    SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
     /** forcing the calibration folder of a given collection */
     std::string m_ForcedCalibName;
 
@@ -145,12 +147,11 @@ namespace Analysis {
 
     // load the calibration file from the COOL db
     void update_networks_for(const std::string& author);
-    void register_hist(const std::string& name = "/rnnip");
+    //void register_hist(const std::string& name = "/rnnip");
     std::string get_calib_string(
       const std::string& author,
       const std::string& name = "/rnnip");
     std::string m_calibrationDirectory;
-    ToolHandle<CalibrationBroker> m_calibrationTool;
 
     /** names of fools for getting the secondary vertex information */
     std::string m_secVxFinderNameForV0Removal;
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SoftMuonTag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SoftMuonTag.h
index 61d9805e88e276c072beffb71ce8d9607357ed24..189876f8a26ceb0bdd2825d6b4b4b5a6388a365b 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SoftMuonTag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SoftMuonTag.h
@@ -20,12 +20,9 @@
 #include <list>
 #include "JetTagTools/ITagTool.h"
 #include "xAODTracking/TrackParticle.h"
-#include "egammaMVACalib/egammaMVACalib.h"
 #include "MVAUtils/BDT.h"
 #include "StoreGate/ReadHandleKey.h"
-
-#include "TMVA/MethodBase.h"
-#include "TMVA/IMethod.h"
+#include "JetTagCalibration/JetTagCalibCondData.h"
 
 #include "JetTagTools/IMultivariateJetTagger.h"
 
@@ -42,12 +39,9 @@ namespace CP { class IMuonSelectionTool; }
 
 namespace Analysis
 {
-
   class SoftMuonInfo;
   class NewLikelihoodTool;
-  //  class LikelihoodMultiDTool;
   class HistoHelperRoot;
-  class CalibrationBroker;
 
   class SoftMuonTag : public AthAlgTool, virtual public ITagTool
   {
@@ -78,8 +72,8 @@ namespace Analysis
     std::string m_treeName;
     std::string m_varStrName;
 
-    /** pointer to calibration in COOL: */
-    ToolHandle<CalibrationBroker> m_calibrationTool;
+    /** Key of calibration data: */
+    SG::ReadCondHandleKey<JetTagCalibCondData> m_readKey{this, "HistosKey", "JetTagCalibHistosKey", "Key of input (derived) JetTag calibration data"};
     bool m_forceMV2CalibrationAlias;
     bool m_useEgammaMethodMV2;
     //bool m_decorateBTaggingObj;
@@ -88,8 +82,6 @@ namespace Analysis
     std::string m_MV2cXX;
     std::string m_xAODBaseName;
 
-    std::map<std::string, TMVA::Reader*> m_tmvaReaders;
-    std::map<std::string, TMVA::MethodBase*> m_tmvaMethod;
     std::map<std::string, MVAUtils::BDT*> m_egammaBDTs;
     std::list<std::string> m_undefinedReaders; // keep track of undefined readers to prevent too many warnings.
 
@@ -186,10 +178,8 @@ namespace Analysis
     bool m_writeInfoPlus;
     std::string m_originalMuCollectionName;
     std::string m_muonAssociationName;
-    //const MuonContainer* m_originalMuCollection;
       
     void ReplaceNaN_andAssign(std::map<std::string, double> var_map);
-    //void SetVariableRefs(const std::vector<std::string> inputVars, TMVA::Reader* tmvaReader,
     void SetVariableRefs(const std::vector<std::string> inputVars,
 			 unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers);
     void ClearInputs();
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/DL1Tag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/DL1Tag.cxx
index 907bd5c8885af565acdfa6c9b9a9643c3cef4b49..e2073d9b0db9fbcf8b14f3e44b9fbd0524fd5dfe 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/DL1Tag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/DL1Tag.cxx
@@ -20,7 +20,6 @@
 #include "GaudiKernel/IToolSvc.h"
 #include "xAODTracking/TrackParticle.h"
 
-#include "JetTagCalibration/CalibrationBroker.h"
 #include "JetTagTools/DL1Tag.h"
 #include "JetTagTools/LightweightNeuralNetwork.h"
 #include "JetTagTools/parse_json.h"
@@ -57,8 +56,6 @@ namespace Analysis {
   DL1Tag::DL1Tag(const std::string& name, const std::string& n, const IInterface* p):
     AthAlgTool(name, n,p),
     m_calibrationDirectory("DL1"),
-    m_calibrationSubDirectory("AntiKt4TopoEM"),
-    m_calibrationTool("BTagCalibrationBroker"),
     m_n_compute_errors(0),
     m_runModus("analysis")
   {
@@ -67,8 +64,6 @@ namespace Analysis {
 
     // access to JSON NN configuration file from COOL:
     declareProperty("calibration_directory", m_calibrationDirectory);
-    declareProperty("calibration_subdirectory", m_calibrationSubDirectory);
-    declareProperty("calibrationTool", m_calibrationTool);
     declareProperty("forceDL1CalibrationAlias", m_forceDL1CalibrationAlias = true);
     declareProperty("DL1CalibAlias", m_DL1CalibAlias = "AntiKt4TopoEM");
     declareProperty("xAODBaseName", m_xAODBaseName);
@@ -86,23 +81,15 @@ namespace Analysis {
   }
 
   StatusCode DL1Tag::initialize() {
-    // prepare calibraiton tool
-    StatusCode sc = m_calibrationTool.retrieve();
-    if ( sc.isFailure() ) {
-      ATH_MSG_FATAL( "#BTAG# Failed to retrieve tool " << m_calibrationTool );
-      return sc;
-    }
-    else {
-      ATH_MSG_INFO( "#BTAG# Retrieved: " << m_calibrationTool );
-    }
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
 
     // Read in the configuration of the neural net for DL1:
     if (m_LocalNNConfigFile.size() != 0) { // retrieve map of NN config and default values from local JSON file
       std::ifstream nn_config_ifstream(m_LocalNNConfigFile);
       build_nn("local", nn_config_ifstream);
     }
-    else { // load the configuration from the COOL db:
-      load_calibration_file();
+    else { // done in condition algorithm
     }
 
     ATH_MSG_INFO(" Initialization of DL1Tag successful" );
@@ -110,18 +97,6 @@ namespace Analysis {
   }
 
 
-  void DL1Tag::load_calibration_file() {
-    std::string file_name = "/net_configuration"; // directory of NN calibration (starting from specific jet collection directory) in COOL db
-    m_calibrationTool->registerHistogram(m_calibrationDirectory, file_name);  //register the calibration file for later access
-
-    ATH_MSG_DEBUG(" #BTAG# Registered NN histograms with directory: " <<
-		  m_calibrationDirectory << " and subdirectory " <<
-		  m_calibrationSubDirectory);
-
-    m_calibrationTool->printStatus();
-  }
-
-
   void DL1Tag::build_nn(const std::string& jetauthor, std::istream& nn_config_istream) {
     if (m_NeuralNetworks.count(jetauthor)) {
       delete m_NeuralNetworks[jetauthor];
@@ -144,12 +119,11 @@ namespace Analysis {
 
 
   void DL1Tag::cache_calibration(const std::string& jetauthor) {
-    bool update = m_calibrationTool->retrieveHistogram(m_calibrationDirectory, jetauthor, "net_configuration").second;
-
+    
     // check if this network is alread cached, so do nothing
-    if ( (!update) && (m_NeuralNetworks.count(jetauthor) == 1) ) {
-      return;
-    }
+    //if (m_NeuralNetworks.count(jetauthor) == 1)  {
+    //  return;
+    //}
     // get the NN configuration
     std::string calib = get_calib_string(jetauthor);
     ATH_MSG_DEBUG("Reading NN for " + jetauthor + ": "
@@ -161,19 +135,14 @@ namespace Analysis {
   }
 
   std::string DL1Tag::get_calib_string(std::string jetauthor) {
-    std::string file_name = "/net_configuration";
-    std::pair<TObject*, bool> stringpair = m_calibrationTool->retrieveTObject<TObject>(m_calibrationDirectory, jetauthor, file_name);
-    if (stringpair.second == true) {
-      m_calibrationTool->updateHistogramStatus(m_calibrationDirectory, jetauthor, "net_configuration",false);
-    }
-    TObjString* cal_string = dynamic_cast<TObjString*>(stringpair.first);
+    std::string file_name = "net_configuration";
+
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey); 
+    TObjString * cal_string = readCdo->retrieveTObject<TObjString>(m_calibrationDirectory, jetauthor, file_name);
 
     if (cal_string == 0){  //catch if no string was found
       std::string fuller_name = m_calibrationDirectory + "/" +
 	jetauthor + "/net_configuration";
-      if (stringpair.first) {
-	fuller_name.append(" [but an object was found]");
-      }
       throw std::logic_error("Cannot retrieve string: " + fuller_name);
     }
     std::string calibration(cal_string->GetString().Data());
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/HistoHelperRoot.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/HistoHelperRoot.cxx
index a3d2cf99604f6fee58821854ef52ec45e1b53095..1e73fabc6d1159d4524a32115b6b3014b0e56ee7 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/HistoHelperRoot.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/HistoHelperRoot.cxx
@@ -172,102 +172,6 @@ TH3* HistoHelperRoot::getHisto3D(const std::string& histoName)
   return m_histoMap3D[histoName];
 }
 
-void HistoHelperRoot::normalizeHistos()
-{
-  //std::cout <<"In HistoHelperRoot::normalizeHistos()" << std::endl;
-  for (std::map<std::string, TH1*>::iterator mapItr = m_histoMap1D.begin();
-       mapItr != m_histoMap1D.end(); ++mapItr ) {
-    const std::string& name = (*mapItr).first;
-    //
-    TH1* histo = (*mapItr).second;
-    double norm(histo->Integral());
-    if (norm!=1. && norm != 0.) {
-      //std::cout << "Normalizing: " << name << std::endl;
-      histo->Scale(1./norm);
-    } else if (norm == 0.) {
-      std::cout << "Empty histogram ! "<< name <<std::endl;
-    }
-  }
-  for (std::map<std::string, TH2*>::iterator mapItr = m_histoMap2D.begin();
-       mapItr != m_histoMap2D.end(); ++mapItr ) {
-    const std::string& name = (*mapItr).first;
-    //
-    TH2* histo = (*mapItr).second;
-    double norm(histo->Integral());
-    if (norm!=1. && norm != 0.) {
-      //std::cout << "Normalizing: " << name << std::endl;
-      histo->Scale(1./norm);
-    } else if (norm == 0.) {
-      std::cout << "Empty histogram ! "<< name <<std::endl;
-    }
-  }
-  for (std::map<std::string, TH3*>::iterator mapItr = m_histoMap3D.begin();
-       mapItr != m_histoMap3D.end(); ++mapItr ) {
-    const std::string& name = (*mapItr).first;
-    //
-    TH3* histo = (*mapItr).second;
-    double norm(histo->Integral());
-    if (norm!=1. && norm != 0.) {
-      //std::cout << "Normalizing: " << name << std::endl;
-      histo->Scale(1./norm);
-    } else if (norm == 0.) {
-      std::cout << "Empty histogram ! "<< name <<std::endl;
-    }
-  }
-
-
-}
-
-void HistoHelperRoot::normalizeHistos(const std::string histname)
-{
-  double norm = 0.;
-  //
-  std::map<std::string,TH1*>::const_iterator pos = m_histoMap1D.find(histname);
-  if (pos != m_histoMap1D.end()) {
-    TH1* histo = pos->second;
-    norm = histo->Integral();
-    if (norm!=1. && norm != 0.) {
-      histo->Scale(1./norm);
-    } else if (norm == 0.) {
-      std::cout << "Empty histogram ! "<< (*pos).first <<std::endl;
-    }
-  } else {
-    std::map<std::string,TH2*>::const_iterator pos = m_histoMap2D.find(histname);
-    if (pos != m_histoMap2D.end()) {
-      TH2* histo = pos->second;
-      norm = histo->Integral();
-      if (norm!=1. && norm != 0.) {
-  histo->Scale(1./norm);
-      } else if (norm == 0.) {
-  std::cout << "Empty histogram ! "<< (*pos).first <<std::endl;
-      }
-    } else {
-      std::map<std::string,TH3*>::const_iterator pos = m_histoMap3D.find(histname);
-      if (pos != m_histoMap3D.end()) {
-  TH3* histo = pos->second;
-  norm = histo->Integral();
-  if (norm!=1. && norm != 0.) {
-    histo->Scale(1./norm);
-  } else if (norm == 0.) {
-    std::cout << "Empty histogram ! "<< (*pos).first <<std::endl;
-  }
-      } else {
-  std::cout << "Histo "<< histname << " does not exist ? Nothing to normalise !" << std::endl;
-      }
-    }
-  }
-}
-
-void HistoHelperRoot::smoothHistos(const std::string histname)
-{
-  std::map<std::string,TH1*>::const_iterator pos = m_histoMap1D.find(histname);
-  if (pos != m_histoMap1D.end()) {
-    (pos->second)->Smooth();
-  } else {
-    std::cout << "Histo "<< histname << " does not exist ? Nothing to normalise !" << std::endl;
-  }
-}
-
 void HistoHelperRoot::print() {
   for (std::map<std::string, TH1*>::iterator mapItr  = m_histoMap1D.begin();
        mapItr != m_histoMap1D.end(); ++mapItr ) {
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/IPTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/IPTag.cxx
index cdbf0181904fcddfb14cc8d8dea0abb0067e64d7..5a428289232e4f19f9024a8a6b419025ce4a30e0 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/IPTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/IPTag.cxx
@@ -83,8 +83,6 @@ namespace Analysis {
     : AthAlgTool(t,n,p),
       m_runModus("analysis"),
       m_histoHelper(0),
-      //m_secVxFinderNameForV0Removal("InDetVKalVxInJetTool"),
-      //m_secVxFinderNameForIPSign("InDetVKalVxInJetTool"),
       m_sortPt(false),
       m_sortD0sig(false),
       m_sortZ0D0sig(false),
@@ -95,7 +93,6 @@ namespace Analysis {
       m_likelihoodTool("Analysis::NewLikelihoodTool"),
       m_SVForIPTool("Analysis::SVForIPTool"),
       m_trackGradeFactory("Analysis::BasicTrackGradeFactory"),
-      // VD:trackToVertexIPestimator missing
       m_InDetTrackSelectorTool("InDet::InDetTrackSelectionTool"),
       m_TightTrackVertexAssociationTool("CP::TightTrackVertexAssociationTool")
   {
@@ -135,8 +132,6 @@ namespace Analysis {
     declareProperty("purificationDeltaR"      , m_purificationDeltaR = 0.8);
     declareProperty("jetPtMinRef"             , m_jetPtMinRef = 15.*Gaudi::Units::GeV);
 
-    //declareProperty("SecVxFinderNameForV0Removal",m_secVxFinderNameForV0Removal);
-    //declareProperty("SecVxFinderNameForIPSign"   ,m_secVxFinderNameForIPSign)
     declareProperty("SecVxFinderName"         ,m_secVxFinderName);
 
     declareProperty("NtrkMin"                 , m_NtrkMin =6 );
@@ -217,13 +212,6 @@ namespace Analysis {
       m_hypotheses.push_back("C");
     }
 
-    /** retrieving TrackToVertex: */
-    /*if ( m_trackToVertexTool.retrieve().isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_trackToVertexTool);
-      return StatusCode::FAILURE;
-    } else {
-      
-    }*/
     // FF: comment out V0 finding
     if (m_SVForIPTool.retrieve().isFailure() )  {
        ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_SVForIPTool);
@@ -268,7 +256,7 @@ namespace Analysis {
 
     /** prepare the track partitions: */
     int nbPart = m_trackGradePartitionsDefinition.size();
-    ATH_MSG_INFO("#BTAG# Defining " << nbPart <<" track partitions: ");
+    ATH_MSG_DEBUG("#BTAG# Defining " << nbPart <<" track partitions: ");
     for(int i=0;i<nbPart;i++) {
       TrackGradePartition* part(0);
       try {
@@ -295,7 +283,7 @@ namespace Analysis {
         ATH_MSG_ERROR("#BTAG# Terminating now... ");
         return StatusCode::FAILURE;
       }
-      ATH_MSG_INFO((*part));
+      ATH_MSG_DEBUG((*part));
       m_trackGradePartitions.push_back(part);
     }
 
@@ -308,19 +296,6 @@ namespace Analysis {
         ATH_MSG_DEBUG("#BTAG# Retrieved tool " << m_likelihoodTool);
       }
       m_likelihoodTool->defineHypotheses(m_hypotheses);
-      // define new lh variables:
-      for(unsigned int i=0;i<m_trackGradePartitions.size();i++) {
-        for(unsigned int ih=0;ih<m_hypotheses.size();ih++) {
-          std::string hName;
-          if(m_impactParameterView=="1D") 
-            hName = m_hypotheses[ih]+"/"+m_trackGradePartitions[i]->suffix()+"/SipZ0";
-          if(m_impactParameterView=="2D") 
-            hName = m_hypotheses[ih]+"/"+m_trackGradePartitions[i]->suffix()+"/SipA0";
-          if(m_impactParameterView=="3D") 
-            hName = m_hypotheses[ih]+"/"+m_trackGradePartitions[i]->suffix()+"/Sip3D";
-          m_likelihoodTool->defineHistogram(hName);
-        }
-      }
       m_likelihoodTool->printStatus();
     }
 
@@ -331,8 +306,7 @@ namespace Analysis {
 
     /** book calibration histograms if needed */
     if( m_runModus == "reference" ) {
-      //FF: comment out reference mode running for now
-      ATH_MSG_INFO("#BTAG# running IPTag in reference mode");
+      ATH_MSG_DEBUG("#BTAG# running IPTag in reference mode");
      for(uint j=0;j<m_jetCollectionList.size();j++) {
 
         //int nbGrades=trackFactoryGradesDefinition.numberOfGrades();
@@ -373,11 +347,6 @@ namespace Analysis {
 	}
       // ms m_histoHelper->print();
     }
-  /* ms
-    m_nbjet = 0;
-    m_ncjet = 0;
-    m_nljet = 0;
-  */
 
     if (m_impactParameterView=="3D") { 
       if ( m_InDetTrackSelectorTool.retrieve().isFailure() )  {
@@ -427,8 +396,6 @@ namespace Analysis {
     if( m_runModus == "reference" ) {
       // here we require a jet selection:
       if( jetToTag.pt()>m_jetPtMinRef && fabs(jetToTag.eta())<2.5 ) {
-        // and also a truth match:
-        //const TruthInfo* mcinfo = jetToTag.tagInfo<TruthInfo>("TruthInfo");
 	label = xAOD::jetFlavourLabel(&jetToTag);
 	double deltaRtoClosestB = 999., deltaRtoClosestC = 999., deltaRtoClosestT = 999.;
     	double deltaRmin(0.);
@@ -436,10 +403,7 @@ namespace Analysis {
     	  // for purification: require no b or c quark closer than dR=m_purificationDeltaR
 	  jetToTag.getAttribute("TruthLabelDeltaR_C",deltaRtoClosestC);
 	  jetToTag.getAttribute("TruthLabelDeltaR_T",deltaRtoClosestT);
-	  //double deltaRtoClosestB = mcinfo->deltaRMinTo("B");
-   	  //double deltaRtoClosestC = mcinfo->deltaRMinTo("C");
     	  deltaRmin = deltaRtoClosestB < deltaRtoClosestC ? deltaRtoClosestB : deltaRtoClosestC;
-          //double deltaRtoClosestT = mcinfo->deltaRMinTo("T");
           deltaRmin = deltaRtoClosestT < deltaRmin ? deltaRtoClosestT : deltaRmin;
         } else {
           ATH_MSG_ERROR("#BTAG# No TruthInfo ! Cannot run in reference mode !");
@@ -488,7 +452,6 @@ namespace Analysis {
     int nbTrak = 0;
     m_trackSelectorTool->primaryVertex(m_priVtx->position());
     m_trackSelectorTool->prepare();
-    //std::vector<const xAOD::TrackParticle*>* trackVector = NULL;
     std::vector< ElementLink< xAOD::TrackParticleContainer > > associationLinks = 
       BTag->auxdata<std::vector<ElementLink<xAOD::TrackParticleContainer> > >(m_trackAssociationName);
     double sumTrkpT = 0; unsigned ntrk=0;
@@ -587,7 +550,6 @@ namespace Analysis {
     vectZ0.reserve(nbTrackMean);
     vectZ0Signi.reserve(nbTrackMean);
     vectGrades.reserve(nbTrackMean);
-    //////////vectTP.reserve(nbTrackMean);
     vectFromV0.reserve(nbTrackMean);
     vectWeightB.reserve(nbTrackMean);
     vectWeightU.reserve(nbTrackMean);
@@ -690,11 +652,7 @@ namespace Analysis {
     if (m_sortD0sig)   std::sort( vectObj.begin() , vectObj.end() , StructD0Sigsorting );
     if (m_sortZ0D0sig) std::sort( vectObj.begin() , vectObj.end() , StructZ0D0Sigsorting );
     
-
-    //std::cout << std::endl;
-    //std::cout << " " << m_NtrkMax << " , " << m_trkFract << " , " << m_NtrkMin << std::endl;
     int resizeVal=vectObj.size();
-    //int tmpSize=resizeVal;
     if (m_NtrkMax!=1000) {
       if ( m_trkFract==1.0 ) {
 	if ( m_NtrkMax<resizeVal ) resizeVal=m_NtrkMax;
@@ -714,7 +672,7 @@ namespace Analysis {
       /** fill reference histograms: */
       ///* ms
       if( m_runModus == "reference" ) {
-	if( pref != "" ) { // current jet passes selection for Sig or Bkg
+	if( !pref.empty() ) { // current jet passes selection for Sig or Bkg
 	  ATH_MSG_DEBUG("#BTAG# filling ref histo for " << pref);
           const TrackGradesDefinition & trackFactoryGradesDefinition = m_trackGradeFactory->getTrackGradesDefinition();
           const std::vector<TrackGrade> & gradeList = trackFactoryGradesDefinition.getList();
@@ -954,17 +912,6 @@ namespace Analysis {
     twu = tmp[1];
     twc = 0.;
     if(m_useCHypo) twc = tmp[2];
-    /*
-    double w = -100.;
-    if(pb<=0.) {
-      w = -30.;
-    } else if (pu<=0.) {
-      w = +100.;
-    } else {
-      w = log(pb/pu);
-    }
-    return w;
-    */
   }
 
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/JetFitterNNTool.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/JetFitterNNTool.cxx
index f4d50059dd7093f3d29c3463f4144a600bbfb750..196d7c80c83eaf940d8a0f7ba3f3f1024c838af8 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/JetFitterNNTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/JetFitterNNTool.cxx
@@ -21,8 +21,6 @@
 #include <TH1F.h>
 #include <TH2F.h>
 
-#include "JetTagCalibration/CalibrationBroker.h"
-
 #include "TrkNeuralNetworkUtils/TTrainedNetwork.h"
 #include "JetTagTools/JetFitterNNTool.h"
 #include "TrkNeuralNetworkUtils/NeuralNetworkToHistoTool.h"
@@ -43,7 +41,6 @@ JetFitterNNTool::JetFitterNNTool(const std::string& name,
         m_calibrationSubDirectory("NeuralNetwork"),
         m_networkToHistoTool("Trk::NeuralNetworkToHistoTool"),
         m_useCombinedIPNN(true),
-        m_calibrationTool("BTagCalibrationBroker"),
         m_maximumRegisteredLayers(4)
 {
   declareProperty("CalibrationDirectory",m_calibrationDirectory);
@@ -52,8 +49,6 @@ JetFitterNNTool::JetFitterNNTool(const std::string& name,
   declareProperty("NeuralNetworkToHistoTool",m_networkToHistoTool);
   declareProperty("useCombinedIPNN",m_useCombinedIPNN);
 
-  declareProperty("calibrationTool",	m_calibrationTool);
-
   declareProperty("maximumRegisteredLayers",m_maximumRegisteredLayers);
 
   declareProperty("usePtCorrectedMass",m_usePtCorrectedMass = false);
@@ -82,77 +77,21 @@ JetFitterNNTool::~JetFitterNNTool() {
 }
 
 StatusCode JetFitterNNTool::initialize() {
+  ATH_CHECK(m_readKey.initialize()); 
 
-  //here you have to initialize the histograms needed for the fit...
-  StatusCode sc = m_calibrationTool.retrieve();
-  if (sc.isFailure())
-  {
-    ATH_MSG_FATAL(" Could not retrieve " << m_calibrationTool  << ". Aborting...");
-    return sc;
-  } else ATH_MSG_INFO(" Retrieved: " << m_calibrationTool);
-
-  sc = m_networkToHistoTool.retrieve();
+  StatusCode sc = m_networkToHistoTool.retrieve();
   if (sc.isFailure())
   {
     ATH_MSG_FATAL(" Could not retrieve " << m_networkToHistoTool  << ". Aborting...");
     return sc;
-  } else ATH_MSG_INFO(" Retrieved: " << m_networkToHistoTool << ". ");
+  } else ATH_MSG_DEBUG(" Retrieved: " << m_networkToHistoTool << ". ");
 
-  ATH_MSG_INFO("Calibration setting: cannot use Neural Network with more than: " << m_maximumRegisteredLayers << ".");
+  ATH_MSG_DEBUG("Calibration setting: cannot use Neural Network with more than: " << m_maximumRegisteredLayers << ".");
 
-  //now you need to initialize the Calibration Broker with the needed histograms...
-  initializeCalibrationFile();
-
-  ATH_MSG_INFO(" Initialization of JetFitterNNTool succesfull");
+  ATH_MSG_DEBUG(" Initialization of JetFitterNNTool succesfull");
   return StatusCode::SUCCESS;
 }
 
-  void JetFitterNNTool::initializeCalibrationFile()
-  {
-    
-    TString directory(m_calibrationSubDirectory);
-    directory+="/";
-    if (m_useCombinedIPNN)
-    {
-      directory+="comb";
-    }
-    else
-    {
-      directory+="standalone";
-    }
-    directory+="/";
-    
-    m_calibrationTool->registerHistogram(m_calibrationDirectory,
-                                         std::string((const char*)(directory+"LayersInfo")));
-    
-    Int_t nHidden=m_maximumRegisteredLayers-2;
-    
-    for (Int_t i=0;i<nHidden+1;++i)
-    {
-      
-      TString weightName("Layer");
-      weightName+=i;
-      weightName+="_weights";
-      
-      TString thresholdName("Layer");
-      thresholdName+=i;
-      thresholdName+="_thresholds";
-      
-      m_calibrationTool->registerHistogram(m_calibrationDirectory,
-                                           std::string((const char*)(directory+weightName)));
-      
-      m_calibrationTool->registerHistogram(m_calibrationDirectory,
-                                           std::string((const char*)(directory+thresholdName)));
-      
-    }
-
-    ATH_MSG_DEBUG(" Registered NN histograms with directory: " << m_calibrationDirectory << " and subdirectory " << directory);
-
-    m_calibrationTool->printStatus();
-    
-  }
-  
-
 StatusCode JetFitterNNTool::finalize() {
 
   //here you should probably delete something :-)
@@ -165,6 +104,8 @@ StatusCode JetFitterNNTool::finalize() {
     
     std::vector<TH1*> retrievedHistos;
     
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
+    
     //it is assumed that in the NN 0 is signal (bottom), 1 is charm and 2 is light
     
     TString directory(m_calibrationSubDirectory);
@@ -179,26 +120,11 @@ StatusCode JetFitterNNTool::finalize() {
     }
     directory+="/";
     
-    std::pair<TH1*, bool> histoLayers = m_calibrationTool->retrieveHistogram(m_calibrationDirectory, 
+    TH1* histoLayers = readCdo->retrieveHistogram("JetFitterNN", 
                                                                              jetauthor, 
                                                                              std::string((const char*)(directory+TString("LayersInfo"))));
-    
-    if (histoLayers.second==false && m_NN[jetauthor]!=0)
-    {
-      return;
-    } 
-    else if(histoLayers.second==true)
-    {
-      ATH_MSG_DEBUG(" HistoLayers in " << directory << " was updated. Switching updated now to false ... ");
-      m_calibrationTool->updateHistogramStatus(m_calibrationDirectory, 
-                                               jetauthor, 
-                                               std::string((const char*)(directory+TString("LayersInfo"))),
-                                               false);
-    }
-    
-        
 
-    TH1F* myHistoLayers=dynamic_cast<TH1F*>(histoLayers.first);
+    TH1F* myHistoLayers=dynamic_cast<TH1F*>(histoLayers);
 
     if (myHistoLayers==0)
     {
@@ -210,7 +136,7 @@ StatusCode JetFitterNNTool::finalize() {
 
     Int_t nHidden=myHistoLayers->GetNbinsX()-2;
 
-    ATH_MSG_INFO(" Retrieving calibration for NN with: " << nHidden << " hidden layers.");
+    ATH_MSG_DEBUG(" Retrieving calibration for NN with: " << nHidden << " hidden layers.");
 
     for (Int_t i=0;i<nHidden+1;++i)
     {
@@ -223,20 +149,11 @@ StatusCode JetFitterNNTool::finalize() {
       thresholdName+=i;
       thresholdName+="_thresholds";
       
-      std::pair<TH1*, bool> weightHisto = m_calibrationTool->retrieveHistogram(m_calibrationDirectory, 
+      TH1* weightHisto = readCdo->retrieveHistogram("JetFitterNN", 
                                                                                jetauthor, 
                                                                                std::string((const char*)(directory+weightName)));
-
-      if (weightHisto.second==true)
-      {
-        m_calibrationTool->updateHistogramStatus(m_calibrationDirectory, 
-                                                 jetauthor, 
-                                                 std::string((const char*)(directory+weightName)),
-                                                 false);
-      }
-      
       
-      TH2F* myWeightHisto=dynamic_cast<TH2F*>(weightHisto.first);
+      TH2F* myWeightHisto=dynamic_cast<TH2F*>(weightHisto);
       
       if (myWeightHisto==0)
       {
@@ -251,19 +168,11 @@ StatusCode JetFitterNNTool::finalize() {
 
       retrievedHistos.push_back(myWeightHisto);
 
-      std::pair<TH1*, bool> thresholdHisto = m_calibrationTool->retrieveHistogram(m_calibrationDirectory, 
+      TH1* thresholdHisto = readCdo->retrieveHistogram("JetFitterNN", 
                                                                                   jetauthor, 
                                                                                   std::string((const char*)(directory+thresholdName)));
 
-      if (thresholdHisto.second==true)
-      {
-        m_calibrationTool->updateHistogramStatus(m_calibrationDirectory, 
-                                                 jetauthor, 
-                                                 std::string((const char*)(directory+thresholdName)),
-                                                 false);
-      }
-
-      TH1F* myThresholdHisto=dynamic_cast<TH1F*>(thresholdHisto.first);
+      TH1F* myThresholdHisto=dynamic_cast<TH1F*>(thresholdHisto);
       
       if (myThresholdHisto==0)
       {
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/JetVertexCharge.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/JetVertexCharge.cxx
index 86521f421458bb32e652a4a4ee369240e6e8b629..4fa615f5fd7ddc005cf21da7506bcbe56c59718f 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/JetVertexCharge.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/JetVertexCharge.cxx
@@ -26,7 +26,6 @@
 #include "xAODMuon/MuonContainer.h"
 
 #include "JetTagTools/JetTagUtils.h"
-#include "JetTagCalibration/CalibrationBroker.h"
 #include "MuonSelectorTools/IMuonSelectionTool.h" 
 #include "MuonMomentumCorrections/IMuonCalibrationAndSmearingTool.h"
 #include "TMVA/Reader.h"
@@ -47,7 +46,6 @@ namespace Analysis {
 
   JetVertexCharge::JetVertexCharge(const std::string& t, const std::string& n, const IInterface*  p) :
     AthAlgTool(t,n,p),
-    m_calibrationTool("BTagCalibrationBroker"),
     m_muonSelectorTool("JVC_MuonSelectorTool"),
     m_muonCorrectionTool( "JVC_MuonCorrectionTool" ),
     m_runModus("analysis")
@@ -56,7 +54,6 @@ namespace Analysis {
     declareProperty("SecVxFinderName",		m_secVxFinderName);
     declareProperty("Runmodus",                 m_runModus);
 
-    declareProperty("calibrationTool", 		m_calibrationTool);
     declareProperty("muonSelectorTool", 	m_muonSelectorTool);
     declareProperty("muonCorrectionTool", 	m_muonCorrectionTool);
     declareProperty("taggerNameBase",		m_taggerNameBase = "JetVertexCharge");
@@ -98,17 +95,8 @@ namespace Analysis {
 //Initialize method
   StatusCode JetVertexCharge::initialize() {
 
-    StatusCode sc = m_calibrationTool.retrieve();
-    if ( sc.isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_calibrationTool);
-      return sc;
-    } else {
-      ATH_MSG_DEBUG("#BTAG# Retrieved tool " << m_calibrationTool);
-    }
-
-
     //Retrieve the Muon Selectot tool
-    sc = m_muonSelectorTool.retrieve();
+    StatusCode sc = m_muonSelectorTool.retrieve();
     if ( sc.isFailure() ) {
       ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_muonSelectorTool);
       return sc;
@@ -127,34 +115,8 @@ namespace Analysis {
 
     ATH_CHECK( m_muonCorrectionTool->initialize() );
 
-
-   //MVA xml files
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib_cat_JC_SVC_noMu");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib_cat_JC_SVC_incMu");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_noMu");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_incMu");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib_cat_JC_incMu");
-
-    //reference histos
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_noMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_noMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_incMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_incMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_TVC_noMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_TVC_noMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_TVC_incMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_SVC_TVC_incMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_incMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_incMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_noMu_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_noMu_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_SVC_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_SVC_bbar");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_all_b");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, "jvc_JC_all_bbar");
-
-
-    // m_alreadySetup = false;
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
 
     m_catNames[JC_SVC_noMu] = "JC_SVC_noMu";
     m_catNames[JC_SVC_incMu] = "JC_SVC_incMu";
@@ -196,64 +158,29 @@ namespace Analysis {
 StatusCode JetVertexCharge::tagJet( xAOD::Jet& jetToTag, xAOD::BTagging* BTag) {
 
 
+    //Retrieval of Calibration Condition Data objects
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
 
 
-   /** author to know which jet algorithm: */ 
-   std::string author = JetTagUtils::getJetAuthor(jetToTag);
-   if (m_doForcedCalib) author = m_ForcedCalibName;
-   std::string alias = m_calibrationTool->channelAlias(author);
-
+    /** author to know which jet algorithm: */ 
+    std::string author = JetTagUtils::getJetAuthor(jetToTag);
+    if (m_doForcedCalib) author = m_ForcedCalibName;
+    std::string alias = readCdo->getChannelAlias(author);
 
-   ClearVars();
 
-   m_jet_uPt = jetToTag.pt();
 
+    ClearVars();
 
+    m_jet_uPt = jetToTag.pt();
 
-   // if(m_runModus=="analysis" && !m_alreadySetup ) {
-   //   StatusCode sc = SetupReaders(author, alias, JC_SVC_noMu );
-   //    if( sc.isFailure() ) {
-   // 	ATH_MSG_WARNING("#BTAG# Could not setup the reader for the JC_SVC_noMu category, author = " << author);
-   // 	return StatusCode::SUCCESS;
-   //    } else ATH_MSG_INFO("#BTAG# Reader correctly setup for the JC_SVC_noMu category, author = " << author); 
-
-   //    sc = SetupReaders(author, alias, JC_SVC_incMu );
-   //    if( sc.isFailure() ) {
-   // 	ATH_MSG_WARNING("#BTAG# Could not setup the reader for the JC_SVC_incMu category, author = " << author);
-   // 	return StatusCode::SUCCESS;
-   //    } else ATH_MSG_INFO("#BTAG# Reader correctly setup for the JC_SVC_incMu category, author = " << author); 
-
-   //    sc = SetupReaders(author, alias, JC_SVC_TVC_noMu );
-   //    if( sc.isFailure() ) {
-   // 	ATH_MSG_WARNING("#BTAG# Could not setup the reader for the JC_SVC_TVC_noMu category, author = " << author);
-   // 	return StatusCode::SUCCESS;
-   //    } else ATH_MSG_INFO("#BTAG# Reader correctly setup for the JC_SVC_TVC_noMu category, author = " << author); 
-
-   //    sc = SetupReaders(author, alias, JC_SVC_TVC_incMu );
-   //    if( sc.isFailure() ) {
-   // 	ATH_MSG_WARNING("#BTAG# Could not setup the reader for the JC_SVC_TVC_incMu category, author = " << author);
-   // 	return StatusCode::SUCCESS;
-   //    } else ATH_MSG_INFO("#BTAG# Reader correctly setup for the JC_SVC_TVC_incMu category, author = " << author); 
-
-   //    sc = SetupReaders(author, alias, JC_incMu );
-   //    if( sc.isFailure() ) {
-   // 	ATH_MSG_WARNING("#BTAG# Could not setup the reader for the JC_incMu category, author = " << author);
-   // 	return StatusCode::SUCCESS;
-   //    } else ATH_MSG_INFO("#BTAG# Reader correctly setup for the JC_incMu category, author = " << author); 
-
-   //    m_alreadySetup =  true;
-   // }
-
+    //          computing the JetCharge (JC) 
+    //==============================================================
 
-   //==============================================================
-   //          computing the JetCharge (JC) 
-   //==============================================================
-
-   std::vector<ElementLink< xAOD::TrackParticleContainer > > tracksInJet;        
-   tracksInJet = BTag->auxdata< std::vector<ElementLink< xAOD::TrackParticleContainer > > >(m_trackAssociationName);
-   if( tracksInJet.size() == 0 ) {
+    std::vector<ElementLink< xAOD::TrackParticleContainer > > tracksInJet;        
+    tracksInJet = BTag->auxdata< std::vector<ElementLink< xAOD::TrackParticleContainer > > >(m_trackAssociationName);
+    if( tracksInJet.size() == 0 ) {
       ATH_MSG_DEBUG("#BTAG#  Could not find tracks associated with name " << m_trackAssociationName);
-   } else {
+    } else {
 
       ATH_MSG_DEBUG("#BTAG# There are "<<tracksInJet.size()<<" tracks associated to the jet.");  
 
@@ -283,7 +210,7 @@ StatusCode JetVertexCharge::tagJet( xAOD::Jet& jetToTag, xAOD::BTagging* BTag) {
       m_jc_all_jetPt = charge_all/jetToTag.pt();
 
 
-   }
+    }
 
 
    //==============================================================
@@ -457,7 +384,7 @@ StatusCode JetVertexCharge::tagJet( xAOD::Jet& jetToTag, xAOD::BTagging* BTag) {
      for( const auto& muLink : muonsInJet) {
          const xAOD::Muon* mu = *muLink;
 
-         xAOD::Muon* corrMuHelper = 0;
+         xAOD::Muon* corrMuHelper = nullptr;
          if( m_muonCorrectionTool->correctedCopy( *mu, corrMuHelper) != CP::CorrectionCode::Ok ) {
             ATH_MSG_WARNING("Cannot apply calibration nor smearing for muons." ); 
             continue;
@@ -468,9 +395,6 @@ StatusCode JetVertexCharge::tagJet( xAOD::Jet& jetToTag, xAOD::BTagging* BTag) {
    
          // Make all the muon quality cuts...
          xAOD::Muon::Quality quality = m_muonSelectorTool->getQuality(*p_corrMu);
-         //if( quality == xAOD::Muon::Tight ) ATH_MSG_INFO("Muon quality is 'Tight'");
-         //else if( quality == xAOD::Muon::Medium  ) ATH_MSG_INFO("Muon quality is 'Medium'");
-         //else ATH_MSG_INFO("Muon quality is "<<quality);
 
          //just added this cut         
          if( quality > m_muonQualityCut ) continue; 
@@ -634,63 +558,60 @@ StatusCode JetVertexCharge::tagJet( xAOD::Jet& jetToTag, xAOD::BTagging* BTag) {
       BTag->setVariable<int>(m_taggerNameBase, "category", mvaCat );
       BTag->setVariable<double>(m_taggerNameBase, "discriminant", -7. ); 
 
-   } 
-   else if( m_runModus == "analysis") {   
-
-     double llr;
-     if(mvaCat == JC_noMu ) { 
-       llr = logLikelihoodRatio( JC_noMu, m_jc , author, alias);  
-       BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
-       return StatusCode::SUCCESS;
-     } 
-     else if(mvaCat == JC_all ) { 
-       llr = logLikelihoodRatio( JC_all, m_jc_all , author, alias); 
-       BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
-       return StatusCode::SUCCESS;
-     } 
-     else if(mvaCat == SVC ) { 
-       llr = logLikelihoodRatio( SVC, m_svc , author, alias); 
-       BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
-       return StatusCode::SUCCESS;
-     } 
-     else if(mvaCat < 0 ) {   //NULL cat
-       BTag->setVariable<double>(m_taggerNameBase, "discriminant", -7. );
-       return StatusCode::SUCCESS;
-     } 
-
-     std::pair<TList*, bool> calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase + "Calib_cat_" + m_catNames[mvaCat]);
-     // the bool indicates whether a calibration has "changed". This is the case in particular when retrieving it for the first time.
-     if (calib.second) {
-       StatusCode sc = SetupReaders(author, alias, mvaCat, calib.first );
-       if( sc.isFailure() ) {
-	 ATH_MSG_DEBUG("#BTAG# Could not setup the reader for the " << m_catNames[mvaCat] << " category and author " << author);
-	 return StatusCode::SUCCESS;
-       } else ATH_MSG_DEBUG("#BTAG# Reader correctly setup for the " << m_catNames[mvaCat] << " category and author " << author); 
-     }
-
-
-     //Finally compute the weight 
-     float mvaWeight = -9.;
-     std::string reader_name = alias+m_catNames[mvaCat];
-     std::map<std::string, TMVA::Reader*>::iterator pos2 = m_tmvaReaders.find(reader_name);
-     if(pos2==m_tmvaReaders.end()) {
-       int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),reader_name);
-       if(0==alreadyWarned) {
-         ATH_MSG_WARNING("#BTAG# no TMVAReader defined for jet collection " << reader_name);
-         m_undefinedReaders.push_back(reader_name);
-       }
-     }
-     else {
-       std::map<std::string, TMVA::MethodBase*>::iterator itmap2 = m_tmvaMethod.find(reader_name);
-       if((itmap2->second)!=0){
-         mvaWeight = pos2->second->EvaluateMVA( itmap2->second ); 
-       } else ATH_MSG_WARNING("#BTAG#  kl==0"); 
-     }
+    } 
+    else if( m_runModus == "analysis") {   
+
+      double llr;
+      if(mvaCat == JC_noMu ) { 
+        llr = logLikelihoodRatio( JC_noMu, m_jc , author);  
+        BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
+        return StatusCode::SUCCESS;
+      } 
+      else if(mvaCat == JC_all ) { 
+        llr = logLikelihoodRatio( JC_all, m_jc_all , author); 
+        BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
+        return StatusCode::SUCCESS;
+      }  
+      else if(mvaCat == SVC ) { 
+        llr = logLikelihoodRatio( SVC, m_svc , author); 
+        BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
+        return StatusCode::SUCCESS;
+      } 
+      else if(mvaCat < 0 ) {   //NULL cat
+        BTag->setVariable<double>(m_taggerNameBase, "discriminant", -7. );
+        return StatusCode::SUCCESS;
+      } 
+
+      TList* calib = readCdo->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase + "Calib_cat_" + m_catNames[mvaCat]);
+      StatusCode sc = SetupReaders(author, alias, mvaCat, calib );
+      if( sc.isFailure() ) {
+        ATH_MSG_DEBUG("#BTAG# Could not setup the reader for the " << m_catNames[mvaCat] << " category and author " << author);
+        return StatusCode::SUCCESS;
+      } else ATH_MSG_DEBUG("#BTAG# Reader correctly setup for the " << m_catNames[mvaCat] << " category and author " << author); 
+
+
+      //Finally compute the weight 
+      float mvaWeight = -9.;
+      std::string reader_name = alias+m_catNames[mvaCat];
+      std::map<std::string, TMVA::Reader*>::iterator pos2 = m_tmvaReaders.find(reader_name);
+      if(pos2==m_tmvaReaders.end()) {
+        int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),reader_name);
+        if(0==alreadyWarned) {
+          ATH_MSG_WARNING("#BTAG# no TMVAReader defined for jet collection " << reader_name);
+          m_undefinedReaders.push_back(reader_name);
+        }
+      }
+      else {
+        std::map<std::string, TMVA::MethodBase*>::iterator itmap2 = m_tmvaMethod.find(reader_name);
+        if((itmap2->second)!=0){
+          mvaWeight = pos2->second->EvaluateMVA( itmap2->second ); 
+        } else ATH_MSG_WARNING("#BTAG#  kl==0"); 
+      }
 
 
-    //Now I compute the log-likelihood ratio
-    llr = logLikelihoodRatio( mvaCat, mvaWeight , author, alias); 
-    BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
+      //Now I compute the log-likelihood ratio
+      llr = logLikelihoodRatio( mvaCat, mvaWeight , author); 
+      BTag->setVariable<double>(m_taggerNameBase, "discriminant", llr );
 
 
     }  //if runmodus Analysis
@@ -766,113 +687,78 @@ int JetVertexCharge::category() {
 }
 
 //////////////////////////////////////////////////////
-float  JetVertexCharge::logLikelihoodRatio( int mvaCat, float mvaWeight, std::string author, std::string alias)  {
+float  JetVertexCharge::logLikelihoodRatio( int mvaCat, float mvaWeight, std::string author)  {
 
 
-  std::pair<TH1*,bool> histo_pos;
-  std::pair<TH1*,bool> histo_neg;
+  TH1* histo_pos = nullptr;
+  TH1* histo_neg = nullptr;
+
+  //Retrieval of Calibration Condition Data objects
+  SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
   
   if( mvaCat == JC_noMu) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_noMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_noMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_noMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_noMu_b"); 
   }
   else if( mvaCat == JC_SVC_noMu) { 
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_noMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_noMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_noMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_noMu_b"); 
   }
   else if( mvaCat == JC_SVC_incMu) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_incMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_incMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_incMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_incMu_b"); 
   }
   else if( mvaCat == JC_SVC_TVC_noMu) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_noMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_noMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_noMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_noMu_b"); 
   }
   else if( mvaCat == JC_incMu) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_incMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_incMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_incMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_incMu_b"); 
   }
   else if( mvaCat == JC_SVC_TVC_incMu) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_incMu_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_incMu_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_incMu_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_SVC_TVC_incMu_b"); 
   }
   else if( mvaCat == SVC) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_SVC_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_SVC_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_SVC_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_SVC_b"); 
   }
   else if( mvaCat == JC_all) {
-    histo_pos = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_all_bbar"); 
-    histo_neg = m_calibrationTool->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_all_b"); 
+    histo_pos = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_all_bbar"); 
+    histo_neg = readCdo->retrieveHistogram(m_taggerNameBase, author, "jvc_JC_all_b"); 
   }
   else if(mvaCat == -1) {
     return -7; 
   }
 
-  bool histosHaveChanged = (histo_pos.second || histo_neg.second); 
-  if(histosHaveChanged) {
-
-    if( histo_pos.first ==NULL ) {
-      ATH_MSG_WARNING("#BTAG# BBAR HISTO can't be retrieved -> no calibration for "<< m_taggerNameBase );
-      return -3.; 
-    }
-    if(  histo_neg.first==NULL) {
-      ATH_MSG_WARNING("#BTAG# B HISTO can't be retrieved -> no calibration for "<< m_taggerNameBase );
-      return -3;
-    }
 
-    if( mvaCat == JC_noMu) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_noMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_noMu_b", false);
-    }
-    else if( mvaCat == JC_SVC_noMu) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_noMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_noMu_b", false);
-    }
-    else if( mvaCat == JC_SVC_incMu) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_incMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_incMu_b", false);
-    }
-    else if( mvaCat == JC_SVC_TVC_noMu) {	
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_TVC_noMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_TVC_noMu_b", false);
-    }
-    else if( mvaCat == JC_SVC_TVC_incMu) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_TVC_incMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_SVC_TVC_incMu_b", false);
-    }
-    else if( mvaCat == SVC) {	
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_SVC_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_SVC_b", false);
-    }
-    else if( mvaCat == JC_all) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_all_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_all_b", false);
-    }
-    else if( mvaCat == JC_incMu) {
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_incMu_bbar", false);
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, "jvc_JC_incMu_b", false);
-    }
-
-
-    TH1F* hp = (TH1F*) histo_pos.first; 
-    TH1F* hn = (TH1F*) histo_neg.first; 
+  if( histo_pos == nullptr ) {
+    ATH_MSG_WARNING("#BTAG# BBAR HISTO can't be retrieved -> no calibration for "<< m_taggerNameBase );
+    return -3.; 
+  }
+  if( histo_neg== nullptr) {
+    ATH_MSG_WARNING("#BTAG# B HISTO can't be retrieved -> no calibration for "<< m_taggerNameBase );
+    return -3;
+  }
 
-    std::map<int, TH1F*>::iterator pos;
-    std::map<int, TH1F*>::iterator neg;
+  TH1F* hp = (TH1F*) histo_pos; 
+  TH1F* hn = (TH1F*) histo_neg; 
 
-    pos = m_histoList_pos.find(mvaCat); 
-    if(pos!=m_histoList_pos.end()) {
-      m_histoList_pos.erase(pos);
-    }
-    neg = m_histoList_neg.find(mvaCat); 
-    if(neg!=m_histoList_neg.end()) {
-      m_histoList_neg.erase(neg);
-    }
+  std::map<int, TH1F*>::iterator pos;
+  std::map<int, TH1F*>::iterator neg;
 
-    m_histoList_pos.insert( std::make_pair( mvaCat, hp ) ); 
-    m_histoList_neg.insert( std::make_pair( mvaCat, hn ) );
+  pos = m_histoList_pos.find(mvaCat); 
+  if(pos!=m_histoList_pos.end()) {
+    m_histoList_pos.erase(pos);
+  }
+  neg = m_histoList_neg.find(mvaCat); 
+  if(neg!=m_histoList_neg.end()) {
+    m_histoList_neg.erase(neg);
+  }
 
-  }  //if something changed
+  m_histoList_pos.insert( std::make_pair( mvaCat, hp ) ); 
+  m_histoList_neg.insert( std::make_pair( mvaCat, hn ) );
 
 
   float histo_bbar = minProb, histo_b = minProb;
@@ -905,42 +791,12 @@ StatusCode JetVertexCharge::SetupReaders( std::string /*author*/, std::string al
 
    ATH_MSG_DEBUG("#BTAG# setting up reader for category "<<mvaCat);
 
-
-   // std::pair<TList*, bool> calib;
-
-   // if( mvaCat == JC_SVC_noMu ) calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase+"Calib_cat_JC_SVC_noMu");
-   // else if(mvaCat == JC_SVC_incMu ) calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase+"Calib_cat_JC_SVC_incMu");
-   // else if(mvaCat == JC_SVC_TVC_noMu ) calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_noMu");
-   // else if(mvaCat == JC_SVC_TVC_incMu ) calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_incMu");
-   // else if(mvaCat == JC_incMu ) calib = m_calibrationTool->retrieveTObject<TList>(m_taggerNameBase, author, m_taggerNameBase+"Calib_cat_JC_incMu");
-
-
-   // bool calibHasChanged = calib.second;
-   // if(calibHasChanged) { 
-
-   ATH_MSG_DEBUG("#BTAG# " << m_taggerNameBase << " calib updated -> try to retrieve");
-   // if(!calib.first) {
    if (! list) {
      ATH_MSG_WARNING("#BTAG# Tlist can't be retrieved -> no calibration for "<< m_taggerNameBase );
      return StatusCode::FAILURE;
    }
 
 
-   m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_" + m_catNames[mvaCat], false);
-      // if( mvaCat == JC_SVC_noMu) m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_JC_SVC_noMu", false);
-      // else if( mvaCat == JC_SVC_incMu) m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_JC_SVC_incMu", false);
-      // else if( mvaCat == JC_SVC_TVC_noMu) m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_noMu", false);
-      // else if( mvaCat == JC_SVC_TVC_incMu) m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_JC_SVC_TVC_incMu", false);
-      // else if( mvaCat == JC_incMu) m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib_cat_JC_incMu", false);
-
-      // //now the new part istringstream
-      // TList* list = calib.first; 
-
-   // Note: the variables and their ranges (to be used in TMVA::Reader::AddVariable() calls) are extracted from the XML object itself.
-   // This is somewhat fragile, as it assumes that the expressions used are either simple variable names or expressions implementing a minimum or maximum bound, like
-   //         "(distSV&gt;105.)?105.:distSV"
-   // where it is assumed that the actual variable name follows the ":", and the "&gt;" is an XML representation of ">" (and hence needs to be replaced with the latter)
-   
    std::vector<std::string> inputVars;
    std::ostringstream iss;
    for(int i=0; i<list->GetSize(); ++i) {
@@ -994,69 +850,6 @@ StatusCode JetVertexCharge::SetupReaders( std::string /*author*/, std::string al
      tmvaReader->AddVariable(expression.c_str(), m_variablePtr[var]);
    }
 
-   // if( mvaCat == JC_SVC_noMu ) { 
-   //   tmvaReader->AddVariable( "JC",		&m_jc );
-   //   tmvaReader->AddVariable( "SVC", 	&m_svc );
-   //   tmvaReader->AddVariable( "(track_good_pt>90000.)?90000.:track_good_pt", 	&m_jc_track_pt );
-   //   tmvaReader->AddVariable( "(ntrk0>14.)?14.:ntrk0",	&m_sv_ntrk );
-   //   tmvaReader->AddVariable( "(distSV>105.)?105.:distSV",  	&m_sv_dist );
-   //   tmvaReader->AddVariable( "(errSV>5.)?5.:errSV", 	&m_sv_err );
-   //   tmvaReader->AddVariable( "(track_sv_pt>200000.)?200000.:track_sv_pt", 	&m_sv_track_pt );
-   // }
-   // else if( mvaCat == JC_SVC_incMu ) {
-   //   tmvaReader->AddVariable( "JC",	&m_jc );
-   //   tmvaReader->AddVariable( "SVC", 	&m_svc );
-   //   tmvaReader->AddVariable( "mu_charge",  	&m_mu_charge );
-   //   tmvaReader->AddVariable( "(track_good_pt>120000.)?120000.:track_good_pt", 	&m_jc_track_pt );
-   //   tmvaReader->AddVariable( "(ntrk0>13.)?13.:ntrk0", 	&m_sv_ntrk );
-   //   tmvaReader->AddVariable( "(distSV>120.)?120.:distSV", 	&m_sv_dist );
-   //   tmvaReader->AddVariable( "(errSV>5.)?5.:errSV",  	&m_sv_err );
-   //   tmvaReader->AddVariable( "(mu_ptRel>20.)?20.:mu_ptRel",	&m_mu_ptRel );
-   //   tmvaReader->AddVariable( "(mu_ptLong>500.)?500.:mu_ptLong", 	&m_mu_ptlong );
-   // }
-   // else if( mvaCat == JC_SVC_TVC_noMu ) {
-   //   tmvaReader->AddVariable( "JC",	&m_jc );
-   //   tmvaReader->AddVariable( "SVC",	&m_svc );
-   //   tmvaReader->AddVariable( "TVC",	&m_tvc ); 
-   //   tmvaReader->AddVariable( "(track_good_pt>100000.)?100000.:track_good_pt", &m_jc_track_pt );
-   //   tmvaReader->AddVariable( "(ntrk0>10.)?10.:ntrk0", &m_sv_ntrk );
-   //   tmvaReader->AddVariable( "(distSV>90.)?90.:distSV", &m_sv_dist );
-   //   tmvaReader->AddVariable( "(errSV>5.)?5.:errSV", &m_sv_err );
-   //   tmvaReader->AddVariable( "(track_sv_pt>250000.)?250000.:track_sv_pt", &m_sv_track_pt );
-   //   tmvaReader->AddVariable( "(massSV_pions>6000.)?6000.:massSV_pions", &m_sv_mass_pions );
-   //   tmvaReader->AddVariable( "(ntrk1_used>10.)?10.:ntrk1_used", &m_tv_ntrk ); 
-   //   tmvaReader->AddVariable( "(distTV>200.)?200.:distTV", &m_tv_dist );
-   //   tmvaReader->AddVariable( "(errTV>5.)?5.:errTV", &m_tv_err );
-   //   tmvaReader->AddVariable( "(massTV_kaons>6000.)?6000.:massTV_kaons", &m_tv_mass_kaons );
-   // }
-   // else if(mvaCat == JC_SVC_TVC_incMu) {	
-   //   tmvaReader->AddVariable( "JC",	&m_jc );
-   //   tmvaReader->AddVariable( "SVC",	&m_svc );
-   //   tmvaReader->AddVariable( "TVC",	&m_tvc );  
-   //   tmvaReader->AddVariable( "mu_charge",  	&m_mu_charge );
-   //   tmvaReader->AddVariable( "(track_good_pt>120000.)?120000.:track_good_pt", &m_jc_track_pt );
-   //   tmvaReader->AddVariable( "(ntrk0>10.)?10.:ntrk0", &m_sv_ntrk );
-   //   tmvaReader->AddVariable( "(distSV>90.)?90.:distSV", &m_sv_dist );
-   //   tmvaReader->AddVariable( "(errSV>5.)?5.:errSV", &m_sv_err ); 
-   //   tmvaReader->AddVariable( "(ntrk1_used>10.)?10.:ntrk1_used", &m_tv_ntrk ); 
-   //   tmvaReader->AddVariable( "(distTV>200.)?200.:distTV", &m_tv_dist );
-   //   tmvaReader->AddVariable( "(errTV>5.)?5.:errTV", &m_tv_err );
-   //   tmvaReader->AddVariable( "(massTV_kaons>6000.)?6000.:massTV_kaons", &m_tv_mass_kaons );
-   //   tmvaReader->AddVariable( "(mu_ptRel>12.)?12.:mu_ptRel",	&m_mu_ptRel );
-   //   tmvaReader->AddVariable( "(mu_ptLong>400.)?400.:mu_ptLong",	&m_mu_ptLong );
-   // }
-   // else if(mvaCat == JC_incMu) {	
-   //   tmvaReader->AddVariable( "JC",	&m_jc );
-   //   tmvaReader->AddVariable( "mu_charge",	&m_mu_charge );
-   //   tmvaReader->AddVariable( "(ngoodtrk>28.)?28.:ngoodtrk",	&m_ngoodtrk );
-   //   tmvaReader->AddVariable( "(track_good_pt>120000.)?120000.:track_good_pt",	&m_jc_track_pt );
-   //   tmvaReader->AddVariable( "(mu_ptRel>20.)?20.:mu_ptRel",	&m_mu_ptRel );
-   //   tmvaReader->AddVariable( "(mu_ptLong>400.)?400.:mu_ptLong",	&m_mu_ptLong );
-   //   tmvaReader->AddVariable( "(mu_iso_ptvar40>700000.)?700000.:mu_iso_ptvar40",	&m_mu_iso );
-   //   tmvaReader->AddVariable( "mu_jet_dR",	&m_mu_jet_dR );
-   // }              
-
- 
    TMVA::IMethod* method= tmvaReader->BookMVA(TMVA::Types::kMLP, iss.str().data());  
    auto kl = dynamic_cast<TMVA::MethodBase*>(method);
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/MV2Tag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/MV2Tag.cxx
index ab0443cc83bb6e33c09bdb67cd8cf69b5e1c060b..5ec874643422686579723aef59746e86df1905d2 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/MV2Tag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/MV2Tag.cxx
@@ -5,14 +5,11 @@
 #include "GaudiKernel/IToolSvc.h"
 #include "xAODTracking/TrackParticle.h"
 
-#include "JetTagCalibration/CalibrationBroker.h"
 #include "JetTagTools/MV2Tag.h"
 
 #include "xAODBTagging/BTagging.h"
 #include "xAODJet/Jet.h"
 
-#include "TObjString.h"
-
 #include <fstream>
 #include <sstream>
 #include <algorithm>
@@ -25,11 +22,11 @@
 #include "JetTagTools/JetTagUtils.h"
 
 #include "AthenaKernel/Units.h"
-#include "TMVA/Reader.h"
-#include "TMVA/MethodBDT.h"
 #include "TList.h"
 #include "TString.h"
 #include "TObjString.h"
+#include "TObjArray.h"
+#include "TTree.h"
 #include <fstream>
 #include <algorithm>
 #include <utility>
@@ -51,14 +48,10 @@ namespace Analysis {
 
   MV2Tag::MV2Tag(const std::string& name, const std::string& n, const IInterface* p):
     AthAlgTool(name, n,p),
-    m_calibrationTool("BTagCalibrationBroker"),
     m_runModus("analysis") {
 
     declareInterface<IMultivariateJetTagger>(this);
 
-    // access to XML configuration files for TMVA from COOL:
-    declareProperty("calibrationTool", m_calibrationTool);
-
     // force MV2 to always use a calibration derived from MV2CalibAlias jet collection
     declareProperty("forceMV2CalibrationAlias", m_forceMV2CalibrationAlias = true);
     declareProperty("MV2CalibAlias", m_MV2CalibAlias = "AntiKt4TopoEM");
@@ -89,25 +82,14 @@ namespace Analysis {
   StatusCode MV2Tag::initialize() {
 
     m_disableAlgo=false;
-    m_useEgammaMethodMV2=false;
     m_warnCounter=0;
 
     m_treeName = "BDT";
     m_varStrName = "variables";
 
-    // prepare calibration tool:
-    StatusCode sc = m_calibrationTool.retrieve();
-    if ( sc.isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_calibrationTool);
-      return sc;
-    } else {
-      ATH_MSG_INFO("#BTAG# Retrieved tool " << m_calibrationTool);
-    }
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_treeName);
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_varStrName);
-    m_tmvaReaders.clear();
-    m_tmvaMethod.clear();
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
+
     m_egammaBDTs.clear();
     return StatusCode::SUCCESS;
   }
@@ -115,17 +97,7 @@ namespace Analysis {
 
   StatusCode MV2Tag::finalize() {
     ATH_MSG_DEBUG("#BTAG# Finalizing MV2.");
-    if (m_useEgammaMethodMV2) {
-      for( auto temp: m_egammaBDTs ) if(temp.second) delete temp.second;
-    }
-    else {
-      // delete readers:
-      std::map<std::string, TMVA::Reader*>::iterator pos = m_tmvaReaders.begin();
-      for( ; pos != m_tmvaReaders.end(); ++pos ) delete pos->second;
-      std::map<std::string, TMVA::MethodBase*>::iterator posm = m_tmvaMethod.begin();
-      for( ; posm != m_tmvaMethod.end(); ++posm ) delete posm->second;
-    }
-
+    for( auto temp: m_egammaBDTs ) if(temp.second) delete temp.second;
     for (auto& iter: m_local_inputvals) {
         delete iter.second;
     }
@@ -138,7 +110,7 @@ namespace Analysis {
 
      /*
      * #index for this function
-     * #1: Preparation of MVA instance using tmva/MVAUtils BDT
+     * #1: Preparation of MVA instance using MVAUtils BDT
      * #2: set input variables from MultivariateTagManager inputs map
      * #3: Calcuation of MVA output variable(s)
      * #4: Fill MVA output variable(s) into xAOD
@@ -152,206 +124,84 @@ namespace Analysis {
       }
     }
 
-    // #1: Preparation of MVA instance using tmva/egammaBDT
+    // #1: Preparation of MVA instance using egammaBDT
     /* jet author: */
     std::string author(assigned_jet_author);
+    ATH_MSG_DEBUG("#BTAG# Jet author for MV2: " << author);
 
     if (m_forceMV2CalibrationAlias) {
       author = m_MV2CalibAlias;
     }
+    MVAUtils::BDT *bdt = nullptr; std::map<std::string, MVAUtils::BDT*>::iterator it_egammaBDT;
 
-    ATH_MSG_DEBUG("#BTAG# Jet author for MV2: " << author);
-
-    /* check if calibration has to be updated: */
-    std::pair<TObject*, bool> calib=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib");
-
-    bool calibHasChanged = calib.second;
-
-    TMVA::Reader* tmvaReader=0;     std::map<std::string, TMVA::Reader*>::iterator pos;
-    TMVA::MethodBase * kl=0;        std::map<std::string, TMVA::MethodBase*>::iterator it_mb;
-    MVAUtils::BDT *bdt=0; std::map<std::string, MVAUtils::BDT*>::iterator it_egammaBDT;
-
-    /*KM: Retrieval of objects from the calibration file and store it back in the calibration broker temporarily*/
-    if(calibHasChanged) {
-      ATH_MSG_DEBUG("#BTAG# " << m_taggerNameBase << " calib updated -> try to retrieve");
-      if(!calib.first) {
-	ATH_MSG_WARNING("#BTAG# TObject can't be retrieved -> no calibration for"<< m_taggerNameBase<<" "<<author);
-	m_disableAlgo=true;
-	return;
-      }
-      else {
-	const TString rootClassName=calib.first->ClassName();
-
-	if      (rootClassName=="TDirectoryFile") m_useEgammaMethodMV2=true;
-	else if (rootClassName=="TList")          m_useEgammaMethodMV2=false;//tmva method
-	else {
-	  ATH_MSG_WARNING("#BTAG# Unsupported ROOT class type: "<<rootClassName<<" is retrieved. Disabling algorithm..");
-	  m_disableAlgo=true;
-          return;
-	}
-
-      }
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, author, m_taggerNameBase+"Calib", false);
-
-      //const std::string treeName  ="BDT";
-      //const std::string varStrName="variables";
-      std::vector<std::string> inputVars; inputVars.clear();
-
-      if (!m_useEgammaMethodMV2) {
-	ATH_MSG_INFO("#BTAG# Booking TMVA::Reader for "<<m_taggerNameBase);
-	std::ostringstream iss; //iss.clear();
-	//now the new part istringstream
-	TList* list = (TList*)calib.first;
-
-      for(int i=0; i<list->GetSize(); ++i) {
-
-          TObjString* ss = (TObjString*)list->At(i);
-	      std::string sss = ss->String().Data();
-
-        //KM: if it doesn't find "<" in the string, it starts from non-space character
-	  int posi = sss.find('<')!=std::string::npos ? sss.find('<') : sss.find_first_not_of(" ");
-	  std::string tmp = sss.erase(0,posi);
-
-	  iss << tmp.data();
-	  if (tmp.find("<Variable")!=std::string::npos ) {
-	    if ( tmp.find("Variable VarIndex")!=std::string::npos ) {
-	      std::string varIndex  =tmp.substr(tmp.find("=\"")+2, tmp.find("\" ")-(tmp.find("=\"")+2));
-	      std::string tmpVar  = tmp.erase(0,tmp.find("Expression=\"")+12);
-	      std::string varExpress=tmp.substr(0, tmp.find("\""));
-	      inputVars.push_back(varExpress);
-	    }
-	  }
-	  // else if (tmp.find("NClass")!=std::string::npos ) {
-	  //   std::string newString=tmp.substr(tmp.find("\"")+1,tmp.find("\" ")-(tmp.find("\"")+1));
-	  //   nClasses =stoi(newString);
-	  // }
-	}
-	m_calibrationTool->storeCalib(m_taggerNameBase, author, m_taggerNameBase+"Calib", inputVars, iss.str(), 0);
-
-	iss.clear();
-      }
-      else {//if m_useEgammaMethodMV2
-	std::pair<TObject*, bool> calibTree=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_treeName);
-	std::pair<TObject*, bool> calibVariables=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_varStrName);
-	TTree *tree = (TTree*) calibTree.first;
-	TObjArray* toa= (TObjArray*) calibVariables.first;
-	std::string commaSepVars="";
-	if (toa) {
-	  TObjString *tos= 0;
-	  if (toa->GetEntries()>0) tos= (TObjString*) toa->At(0);
-	  commaSepVars=tos->GetString().Data();
-	}
-
-	//prepare inputVars
-	while (commaSepVars.find(",")!=std::string::npos) {
-	  inputVars.push_back(commaSepVars.substr(0,commaSepVars.find(",")));
-	  commaSepVars.erase(0,commaSepVars.find(",")+1);
-	}
-	inputVars.push_back(commaSepVars.substr(0,-1));
-
-	m_calibrationTool->storeCalib(m_taggerNameBase, author, m_taggerNameBase+"Calib", inputVars, "", tree);
-      }
-    }//calibHasChanged
-
-    /*KM: Get back the calib objects from calibration broker*/
-    std::string alias = m_calibrationTool->channelAlias(author);
-    if (!m_calibrationTool->updatedTagger(m_taggerNameBase, author, m_taggerNameBase+"Calib") ) {
-      std::vector<float*>  inputPointers; inputPointers.clear();
-      unsigned nConfgVar=0; bool badVariableFound=false;
-
-      CalibrationBroker::calibMV2 calib = m_calibrationTool->getCalib(m_taggerNameBase, author, m_taggerNameBase+"Calib");
-      std::vector<std::string> inputVars = calib.inputVars;
-      std::string str = calib.str;
-      TTree* tree = (TTree*)calib.obj;
-
-      if      (str=="" and tree!=0) {	m_useEgammaMethodMV2=true;        }
-      else if (str!="" and tree==0) {	m_useEgammaMethodMV2=false;       }
-      else{
-	ATH_MSG_WARNING("#BTAG# Unrecognized MV2 configuration disabling the algorithm..." );
-	m_disableAlgo=true;
-	return;
-      }
-      ATH_MSG_VERBOSE("#BTAG# MV2 m_useEgammaMethodMV2= "<<m_useEgammaMethodMV2 );
- 
-      if (!m_useEgammaMethodMV2) {
-	// now configure the TMVAReaders:
-	/// check if the reader for this tagger needs update
-	tmvaReader = new TMVA::Reader();
-
-      //Input variables :
-      //replace NAN default values and, assign the values from the MVTM input map to the relevant variables
-      //currently default values are hard coded in the definition of ReplaceNaN_andAssign()
-
-      CreateLocalVariables( inputs );
+    //Retrieval of Calibration Condition Data objects
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
+    //readCdo->printHistosStatus();
 
-      SetVariableRefs(inputVars,tmvaReader,nConfgVar,badVariableFound,inputPointers);
+    std::string alias = readCdo->getChannelAlias(author);
 
 
-      ATH_MSG_DEBUG("#BTAG# tmvaReader= "<<tmvaReader          <<", nConfgVar"<<nConfgVar
-		      <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
-
-	if ( inputVars.size()!=nConfgVar or badVariableFound ) {
-	  ATH_MSG_WARNING("#BTAG# Number of expected variables for MVA: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << inputVars.size() << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
-	  m_disableAlgo=true;
-	  return;
-	}
-
-	//tmvaReader->BookMVA("BDT", xmlFileName);
-	TMVA::IMethod* method= tmvaReader->BookMVA(TMVA::Types::kBDT, str.data() );
-	kl = dynamic_cast<TMVA::MethodBase*>(method);
+    TObjArray* toa=readCdo->retrieveTObject<TObjArray>(m_taggerNameBase,author, m_taggerNameBase+"Calib/"+m_varStrName);
+    TTree *tree = readCdo->retrieveTObject<TTree>(m_taggerNameBase,author, m_taggerNameBase+"Calib/"+m_treeName);
+    std::string commaSepVars="";
+    if (toa) {
+      TObjString *tos= nullptr;
+      if (toa->GetEntries()>0) tos= (TObjString*) toa->At(0);
+      commaSepVars=tos->GetString().Data();
+    } else {
+      ATH_MSG_WARNING("#BTAG# calibVariables has no elements! PLEASE CHECK OUT!");
+      m_disableAlgo=true;
+      return;
+    }
 
-	// add it or overwrite it in the map of readers:
-	pos = m_tmvaReaders.find(alias);
-	if(pos!=m_tmvaReaders.end()) {
-	  delete pos->second;
-	  m_tmvaReaders.erase(pos);
-	}
-	m_tmvaReaders.insert( std::make_pair( alias, tmvaReader ) );
+    //prepare inputVars
+    std::vector<std::string> inputVars; inputVars.clear();
+    while (commaSepVars.find(",")!=std::string::npos) {
+      inputVars.push_back(commaSepVars.substr(0,commaSepVars.find(",")));
+      commaSepVars.erase(0,commaSepVars.find(",")+1);
+    }
+    inputVars.push_back(commaSepVars.substr(0,-1));
 
-	it_mb = m_tmvaMethod.find(alias);
-	if(it_mb!=m_tmvaMethod.end()) {
-	  delete it_mb->second;
-	  m_tmvaMethod.erase(it_mb);
-	}
-	m_tmvaMethod.insert( std::make_pair( alias, kl ) );
+    ATH_MSG_DEBUG("#BTAG# tree name= "<< tree->GetName() <<" inputVars.size()= "<< inputVars.size());// <<" toa->GetEntries()= "<< toa->GetEntries() <<"commaSepVars= "<< commaSepVars);
+    for (unsigned int asv=0; asv<inputVars.size(); asv++) ATH_MSG_DEBUG("#BTAG# inputVar= "<< inputVars.at(asv));
 
-      }
-      else {//if m_useEgammaMethodMV2
-	ATH_MSG_INFO("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
-	if (tree) {
-	  bdt = new MVAUtils:: BDT(tree);
-	}
-	else {
-	  ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
-	  m_disableAlgo=true;
-          return;
-	}
+    ATH_MSG_DEBUG("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
+  
+    if (tree) {
+      ATH_MSG_DEBUG("#BTAG# TTree with name: "<<m_treeName<<" exists in the calibration file."); 
+      bdt = new MVAUtils:: BDT(tree);
+    }
+    else {
+      ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
+      m_disableAlgo=true;
+      delete bdt;
+      return;
+    }
 
     CreateLocalVariables( inputs );
 
-    SetVariableRefs(inputVars,tmvaReader,nConfgVar,badVariableFound,inputPointers);
-
-    ATH_MSG_DEBUG("#BTAG# tmvaReader= "<<tmvaReader          <<", nConfgVar"<<nConfgVar
-		      <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
+    std::vector<float*>  inputPointers; inputPointers.clear();
+    unsigned nConfgVar=0; bool badVariableFound=false;
+    SetVariableRefs(inputVars,nConfgVar,badVariableFound,inputPointers);
+    ATH_MSG_DEBUG("#BTAG# nConfgVar"<<nConfgVar
+		    <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
 
     if ( inputVars.size()!=nConfgVar or badVariableFound ) {
-	ATH_MSG_WARNING( "#BTAG# Number of expected variables for MVA: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << inputVars.size() << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
-	m_disableAlgo=true;
-        delete bdt;
-        return;
+      ATH_MSG_WARNING("#BTAG# Number of expected variables for MVA: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << inputVars.size() << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
+      m_disableAlgo=true;
+      delete bdt;
+      return;
     }
-	bdt->SetPointers(inputPointers);
-
-	it_egammaBDT = m_egammaBDTs.find(alias);
-	if(it_egammaBDT!=m_egammaBDTs.end()) {
-	  delete it_egammaBDT->second;
-	  m_egammaBDTs.erase(it_egammaBDT);
-	}
-	m_egammaBDTs.insert( std::make_pair( alias, bdt ) );
+ 
+    bdt->SetPointers(inputPointers);
 
-      }
-      m_calibrationTool->updateHistogramStatusPerTagger(m_taggerNameBase,author, m_taggerNameBase+"Calib", false);
+    it_egammaBDT = m_egammaBDTs.find(alias);
+    if(it_egammaBDT!=m_egammaBDTs.end()) {
+      delete it_egammaBDT->second;
+      m_egammaBDTs.erase(it_egammaBDT);
     }
+    m_egammaBDTs.insert( std::make_pair( alias, bdt ) );
+
 
     // #2 fill inputs
     //replace NAN default values and, assign the values from the MVTM input map to the relevant variables
@@ -362,52 +212,24 @@ namespace Analysis {
     /* compute MV2: */
     double mv2 = -10.;  double mv2m_pb=-10., mv2m_pu=-10., mv2m_pc=-10.;
 
-    //TMVA method
-    if (!m_useEgammaMethodMV2) {
-
-      pos = m_tmvaReaders.find(alias);
-      if(pos==m_tmvaReaders.end()) {
-        int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),alias);
-        if(0==alreadyWarned) {
-          ATH_MSG_WARNING("#BTAG# no TMVAReader defined for jet collection alias, author: "<<alias<<" "<<author);
-	        m_undefinedReaders.push_back(alias);
-        }
-      } else {
-        it_mb = m_tmvaMethod.find(alias);
-        if( (it_mb->second)!=0 ){
-          if(m_taggerNameBase.find("MV2c")!=std::string::npos) mv2 = pos->second->EvaluateMVA( it_mb->second );//this gives back double
-          else {
-            std::vector<float> outputs= pos->second->EvaluateMulticlass( it_mb->second );//this gives back float
-            if (outputs.size()==m_nClasses){
-            mv2m_pb=outputs[0]; mv2m_pu=outputs[1]; mv2m_pc=outputs[2];
-            } else ATH_MSG_WARNING("#BTAG# Unkown error, outputs vector size not "<<m_nClasses<<"!!!" );
-          }
-        }
-        else ATH_MSG_WARNING("#BTAG#  kl==0 for alias, author: "<<alias<<" "<<author);
+    it_egammaBDT = m_egammaBDTs.find(alias);
+    if(it_egammaBDT==m_egammaBDTs.end()) {
+      int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),alias);
+      if(0==alreadyWarned) {
+         ATH_MSG_WARNING("#BTAG# no egammaBDT defined for jet collection alias, author: "<<alias<<" "<<author);
+         m_undefinedReaders.push_back(alias);
       }
-
     }
-    // use MVAUtils Egamma method
     else {
-      it_egammaBDT = m_egammaBDTs.find(alias);
-      if(it_egammaBDT==m_egammaBDTs.end()) {
-        int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),alias);
-        if(0==alreadyWarned) {
-	         ATH_MSG_WARNING("#BTAG# no egammaBDT defined for jet collection alias, author: "<<alias<<" "<<author);
-	         m_undefinedReaders.push_back(alias);
-	      }
-      }
-      else {
-        if(it_egammaBDT->second !=0) {
-          if (m_taggerNameBase.find("MV2c")!=std::string::npos) mv2= GetClassResponse(it_egammaBDT->second);//this gives back double
-	        else { //if it is MV2m
-      	    std::vector<float> outputs= GetMulticlassResponse(it_egammaBDT->second);//this gives back float
-      	    //vector size is checked in the function above
-      	    mv2m_pb=outputs[0]; mv2m_pu=outputs[1]; mv2m_pc=outputs[2] ;
-	        }
-	      }
-	     else ATH_MSG_WARNING("#BTAG# egamma BDT is 0 for alias, author: "<<alias<<" "<<author);
-      }
+      if(it_egammaBDT->second !=0) {
+        if (m_taggerNameBase.find("MV2c")!=std::string::npos) mv2= GetClassResponse(it_egammaBDT->second);//this gives back double
+        else { //if it is MV2m
+  	  std::vector<float> outputs= GetMulticlassResponse(it_egammaBDT->second);//this gives back float
+      	  //vector size is checked in the function above
+      	  mv2m_pb=outputs[0]; mv2m_pu=outputs[1]; mv2m_pc=outputs[2] ;
+        }
+       }
+       else ATH_MSG_WARNING("#BTAG# egamma BDT is 0 for alias, author: "<<alias<<" "<<author);
     }
 
     if (m_taggerNameBase.find("MV2c")!=std::string::npos) ATH_MSG_DEBUG("#BTAG# MV2 weight: " << mv2<<", "<<alias<<", "<<author);
@@ -485,15 +307,8 @@ void MV2Tag::ReplaceNaN_andAssign(std::map<std::string, double> var_map){
   }
 
 
-  void MV2Tag::SetVariableRefs(const std::vector<std::string> inputVars, TMVA::Reader* tmvaReader, unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers) {
-
+  void MV2Tag::SetVariableRefs(const std::vector<std::string> inputVars, unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers) {
 
-    if (!m_useEgammaMethodMV2) {
-      if(!tmvaReader) {
-        ATH_MSG_WARNING("#BTAG# tmva method is chosen but tmvaReader==0!!");
-        return;
-      }
-    }
 
     for (unsigned ivar=0; ivar<inputVars.size(); ivar++) {
       //pt and abs(eta)
@@ -504,12 +319,7 @@ void MV2Tag::ReplaceNaN_andAssign(std::map<std::string, double> var_map){
         ATH_MSG_WARNING( "#BTAG# \""<<inputVars.at(ivar)<<"\" <- This variable found in xml/calib-file does not match to any variable declared in MV2... the algorithm will be 'disabled'.");
         badVariableFound=true;
       }else{
-        if(m_useEgammaMethodMV2){
         inputPointers.push_back(m_local_inputvals.at(inputVars.at(ivar)) );
-        }
-        else{
-        tmvaReader->AddVariable(inputVars.at(ivar).data(),m_local_inputvals.at(inputVars.at(ivar)));
-        }
         nConfgVar++;
       }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/MultiSVTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/MultiSVTag.cxx
index 287509197d6b01cc5a6e6f0943c8ac6d18c24489..095fe83e6efe38d0aea246234b5d621fdbe8eed7 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/MultiSVTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/MultiSVTag.cxx
@@ -26,13 +26,9 @@
 
 #include "VxVertex/RecVertex.h"
 #include "VxVertex/VxTrackAtVertex.h"
-#include "JetTagCalibration/CalibrationBroker.h"
-#include "TMVA/Reader.h"
-#include "TMVA/MethodBDT.h"
-#include "TMVA/MethodBase.h"
-#include "TList.h"
-#include "TString.h"
 #include "TObjString.h"
+#include "TObjArray.h"
+#include "TTree.h"
 #include <fstream>
 #include <algorithm>
 #include <utility>
@@ -50,19 +46,14 @@ namespace Analysis
 
   MultiSVTag::MultiSVTag(const std::string& t, const std::string& n, const IInterface* p)
     : AthAlgTool(t,n,p),
-    m_calibrationTool("BTagCalibrationBroker"),
     m_runModus("analysis")
-   // m_secVxFinderName("InDetVKalVxInJetTool")
   {
     declareInterface<ITagTool>(this);
-    // access to XML configuration files for TMVA from COOL:
-    declareProperty("calibrationTool", m_calibrationTool);
     declareProperty("Runmodus",       m_runModus= "analysis");
     declareProperty("jetCollectionList", m_jetCollectionList);
     declareProperty("useForcedCalibration", m_doForcedCalib   = false);
     declareProperty("ForcedCalibrationName", m_ForcedCalibName = "AntiKt4TopoEM");//Cone4H1Tower
     declareProperty("SecVxFinderName",m_secVxFinderName);
-    //declareProperty("SVAlgType",      m_SVmode);
     declareProperty("taggerNameBase",m_taggerNameBase = "MultiSVbb1");
     declareProperty("taggerName", m_taggerName = "MultiSVbb1");
     declareProperty("xAODBaseName",m_xAODBaseName);
@@ -76,226 +67,102 @@ namespace Analysis
   StatusCode MultiSVTag::initialize() {
     // define tagger name:
 
-    //m_taggerNameBase = instanceName2;
-    //std::string tmp = "MultiSV1" ;
     m_disableAlgo=false;
-    m_useEgammaMethodMultiSV=false;
     m_warnCounter=0;
 
     m_treeName = "BDT";
     m_varStrName = "variables";
-    //m_taggerNameBase = tmp;
-
-    StatusCode sc = m_calibrationTool.retrieve();
-    if ( sc.isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_calibrationTool);
-      return sc;
-    } else {
-      ATH_MSG_DEBUG("#BTAG# Retrieved tool " << m_calibrationTool);
-    }
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_treeName);
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_varStrName);
-    ATH_MSG_DEBUG("#BTAG# m_taggerNameBase " << m_taggerNameBase);
-    m_tmvaReaders.clear();
-    m_tmvaMethod.clear();
+
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
     m_egammaBDTs.clear();
     return StatusCode::SUCCESS;
   }
 
   StatusCode MultiSVTag::finalize(){
-    if (m_useEgammaMethodMultiSV) {
-      for( auto temp: m_egammaBDTs ) if(temp.second) delete temp.second;
-    }
-    else {
-      // delete readers:
-      std::map<std::string, TMVA::Reader*>::iterator pos = m_tmvaReaders.begin();
-      for( ; pos != m_tmvaReaders.end(); ++pos ) delete pos->second;
-      std::map<std::string, TMVA::MethodBase*>::iterator posm = m_tmvaMethod.begin();
-      for( ; posm != m_tmvaMethod.end(); ++posm ) delete posm->second;
-    }
+    for( auto temp: m_egammaBDTs ) if(temp.second) delete temp.second;
     return StatusCode::SUCCESS;
   }
 
   StatusCode MultiSVTag::tagJet(xAOD::Jet& jetToTag, xAOD::BTagging * BTag){
 
+    //Retrieval of Calibration Condition Data objects
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
+
     /** author to know which jet algorithm: */
     std::string author = JetTagUtils::getJetAuthor(jetToTag);
     if (m_doForcedCalib) author = m_ForcedCalibName;
     ATH_MSG_DEBUG("#BTAG# MSV Using jet type " << author << " for calibrations.");
     //....
-    std::string alias = m_calibrationTool->channelAlias(author);//why this gives always the same?
-    //TString xmlFileName = "btag"+m_taggerNameBase+"Config_"+alias+".xml";//from MV1, so should work
-    //ATH_MSG_DEBUG("#BTAG# xmlFileName= "<<xmlFileName);
+    std::string alias = readCdo->getChannelAlias(author);
 
-    TMVA::Reader* tmvaReader = nullptr;
-    std::map<std::string, TMVA::Reader*>::iterator pos;
-    TMVA::MethodBase * kl=0;        std::map<std::string, TMVA::MethodBase*>::iterator it_mb;
     MVAUtils::BDT *bdt=0; std::map<std::string, MVAUtils::BDT*>::iterator it_egammaBDT;
     ATH_MSG_DEBUG("#BTAG# Jet author for MultiSVTag: " << author << ", alias: " << alias );
     /* check if calibration (neural net structure or weights) has to be updated: */
-    std::pair<TObject*, bool> calib=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib");
-
-    bool calibHasChanged = calib.second;
-    std::ostringstream iss;
-    std::map<std::string, TMVA::MethodBase*>::iterator itmap;
-    if(calibHasChanged) {
-
-      ATH_MSG_DEBUG("#BTAG# " << m_taggerNameBase << " calib updated -> try to retrieve");
-      if(!calib.first) {
-        ATH_MSG_WARNING("#BTAG# TObject can't be retrieved -> no calibration for "<< m_taggerNameBase );
-        return StatusCode::SUCCESS;
-      }
-      const TString rootClassName=calib.first->ClassName();
-      if      (rootClassName=="TDirectoryFile") m_useEgammaMethodMultiSV=true;
-      else if (rootClassName=="TList")          m_useEgammaMethodMultiSV=false;//tmva method
-      else {
-	ATH_MSG_WARNING("#BTAG# Unsupported ROOT class type: "<<rootClassName<<" is retrieved. Disabling algorithm..");
-	m_disableAlgo=true;
-	return StatusCode::SUCCESS;
-      }
-
-      m_calibrationTool->updateHistogramStatus(m_taggerNameBase, alias, m_taggerNameBase+"Calib", false);
-      std::vector<float*>  inputPointers; inputPointers.clear();
-      std::vector<std::string> inputVars; inputVars.clear();
-      unsigned nConfgVar=0,calibNvars=0; bool badVariableFound=false;
-
-      if (!m_useEgammaMethodMultiSV) {
-	ATH_MSG_INFO("#BTAG# Booking TMVA::Reader for "<<m_taggerNameBase);
-	std::ostringstream iss; //iss.clear();
-	//now the new part istringstream
-	TList* list = (TList*)calib.first;
-	for(int i=0; i<list->GetSize(); ++i) {
-	  TObjString* ss = (TObjString*)list->At(i);
-	  std::string sss = ss->String().Data();
-	  //KM: if it doesn't find "<" in the string, it starts from non-space character
-	  int posi = sss.find('<')!=std::string::npos ? sss.find('<') : sss.find_first_not_of(" ");
-	  std::string tmp = sss.erase(0,posi);
-	  //std::cout<<tmp<<std::endl;
-	  iss << tmp.data();
-	  if (tmp.find("<Variable")!=std::string::npos ) {
-	    if ( tmp.find("Variables NVar")!=std::string::npos ) {
-	      std::string newString=tmp.substr(tmp.find("\"")+1,tmp.find("\" ")-(tmp.find("\"")+1));
-	      calibNvars=stoi(newString);
-	    }
-	    else if ( tmp.find("Variable VarIndex")!=std::string::npos ) {
-	      std::string varIndex  =tmp.substr(tmp.find("=\"")+2, tmp.find("\" ")-(tmp.find("=\"")+2));
-	      std::string tmpVar  = tmp.erase(0,tmp.find("Expression=\"")+12);
-	      std::string varExpress=tmp.substr(0, tmp.find("\""));
-	      inputVars.push_back(varExpress);
-	    }
-	  }
-	  // else if (tmp.find("NClass")!=std::string::npos ) {
-	  //   std::string newString=tmp.substr(tmp.find("\"")+1,tmp.find("\" ")-(tmp.find("\"")+1));
-	  //   nClasses =stoi(newString);
-	  // }
-	}
+    TObject* calib=readCdo->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib");
 
-	// now configure the TMVAReaders:
-	/// check if the reader for this tagger needs update
-	tmvaReader = new TMVA::Reader();
-
-	SetVariableRefs(inputVars,tmvaReader,nConfgVar,badVariableFound,inputPointers);
-	ATH_MSG_DEBUG("#BTAG# tmvaReader= "<<tmvaReader          <<", nConfgVar"<<nConfgVar
-		      <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
-
-	if ( calibNvars!=nConfgVar or badVariableFound ) {
-	  ATH_MSG_WARNING("#BTAG# Number of expected variables for MVA: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << calibNvars << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
-	  m_disableAlgo=true;
-	  return StatusCode::SUCCESS;
-	}
-
-	//tmvaReader->BookMVA("BDT", xmlFileName);
-	TMVA::IMethod* method= tmvaReader->BookMVA(TMVA::Types::kBDT, iss.str().data() );
-	kl = dynamic_cast<TMVA::MethodBase*>(method);
-
-	// add it or overwrite it in the map of readers:
-	pos = m_tmvaReaders.find(alias);
-	if(pos!=m_tmvaReaders.end()) {
-	  delete pos->second;
-	  m_tmvaReaders.erase(pos);
-	}
-	m_tmvaReaders.insert( std::make_pair( alias, tmvaReader ) );
-
-	it_mb = m_tmvaMethod.find(alias);
-	if(it_mb!=m_tmvaMethod.end()) {
-	  delete it_mb->second;
-	  m_tmvaMethod.erase(it_mb);
-	}
-	m_tmvaMethod.insert( std::make_pair( alias, kl ) );
+    if(!calib) {
+      ATH_MSG_WARNING("#BTAG# TObject can't be retrieved -> no calibration for "<< m_taggerNameBase );
+      return StatusCode::SUCCESS;
+    }
 
-	iss.clear();
-      }
-      else {//if m_useEgammaMethodMultiSV
-	ATH_MSG_INFO("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
+    std::vector<float*>  inputPointers; inputPointers.clear();
+    std::vector<std::string> inputVars; inputVars.clear();
+    unsigned nConfgVar=0,calibNvars=0; bool badVariableFound=false;
 
-	// TDirectoryFile* f= (TDirectoryFile*)calib.first;
-	// TTree *tree = (TTree*) f->Get(treeName.data());
-	std::pair<TObject*, bool> calibTree=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_treeName);
-	TTree *tree = (TTree*) calibTree.first;
+    ATH_MSG_DEBUG("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
 
-	if (tree) {
-	  bdt = new MVAUtils:: BDT(tree);
-	}
-	else {
-	  ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
-	  m_disableAlgo=true;
-	  return StatusCode::SUCCESS;
-	}
+    TTree *tree = readCdo->retrieveTObject<TTree>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_treeName);
+    if (tree) {
+      bdt = new MVAUtils:: BDT(tree); 
+    }
+    else {
+      ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
+      m_disableAlgo=true;
+      return StatusCode::SUCCESS;
+    }
 
-	// TObjArray* toa= (TObjArray*) f->Get(varStrName.data());
-	std::pair<TObject*, bool> calibVariables=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_varStrName);
-	TObjArray* toa= (TObjArray*) calibVariables.first;
-	std::string commaSepVars="";
-	if (toa) {
-	  TObjString *tos= 0;
-	  if (toa->GetEntries()>0) tos= (TObjString*) toa->At(0);
+    TObjArray* toa= readCdo->retrieveTObject<TObjArray>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_varStrName);
+    std::string commaSepVars="";
+    if (toa) {
+      TObjString *tos= nullptr;
+      if (toa->GetEntries()>0) tos= (TObjString*) toa->At(0);
 	  commaSepVars=tos->GetString().Data();
-	}
+    }
 
-	while (commaSepVars.find(",")!=std::string::npos) {
-	  inputVars.push_back(commaSepVars.substr(0,commaSepVars.find(","))); calibNvars++;
-	  commaSepVars.erase(0,commaSepVars.find(",")+1);
-	}
-	inputVars.push_back(commaSepVars.substr(0,-1)); calibNvars++;
+    while (commaSepVars.find(",")!=std::string::npos) {
+      inputVars.push_back(commaSepVars.substr(0,commaSepVars.find(","))); calibNvars++;
+      commaSepVars.erase(0,commaSepVars.find(",")+1);
+    }
+    inputVars.push_back(commaSepVars.substr(0,-1)); calibNvars++;
 
-	SetVariableRefs(inputVars,tmvaReader,nConfgVar,badVariableFound,inputPointers);
-	ATH_MSG_DEBUG("#BTAG# tmvaReader= "<<tmvaReader          <<", nConfgVar"<<nConfgVar
+    SetVariableRefs(inputVars,nConfgVar,badVariableFound,inputPointers);
+    ATH_MSG_DEBUG("#BTAG# nConfgVar"<<nConfgVar
 		      <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
 
-	if ( calibNvars!=nConfgVar or badVariableFound ) {
+    if ( calibNvars!=nConfgVar or badVariableFound ) {
 	  ATH_MSG_WARNING( "#BTAG# Number of expected variables for MVA: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << calibNvars << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
-	  m_disableAlgo=true;
-    delete bdt;
-	  return StatusCode::SUCCESS;
-	}
-
-	bdt->SetPointers(inputPointers);
-
-	it_egammaBDT = m_egammaBDTs.find(alias);
-	if(it_egammaBDT!=m_egammaBDTs.end()) {
-	  delete it_egammaBDT->second;
-	  m_egammaBDTs.erase(it_egammaBDT);
-	}
-	m_egammaBDTs.insert( std::make_pair( alias, bdt ) );
+      m_disableAlgo=true;
+      delete bdt;
+      return StatusCode::SUCCESS;
+    }
 
-      }
-    }//calib has changed
+    bdt->SetPointers(inputPointers);
 
-    //if(!m_calibrationTool->updatedTagger(m_taggerNameBase, alias, m_taggerNameBase+"Calib", name())) {
-    //  if(iss.str().size()>0){
-      //  m_calibrationTool->updateHistogramStatusPerTagger(m_taggerNameBase,alias, m_taggerNameBase+"Calib", false, name());
+    it_egammaBDT = m_egammaBDTs.find(alias);
+    if(it_egammaBDT!=m_egammaBDTs.end()) {
+      delete it_egammaBDT->second;
+      m_egammaBDTs.erase(it_egammaBDT);
+    }
+    m_egammaBDTs.insert( std::make_pair( alias, bdt ) );
 
-    //....
     //the jet
     double jeteta = jetToTag.eta(), jetphi = jetToTag.phi(), jetpt = jetToTag.pt();
     m_jetpt = jetpt;
     ATH_MSG_DEBUG("#BTAG# Jet properties : eta = " << jeteta
                   << " phi = " << jetphi << " pT  = " <<jetpt/GeV);
-    //ATH_MSG_INFO("Factory PVX x = " << m_priVtx->x() << " y = " << m_priVtx->y() << " z = " << m_priVtx->z());
 
     TLorentzVector jp4; jp4.SetPtEtaPhiM(jetToTag.pt(), jetToTag.eta(), jetToTag.phi(), jetToTag.m());
-   // CLHEP::HepLorentzVector jp4(jetToTag.jetP4().px(), jetToTag.jetP4().px(), jetToTag.jetP4().px(), jetToTag.e());
 
     int msv_n = 0;
     int all_trks = 0;
@@ -493,24 +360,6 @@ namespace Analysis
     //compute BDT weight
     double msvW = -9.;
     if( nvtx2trk>1 ){
-      if(!m_useEgammaMethodMultiSV){
-	std::map<std::string, TMVA::Reader*>::iterator pos2 = m_tmvaReaders.find(alias);
-	if(pos2==m_tmvaReaders.end()) {//    if(pos2==m_tmvaReaders[binnb-1].end()) {
-	  int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),alias);
-	  if(0==alreadyWarned) {
-	    ATH_MSG_WARNING("#BTAG# no TMVAReader defined for jet collection " << alias);
-	    m_undefinedReaders.push_back(alias);
-	  }
-	}
-	else {
-	  std::map<std::string, TMVA::MethodBase*>::iterator itmap2 = m_tmvaMethod.find(alias);
-	  if((itmap2->second)!=0){
-	    msvW = pos2->second->EvaluateMVA( itmap2->second ); //"BDT method"
-	    ATH_MSG_DEBUG("#BTAG# BB weight: "<<m_taggerNameBase<<" "<< msvW);
-	  }else ATH_MSG_WARNING("#BTAG#  kl==0 for alias, author: "<<alias<<" "<<author);
-	}
-      }
-      else {
 	it_egammaBDT = m_egammaBDTs.find(alias);
 	if(it_egammaBDT==m_egammaBDTs.end()) {
 	  int alreadyWarned = std::count(m_undefinedReaders.begin(),m_undefinedReaders.end(),alias);
@@ -525,7 +374,6 @@ namespace Analysis
 	    ATH_MSG_DEBUG("#BTAG# BB weight: "<<m_taggerNameBase<<" "<< msvW);
 	  }else ATH_MSG_WARNING("#BTAG# egamma BDT is 0 for alias, author: "<<alias<<" "<<author);
 	}
-      }
     }
 
     if(m_runModus=="analysis") {
@@ -538,43 +386,33 @@ namespace Analysis
     /// implementation for Analysis::ITagTool::finalizeHistos
   }
 
-  void MultiSVTag::SetVariableRefs(const std::vector<std::string> inputVars, TMVA::Reader* tmvaReader, unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers) {
-
-    if (!m_useEgammaMethodMultiSV) {
-      if(!tmvaReader) {
-	ATH_MSG_WARNING("#BTAG# tmva method is chosen but tmvaReader==0!!");
-	return;
-      }
-    }
+  void MultiSVTag::SetVariableRefs(const std::vector<std::string> inputVars, unsigned &nConfgVar, bool &badVariableFound, std::vector<float*> &inputPointers) {
 
-    //std::cout<<"MultiSV input vars: ";
     for (unsigned ivar=0; ivar<inputVars.size(); ivar++) {
-      //std::cout<<inputVars.at(ivar)<<", ";
-      if      (inputVars.at(ivar)=="pt"               ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_jetpt       ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_jetpt       ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="Nvtx"             ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_nvtx        ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_nvtx        ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="MaxEfrc"          ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_maxefrc     ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_maxefrc     ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="sumMass"          ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_summass     ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_summass     ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="totalntrk"        ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_totalntrk   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_totalntrk   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="diffntrkSV0"      ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_diffntrkSV0 ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_diffntrkSV0 ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="diffntrkSV1"      ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_diffntrkSV1 ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_diffntrkSV1 ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="normDist"         ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_normDist    ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_normDist    ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="maxVtxMass"       ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmax_mass   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmax_mass   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="maxSecVtxMass"    ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmx2_mass   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmx2_mass   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="EfrcmaxVtxMass"   ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmax_efrc   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmax_efrc   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="EfrcmaxSecVtxMass") { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmx2_efrc   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmx2_efrc   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="dlsmaxVtxMass"    ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmax_dist   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmax_dist   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="dlsmaxSecVtxMass" ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmx2_dist   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmx2_dist   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="dRmaxVtxMassj"    ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmax_DRjet  ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmax_DRjet  ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="dRmaxSecVtxMassj" ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mmx2_DRjet  ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mmx2_DRjet  ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="d2Mass12"         ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mx12_2d12   ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mx12_2d12   ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="DRMass12"         ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mx12_DR     ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mx12_DR     ); nConfgVar++; }
-      else if (inputVars.at(ivar)=="AngleMass12"      ) { m_useEgammaMethodMultiSV ? inputPointers.push_back(&m_mx12_Angle  ) : tmvaReader->AddVariable(inputVars.at(ivar).data(),&m_mx12_Angle  ); nConfgVar++; }
+      if      (inputVars.at(ivar)=="pt"               ) { inputPointers.push_back(&m_jetpt       ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="Nvtx"             ) { inputPointers.push_back(&m_nvtx        ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="MaxEfrc"          ) { inputPointers.push_back(&m_maxefrc     ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="sumMass"          ) { inputPointers.push_back(&m_summass     ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="totalntrk"        ) { inputPointers.push_back(&m_totalntrk   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="diffntrkSV0"      ) { inputPointers.push_back(&m_diffntrkSV0 ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="diffntrkSV1"      ) { inputPointers.push_back(&m_diffntrkSV1 ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="normDist"         ) { inputPointers.push_back(&m_normDist    ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="maxVtxMass"       ) { inputPointers.push_back(&m_mmax_mass   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="maxSecVtxMass"    ) { inputPointers.push_back(&m_mmx2_mass   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="EfrcmaxVtxMass"   ) { inputPointers.push_back(&m_mmax_efrc   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="EfrcmaxSecVtxMass") { inputPointers.push_back(&m_mmx2_efrc   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="dlsmaxVtxMass"    ) { inputPointers.push_back(&m_mmax_dist   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="dlsmaxSecVtxMass" ) { inputPointers.push_back(&m_mmx2_dist   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="dRmaxVtxMassj"    ) { inputPointers.push_back(&m_mmax_DRjet  ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="dRmaxSecVtxMassj" ) { inputPointers.push_back(&m_mmx2_DRjet  ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="d2Mass12"         ) { inputPointers.push_back(&m_mx12_2d12   ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="DRMass12"         ) { inputPointers.push_back(&m_mx12_DR     ) ; nConfgVar++; }
+      else if (inputVars.at(ivar)=="AngleMass12"      ) { inputPointers.push_back(&m_mx12_Angle  ) ; nConfgVar++; }
       else {
 	ATH_MSG_WARNING( "#BTAG# \""<<inputVars.at(ivar)<<"\" <- This variable found in xml/calib-file does not match to any variable declared in MultiSV... the algorithm will be 'disabled'.");//<<alias<<" "<<author);
 	badVariableFound=true;
       }
     }
-    //std::cout<<std::endl;
 
   }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/MultivariateTagManager.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/MultivariateTagManager.cxx
index 44ac05643d7b4ea8a77656c75876d34e400e0894..525a6d073c72ec3d558dbddc0cb42fdf31497097 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/MultivariateTagManager.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/MultivariateTagManager.cxx
@@ -17,8 +17,6 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "GaudiKernel/IToolSvc.h"
 
-#include "JetTagCalibration/CalibrationBroker.h"
-
 #include "JetTagTools/JetTagUtils.h"
 #include "JetTagTools/MultivariateTagManager.h"
 #include "JetTagTools/BTagVariables.h"
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/NewLikelihoodTool.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/NewLikelihoodTool.cxx
index f8b5376ed96a3cc144105c1ebd1439592c49f254..42e09ea9c261af10dfc0bf9df55bc6f5dc5b67e1 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/NewLikelihoodTool.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/NewLikelihoodTool.cxx
@@ -5,7 +5,6 @@
 #include "JetTagTools/NewLikelihoodTool.h"
 
 #include "JetTagTools/HistoHelperRoot.h"
-#include "JetTagCalibration/CalibrationBroker.h"
 
 #include <cmath>
 #include <string>
@@ -22,7 +21,6 @@ namespace Analysis {
     AthAlgTool(t,n,p),
     m_taggerName("undefined"),
     m_hypotheses(std::vector<std::string>()),
-    m_calibrationTool("BTagCalibrationBroker"),
     m_normalizedProb(true),
     m_interpolate(false),
     m_smoothNTimes(1),
@@ -34,7 +32,6 @@ namespace Analysis {
     declareInterface<NewLikelihoodTool>(this);
     declareProperty("taggerName", m_taggerName);
     declareProperty("hypotheses", m_hypotheses);
-    declareProperty("calibrationTool",m_calibrationTool);
     declareProperty("normalizedProb", m_normalizedProb);
     declareProperty("interpolate",m_interpolate);
     declareProperty("smoothNTimes",m_smoothNTimes);
@@ -51,13 +48,8 @@ namespace Analysis {
   }
 
   StatusCode NewLikelihoodTool::initialize() {
-    /** retrieving calibrationTool: */
-    if ( m_calibrationTool.retrieve().isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_calibrationTool);
-      return StatusCode::FAILURE;
-    } else {
-      ATH_MSG_DEBUG("#BTAG# Retrieved tool " << m_calibrationTool);
-    }
+    ATH_CHECK(m_readKey.initialize());
+
     return StatusCode::SUCCESS;
   }
 
@@ -79,20 +71,12 @@ namespace Analysis {
     m_hypotheses = hyp;
   }
 
-  void NewLikelihoodTool::defineHistogram(const std::string& hname) {
-    m_histograms.push_back(hname);
-    std::vector<std::string> gradeList = this->gradeList(hname);
-    m_calibrationTool->registerHistogram(m_taggerName, hname);
-  }
-
   void NewLikelihoodTool::printStatus() const {
     msg(MSG::INFO) << "#BTAG# - hypotheses : ";
     for(unsigned int ih=0;ih<m_hypotheses.size();ih++) msg(MSG::INFO) << m_hypotheses[ih] << ", ";
     msg(MSG::INFO) << endmsg;
     msg(MSG::INFO) << "#BTAG# - histograms : " << endmsg;
     for(unsigned int ih=0;ih<m_histograms.size();ih++) msg(MSG::INFO) << m_histograms[ih] << endmsg;
-    msg(MSG::INFO) << "#BTAG# - status of underlying calibrations: " << endmsg;
-    m_calibrationTool->printStatus();
   }
 
   void NewLikelihoodTool::clear() {
@@ -140,10 +124,11 @@ namespace Analysis {
   }
 
   TH1* NewLikelihoodTool::prepareHistogram(const std::string& hypo, const std::string& hname) {
-    TH1* histoSum(0);
-    bool updated = false;
-    std::string channelName = m_calibrationTool->channelName(hname);
-    std::string histoName = m_calibrationTool->histoName(hname);
+    TH1* histoSum = nullptr;
+
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
+    std::string channelName = readCdo->channelName(hname);
+    std::string histoName = readCdo->histoName(hname);
     std::string actualName = hypo + "/" + histoName;
     std::string longName = channelName + "#" + actualName;
     ATH_MSG_VERBOSE("#BTAG# preparing histogram " << longName);
@@ -154,57 +139,41 @@ namespace Analysis {
     // - case with no grade:
     if(1==gradeList.size()) {
       ATH_MSG_DEBUG("#BTAG# Histo "<<actualName<<" has no grade: direct retrieval");
-      std::pair<TH1*, bool> rth = m_calibrationTool->retrieveHistogram(m_taggerName, 
+      histoSum = readCdo->retrieveHistogram(m_taggerName, 
                                                                        channelName, 
                                                                        actualName);
-      histoSum = rth.first;
-      updated = rth.second;
-      if(updated) {
-        ATH_MSG_VERBOSE("#BTAG# Smoothing histogram " << longName << " ...");
-        this->smoothAndNormalizeHistogram(histoSum, longName);
-        m_calibrationTool->updateHistogramStatus(m_taggerName, channelName, actualName, false);
-      }
     }
     // - case with 1 grade:
     if(2==gradeList.size()) {
       ATH_MSG_DEBUG("#BTAG# Histo "<<actualName<<" has only one grade: direct retrieval");
-      std::pair<TH1*, bool> rth = m_calibrationTool->retrieveHistogram(m_taggerName, 
+      histoSum = readCdo->retrieveHistogram(m_taggerName, 
                                                                        channelName, 
                                                                        actualName);
-      histoSum = rth.first;
-      updated = rth.second;
-      if(updated) {
-        ATH_MSG_VERBOSE("#BTAG# Smoothing histogram " << longName << " ...");
-        this->smoothAndNormalizeHistogram(histoSum, longName);
-        m_calibrationTool->updateHistogramStatus(m_taggerName, channelName, actualName, false);
-      }
+      //Part not fully migrated
+      //smoothAndNormalizeHistogram should not be called here but in condition algorithm
+      ATH_MSG_VERBOSE("#BTAG# Smoothing histogram " << longName << " ...");
+      this->smoothAndNormalizeHistogram(histoSum, longName);
     }
     // - for many grades, get individual histos and sum them up:
     if(gradeList.size()>2) {
-      TH1* histo(0);
-      bool AllUpdated = true;
+      TH1* histo = nullptr;
       ATH_MSG_DEBUG("Histo " << actualName << " has " << (gradeList.size()-1) << " grades:");
       for(unsigned int i=0;i<(gradeList.size()-1);i++) {
         actualName = hypo+"/"+gradeList[i]+gradeList[gradeList.size()-1];
         ATH_MSG_VERBOSE("#BTAG#  -> retrieving histo for grade " << i << " " << gradeList[i] << ": ");
-        std::pair<TH1*, bool> rthh = m_calibrationTool->retrieveHistogram(m_taggerName, 
+        histo = readCdo->retrieveHistogram(m_taggerName, 
                                                                           channelName, 
                                                                           actualName);
-        histo = rthh.first;
-        updated = rthh.second;
         if(histo) ATH_MSG_VERBOSE("#BTAG#     histo " << actualName 
-                  << " has " << histo->GetEntries() << " entries. Updated: " 
-                  << updated );
-        if(updated) {
-          m_calibrationTool->updateHistogramStatus(m_taggerName, channelName, actualName, false);
-        }
-        AllUpdated = AllUpdated && updated;
+                  << " has " << histo->GetEntries() << " entries."); 
         if(0==i) {
           histoSum = histo;
         } else {
           if(histo&&histoSum) histoSum->Add(histo,1.);
         }
       }
+      //Part not fully migrated
+      //smoothAndNormalizeHistogram should not be called here but in condition algorithm     
       ATH_MSG_VERBOSE("#BTAG# Smoothing histogram " << longName << " ...");
       this->smoothAndNormalizeHistogram(histoSum, longName);
     }
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/RNNIPTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/RNNIPTag.cxx
index 05e8e1d50b3bd89bb574dc6e8d699b1a6cd45844..fcd00ce6d2e420c297aa2e07f9ee5e3e22d8602c 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/RNNIPTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/RNNIPTag.cxx
@@ -15,7 +15,6 @@
 
 #include "JetTagInfo/TrackGrade.h"
 #include "JetTagInfo/TrackGradesDefinition.h"
-#include "JetTagCalibration/CalibrationBroker.h"
 
 #include "TrkVertexFitterInterfaces/ITrackToVertexIPEstimator.h"
 
@@ -29,7 +28,6 @@
 #include "GeoPrimitives/GeoPrimitivesHelpers.h"
 #include "GaudiKernel/IToolSvc.h"
 
-// #include "TLorentzVector.h"
 #include "TObjString.h"
 
 #include <cmath>
@@ -157,7 +155,6 @@ namespace Analysis {
       //m_secVxFinderNameForIPSign("InDetVKalVxInJetTool"),
       m_unbiasIPEstimation(true),
       m_calibrationDirectory("RNNIP"),
-      m_calibrationTool("Analysis::CalibrationBroker"),
       m_secVxFinderName("InDetVKalVxInJetTool"),
       m_trackToVertexTool("Reco::TrackToVertex"),
       m_trackSelectorTool("Analysis::TrackSelector"),
@@ -203,7 +200,6 @@ namespace Analysis {
     declareProperty("trackGradeFactory"         , m_trackGradeFactory      );
     declareProperty("TrackToVertexIPEstimator"  , m_trackToVertexIPEstimator);
     declareProperty("calibration_directory", m_calibrationDirectory);
-    declareProperty("calibrationTool", m_calibrationTool);
   }
 
 
@@ -257,9 +253,9 @@ namespace Analysis {
 
     /** prepare the track partitions: */
     int nbPart = m_trackGradePartitionsDefinition.size();
-    ATH_MSG_INFO("#BTAG# Defining " << nbPart <<" track partitions: ");
+    ATH_MSG_DEBUG("#BTAG# Defining " << nbPart <<" track partitions: ");
     for(int i=0;i<nbPart;i++) {
-      TrackGradePartition* part(0);
+      TrackGradePartition* part = nullptr;
       try {
         part = new TrackGradePartition(m_trackGradePartitionsDefinition[i],
                                        *m_trackGradeFactory);
@@ -284,17 +280,12 @@ namespace Analysis {
         ATH_MSG_ERROR("#BTAG# Terminating now... ");
         return StatusCode::FAILURE;
       }
-      ATH_MSG_INFO((*part));
+      ATH_MSG_DEBUG((*part));
       m_trackGradePartitions.push_back(part);
     }
 
-    for (const auto& rnn_name_pair: m_network_cfg) {
-      if (rnn_name_pair.second.size() == 0) {
-        ATH_MSG_VERBOSE("registering RNN " << rnn_name_pair.first);
-        register_hist(rnn_name_pair.first);
-      }
-    }
-
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
 
     return StatusCode::SUCCESS;
   }
@@ -484,17 +475,6 @@ namespace Analysis {
   {
   }
 
-
-  // _____________________________________________________________________
-  // Calibration stuff
-  void RNNIPTag::register_hist(const std::string& file_name) {
-    m_calibrationTool->registerHistogram(m_calibrationDirectory, file_name);
-    ATH_MSG_DEBUG(" #BTAG# Registered NN histograms with directory: " <<
-		  m_calibrationDirectory);
-
-    m_calibrationTool->printStatus();
-  }
-
   std::string RNNIPTag::get_calib_string(const std::string& author,
                                          const std::string& name)
   {
@@ -509,18 +489,17 @@ namespace Analysis {
     } else {
       ATH_MSG_DEBUG("reading out from DB");
     }
-    const auto stringpair = m_calibrationTool->retrieveTObject<TObject>(
+
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey); 
+
+    const auto string = readCdo->retrieveTObject<TObject>(
       m_calibrationDirectory, author, name);
-    if (stringpair.second == true) {
-      m_calibrationTool->updateHistogramStatus(
-        m_calibrationDirectory, author, name, false);
-    }
-    TObjString* cal_string = dynamic_cast<TObjString*>(stringpair.first);
+    TObjString* cal_string = dynamic_cast<TObjString*>(string);
 
     if (cal_string == 0){  //catch if no string was found
       std::string fuller_name = m_calibrationDirectory + "/" + author +
         "/" + name;
-      if (stringpair.first) {
+      if (string) {
         fuller_name.append(" [but an object was found]");
       }
       ATH_MSG_WARNING("can't retreve calibration: " + fuller_name);
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
index 3f476e42e396afdde25f5c887adf389fad3f7cb8..437acd0ae656583042554bb9d2950937cbe820d0 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
@@ -89,38 +89,6 @@ namespace Analysis
         ATH_MSG_INFO("#BTAG# Retrieved tool " << m_likelihoodTool);
       }
       m_likelihoodTool->defineHypotheses(m_hypotheses);
-      // define new lh variables:
-      for(unsigned int ih=0;ih<m_hypotheses.size();ih++) {
-	std::string hName;
-	if(m_SVmode=="SV1") {
-	  hName = m_hypotheses[ih]+"/N2T";
-	  m_likelihoodTool->defineHistogram(hName);
-	  hName = m_hypotheses[ih]+"/BidimME";
-	  m_likelihoodTool->defineHistogram(hName);
-	  if(m_useDRJPVSV) {
-	    hName = m_hypotheses[ih]+"/DRJPVSV";
-	    m_likelihoodTool->defineHistogram(hName);
-	  }
-	}
-	if(m_SVmode=="SV2") {
-	  if(m_usePtSV2){
-	     hName = m_hypotheses[ih]+"/TridimMENPt";
-	     m_likelihoodTool->defineHistogram(hName);
-	     hName = m_hypotheses[ih]+"/N2TEffSV2";
-	     m_likelihoodTool->defineHistogram(hName);
-	  }else{
-	     hName = m_hypotheses[ih]+"/TridimMEN2T";
-	     m_likelihoodTool->defineHistogram(hName);
-          }
-	}
-      }
-      // for efficiencies, add a few histograms:
-      for(unsigned int ih=0;ih<m_hypotheses.size();ih++) {
-	std::string hName = m_hypotheses[ih]+"/N2TEff"+m_SVmode;
-	m_likelihoodTool->defineHistogram(hName);
-	hName = m_hypotheses[ih]+"/N2TNorm"+m_SVmode;
-	m_likelihoodTool->defineHistogram(hName);
-      }
       m_likelihoodTool->printStatus();
     }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/SoftMuonTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/SoftMuonTag.cxx
index 3c1ba59280f3c678ca0ba7394d855dd800786588..0a8de7c6db29fed7ff211c05c0dcf12407edf68a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/SoftMuonTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/SoftMuonTag.cxx
@@ -43,17 +43,14 @@ PURPOSE:  b-tagging based on soft muon identification
 #include "JetTagTools/NewLikelihoodTool.h"
 #include "JetTagTools/HistoHelperRoot.h"
 #include "GaudiKernel/ITHistSvc.h"
-#include "JetTagCalibration/CalibrationBroker.h"
 
 #include "xAODMuon/MuonContainer.h"
 
 #include "AthenaKernel/Units.h"
-#include "TMVA/Reader.h"
-#include "TMVA/MethodBDT.h"
 
-#include "TList.h"
-#include "TString.h"
+#include "TObjArray.h"
 #include "TObjString.h"
+#include "TTree.h"
 #include <fstream>
 #include <algorithm>
 #include <utility>
@@ -68,7 +65,6 @@ namespace Analysis
 
   SoftMuonTag::SoftMuonTag(const std::string& t, const std::string& n, const IInterface* p)
     : AthAlgTool(t,n,p),
-      m_calibrationTool("Analysis::CalibrationBroker"),
       m_trackToVertexTool("Reco::TrackToVertex"),
       m_muonSelectorTool("JVC_MuonSelectorTool"),
       m_likelihoodTool("Analysis::NewLikelihoodTool"),
@@ -77,8 +73,6 @@ namespace Analysis
   {
     declareInterface<ITagTool>(this);
     /** ANDREA **/
-    // access to XML configuration files for TMVA from COOL:
-    declareProperty("calibrationTool", m_calibrationTool);
     // which calibration folder to use
     declareProperty("taggerNameBase", m_taggerNameBase = "SMT");
     declareProperty("taggerName", m_taggerName = "SMT");
@@ -169,20 +163,10 @@ namespace Analysis
     m_disableAlgo=false;
     m_treeName = "BDT";
     m_varStrName = "variables";
-    // prepare calibration tool:
-    StatusCode scc = m_calibrationTool.retrieve();
-    if ( scc.isFailure() ) {
-      ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_calibrationTool);
-      return scc;
-    } else {
-      ATH_MSG_INFO("#BTAG# Retrieved tool " << m_calibrationTool);
-    }
-    ATH_MSG_DEBUG("#BTAG# Folder I look into: "<< m_taggerNameBase+"Calib/"+m_treeName);
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib");
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_treeName);
-    m_calibrationTool->registerHistogram(m_taggerNameBase, m_taggerNameBase+"Calib/"+m_varStrName);
-    m_tmvaReaders.clear();
-    m_tmvaMethod.clear();
+    
+    // prepare readKey for calibration data:
+    ATH_CHECK(m_readKey.initialize());
+    
     m_egammaBDTs.clear();
     /** ANDREA **/
 
@@ -315,7 +299,7 @@ namespace Analysis
     /** ANDREA **/
     /*
      * #index for this function
-     * #1: Preparation of MVA instance using tmva/MVAUtils BDT
+     * #1: Preparation of MVA instance using MVAUtils BDT
      * #2: set input variables from MultivariateTagManager inputs map
      * #3: Calculation of MVA output variable(s)
      * #4: Fill MVA output variable(s) into xAOD
@@ -329,45 +313,19 @@ namespace Analysis
       }
     }
 
-    // #1: Preparation of MVA instance using tmva/egammaBDT
+    // #1: Preparation of MVA instance using egammaBDT
     ATH_MSG_DEBUG("#BTAG# Jet author for SoftMuon: " << author );
 
-    /* check if calibration has to be updated: */
-    std::pair<TObject*, bool> calib=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib");
-
-    bool calibHasChanged = calib.second;
-
-    TMVA::Reader* tmvaReader=0;     std::map<std::string, TMVA::Reader*>::iterator pos;
-    MVAUtils::BDT *bdt=0; std::map<std::string, MVAUtils::BDT*>::iterator it_egammaBDT;
-
-    /*KM: Retrieval of objects from the calibration file and store it back in the calibration broker temporarily*/
-    if(calibHasChanged) {
-      ATH_MSG_DEBUG("#BTAG# " << m_taggerNameBase << " calib updated -> try to retrieve");
-      if(!calib.first) {
-	ATH_MSG_WARNING("#BTAG# TObject can't be retrieved -> no calibration for"<< m_taggerNameBase<<" "<<author);
-	m_disableAlgo=true;
-	return StatusCode::SUCCESS;
-      }
-      else {
-	const TString rootClassName=calib.first->ClassName();
-	if (rootClassName!="TDirectoryFile") {
-	  ATH_MSG_WARNING("#BTAG# Unsupported ROOT class type: "<<rootClassName<<" is retrieved. Disabling algorithm..");
-	  m_disableAlgo=true;
-	  return StatusCode::SUCCESS;
-	}
-      }
-    } 
+    MVAUtils::BDT *bdt=nullptr; std::map<std::string, MVAUtils::BDT*>::iterator it_egammaBDT;
 
-    m_calibrationTool->updateHistogramStatus(m_taggerNameBase, author, m_taggerNameBase+"Calib", false);
-    std::vector<std::string> inputVars; inputVars.clear();
+    //Retrieval of Calibration Condition Data objects
+    SG::ReadCondHandle<JetTagCalibCondData> readCdo(m_readKey);
 
-    std::pair<TObject*, bool> calibTree=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_treeName);
-    std::pair<TObject*, bool> calibVariables=m_calibrationTool->retrieveTObject<TObject>(m_taggerNameBase,author,m_taggerNameBase+"Calib/"+m_varStrName);
-    TTree *tree = (TTree*) calibTree.first;
-    TObjArray* toa= (TObjArray*) calibVariables.first;
+    TObjArray* toa=readCdo->retrieveTObject<TObjArray>("SoftMu",author, m_taggerNameBase+"Calib/"+m_varStrName);
+    TTree *tree = readCdo->retrieveTObject<TTree>("SoftMu",author, m_taggerNameBase+"Calib/"+m_treeName);
     std::string commaSepVars="";
     if (toa) {
-      TObjString *tos= 0;
+      TObjString *tos= nullptr;
       if (toa->GetEntries()>0) tos= (TObjString*) toa->At(0);
       commaSepVars=tos->GetString().Data();
     } else {
@@ -375,7 +333,9 @@ namespace Analysis
       m_disableAlgo=true;
       return StatusCode::SUCCESS;
     }
+
     //prepare inputVars
+    std::vector<std::string> inputVars; inputVars.clear();
     while (commaSepVars.find(",")!=std::string::npos) {
       inputVars.push_back(commaSepVars.substr(0,commaSepVars.find(",")));
       commaSepVars.erase(0,commaSepVars.find(",")+1);
@@ -385,64 +345,42 @@ namespace Analysis
     ATH_MSG_DEBUG("#BTAG# tree name= "<< tree->GetName() <<" inputVars.size()= "<< inputVars.size());// <<" toa->GetEntries()= "<< toa->GetEntries() <<"commaSepVars= "<< commaSepVars);
     for (unsigned int asv=0; asv<inputVars.size(); asv++) ATH_MSG_DEBUG("#BTAG# inputVar= "<< inputVars.at(asv));
 
-    ATH_MSG_DEBUG("#BTAG# m_taggerNameBase= "<< m_taggerNameBase );
-
-    m_calibrationTool->storeCalib(m_taggerNameBase, author, m_taggerNameBase+"Calib", inputVars, "", tree);
-
-
-    /*KM: Get back the calib objects from calibration broker*/
-    std::string alias = m_calibrationTool->channelAlias(author);
-    if (!m_calibrationTool->updatedTagger(m_taggerNameBase, author, m_taggerNameBase+"Calib") ) {
-      std::vector<float*>  inputPointers; inputPointers.clear();
-      unsigned nConfgVar=0; bool badVariableFound=false;
-
-      CalibrationBroker::calibMV2 calib = m_calibrationTool->getCalib(m_taggerNameBase, author, m_taggerNameBase+"Calib");
-      std::vector<std::string> inputVars = calib.inputVars;
-      std::string str = calib.str;
-      TTree* tree = (TTree*) calib.obj;
-      ATH_MSG_DEBUG("#BTAG# str= "<< str <<" m_treeName= "<< m_treeName );
-
-      if ( (str!="" and tree==0) && (str=="" and tree!=0) ) {
-	ATH_MSG_WARNING("#BTAG# Unrecognized SMT configuration disabling the algorithm..." );
-	m_disableAlgo=true;
-	return StatusCode::SUCCESS;
-      }
-
-      ATH_MSG_INFO("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
+    ATH_MSG_DEBUG("#BTAG# Booking MVAUtils::BDT for "<<m_taggerNameBase);
   
-      if (tree) {
-	ATH_MSG_DEBUG("#BTAG# TTree with name: "<<m_treeName<<" exists in the calibration file."); 
-	bdt = new MVAUtils:: BDT(tree);
-      }
-      else {
-	ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
-	m_disableAlgo=true;
-	delete bdt;
-	return StatusCode::SUCCESS;
-      }
+    if (tree) {
+      ATH_MSG_DEBUG("#BTAG# TTree with name: "<<m_treeName<<" exists in the calibration file."); 
+      bdt = new MVAUtils:: BDT(tree);
+    }
+    else {
+      ATH_MSG_WARNING("#BTAG# No TTree with name: "<<m_treeName<<" exists in the calibration file.. Disabling algorithm.");
+      m_disableAlgo=true;
+      delete bdt;
+      return StatusCode::SUCCESS;
+    }
 
-      SetVariableRefs(inputVars,nConfgVar,badVariableFound,inputPointers);
-      ATH_MSG_DEBUG("#BTAG# tmvaReader= "<<tmvaReader          <<", nConfgVar"<<nConfgVar
+    std::string alias = readCdo->getChannelAlias(author);
+    std::vector<float*>  inputPointers; inputPointers.clear();
+    unsigned nConfgVar=0; bool badVariableFound=false;
+
+    SetVariableRefs(inputVars,nConfgVar,badVariableFound,inputPointers);
+    ATH_MSG_DEBUG("#BTAG# nConfgVar"<<nConfgVar
 		    <<", badVariableFound= "<<badVariableFound <<", inputPointers.size()= "<<inputPointers.size() );
 
-      if ( inputVars.size()!=nConfgVar or badVariableFound ) {
-	ATH_MSG_WARNING("#BTAG# Number of expected variables for SoftMu: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << inputVars.size() << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
-	m_disableAlgo=true;
-	delete bdt;
-	return StatusCode::SUCCESS;
-      }
+    if ( inputVars.size()!=nConfgVar or badVariableFound ) {
+      ATH_MSG_WARNING("#BTAG# Number of expected variables for SoftMu: "<< nConfgVar << "  does not match the number of variables found in the calibration file: " << inputVars.size() << " ... the algorithm will be 'disabled' "<<alias<<" "<<author);
+      m_disableAlgo=true;
+      delete bdt;
+      return StatusCode::SUCCESS;
+    }
  
-      bdt->SetPointers(inputPointers);
+    bdt->SetPointers(inputPointers);
 
-      it_egammaBDT = m_egammaBDTs.find(alias);
-      if(it_egammaBDT!=m_egammaBDTs.end()) {
-	delete it_egammaBDT->second;
-	m_egammaBDTs.erase(it_egammaBDT);
-      }
-      m_egammaBDTs.insert( std::make_pair( alias, bdt ) );  
-      m_calibrationTool->updateHistogramStatusPerTagger(m_taggerNameBase,author, m_taggerNameBase+"Calib", false);
- 
+    it_egammaBDT = m_egammaBDTs.find(alias);
+    if(it_egammaBDT!=m_egammaBDTs.end()) {
+      delete it_egammaBDT->second;
+      m_egammaBDTs.erase(it_egammaBDT);
     }
+    m_egammaBDTs.insert( std::make_pair( alias, bdt ) );  
 
     // Reference only: Fill control histograms and get jet label
     std::string pref = "";
@@ -464,8 +402,6 @@ namespace Analysis
       ///return StatusCode::SUCCESS; /// need to go untill the end to decorate
     }
 
-
-  
     /// variables used to decorate the Btagging object
     float jet_mu_dRmin_pt=0;
     float jet_mu_dRmin_dR=10;
diff --git a/PhysicsAnalysis/MCTruthClassifier/CMakeLists.txt b/PhysicsAnalysis/MCTruthClassifier/CMakeLists.txt
index 64ff08b68225bc5a091d39e50b101ea03ec991bc..a6abcb25ed965bb3f8a38464461b84617c39df84 100644
--- a/PhysicsAnalysis/MCTruthClassifier/CMakeLists.txt
+++ b/PhysicsAnalysis/MCTruthClassifier/CMakeLists.txt
@@ -17,14 +17,15 @@ elseif( XAOD_ANALYSIS )
 else()
    set( extra_deps GaudiKernel
       Reconstruction/RecoTools/ParticlesInConeTools
+      Reconstruction/RecoTools/RecoToolInterfaces
       PRIVATE
       Generators/TruthUtils
-      Reconstruction/RecoTools/RecoToolInterfaces
       Tracking/TrkEvent/TrkEventPrimitives
       Tracking/TrkEvent/TrkParametersIdentificationHelpers
+      Tracking/TrkEvent/TrkCaloExtension
       Control/AthenaKernel )
-   set( extra_libs GaudiKernel
-      PRIVATE_LINK_LIBRARIES GeneratorObjects RecoToolInterfaces
+   set( extra_libs GaudiKernel RecoToolInterfaces
+      PRIVATE_LINK_LIBRARIES GeneratorObjects 
       TrkEventPrimitives TrkParametersIdentificationHelpers )
 endif()
 
diff --git a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
index 8ac2f28ad4a7a31d9728eaa1d033807c2fcafa84..f0b6804bbdc4dcf4b8300a5b2ca8918811cfd8eb 100644
--- a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
+++ b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -13,7 +13,7 @@
     Interface for the PhysicsAnalysis/MCTruthClassifier/MCTruthclassifier
     @author Frederic Derue derue@lpnhe.in2p3.fr
     CREATED : 01/09/2008
-    MODIFIED :
+    MODIFIED : 
 */
 
 #include "AsgTools/IAsgTool.h"
@@ -26,15 +26,20 @@
 #include "xAODEgamma/PhotonFwd.h"
 #include "xAODTracking/TrackParticleFwd.h"
 #include "xAODCaloEvent/CaloClusterFwd.h"
+
 #include "xAODTruth/TruthParticle.h"
 #include "xAODMuon/Muon.h"
 #include "xAODJet/Jet.h"
 
+#include <memory>
+#include <unordered_map>
+
 
 #define MCTRUTHCLASSIFIER_CONST
 
 
 #ifndef XAOD_ANALYSIS
+#include "RecoToolInterfaces/IParticleCaloExtensionTool.h"
 namespace HepMC {
   class GenParticle;
 }
@@ -45,8 +50,9 @@ class IMCTruthClassifier : virtual public asg::IAsgTool {
      
   ASG_TOOL_INTERFACE(IMCTruthClassifier)
     public:
-
-
+#ifndef XAOD_ANALYSIS
+    typedef  std::unordered_map<size_t,std::unique_ptr<Trk::CaloExtension>> Cache;
+#endif
   // Additional information that can be returned by the classifier.
   // Originally, these were all held in member variables in the classifier,
   // but that prevents the classifier methods from being made const.
@@ -55,6 +61,7 @@ class IMCTruthClassifier : virtual public asg::IAsgTool {
   class Info
   {
   public:
+
     const xAOD::TruthParticle* genPart = nullptr;
 
     MCTruthPartClassifier::ParticleOutCome particleOutCome = MCTruthPartClassifier::UnknownOutCome;
@@ -75,7 +82,9 @@ class IMCTruthClassifier : virtual public asg::IAsgTool {
     const xAOD::TruthParticle* photonMother = nullptr;
 
     const xAOD::TruthParticle* bkgElecMother = nullptr;
-
+#ifndef XAOD_ANALYSIS
+    Cache *extrapolationCache = nullptr;
+#endif
     std::vector<const xAOD::TruthParticle*> egPartPtr;
     std::vector<float> egPartdR;
     std::vector<std::pair<MCTruthPartClassifier::ParticleType,MCTruthPartClassifier::ParticleOrigin> > egPartClas;
diff --git a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
index 50a352f5006281473bf15461d0b9d90fa58c6e35..3e15deae45072ec3bc15808fefcc715ad2373c77 100644
--- a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
+++ b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef MCTRUTHCLASSIFIER_MCTRUTHCLASSIFIER_H
@@ -17,6 +17,7 @@ Updated:
 #include "AsgTools/AsgTool.h"
 #include "MCTruthClassifier/MCTruthClassifierDefs.h"
 #include "MCTruthClassifier/IMCTruthClassifier.h"
+
 // EDM includes
 
 #include "xAODTruth/TruthParticleContainerFwd.h"
@@ -128,7 +129,7 @@ class MCTruthClassifier : virtual public IMCTruthClassifier , public asg::AsgToo
    //
    static double partCharge(const xAOD::TruthParticle*);
 #ifndef XAOD_ANALYSIS
-   bool genPartToCalo(const xAOD::CaloCluster* , const xAOD::TruthParticle* , bool, double&, bool& ) const;
+   bool genPartToCalo(const xAOD::CaloCluster* , const xAOD::TruthParticle* , bool, double&, bool&, Cache * ) const;
    const xAOD::TruthParticle* egammaClusMatch(const xAOD::CaloCluster*, bool,
                                               Info* info) const;
 #endif
diff --git a/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifier.cxx b/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifier.cxx
index 0389a6850786a8fafec3e6193b43b458b0dd8a5c..401a600c4e0502e51e1ba3dfe7b1c5d26687eb7e 100644
--- a/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifier.cxx
+++ b/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifier.cxx
@@ -152,7 +152,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::TruthParticle  *thePart,
   ParticleOrigin partOrig = NonDefined;  
  
   if (info) {
-    *info = Info();
     info->genPart = thePart;
   }
 
@@ -330,7 +329,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::TrackParticle *trkPtr,
 
   const xAOD::TruthParticle* genPart = getGenPart(trkPtr);
   if (info) {
-    *info = Info();
     info->genPart = genPart;
   }
   
@@ -369,7 +367,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::Electron* elec,
   }
 
   if (info) {
-    *info = Info();
     info->genPart = genPart;
   }
 
@@ -392,8 +389,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::Photon* phot,
   ParticleType   parttype = Unknown;
   ParticleOrigin partorig = NonDefined;
 
-  if (info)
-    *info = Info();
     
   const xAOD::CaloCluster* clus=phot->caloCluster();
   if(!clus) return std::make_pair(parttype,partorig);  
@@ -441,9 +436,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::Muon* mu,
   //-----------------------------------------------------------------------------------------
   
   ATH_MSG_DEBUG( "Executing muon  Classifier" );
- 
-  if (info)
-   *info = Info();
 
   ParticleType   parttype = Unknown;
   ParticleOrigin partorig = NonDefined;
@@ -479,9 +471,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::CaloCluster* clus,
   ParticleType   parttype = Unknown;
   ParticleOrigin partorig = NonDefined;
 
-  if (info){
-    *info = Info();
-  }
   if(!clus){
     return std::make_pair(parttype,partorig);  
   }
@@ -512,10 +501,6 @@ MCTruthClassifier::particleTruthClassifier(const xAOD::Jet* jet, bool DR,
 
   ATH_MSG_DEBUG( "Executing Classifier with jet Input" );
 
-  if (info){
-    *info = Info();
-  }
-
   ParticleType   parttype     = UnknownJet;
   ParticleOrigin partorig     = NonDefined;
   ParticleType   tempparttype = UnknownJet;
diff --git a/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx b/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx
index ea6dab830fbea78345406f41fdc7416161d84ae2..c7a727b0f9ec24ef234e0e1245a65ac88ebc4047 100644
--- a/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx
+++ b/PhysicsAnalysis/MCTruthClassifier/src/MCTruthClassifierAthena.cxx
@@ -152,7 +152,7 @@ MCTruthClassifier::egammaClusMatch(const xAOD::CaloCluster* clus,
 
     double dR(-999.);
     bool isNCone=false;
-    bool isExt = genPartToCalo(clus, thePart,isFwrdEle, dR, isNCone);
+    bool isExt = genPartToCalo(clus, thePart,isFwrdEle, dR, isNCone, info->extrapolationCache);
     if (!isExt) continue;
 
     theMatchPart = barcode_to_particle(truthParticleContainerReadHandle.ptr(),thePart->barcode()%m_barcodeShift);
@@ -237,7 +237,7 @@ MCTruthClassifier::egammaClusMatch(const xAOD::CaloCluster* clus,
     
     double dR(-999.);
     bool isNCone=false;
-    bool isExt = genPartToCalo(clus, thePart, false , dR, isNCone);
+    bool isExt = genPartToCalo(clus, thePart, false , dR, isNCone, info->extrapolationCache);
     if(!isExt) continue;
     
     theMatchPart = barcode_to_particle(truthParticleContainerReadHandle.ptr(),thePart->barcode()%m_barcodeShift);
@@ -293,14 +293,15 @@ bool MCTruthClassifier::genPartToCalo(const xAOD::CaloCluster* clus,
 				      const xAOD::TruthParticle* thePart,
 				      bool isFwrdEle, 
 				      double& dRmatch,
-				      bool  & isNarrowCone) const {
+				      bool  & isNarrowCone,
+                                      Cache  *cache) const {
   dRmatch      = -999.;
   isNarrowCone = false;
 
   if ( thePart == 0 ) return false ;
 
-  std::unique_ptr<Trk::CaloExtension> caloExtension =m_caloExtensionTool->caloExtension(*thePart);
-  if( !caloExtension|| caloExtension->caloLayerIntersections().empty() ){
+  const Trk::CaloExtension* caloExtension =m_caloExtensionTool->caloExtension(*thePart, *cache );
+  if( caloExtension == nullptr || caloExtension->caloLayerIntersections().empty() ){
     ATH_MSG_WARNING("extrapolation of Truth Particle with eta  " << thePart->eta() 
 		    <<" and Pt " << thePart->pt() << " to calo failed");
     return false;
diff --git a/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/AsgElectronRingerSelector.h b/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/AsgElectronRingerSelector.h
index a5ec8c7a68ceb9808366ad4cb304962642e361c0..c8975bdf65a4b77934a5916efe67849504f32d29 100644
--- a/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/AsgElectronRingerSelector.h
+++ b/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/AsgElectronRingerSelector.h
@@ -320,7 +320,8 @@ class AsgElectronRingerSelector : public asg::AsgMetadataTool,
  * @class RingerConfStruct
  * @brief Configuration structure for parameters in file
  **/
-struct RingerConfStruct {
+class RingerConfStruct {
+public:
   bool useTrackPat;
   bool useRawTrackPat;
   //bool useCalStdPat;
diff --git a/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/tools/VariableDependency.h b/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/tools/VariableDependency.h
index 76224a1165fa7790939ce4ff66d2dac2f0b558ad..57cbb5b402d20c81055948d592ed8ba026bbbb10 100644
--- a/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/tools/VariableDependency.h
+++ b/PhysicsAnalysis/RingerSelectorTools/RingerSelectorTools/tools/VariableDependency.h
@@ -34,7 +34,8 @@ namespace Ringer {
  *
  * Holds dependent variables values.
  **/
-struct DepVarStruct {
+class DepVarStruct {
+public:
   /// Holds particle transverse energy
   const float et;
   /// Holds eta position
diff --git a/Projects/AthSimulation/package_filters.txt b/Projects/AthSimulation/package_filters.txt
index 552cada7658d7e48f2e8f496aa6c08bae9176920..efb38d6a229cb9f38262153985b10e6189287f0c 100644
--- a/Projects/AthSimulation/package_filters.txt
+++ b/Projects/AthSimulation/package_filters.txt
@@ -6,8 +6,6 @@
 + AtlasGeometryCommon/GeoModelEnvelopes
 + AtlasGeometryCommon/Interpreters
 + AtlasGeometryCommon/SubDetectorEnvelopes
-+ AtlasTest/NightlyTestTools/ATNight
-+ AtlasTest/NightlyTestTools/Nicos
 + AtlasTest/TestTools
 + Calorimeter/CaloCnv/CaloDetMgrDetDescrCnv
 + Calorimeter/CaloCnv/CaloIdCnv
@@ -40,7 +38,6 @@
 + Control/CLIDComps
 + Control/CLIDSvc
 + Control/CxxUtils
-+ Control/DataModel
 + Control/DataModelAthenaPool
 + Control/DataModelRoot
 + Control/GaudiSequencer
@@ -71,9 +68,7 @@
 + Database/APR/RootCollection
 + Database/APR/RootStorageSvc
 + Database/APR/StorageSvc
-+ Database/APR/XMLCatalog
 + Database/AthenaPOOL/AthenaPoolCnvSvc
-+ Database/AthenaPOOL/AthenaPoolKernel
 + Database/AthenaPOOL/AthenaPoolServices
 + Database/AthenaPOOL/AthenaPoolUtilities
 + Database/AthenaPOOL/DBDataModel
@@ -218,7 +213,6 @@
 + LArCalorimeter/LArG4/LArG4RunControl
 + LArCalorimeter/LArG4/LArG4SD
 + LArCalorimeter/LArG4/LArG4ShowerLib
-+ LArCalorimeter/LArG4/LArG4ShowerLibData
 + LArCalorimeter/LArG4/LArG4ShowerLibSvc
 + LArCalorimeter/LArGeoModel/LArGeoAlgsNV
 + LArCalorimeter/LArGeoModel/LArGeoBarrel
@@ -331,7 +325,6 @@
 + Tools/PathResolver
 + Tools/PmbCxxUtils
 + Tools/PROCTools
-+ Tools/PyCmt
 + Tools/PyJobTransforms
 + Tools/PyUtils
 + Tools/Scripts
diff --git a/Projects/Athena/package_filters.txt b/Projects/Athena/package_filters.txt
index c9b81c4212e84bc4e49c2d8f0019661fefffae55..cd306a1de015fd862d2dfe4f39c8a9447d43972f 100644
--- a/Projects/Athena/package_filters.txt
+++ b/Projects/Athena/package_filters.txt
@@ -10,6 +10,7 @@
 
 # Remove most HLT packages
 + HLT/Trigger/TrigTransforms/TrigTransform
++ HLT/Event/ByteStreamEmonSvc
 - HLT/.*
 - Trigger/TrigValidation/TrigP1Test
 - HLT/HLToks
diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoAODFixGetter.py b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoAODFixGetter.py
deleted file mode 100644
index 9baab1e9fad5fd68b578ec3cb71337499dc53211..0000000000000000000000000000000000000000
--- a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoAODFixGetter.py
+++ /dev/null
@@ -1,230 +0,0 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-from AthenaCommon.Constants import INFO
-from AthenaCommon.AppMgr import ToolSvc
-from AthenaCommon.Logging import logging
-from RecExConfig.RecFlags import rec
-
-from egammaRec.Factories import ToolFactory, AlgFactory, getPropertyValue
-
-#---------------------------------------
-
-# tool to collect topo clusters in cone
-from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__CaloClustersInConeTool
-CaloClustersInConeTool = ToolFactory(xAOD__CaloClustersInConeTool,
-                                     CaloClusterLocation = "CaloCalTopoClusters")
-
-# configuration for ED computation
-def configureEDCorrection(tool):
-  """Configure tools and algorithm for energy density correction 
-     (only if doEnergyDensityCorrection = True)"""
-  # Return if doEnergyDensityCorrection is false
-  if not getPropertyValue(tool, 'doEnergyDensityCorrection'):
-    return
-  # Set OutputLevel to INFO or higher if tool has it too
-  OutputLevel = min(getPropertyValue(tool, 'OutputLevel'), INFO)
-  try:
-    from AthenaCommon.AppMgr import ToolSvc
-    from AthenaCommon.AlgSequence import AlgSequence
-    from EventShapeTools.EventDensityConfig import configEventDensityTool, EventDensityAlg
-    from JetRec.JetRecStandard import jtm
-    topSequence = AlgSequence()
-    if not hasattr(topSequence,'EDtpIsoVeryForwardAlg'):
-      tfcc = configEventDensityTool("EDtpIsoVeryForwardTool",
-                                    inputlabel = jtm.emget.Label,
-                                    radius          = 0.5,
-                                    AbsRapidityMin  = 2.5,
-                                    AbsRapidityMax  = 4.5,
-                                    OutputContainer = "TopoClusterIsoVeryForwardEventShape",
-                                    OutputLevel     = OutputLevel
-                                    )
-      ToolSvc += tfcc
-      topSequence += EventDensityAlg("EDtpIsoVeryForwardAlg", EventDensityTool = tfcc)
-
-  except Exception:
-    print '\nERROR: could not get handle to ED'
-    raise
-
-from CaloIdentifier import SUBCALO 
-from IsolationTool.IsolationToolConf import xAOD__CaloIsolationTool, xAOD__TrackIsolationTool
-CaloIsolationTool = ToolFactory(xAOD__CaloIsolationTool,name = "CaloIsolationTool",
-                                postInit                        = [configureEDCorrection],
-                                CaloFillRectangularClusterTool  = None,
-                                ClustersInConeTool              = CaloClustersInConeTool,
-                                PFlowObjectsInConeTool          = None,
-                                IsoLeakCorrectionTool           = None,
-                                saveOnlyRequestedCorrections    = True,
-                                EMCaloNums                      = [],
-                                HadCaloNums                     = [],
-                                UseEMScale                      = True,
-                                addCaloExtensionDecoration      = False,
-                                OutputLevel                     = 3)
-
-TrackIsolationTool = ToolFactory(xAOD__TrackIsolationTool, name = 'TrackIsolationTool')
-from AthenaCommon import CfgMgr
-tit = CfgMgr.xAOD__TrackIsolationTool('TrackIsolationTool')
-tit.TrackSelectionTool.maxZ0SinTheta = 3
-tit.TrackSelectionTool.minPt         = 1000
-tit.TrackSelectionTool.CutLevel      = "Loose"
-
-import ROOT, cppyy
-# Need to be sure base dict is loaded first.
-cppyy.loadDictionary('xAODCoreRflxDict')
-cppyy.loadDictionary('xAODPrimitivesDict')
-isoPar = ROOT.xAOD.Iso
-
-# The types to be computed
-IsoTypesEg =  [
-  [ isoPar.ptcone40, 
-    isoPar.ptcone30,
-    isoPar.ptcone20 ]
-  ]
-IsoTypesFe =  [
-  [ isoPar.topoetcone20, 
-    isoPar.topoetcone30,
-    isoPar.topoetcone40 ]
-  ]
-IsoTypesMu =  [
-  [ isoPar.topoetcone20, 
-    isoPar.topoetcone30,
-    isoPar.topoetcone40 ]
-  ]
-# And the corrections
-IsoCorEg = [
-  [ isoPar.coreTrackPtr ] 
-  ]
-#
-IsoCorFe = [
-  [ isoPar.coreCone, isoPar.pileupCorrection ] 
-  ]
-#
-IsoCorMu = [
-  [ isoPar.coreCone, isoPar.pileupCorrection ] 
-  ]
-
-# 
-
-from IsolationCorrections.IsolationCorrectionsConf import CP__IsolationCorrectionTool as ict
-leakTool = ict(name     = "LeakageCorrection",
-               CorrFile = "IsolationCorrections/isolation_ptcorrections_rel20_2.root") # in principle the default
-ToolSvc += leakTool
-
-from IsolationAlgs.IsolationAlgsConf import IsolationBuilder
-isoAODFixBuilderElectron = AlgFactory(IsolationBuilder,
-                                      name                  = "IsolationBuilderElectron",
-                                      ElectronCollectionContainerName    = "Electrons",
-                                      PhotonCollectionContainerName      = "",
-                                      MuonCollectionContainerName        = "",
-                                      FwdElectronCollectionContainerName = "",
-                                      CaloCellIsolationTool = None,
-                                      CaloTopoIsolationTool = None,
-                                      PFlowIsolationTool    = None,
-                                      TrackIsolationTool    = None, 
-                                      FeIsoTypes            = [[]] ,
-                                      FeCorTypes            = IsoCorFe,
-                                      EgIsoTypes            = [[]],
-                                      EgCorTypes            = IsoCorEg,
-                                      MuIsoTypes            = [[]] ,
-                                      MuCorTypes            = IsoCorMu,
-                                      IsAODFix              = True,
-                                      LeakageTool           = leakTool,
-                                      IsolateEl             = False,
-                                      OutputLevel           = 3)
-
-isoAODFixBuilderPhoton = AlgFactory(IsolationBuilder,
-                                    name                  = "IsolationBuilderPhoton",
-                                    ElectronCollectionContainerName    = "",
-                                    PhotonCollectionContainerName      = "Photons",
-                                    MuonCollectionContainerName        = "",
-                                    FwdElectronCollectionContainerName = "",
-                                    CaloCellIsolationTool = None,
-                                    CaloTopoIsolationTool = None,
-                                    PFlowIsolationTool    = None,
-                                    TrackIsolationTool    = TrackIsolationTool, 
-                                    FeIsoTypes            = [[]] ,
-                                    FeCorTypes            = IsoCorFe,
-                                    EgIsoTypes            = IsoTypesEg,
-                                    EgCorTypes            = IsoCorEg,
-                                    MuIsoTypes            = [[]] ,
-                                    MuCorTypes            = IsoCorMu,
-                                    IsAODFix              = True,
-                                    LeakageTool           = leakTool,
-                                    IsolateEl             = False,
-                                    OutputLevel           = 3)
-
-isoAODFixBuilderMuon = AlgFactory(IsolationBuilder,
-                                  name                  = "IsolationBuilderMuon",
-                                  ElectronCollectionContainerName    = "",
-                                  PhotonCollectionContainerName      = "",
-                                  MuonCollectionContainerName        = "Muons",
-                                  FwdElectronCollectionContainerName = "",
-                                  CaloCellIsolationTool = None,
-                                  CaloTopoIsolationTool = CaloIsolationTool,
-                                  PFlowIsolationTool    = None,
-                                  TrackIsolationTool    = None, 
-                                  FeIsoTypes            = [[]] ,
-                                  FeCorTypes            = IsoCorFe,
-                                  EgIsoTypes            = [[]],
-                                  EgCorTypes            = IsoCorEg,
-                                  MuIsoTypes            = IsoTypesMu,
-                                  MuCorTypes            = IsoCorMu,
-                                  CustomConfigurationNameMu = 'Core0p05',
-                                  IsAODFix              = True,
-                                  LeakageTool           = None,
-                                  IsolateEl             = False,
-                                  OutputLevel           = 3)
-
-
-isoAODFixBuilderFwdElectron = AlgFactory(IsolationBuilder,
-                                         name                  = "IsolationBuilderForwardElectron",
-                                         ElectronCollectionContainerName    = "",
-                                         PhotonCollectionContainerName      = "",
-                                         MuonCollectionContainerName        = "",
-                                         FwdElectronCollectionContainerName = "ForwardElectrons",
-                                         CaloCellIsolationTool = None,
-                                         CaloTopoIsolationTool = CaloIsolationTool,
-                                         PFlowIsolationTool    = None,
-                                         TrackIsolationTool    = None, 
-                                         FeIsoTypes            = IsoTypesFe,
-                                         FeCorTypes            = IsoCorFe,
-                                         EgIsoTypes            = [[]],
-                                         EgCorTypes            = IsoCorEg,
-                                         MuIsoTypes            = [[]],
-                                         MuCorTypes            = IsoCorMu,
-                                         IsAODFix              = True,
-                                         LeakageTool           = None,
-                                         IsolateEl             = False,
-                                         OutputLevel           = 3)
-
-
-from RecExConfig.Configured import Configured
-class isoAODFixGetter ( Configured ) :
-    
-  def __init__(self, intype = ""):
-    super( isoAODFixGetter, self ).__init__()
-    self.type = intype
-
-    mlog = logging.getLogger ('isoAODFixGetter.py::configure:')
-    mlog.info('entering')
-    
-    # configure iso here:
-    try:
-      if self.type == "Electrons":
-        self._isoBuilderHandle = isoAODFixBuilderElectron()
-      elif self.type == "Photons":
-        self._isoBuilderHandle = isoAODFixBuilderPhoton()
-      elif self.type == "ForwardElectrons":
-        self._isoBuilderHandle = isoAODFixBuilderFwdElectron()  
-      elif self.type == "Muons":
-        self._isoBuilderHandle = isoAODFixBuilderMuon()  
-      else:
-        mlog.error("wrong object for IsolationBuilder")
-    except Exception:
-      mlog.error("could not get handle to IsolationBuilder")
-      import traceback
-      print traceback.format_exc()
-      return False
-         
-  def isoBuilderHandle(self):
-    return self._BuilderHandle
-
diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py
index f89b0ebaef6cd56455328f1c7ca8fde79bae94c0..136252a37f167bbf3b8ea6abc91da5f7405acf22 100644
--- a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py
+++ b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.py
@@ -51,7 +51,8 @@ if recAlgs.doEFlow() :
   # PseudoJetGetters are now run in their own dedicated algs
   from JetRec.JetRecConf import PseudoJetAlgorithm
   # EMTopo (non-origin corrected) clusters
-  topSequence += PseudoJetAlgorithm("pjalg_"+jtm.emget.Label,PJGetter=jtm.emget)
+  if not hasattr(topSequence, "pjalg_"+jtm.emget.Label):
+    topSequence += PseudoJetAlgorithm("pjalg_"+jtm.emget.Label,PJGetter=jtm.emget)
   # EM Neutral PFOs
   topSequence += PseudoJetAlgorithm("pjalg_"+emnpflowget.Label,PJGetter=emnpflowget)
 
@@ -60,6 +61,14 @@ from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__CaloClustersInCo
 CaloClustersInConeTool = ToolFactory(xAOD__CaloClustersInConeTool,
                                      CaloClusterLocation = "CaloCalTopoClusters")
 
+# tool to extrapolate to the calo
+import AthenaCommon.CfgMgr as CfgMgr
+#this is just regular extrapolator, but in ToolFactory form
+from egammaTools.InDetTools import egammaExtrapolator
+CaloExtensionTool =  ToolFactory (CfgMgr.Trk__ParticleCaloExtensionTool,
+                                  Extrapolator = egammaExtrapolator)
+
+
 # configuration for ED computation
 # For the time being, it uses all pflow objects (neutral@EM + charged) for pflow
 def configureEDCorrection(tool):
@@ -72,6 +81,7 @@ def configureEDCorrection(tool):
   OutputLevel = min(getPropertyValue(tool, 'OutputLevel'), INFO)
   try:
     from AthenaCommon.AppMgr import ToolSvc
+    from JetRec.JetRecStandard import jtm
     from EventShapeTools.EventDensityConfig import configEventDensityTool, EventDensityAthAlg
     from AthenaCommon.AlgSequence import AlgSequence
     topSequence = AlgSequence()
@@ -172,13 +182,14 @@ CaloIsolationTool = ToolFactory(xAOD__CaloIsolationTool,name = "CaloIsolationToo
                                 CaloFillRectangularClusterTool  = CaloFillRectangularCluster,
                                 ClustersInConeTool              = CaloClustersInConeTool,
                                 PFlowObjectsInConeTool          = PFlowObjectsInConeTool,
+                                ParticleCaloExtensionTool       = CaloExtensionTool,
                                 IsoLeakCorrectionTool           = IsoCorrectionTool,
                                 EMCaloNums                      = [SUBCALO.LAREM],
                                 HadCaloNums                     = [SUBCALO.LARHEC, SUBCALO.TILE],
                                 UseEMScale                      = True)
 
 TrackIsolationTool = ToolFactory(xAOD__TrackIsolationTool, name = 'TrackIsolationTool')
-from AthenaCommon import CfgMgr
+#from AthenaCommon import CfgMgr
 tit = CfgMgr.xAOD__TrackIsolationTool('TrackIsolationTool')
 tit.TrackSelectionTool.maxZ0SinTheta = 3
 tit.TrackSelectionTool.minPt         = 1000
diff --git a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.pyMod b/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.pyMod
deleted file mode 100644
index cc7d28de14049aaecbb6c6fd21d90642504f037c..0000000000000000000000000000000000000000
--- a/Reconstruction/RecoAlgs/IsolationAlgs/python/IsoGetter.pyMod
+++ /dev/null
@@ -1,246 +0,0 @@
-from AthenaCommon.Constants import INFO
-from AthenaCommon.AppMgr import ToolSvc
-from AthenaCommon.Logging import logging
-from RecExConfig.RecFlags import rec
-
-from egammaRec.Factories import ToolFactory, AlgFactory, getPropertyValue
-
-#---------------------------------------
-# egamma specifics          
-from egammaCaloTools.egammaCaloToolsFactories import CaloFillRectangularCluster
-
-from AthenaCommon.GlobalFlags import globalflags
-isMC = not globalflags.DataSource()=='data'
-from IsolationCorrections.IsolationCorrectionsConf import CP__IsolationCorrectionTool as ICT
-IsoCorrectionTool = ToolFactory(ICT,
-                                name = "NewLeakageCorrTool",
-                                IsMC = isMC)
-
-doPFlow = False
-PFlowObjectsInConeTool = None
-from RecExConfig.RecAlgsFlags import recAlgs
-if recAlgs.doEFlow() :
-
-  doPFlow = True
-
-  # tool to collect pflow objects in cone
-  from PFlowUtils.PFlowUtilsConf import CP__RetrievePFOTool as RetrievePFOTool
-  pfoTool = RetrievePFOTool();
-  ToolSvc += pfoTool
-
-  from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__PFlowObjectsInConeTool
-  PFlowObjectsInConeTool = ToolFactory(xAOD__PFlowObjectsInConeTool,
-                                       name = "PFlowObjectsInConeTool",
-                                       RetrievePFOTool = pfoTool)
-  
-  from JetRec.JetRecStandard import jtm
-  from JetRecTools.JetRecToolsConf import PFlowPseudoJetGetter
-  jtm += PFlowPseudoJetGetter(
-    name               = "emnpflowget",
-    Label              = "EMNPFlow",
-    OutputContainer    = "PseudoJetEMNPFlow",
-    RetrievePFOTool    = jtm.pflowretriever,
-    InputIsEM          = True,
-    CalibratePFO       = False,
-    SkipNegativeEnergy = True,
-    UseNeutral         = True,
-    UseCharged         = False
-    )
-
-# tool to collect topo clusters in cone
-from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__CaloClustersInConeTool
-CaloClustersInConeTool = ToolFactory(xAOD__CaloClustersInConeTool,
-                                     CaloClusterLocation = "CaloCalTopoClusters")
-
-# configuration for ED computation
-# For the time being, it uses all pflow objects (neutral@EM + charged) for pflow
-def configureEDCorrection(tool):
-  """Configure tools and algorithm for energy density correction 
-     (only if doEnergyDensityCorrection = True)"""
-  # Return if doEnergyDensityCorrection is false
-  if not getPropertyValue(tool, 'doEnergyDensityCorrection'):
-    return
-  # Set OutputLevel to INFO or higher if tool has it too
-  OutputLevel = min(getPropertyValue(tool, 'OutputLevel'), INFO)
-  try:
-    from AthenaCommon.AppMgr import ToolSvc
-    from AthenaCommon.AlgSequence import AlgSequence
-    from EventShapeTools.EventDensityConfig import configEventDensityTool, EventDensityAlg
-    from JetRec.JetRecStandard import jtm
-    topSequence = AlgSequence()
-    if not hasattr(topSequence,'EDtpIsoCentralAlg'):
-      tccc = configEventDensityTool("EDtpIsoCentralTool", jtm.emget,
-                                    radius          = 0.5,
-                                    AbsRapidityMin  = 0.0,
-                                    AbsRapidityMax  = 1.5,
-                                    OutputContainer = "TopoClusterIsoCentralEventShape",
-                                    OutputLevel     = OutputLevel
-                                    )
-      ToolSvc += tccc
-      topSequence += EventDensityAlg("EDtpIsoCentralAlg", EventDensityTool = tccc)
-
-    if not hasattr(topSequence,'EDtpIsoForwardAlg'):
-      tfcc = configEventDensityTool("EDtpIsoForwardTool", jtm.emget,
-                                    radius          = 0.5,
-                                    AbsRapidityMin  = 1.5,
-                                    AbsRapidityMax  = 3.0,
-                                    OutputContainer = "TopoClusterIsoForwardEventShape",
-                                    OutputLevel     = OutputLevel
-                                    )
-      ToolSvc += tfcc
-      topSequence += EventDensityAlg("EDtpIsoForwardAlg", EventDensityTool = tfcc)
-
-    if doPFlow:
-      if not hasattr(topSequence,'EDpfIsoCentralAlg'):
-        tcpf = configEventDensityTool("EDpfIsoCentralTool", jtm.empflowget,
-                                      radius          = 0.5,
-                                      AbsRapidityMin  = 0.0,
-                                      AbsRapidityMax  = 1.5,
-                                      OutputContainer = "ParticleFlowIsoCentralEventShape",
-                                      OutputLevel     = OutputLevel
-                                      )
-        ToolSvc += tcpf
-        topSequence += EventDensityAlg("EDpfIsoCentralAlg", EventDensityTool = tcpf)
-
-      if not hasattr(topSequence,'EDpfIsoForwardAlg'):
-        tfpf = configEventDensityTool("EDpfIsoForwardTool", jtm.empflowget,
-                                      radius          = 0.5,
-                                      AbsRapidityMin  = 1.5,
-                                      AbsRapidityMax  = 3.0,
-                                      OutputContainer = "ParticleFlowIsoForwardEventShape",
-                                      OutputLevel     = OutputLevel
-                                      )
-        ToolSvc += tfpf
-        topSequence += EventDensityAlg("EDpfIsoForwardAlg", EventDensityTool = tfpf)
-
-      ## Try a neutral density
-      if not hasattr(topSequence,'EDnpfIsoCentralAlg'):
-        tcnpf = configEventDensityTool("EDnpfIsoCentralTool", jtm.emnpflowget,
-                                       radius          = 0.5,
-                                       AbsRapidityMin  = 0.0,
-                                       AbsRapidityMax  = 1.5,
-                                       OutputContainer = "NeutralParticleFlowIsoCentralEventShape",
-                                       OutputLevel     = OutputLevel
-                                       )
-        ToolSvc += tcnpf
-        topSequence += EventDensityAlg("EDnpfIsoCentralAlg", EventDensityTool = tcnpf)
-
-      if not hasattr(topSequence,'EDnpfIsoForwardAlg'):
-        tfnpf = configEventDensityTool("EDnpfIsoForwardTool", jtm.emnpflowget,
-                                       radius          = 0.5,
-                                       AbsRapidityMin  = 1.5,
-                                       AbsRapidityMax  = 3.0,
-                                       OutputContainer = "NeutralParticleFlowIsoForwardEventShape",
-                                       OutputLevel     = OutputLevel
-                                       )
-        ToolSvc += tfnpf
-        topSequence += EventDensityAlg("EDnpfIsoForwardAlg", EventDensityTool = tfnpf)
-
-  except Exception:
-    print '\nERROR: could not get handle to ED'
-    raise
-
-from CaloIdentifier import SUBCALO 
-from IsolationTool.IsolationToolConf import xAOD__CaloIsolationTool, xAOD__TrackIsolationTool
-CaloIsolationTool = ToolFactory(xAOD__CaloIsolationTool,name = "MyCaloIsolationTool",
-                                postInit                        = [configureEDCorrection],
-                                CaloFillRectangularClusterTool  = CaloFillRectangularCluster,
-                                ClustersInConeTool              = CaloClustersInConeTool,
-                                PFlowObjectsInConeTool          = PFlowObjectsInConeTool,
-                                IsoLeakCorrectionTool           = IsoCorrectionTool,
-                                EMCaloNums                      = [SUBCALO.LAREM],
-                                HadCaloNums                     = [SUBCALO.LARHEC, SUBCALO.TILE],
-                                UseEMScale                      = True,
-                                OutputLevel                     = 3)
-
-TrackIsolationTool = ToolFactory(xAOD__TrackIsolationTool, name = 'TrackIsolationTool')
-from AthenaCommon import CfgMgr
-tit = CfgMgr.xAOD__TrackIsolationTool('TrackIsolationTool')
-tit.TrackSelectionTool.maxZ0SinTheta = 3
-tit.TrackSelectionTool.minPt         = 1000
-tit.TrackSelectionTool.CutLevel      = "TightPrimary"
-
-import ROOT, cppyy
-# Need to be sure base dict is loaded first.
-cppyy.loadDictionary('xAODCoreRflxDict')
-cppyy.loadDictionary('xAODPrimitivesDict')
-isoPar = ROOT.xAOD.Iso
-
-# In fact the default isolations are the same for eg and muons : prepare the list here
-IsoTypes =  [
-  [ isoPar.etcone40, ## Be carefull : store them in decreasing dR
-    isoPar.etcone30,
-    isoPar.etcone20 ],
-  [ isoPar.topoetcone20,
-    isoPar.topoetcone30,
-    isoPar.topoetcone40 ],
-  [ isoPar.ptcone40, ## these ones will also trigger the ptvarconeXX. Be carefull : store them in decreasing dR
-    isoPar.ptcone30,
-    isoPar.ptcone20 ]
-  ]
-if doPFlow:
-  IsoTypes.append(  
-    [ isoPar.neflowisol20,
-      isoPar.neflowisol30,
-      isoPar.neflowisol40 ] )
-
-from IsolationAlgs.IsolationAlgsConf import IsolationBuilder
-isoBuilder = AlgFactory(IsolationBuilder,
-                        name                  = "IsolationBuilder",
-                        CaloCellIsolationTool = CaloIsolationTool,
-                        CaloTopoIsolationTool = CaloIsolationTool,
-                        PFlowIsolationTool    = CaloIsolationTool,
-                        TrackIsolationTool    = TrackIsolationTool, 
-			EgIsoTypes            = [[]] if not rec.doEgamma() else IsoTypes,
-			MuIsoTypes            = [[]] if not rec.doMuon() else IsoTypes,
-                        OutputLevel           = 3)
-
-#Customisation
-CustomCuts = [ [ 3, 400, 'TightPrimary' ], [ 3, 500, 'TightPrimary' ] , [ 3, 800, 'TightPrimary' ], [ 3, 1200, 'TightPrimary' ], [ 3, 1000, 'Loose' ]   ]
-for icut in CustomCuts:
-
-  from AthenaCommon.AppMgr import ToolSvc
-  from AthenaCommon.AlgSequence import AlgSequence
-  topSequence = AlgSequence()
-  CustomType = icut[2]+'z0'+str(icut[0])+'mmPt'+str(icut[1])+'MeV'
-  print 'Building track isolation tool for type ',CustomType
-  TrackIsolationCustom = xAOD__TrackIsolationTool(name = 'TrackIsolationTool'+CustomType)
-  TrackIsolationCustom.TrackSelectionTool.maxZ0SinTheta = float(icut[0])
-  TrackIsolationCustom.TrackSelectionTool.minPt         = float(icut[1])
-  TrackIsolationCustom.TrackSelectionTool.CutLevel      = icut[2]
-  ToolSvc += TrackIsolationCustom
-  isoBuilderCustom = IsolationBuilder(
-    name                   = "IsolationBuilder"+CustomType,
-    CaloCellIsolationTool  = None,
-    CaloTopoIsolationTool  = None,
-    PFlowIsolationTool     = None,
-    TrackIsolationTool     = TrackIsolationCustom, 
-    EgIsoTypes             = [[]] if not rec.doEgamma() else [[]],#[[isoPar.ptcone40,isoPar.ptcone30,isoPar.ptcone20]],
-    MuIsoTypes             = [[]] if not rec.doMuon() else [[isoPar.ptcone40,isoPar.ptcone30,isoPar.ptcone20]],
-    CustomConfgurationName = CustomType,
-    OutputLevel            = 3)
-  topSequence += isoBuilderCustom
-  
-
-from RecExConfig.Configured import Configured
-class isoGetter ( Configured ) :
- 
-    def configure(self):
-        mlog = logging.getLogger ('isoGetter.py::configure:')
-        mlog.info('entering')        
-        
-         # configure iso here:
-        try:
-            self._isoBuilderHandle = isoBuilder()
-        except Exception:
-            mlog.error("could not get handle to IsolationBuilder")
-            import traceback
-            print traceback.format_exc()
-            return False
-         
-        print self._isoBuilderHandle
-        return True
- 
-    def isoBuilderHandle(self):
-        return self._BuilderHandle
-
diff --git a/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h b/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h
index 5fd48d1ea48537c3899290d0f91836ae60379420..f0f0864ef4eac74869bc8aaa74e19b2407136ba1 100644
--- a/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h
+++ b/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h
@@ -13,7 +13,6 @@
 // #include "GaudiKernel/ToolHandle.h"
 #include "ParticlesInConeTools/ICaloClustersInConeTool.h"
 #include "ParticlesInConeTools/IPFlowObjectsInConeTool.h"
-#include "RecoToolInterfaces/ICaloIsolationDecoratorTool.h"
 #include "RecoToolInterfaces/IParticleCaloCellAssociationTool.h"
 #include "RecoToolInterfaces/IParticleCaloExtensionTool.h"
 #include "TrkParametersIdentificationHelpers/TrackParametersIdHelper.h"
@@ -44,9 +43,6 @@ namespace xAOD {
     virtual public ICaloTopoClusterIsolationTool,
     virtual public ICaloCellIsolationTool,
     virtual public INeutralEFlowIsolationTool,
-#ifndef XAOD_ANALYSIS
-    virtual public ICaloIsolationDecoratorTool,
-#endif // XAOD_ANALYSIS
     public asg::AsgTool {
     ASG_TOOL_CLASS3( CaloIsolationTool, ICaloTopoClusterIsolationTool, ICaloCellIsolationTool, INeutralEFlowIsolationTool )
   public:
@@ -86,31 +82,6 @@ namespace xAOD {
 				  CaloCorrection corrections) override;
       using INeutralEFlowIsolationTool::neutralEflowIsolation;
 
-#ifndef XAOD_ANALYSIS
-      virtual
-      bool decorateParticle( const IParticle& tp,
-                             const std::vector<Iso::IsolationType>& cones,
-                             CaloCorrection corrections,
-                             const CaloCellContainer* Cells = 0,
-                             const CaloClusterContainer* TopClusters = 0) override final; 
-#endif
-      virtual
-      bool decorateParticle_caloCellIso( const IParticle& tp,
-                             const std::vector<Iso::IsolationType>& cones,
-                             CaloCorrection corrections,
-                             const CaloCellContainer* Cells) override final;
-
-      virtual
-      bool decorateParticle_topoClusterIso( const IParticle& tp,
-                             const std::vector<Iso::IsolationType>& cones,
-                             CaloCorrection corrections,
-                             const CaloClusterContainer* TopClusters) override final;
-
-      virtual
-      bool decorateParticle_eflowIso( const IParticle& tp,
-                             const std::vector<Iso::IsolationType>& cones,
-                             CaloCorrection corrections) override final;
-
   private:
       /** map to the orignal particle */
       // This never seems to have more than one entry???
@@ -156,11 +127,6 @@ namespace xAOD {
                                  double coneCoreSize,
                                  derefMap_t& derefMap);
 
-      // final dressing function
-      bool decorateParticle(CaloIsolation& result,
-                            const IParticle& tp,
-                            const std::vector<Iso::IsolationType>& cones,
-                            CaloCorrection corrections);
       // etcone computation for TrackParticle
 #ifndef XAOD_ANALYSIS
       bool etConeIsolation( CaloIsolation& result, const TrackParticle& tp, 
@@ -247,7 +213,7 @@ namespace xAOD {
       /** get reference particle */
       const IParticle* getReferenceParticle(const IParticle& particle) const;
 
-      // add the calo decoration
+      // add the calo decoration -- FIXME! Change to use standard caching
       void decorateTrackCaloPosition(const IParticle& particle, float eta, float phi) const;
 
 #ifndef XAOD_ANALYSIS
diff --git a/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h b/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h
index 3e0c07bbc15af3a5e09edaf0dc1e715649f25ef6..f166ce6bbcc6cecb7949768da18c5aa1d8db746f 100644
--- a/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h
+++ b/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h
@@ -81,14 +81,6 @@ namespace xAOD {
 			   const std::set<const TrackParticle*>* exclusionSet = 0, 
 			   const TrackParticleContainer* indetTrackParticles = 0 ) const override; 
 
-      /**ITrackIsolationTool interface: */    
-      virtual
-      bool decorateParticle( const IParticle& tp, 
-                             const std::vector<Iso::IsolationType>& cones, 
-                             TrackCorrection corrections, 
-                             const Vertex* vertex = 0, 
-                             const std::set<const TrackParticle*>* exclusionSet = 0, 
-                             const TrackParticleContainer* indetTrackParticles = 0 ) override;
 
   private:
       /// define 2*Pi
diff --git a/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx b/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx
index e204bfc33a7305b80d5b8dbf74eab1b4904106bd..8d1138673a7f7a90c72b03688998fd870c33a739 100644
--- a/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx
+++ b/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx
@@ -29,8 +29,6 @@
 #include "xAODPrimitives/IsolationCorrection.h"
 #include "xAODPrimitives/IsolationHelpers.h"
 #include "xAODPrimitives/IsolationCorrectionHelper.h"
-#include "xAODPrimitives/tools/getIsolationDecorator.h"
-#include "xAODPrimitives/tools/getIsolationCorrectionDecorator.h"
 
 #include "xAODEgamma/Egamma.h"
 #include "xAODEgamma/EgammaDefs.h"
@@ -1350,151 +1348,6 @@ bool CaloIsolationTool::correctIsolationEnergy_pflowCore(CaloIsolation& result,
     return &particle;
   }
 
-  bool CaloIsolationTool::decorateParticle(CaloIsolation& result,
-					   const IParticle& tp,
-					   const std::vector<Iso::IsolationType>& cones,
-					   CaloCorrection corrections){
-    // get the applied corrections
-    std::vector<Iso::IsolationCaloCorrection> correctionTypes;
-    Iso::IsolationCaloCorrectionBitsetHelper::decode(corrections.calobitset,correctionTypes);
-    ATH_MSG_DEBUG("Decoded correction types: " << correctionTypes.size());
-
-    // decorate the particle
-    const SG::AuxElement::Decorator< uint32_t > bitsetAcc = getIsolationCorrectionBitsetDecorator(Iso::isolationFlavour(cones[0]));
-    bitsetAcc(tp) = corrections.calobitset.to_ulong();
-    
-    // Fill all computed corrections
-    // core correction type (e.g. coreMuon, core57cells)
-    for (auto coretype : result.coreCorrections) {
-      Iso::IsolationCaloCorrection ctype = coretype.first;
-      // core energy and area
-      for (auto par : coretype.second) {
-	if (par.first == Iso::coreArea) continue; // do not store area, as they are constant ! (pi R**2 or 5*0.025 * 7*pi/128)
-	const SG::AuxElement::Decorator< float > isoCorAcc = getIsolationCorrectionDecorator( Iso::isolationFlavour(cones[0]), ctype, par.first ); 
-    ATH_MSG_DEBUG("Storing core correction " << Iso::toCString(ctype) << " var " << Iso::toCString(par.first) << " = " << par.second);
-    isoCorAcc(tp) = par.second;
-      }
-    }
-    // noncore correction type (e.g. pileup)
-    for (auto corrtype : result.noncoreCorrections) {
-      Iso::IsolationCaloCorrection ctype = corrtype.first;
-      if (ctype == Iso::pileupCorrection) continue; // do not store pileup corrections as they are rho * pi * (R**2 - areaCore) and rho is stored...
-      std::vector<float> corrvec         = corrtype.second;
-      if (corrvec.size() != cones.size()) {
-	ATH_MSG_WARNING("Only cone size-based corrections are supported. Will do nothing to" << Iso::toCString(ctype) );
-	continue;
-      }
-      for (unsigned int i = 0; i < corrvec.size();i++) {
-	SG::AuxElement::Decorator< float > isoCorAcc = getIsolationCorrectionDecorator(cones[i],ctype);
-	  isoCorAcc(tp) = corrvec[i];
-      }
-    }
-
-    // fill main isolation
-    // loop over cones
-    if (result.etcones.size() == cones.size()) {
-      for( unsigned int i=0;i<cones.size();++i ){
-	
-	Iso::IsolationType type = cones[i];
-        const SG::AuxElement::Decorator< float >* isoTypeAcc = getIsolationDecorator(type);
-        if ( isoTypeAcc ) {
-	  ATH_MSG_DEBUG("Filling " << Iso::toCString(type) << " = " << result.etcones[i]);
-          (*isoTypeAcc)(tp) = result.etcones[i];
-        } else 
-	  ATH_MSG_WARNING("Cannot find accessor for " << Iso::toCString(type));
-      }
-    } else if( !result.etcones.empty() )
-      ATH_MSG_WARNING("Inconsistent etcones vector size: results : " << result.etcones.size() << ", number of wanted cones : " << cones.size() );
-    
-    return true;
-  }
-
-  bool CaloIsolationTool::decorateParticle_caloCellIso( const IParticle& tp,
-                                          const std::vector<Iso::IsolationType>& cones,
-                                          CaloCorrection corrections,
-                                          const CaloCellContainer* Cells){
-    // calculate the isolation
-    CaloIsolation result;
-    if( !caloCellIsolation(result,tp,cones,corrections,Cells) ) {
-      ATH_MSG_DEBUG("Calculation of caloCellIsolation failed");
-      return false;
-    }
-    if( !decorateParticle(result, tp, cones, corrections) ){
-      ATH_MSG_DEBUG("Decoration of caloCellIsolation failed");
-      return false;
-    }
-
-    return true;
-  }
-
-
-  bool CaloIsolationTool::decorateParticle_topoClusterIso( const IParticle& tp,
-                                          const std::vector<Iso::IsolationType>& cones,
-                                          CaloCorrection corrections,
-                                          const CaloClusterContainer* TopClusters) {
-    // calculate the isolation
-    CaloIsolation result;
-    if( !caloTopoClusterIsolation(result,tp,cones,corrections,TopClusters) ) {
-      ATH_MSG_DEBUG("Calculation of caloTopoClusterIsolation failed");
-      return false;
-    }
-    if( !decorateParticle(result, tp, cones, corrections) ){
-      ATH_MSG_DEBUG("Decoration of caloTopoClusterIsolation failed");
-      return false;
-    }
-
-    return true;
-  }
-
-  bool CaloIsolationTool::decorateParticle_eflowIso( const IParticle& tp,
-                                          const std::vector<Iso::IsolationType>& cones,
-                                          CaloCorrection corrections){
-    // calculate the isolation
-    CaloIsolation result;
-    if( !neutralEflowIsolation(result,tp,cones,corrections) ) {
-      ATH_MSG_DEBUG("Calculation of neutralEflowIsolation failed");
-      return false;
-    }
-    if( !decorateParticle(result, tp, cones, corrections) ){
-      ATH_MSG_DEBUG("Decoration of neutralEflowIsolation failed");
-      return false;
-    }
-    
-    return true;
-  }
-
-#ifndef XAOD_ANALYSIS
-  bool CaloIsolationTool::decorateParticle( const IParticle& tp,
-                                          const std::vector<Iso::IsolationType>& cones,
-                                          CaloCorrection corrections,
-                                          const CaloCellContainer* Cells,
-                                          const CaloClusterContainer* TopClusters){
-    ATH_MSG_DEBUG("just a test ");
-    /// check Isolation flavour
-    Iso::IsolationFlavour flavour = Iso::numIsolationFlavours;
-    for( unsigned int i=0;i<cones.size();++i ){
-      if(i==0) {flavour = isolationFlavour( cones[i] ); continue;}
-      if(flavour != isolationFlavour( cones[i] )){
-	ATH_MSG_FATAL("decorateParticle does not support mixture of the isolation flavour!!!");
-	return false;
-      }
-    }
-    
-    bool suc(false);
-    switch(flavour) {
-    case Iso::etcone:
-      suc = decorateParticle_caloCellIso(tp, cones, corrections, Cells); break;
-    case Iso::topoetcone:
-      suc = decorateParticle_topoClusterIso(tp, cones, corrections, TopClusters); break;
-    case Iso::neflowisol:
-      suc = decorateParticle_eflowIso(tp, cones, corrections); break;
-    default:
-      ATH_MSG_FATAL("Unsupported isolation flavour!!!"); return false;
-    }
-    
-    return suc;    
-  }
-#endif
 
 #ifdef XAOD_ANALYSIS // particlesInCone tool will not be avaible. Write our own...
   bool CaloIsolationTool::particlesInCone( float eta, float phi, float dr, std::vector<const CaloCluster*>& output ) const {
@@ -1544,6 +1397,7 @@ bool CaloIsolationTool::correctIsolationEnergy_pflowCore(CaloIsolation& result,
   }
 #endif // XAOD_ANALYSIS
 
+  // FIXME! This should be updated to use the standard caching of extrapolation to calo
   void CaloIsolationTool::decorateTrackCaloPosition(const IParticle& p, float eta, float phi) const{
     static SG::AuxElement::Decorator< char > dec_Decorated("caloExt_Decorated");
     static SG::AuxElement::Decorator< float > dec_Eta("caloExt_eta");
diff --git a/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx b/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx
index 91f6b2a530694468b024e46d372587e83c96237c..222499de9dcbf22157c13a403eb9de19c1c86203 100644
--- a/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx
+++ b/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx
@@ -16,8 +16,6 @@
 #include "xAODPrimitives/IsolationConeSize.h"
 #include "xAODPrimitives/IsolationHelpers.h"
 #include "xAODPrimitives/IsolationCorrectionHelper.h"
-#include "xAODPrimitives/tools/getIsolationDecorator.h"
-#include "xAODPrimitives/tools/getIsolationCorrectionDecorator.h"
 #include "xAODMuon/Muon.h"
 
 #include <iomanip>
@@ -167,79 +165,6 @@ namespace xAOD {
     return success;
   }
 
-  bool TrackIsolationTool::decorateParticle( const IParticle& tp, 
-                                             const std::vector<Iso::IsolationType>& cones, 
-                                             TrackCorrection corrections, 
-                                             const Vertex* vertex, 
-                                             const std::set<const TrackParticle*>* exclusionSet, 
-                                             const TrackParticleContainer* indetTrackParticles ) {
-    
-    // calculate the isolation
-    TrackIsolation result;
-    if( !trackIsolation(result,tp,cones,corrections,vertex,exclusionSet,indetTrackParticles) ) {
-      ATH_MSG_DEBUG("Calculation of TrackIsolation failed");
-      return false;
-    }
-
-    // get the applied corrections
-    std::vector<Iso::IsolationTrackCorrection> correctionTypes;
-    Iso::IsolationTrackCorrectionBitsetHelper::decode(corrections.trackbitset,correctionTypes);
-    ATH_MSG_DEBUG("Decoded correction types: " << correctionTypes.size() );
-
-
-    // decorate the track particle
-
-    // This is independant of the size. At least for the time being
-    // fill bitset
-    const SG::AuxElement::Decorator< uint32_t > bitsetAcc = getIsolationCorrectionBitsetDecorator(Iso::isolationFlavour(cones[0]));
-    bitsetAcc(tp) = corrections.trackbitset.to_ulong();
-    
-    
-    // fill corrections
-    for( auto ctype : correctionTypes ){
-      auto el = result.coreCorrections.find(ctype);
-      if( el == result.coreCorrections.end() ){
-	ATH_MSG_WARNING("Correction value not found " << Iso::toCString(ctype) );         
-	continue;
-      }
-      const SG::AuxElement::Decorator< float > isoCorAcc = getIsolationCorrectionDecorator( Iso::isolationFlavour(cones[0]), ctype );
-	  isoCorAcc(tp) = el->second;
-    }
-
-    // loop over cones
-    for( unsigned int i=0;i<cones.size();++i ){
-
-      Iso::IsolationType type = cones[i];
-      //Iso::IsolationFlavour flavour = Iso::isolationFlavour(type);
-      Iso::IsolationConeSize coneSize = enumconeSize(type);
-
-      // fill main isolation
-      if( result.ptcones.size() == cones.size() ){
-        const SG::AuxElement::Decorator< float >* isoTypeAcc = getIsolationDecorator(type);
-        if( isoTypeAcc ){
-	  ATH_MSG_DEBUG("Filling std cone " << result.ptcones[i]);
-          (*isoTypeAcc)(tp) = result.ptcones[i];
-        }
-      }else if( !result.ptcones.empty() ){
-        ATH_MSG_WARNING("Inconsistent ptcones vector size: " << result.ptvarcones_10GeVDivPt.size() << " number of cones " << cones.size() );
-      }
-
-      // also fill var cone
-      if( result.ptvarcones_10GeVDivPt.size() == cones.size() ){
-        Iso::IsolationType varIsoType = Iso::isolationType( Iso::ptvarcone, coneSize );
-        const SG::AuxElement::Decorator< float >* isoTypeAcc = getIsolationDecorator(varIsoType);
-        if( isoTypeAcc ){
-	  ATH_MSG_DEBUG("Filling var cone " << result.ptvarcones_10GeVDivPt[i]);
-          (*isoTypeAcc)(tp) = result.ptvarcones_10GeVDivPt[i];
-        }
-      }else if( !result.ptvarcones_10GeVDivPt.empty() ){
-        ATH_MSG_WARNING("Inconsistent ptvarcones_10GeVDivPt vector size: " << result.ptvarcones_10GeVDivPt.size() << " number of cones " << cones.size() );
-      }
-
-    }
-    return true;
-  }
-
 
   bool TrackIsolationTool::binnedIsolation( TrackIsolationInput& input, TrackIsolation& result )  const
   {
diff --git a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloCellIsolationTool.h b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloCellIsolationTool.h
index c0bfd68fc1e2da4df6f09215a00a5767251193e0..83d46f46ce6fa6e4b5782d00ec822146232d4a37 100644
--- a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloCellIsolationTool.h
+++ b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloCellIsolationTool.h
@@ -42,19 +42,6 @@ namespace xAOD {
 				    CaloCorrection corrections, 
 				    const CaloCellContainer* container = 0 ) const = 0; 
 
-    /**ICaloCellIsolationTool interface for calculating the cell isolation variables and decorating the particle: 
-       The tool expects the cones to be order in decreasing order (etcone40 -> etcone20)
-       Internally it reorders the cones so the output isolation values are also in the same order. 
-       @param[in] tp        input iparticle
-       @param[in] cones     vector of input cones to be used
-       @param[in] corrections bitset specifying which corrections to apply to isolation
-       @param[in] container cell contrainer (for trigger only)
-       @return true if the calculation and decoration was successfull
-    */    
-    virtual bool decorateParticle_caloCellIso( const IParticle& tp,
-                             const std::vector<Iso::IsolationType>& cones,
-                             CaloCorrection corrections,
-                             const CaloCellContainer* Cells = 0) = 0;
   };
 
 } // end of namespace
diff --git a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloIsolationDecoratorTool.h b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloIsolationDecoratorTool.h
deleted file mode 100644
index f2916799aeec995eff128471ef741540c9522a5b..0000000000000000000000000000000000000000
--- a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloIsolationDecoratorTool.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-///////////////////////////////////////////////////////////////////
-// ICaloIsolationDecoratorTool.h, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-#ifndef XAOD_ICALOISOLATIONDECORATORTOOL_H
-#define XAOD_ICALOISOLATIONDECORATORTOOL_H
-
-#include "GaudiKernel/IAlgTool.h"
-#include "xAODPrimitives/IsolationType.h"
-#include "xAODBase/IParticle.h"
-#include "IsolationCommon.h"
-
-class CaloCellContainer;
-class CaloClusterContainer;
-
-namespace xAOD {
-
-  static const InterfaceID IID_ICaloIsolationDecoratorTool("xAOD::ICaloIsolationDecoratorTool", 1, 0);
-
-  /** @class ICaloIsolationDecoratorTool
-      @brief interface for tools calculating track isolation
- 
-      @author Niels van Eldik, Sandrine Laplace
-   */
-
-  class ICaloIsolationDecoratorTool : virtual public IAlgTool {
-  public:
-
-    static const InterfaceID& interfaceID( ) ;
-
-    /**ICaloIsolationDecoratorTool interface for cell isolation: 
-       @param[in] tp        input iparticle
-       @param[in] cones     vector of input cones to be used
-       @param[in] corrections bitset specifying which corrections to apply to isolation
-       @param[in] Cells cell contrainer (for trigger only)
-       @param[in] TopClusters topoCluster contrainer (for trigger only)
-       @return true if the decoration was successfull
-    */    
-    virtual bool decorateParticle( const IParticle& tp,
-				   const std::vector<Iso::IsolationType>& cones, 
-				   CaloCorrection corrections, 
-				   const CaloCellContainer* Cells = 0,
-                                   const CaloClusterContainer* TopClusters = 0) = 0; 
-    
-  };
-  
-  inline const InterfaceID& ICaloIsolationDecoratorTool::interfaceID() { 
-    return IID_ICaloIsolationDecoratorTool; 
-  }
-
-} // end of namespace
-
-#endif 
diff --git a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloTopoClusterIsolationTool.h b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloTopoClusterIsolationTool.h
index 427c19ab5cbb61af6a8935ecfadb7538f506100f..faeee6acd9df1fefa9a550670d3c40819ef24612 100644
--- a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloTopoClusterIsolationTool.h
+++ b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ICaloTopoClusterIsolationTool.h
@@ -41,19 +41,6 @@ namespace xAOD {
 					  CaloCorrection corrections, 
 					  const CaloClusterContainer* container = 0 ) const = 0;
 
-    /**ICaloTopoClusterIsolationTool interface for calculating cluster isolation variables and decorating the particle: 
-       The tool expects the cones to be order in decreasing order (topetcone40 -> topoetcone20)
-       Internally it reorders the cones so the output isolation values are also in the same order. 
-       @param[in] tp        input iparticle
-       @param[in] cones     vector of input cones to be used
-       @param[in] corrections bitset specifying which corrections to apply to isolation
-       @param[in] container topo cluster contrainer (for trigger only)
-       @return true if the calculation and decoration was successfull
-    */
-    virtual bool decorateParticle_topoClusterIso(const IParticle& tp,
-                                                 const std::vector<Iso::IsolationType>& cones,
-                                                 CaloCorrection corrections,
-                                                 const CaloClusterContainer* TopClusters = 0) =0; 
   };
   
 } // end of namespace
diff --git a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/INeutralEFlowIsolationTool.h b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/INeutralEFlowIsolationTool.h
index c3cd04152e01570703a9b094343f293b6f5c58c8..089fd8d85e7921eb8486397b474edca675f1a93b 100644
--- a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/INeutralEFlowIsolationTool.h
+++ b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/INeutralEFlowIsolationTool.h
@@ -40,17 +40,6 @@ namespace xAOD {
 				       const std::vector<Iso::IsolationType>& cones, 
 				       CaloCorrection corrections) = 0; 
 
-    /**INeutralEFlowIsolationTool interface for calculating the eflow isolation variables and decorating the particle:
-       The tool expects the cones to be order in decreasing order (neflowiso40 -> neflowiso20)
-       Internally it reorders the cones so the output isolation values are also in the same order. 
-       @param[in] tp        input iparticle
-       @param[in] cones     vector of input cones to be used
-       @param[in] corrections bitset specifying which corrections to apply to isolation
-       @return true if the calculation and decoration was successfull
-    */  
-    virtual bool decorateParticle_eflowIso(const IParticle& tp,
-                                           const std::vector<Iso::IsolationType>& cones,
-                                           CaloCorrection corrections) = 0;
   };
  
 } // end of namespace
diff --git a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ITrackIsolationTool.h b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ITrackIsolationTool.h
index 04a23b3bc4a43e463866a9ea85aa5e7352a63475..b0a4bc2bde8f99352c8977a3d0ac9ded25ce92f2 100644
--- a/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ITrackIsolationTool.h
+++ b/Reconstruction/RecoTools/RecoToolInterfaces/RecoToolInterfaces/ITrackIsolationTool.h
@@ -47,25 +47,6 @@ namespace xAOD {
                                  const std::set<const xAOD::TrackParticle*>* exclusionSet = 0,
                                  const TrackParticleContainer* indetTrackParticles = 0) const = 0; 
 
-    /**ITrackIsolationTool interface: 
-       Calculates the track isolation and decorates the particle 
-       The tool expects the cones to be order in decreasing order (ptcone40 -> ptcone10)
-       Internally it reorders the cones so the output isolation values are also in the same order. 
-       @param[in] tp                  input iparticle
-       @param[in] cones               vector of input cones to be used
-       @param[in] corrections bitset specifying which corrections to apply to isolation
-       @param[in] vertex              if provided vertex to be used for track selection
-       @param[in] exclusionSet        if provided track particles in the set are ignored
-       @param[in] indetTrackParticles if provided the isolation will be calculated using the ID track particle collection passed
-       @return true if the calculation and decoration was successfull
-    */    
-    virtual bool decorateParticle( const IParticle& tp, 
-                                   const std::vector<Iso::IsolationType>& cones, 
-                                   TrackCorrection corrections, 
-                                   const Vertex* vertex = 0, 
-                                   const std::set<const TrackParticle*>* exclusionSet = 0, 
-                                   const TrackParticleContainer* indetTrackParticles = 0 ) = 0; 
-
   };
 
 } // end of namespace
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.cxx b/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.cxx
index 7255d0ef60c1e67ffd6a36572520970f5708ac53..6f8c1b53f3f562a4dd1cdcec994e213f932c533e 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.cxx
@@ -17,6 +17,9 @@
 #include "xAODTruth/TruthParticleAuxContainer.h"
 #include "xAODTruth/TruthEventContainer.h"
 
+#include "egammaInterfaces/IEMExtrapolationTools.h"
+
+
 typedef ElementLink<xAOD::TruthParticleContainer> TruthLink_t;
 typedef ElementLink<xAOD::CaloClusterContainer> ClusterLink_t;  
 typedef ElementLink<xAOD::ElectronContainer> ElectronLink_t;  
@@ -218,8 +221,13 @@ StatusCode egammaTruthAssociationAlg::match(const xAOD::TruthParticleContainer&
 
   writeDecorHandles<T> decoHandles(hkeys);
 
+  //Extrapolation Cache
+  Cache extrapolationCache{};
+
   for (auto particle : *decoHandles.readHandle()){
-    MCTruthInfo_t info = particleTruthClassifier(particle);
+
+    MCTruthInfo_t info = particleTruthClassifier(particle, &extrapolationCache);
+
     const xAOD::TruthParticle* truthParticle = info.genPart;
     if (truthParticle) {
       ElementLink<xAOD::TruthParticleContainer> link(truthParticle, truthParticles);
@@ -292,16 +300,12 @@ egammaTruthAssociationAlg::writeDecorHandles<T>::writeDecorHandles(const egammaT
 
 // ==========================================================================   
 template<class T> egammaTruthAssociationAlg::MCTruthInfo_t 
-egammaTruthAssociationAlg::particleTruthClassifier(const T* particle) {
+egammaTruthAssociationAlg::particleTruthClassifier(const T* particle, Cache *extrapolationCache) {
   MCTruthInfo_t info;
-#ifdef MCTRUTHCLASSIFIER_CONST
   IMCTruthClassifier::Info mcinfo;
+  mcinfo.extrapolationCache = extrapolationCache;
   auto ret = m_mcTruthClassifier->particleTruthClassifier(particle, &mcinfo);
   info.genPart = mcinfo.genPart;
-#else
-  auto ret = m_mcTruthClassifier->particleTruthClassifier(particle);
-  info.genPart = m_mcTruthClassifier->getGenPart();
-#endif
   info.first = ret.first;
   info.second = ret.second;
   return info;
@@ -309,28 +313,17 @@ egammaTruthAssociationAlg::particleTruthClassifier(const T* particle) {
 /** Template specialisation for electrons: 
  * second pass based on the cluster to find true photons **/
 template<> egammaTruthAssociationAlg::MCTruthInfo_t 
-egammaTruthAssociationAlg::particleTruthClassifier<xAOD::Electron>(const xAOD::Electron* electron) {
+egammaTruthAssociationAlg::particleTruthClassifier<xAOD::Electron>(const xAOD::Electron* electron, Cache *extrapolationCache) {
   MCTruthInfo_t info;
-#ifdef MCTRUTHCLASSIFIER_CONST
   IMCTruthClassifier::Info mcinfo;
+  mcinfo.extrapolationCache = extrapolationCache;
   auto ret = m_mcTruthClassifier->particleTruthClassifier(electron, &mcinfo);
-#else
-  auto ret = m_mcTruthClassifier->particleTruthClassifier(electron);
-#endif
   if (ret.first == MCTruthPartClassifier::Unknown &&
       !xAOD::EgammaHelpers::isFwdElectron(electron) && electron->caloCluster()){
     ATH_MSG_DEBUG("Trying cluster-based truth classification for electron");
-#ifdef MCTRUTHCLASSIFIER_CONST
     ret = m_mcTruthClassifier->particleTruthClassifier( electron->caloCluster(), &mcinfo);
-#else
-    ret = m_mcTruthClassifier->particleTruthClassifier( electron->caloCluster() );
-#endif
   }
-#ifdef MCTRUTHCLASSIFIER_CONST
   info.genPart = mcinfo.genPart;
-#else
-  info.genPart = m_mcTruthClassifier->getGenPart();
-#endif
   info.first = ret.first;
   info.second = ret.second;
   return info;
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.h b/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.h
index 944b5eefcb42b3410ea2f10fd2cc6d76d34778bd..c56d9005e470e8f5fb34029ec0ef44389b48951a 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaTruthAssociationAlg.h
@@ -35,7 +35,10 @@
 class egammaTruthAssociationAlg : public AthAlgorithm {
 
 public:
-  
+
+  typedef  std::unordered_map<size_t,std::unique_ptr<Trk::CaloExtension>> Cache;
+
+
   /** @brief constructor */
   egammaTruthAssociationAlg(const std::string& name, ISvcLocator* pSvcLocator);
   
@@ -55,6 +58,7 @@ private:
     MCTruthPartClassifier::ParticleType first;
     MCTruthPartClassifier::ParticleOrigin second;
     const xAOD::TruthParticle* genPart;
+    Cache *extrapolationCache;
   };
   
   /** @brief helper class to contain write docoration handle keys */
@@ -87,7 +91,7 @@ private:
 
   /** @brief return the result of MCTruthClassifier::particleTruthClassifier
     * or do a second pass for electrons based on the cluster to find true photons **/
-  template<class T> MCTruthInfo_t particleTruthClassifier(const T*) ;
+  template<class T> MCTruthInfo_t particleTruthClassifier(const T*, Cache *) ;
      
   /** @brief Create a copy a truth particle, add it to the new container and decorate it
     *  with a link to the original particle **/
diff --git a/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx b/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx
index 0f215d0a289af874391ada8214cc697c031bf03d..2cde033b11af9a0fb58077620911667464807012 100644
--- a/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx
+++ b/Reconstruction/egamma/egammaValidation/src/EgammaMonitoring.cxx
@@ -594,7 +594,7 @@ StatusCode EgammaMonitoring::finalize() {
     egammaMonitoring::EfficiencyPlot truthPhotonConvRecoUnconvEfficiency("truthPhotonConvRecoUnconvEfficiency", "/MONITORING/truthPhotonConvRecoUnconvEfficiency/", rootHistSvc );
     ATH_CHECK(truthPhotonConvRecoUnconvEfficiency.divide(truthPhotonConvRecoUnconv, truthPhotonConvPhoton));
     egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoUnconvEfficiency("truthPhotonUnconvRecoUnconvEfficiency", "/MONITORING/truthPhotonUnconvRecoUnconvEfficiency/", rootHistSvc );
-    ATH_CHECK(truthPhotonConvRecoUnconvEfficiency.divide(truthPhotonUnconvRecoUnconv, truthPhotonUnconvPhoton));
+    ATH_CHECK(truthPhotonUnconvRecoUnconvEfficiency.divide(truthPhotonUnconvRecoUnconv, truthPhotonUnconvPhoton));
     egammaMonitoring::EfficiencyPlot truthPhotonRecoConvEfficiency("truthPhotonRecoConvEfficiency", "/MONITORING/truthPhotonRecoConvEfficiency/", rootHistSvc );
     ATH_CHECK(truthPhotonRecoConvEfficiency.divide(truthPhotonConvRecoConv, truthPhotonRecoPhoton));
     egammaMonitoring::EfficiencyPlot truthPhotonRecoUnconvEfficiency("truthPhotonRecoUnconvEfficiency", "/MONITORING/truthPhotonRecoUnconvEfficiency/", rootHistSvc );
diff --git a/Simulation/Digitization/share/RunNumberOverride.py b/Simulation/Digitization/share/RunNumberOverride.py
index 3f6b9a073f9f077aa110f70d36f0d5a23788f918..3324b6919b5a54dd9b7383b7988ed639587eb1d0 100644
--- a/Simulation/Digitization/share/RunNumberOverride.py
+++ b/Simulation/Digitization/share/RunNumberOverride.py
@@ -7,7 +7,7 @@ from AthenaCommon.AppMgr import ServiceMgr
 if digitizationFlags.dataRunNumber.get_Value():
     if digitizationFlags.dataRunNumber.get_Value() < 0:
         raise SystemExit("Given a negative Run Number - please use a real run number from data.")
-    logDigitization_flags.info( 'Overriding run number to be: %s ', digitizationFlags.dataRunNumber.get_Value() )
+    print 'Overriding run number to be: %s ', digitizationFlags.dataRunNumber.get_Value()
     myRunNumber = digitizationFlags.dataRunNumber.get_Value()
     myFirstLB = 1
     myInitialTimeStamp = 1
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt
index f80aa38c7ab43fc44f7b0c7f3efa4d24bcfcaad1..275633dffd28044ece621b7817efb1c0f275dfda 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt
@@ -39,6 +39,7 @@ atlas_add_root_dictionary( ISF_FastCaloSimEvent _dictSource
                            ISF_FastCaloSimEvent/TFCS2DFunction.h 
                            ISF_FastCaloSimEvent/TFCS2DFunctionHistogram.h 
                            ISF_FastCaloSimEvent/TFCSParametrizationBase.h 
+                           ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h
                            ISF_FastCaloSimEvent/TFCSParametrization.h 
                            ISF_FastCaloSimEvent/TFCSInvisibleParametrization.h
                            ISF_FastCaloSimEvent/TFCSInitWithEkin.h
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h
index 0d81d35cc1e9b82246b8a3754532c06a0f638293..e0f2f70b6b11dee541a4a1d5edc36d437efa7c26 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h
@@ -17,6 +17,7 @@
 #include "ISF_FastCaloSimEvent/TFCS2DFunctionHistogram.h"
 
 #include "ISF_FastCaloSimEvent/TFCSParametrizationBase.h"
+#include "ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h"
 #include "ISF_FastCaloSimEvent/TFCSParametrization.h"
 #include "ISF_FastCaloSimEvent/TFCSInvisibleParametrization.h"
 #include "ISF_FastCaloSimEvent/TFCSInitWithEkin.h"
@@ -122,12 +123,13 @@
 #pragma link C++ class TFCS2DFunction+;
 #pragma link C++ class TFCS2DFunctionHistogram+;
 #pragma link C++ class TFCSParametrizationBase+;
+#pragma link C++ class TFCSParametrizationPlaceholder+;
 #pragma link C++ class TFCSParametrization+;
 #pragma link C++ class TFCSInvisibleParametrization+;
 #pragma link C++ class TFCSInitWithEkin+;
 #pragma link C++ class TFCSEnergyInterpolationLinear+;
 #pragma link C++ class TFCSEnergyInterpolationSpline+;
-#pragma link C++ class TFCSParametrizationChain+;
+#pragma link C++ class TFCSParametrizationChain-;
 #pragma link C++ class TFCSParametrizationBinnedChain+;
 #pragma link C++ class TFCSParametrizationFloatSelectChain+;
 #pragma link C++ class TFCSParametrizationPDGIDSelectChain+;
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationBase.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationBase.h
index 5d11ae369f132fcf724d8f6f4d7ea9997c46eabd..5fc382f4a03d876aebeec15e622a63906b7a7dde 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationBase.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationBase.h
@@ -135,6 +135,10 @@ public:
 
   ///Print object information. 
   void Print(Option_t *option = "") const;
+  
+  ///Deletes all objects from the s_cleanup_list. 
+  ///This list can get filled during streaming operations, where an immediate delete is not possible
+  static void DoCleanup();
 
 protected:
   const double init_Ekin_nominal=0;
@@ -144,6 +148,8 @@ protected:
   const double init_eta_min=-100;
   const double init_eta_max=100;
 
+  static std::vector< TFCSParametrizationBase* > s_cleanup_list;
+
 #if defined(__FastCaloSimStandAlone__)
 public:
   /// Update outputlevel
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationChain.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationChain.h
index 6d97dc41bc6049cd82d9669b5ec2cdb7830b8112..7f7dc86bb9b4e8100325e66108774fb9ed932b1a 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationChain.h
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationChain.h
@@ -12,6 +12,15 @@ public:
   TFCSParametrizationChain(const char* name=nullptr, const char* title=nullptr):TFCSParametrization(name,title) {};
   TFCSParametrizationChain(const TFCSParametrizationChain& ref):TFCSParametrization(ref.GetName(),ref.GetTitle()),m_chain(ref.chain()) {};
 
+  ///Status bit for chain persistency
+  enum FCSSplitChainObjects {
+     kSplitChainObjects = BIT(16) ///< Set this bit in the TObject bit field if the TFCSParametrizationBase objects in the chain should be written as separate keys into the root file instead of directly writing the objects. This is needed if the sum of all objects in the chain use >1GB of memory, which can't be handeled by TBuffer. Drawback is that identical objects will get stored as multiple instances
+  };
+
+  bool SplitChainObjects() const {return TestBit(kSplitChainObjects);};
+  void set_SplitChainObjects() {SetBit(kSplitChainObjects);};
+  void reset_SplitChainObjects() {ResetBit(kSplitChainObjects);};
+
   typedef std::vector< TFCSParametrizationBase* > Chain_t;
   virtual unsigned int size() const override {return m_chain.size();};
   virtual const TFCSParametrizationBase* operator[](unsigned int ind) const override {return m_chain[ind];};
@@ -26,6 +35,9 @@ public:
   virtual FCSReturnCode simulate(TFCSSimulationState& simulstate,const TFCSTruthState* truth, const TFCSExtrapolationState* extrapol) override;
 
   void Print(Option_t *option = "") const override;
+
+  //THIS CLASS HAS A CUSTOM STREAMER! CHANGES IN THE VERSIONING OR DATA TYPES NEED TO BE IMPLEMENTED BY HAND!
+  //void TFCSParametrizationChain::Streamer(TBuffer &R__b)
 protected:
   void recalc_pdgid_intersect();
   void recalc_pdgid_union();
@@ -46,13 +58,13 @@ protected:
 private:  
   Chain_t m_chain;
 
-  ClassDefOverride(TFCSParametrizationChain,1)  //TFCSParametrizationChain
+  ClassDefOverride(TFCSParametrizationChain,2)  //TFCSParametrizationChain
 };
 
 #include "ISF_FastCaloSimEvent/TFCSParametrizationChain.icc"
 
 #if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__)
-#pragma link C++ class TFCSParametrizationChain+;
+#pragma link C++ class TFCSParametrizationChain-;
 #endif
 
 #endif
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h
new file mode 100644
index 0000000000000000000000000000000000000000..ccfc30f42b6dbe972455a57e15d23005660dea0a
--- /dev/null
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h
@@ -0,0 +1,27 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ISF_FASTCALOSIMEVENT_TFCSParametrizationPlaceholder_h
+#define ISF_FASTCALOSIMEVENT_TFCSParametrizationPlaceholder_h
+
+#include "ISF_FastCaloSimEvent/TFCSParametrizationBase.h"
+
+class TFCSParametrizationPlaceholder:public TFCSParametrizationBase {
+public:
+  TFCSParametrizationPlaceholder(const char* name=nullptr, const char* title=nullptr):TFCSParametrizationBase(name,title) {};
+
+  virtual bool is_match_Ekin_bin(int /*Ekin_bin*/) const override {return true;};
+  virtual bool is_match_calosample(int /*calosample*/) const override {return true;};
+
+  virtual FCSReturnCode simulate(TFCSSimulationState& simulstate,const TFCSTruthState* truth, const TFCSExtrapolationState* extrapol) override;
+private:
+
+  ClassDefOverride(TFCSParametrizationPlaceholder,1)  //TFCSParametrizationPlaceholder
+};
+
+#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__)
+#pragma link C++ class TFCSParametrizationPlaceholder+;
+#endif
+
+#endif
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationBase.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationBase.cxx
index 2b5ec52785edecab66065bca78eb0f43532888b0..772b2a6ddbde2d76dc19dbb2322f0d976475cd01 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationBase.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationBase.cxx
@@ -10,6 +10,7 @@
 //=============================================
 
 std::set< int > TFCSParametrizationBase::s_no_pdgid;
+std::vector< TFCSParametrizationBase* > TFCSParametrizationBase::s_cleanup_list;
 
 #ifndef __FastCaloSimStandAlone__
 //Initialize only in constructor to make sure the needed services are ready
@@ -75,3 +76,14 @@ void TFCSParametrizationBase::Print(Option_t *option) const
     ATH_MSG_INFO(optprint<<GetTitle());
   }
 }
+
+void TFCSParametrizationBase::DoCleanup()
+{
+  //Do cleanup only at the end of read/write operations
+  for(auto ptr:s_cleanup_list) if(ptr) {
+    delete ptr;
+  }  
+  s_cleanup_list.resize(0);
+}
+
+
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationChain.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationChain.cxx
index 0fa9806b76e5fe45af8253935bcf4cf77741b794..69db3e27aff4eebceb36e9a7b6d6521f91c6d5b7 100644
--- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationChain.cxx
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationChain.cxx
@@ -3,8 +3,11 @@
 */
 
 #include "ISF_FastCaloSimEvent/TFCSParametrizationChain.h"
+#include "ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h"
 #include <algorithm>
 #include <iterator>
+#include "TBuffer.h"
+#include "TDirectory.h"
 
 //=============================================
 //======= TFCSParametrizationChain =========
@@ -149,3 +152,97 @@ void TFCSParametrizationChain::Print(Option_t *option) const
     count++;
   }
 }
+
+void TFCSParametrizationChain::Streamer(TBuffer &R__b)
+{
+   // Stream an object of class TFCSParametrizationChain.
+
+   UInt_t R__s, R__c;
+   TDirectory* dir=nullptr;
+   
+   if (R__b.IsReading()) {
+      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); 
+      if (R__v==1) {
+        R__b.SetBufferOffset(R__s);
+        R__b.ReadClassBuffer(TFCSParametrizationChain::Class(),this);
+      } else {
+        TFCSParametrization::Streamer(R__b);
+
+        TObject* parent=R__b.GetParent();
+        if(R__b.GetParent()) { 
+          if(parent->InheritsFrom(TDirectory::Class())) {
+            dir=(TDirectory*)parent;
+          }
+        }
+
+        TFCSParametrizationChain::Chain_t &R__stl =  m_chain;
+        R__stl.clear();
+        TClass *R__tcl1 = TFCSParametrizationBase::Class();
+        if (R__tcl1==0) {
+          Error("m_chain streamer","Missing the TClass object for class TFCSParametrizationBase *!");
+          return;
+        }
+        int R__i, R__n;
+        R__b >> R__n;
+        R__stl.reserve(R__n);
+        for (R__i = 0; R__i < R__n; R__i++) {
+          TFCSParametrizationBase* R__t;
+          R__t = (TFCSParametrizationBase*)R__b.ReadObjectAny(R__tcl1);
+          if(R__t!=nullptr) {
+            if(R__t->InheritsFrom(TFCSParametrizationPlaceholder::Class())) {
+              TFCSParametrizationBase* new_R__t=nullptr;
+
+              if(dir) new_R__t=(TFCSParametrizationBase*)dir->Get(R__t->GetName());
+
+              if(new_R__t) {
+                delete R__t;
+                R__t=new_R__t;
+              } else {
+                Error("TFCSParametrizationChain::Streamer","Found placeholder object in the parametrization chain, but could not read the real object from the file!");
+              }
+            }
+          }
+          R__stl.push_back(R__t);
+        }
+
+        R__b.CheckByteCount(R__s, R__c, TFCSParametrizationChain::IsA());
+      }  
+   } else {
+      R__c = R__b.WriteVersion(TFCSParametrizationChain::IsA(), kTRUE);
+      TFCSParametrization::Streamer(R__b);
+
+      if(SplitChainObjects()) {
+        TObject* parent=R__b.GetParent();
+        if(R__b.GetParent()) { 
+          if(parent->InheritsFrom(TDirectory::Class())) {
+            dir=(TDirectory*)parent;
+          }
+        }
+      }
+
+      TFCSParametrizationChain::Chain_t &R__stl =  m_chain;
+      int R__n=int(R__stl.size());
+      R__b << R__n;
+      if(R__n) {
+        TFCSParametrizationChain::Chain_t::iterator R__k;
+        int R__i=0;
+        for (R__k = R__stl.begin(); R__k != R__stl.end(); ++R__k) {
+          TFCSParametrizationBase* R__t = *R__k;
+          TFCSParametrizationBase* new_R__t=nullptr;
+          if(dir && R__t!=nullptr) {
+            dir->WriteTObject(R__t);
+            new_R__t=new TFCSParametrizationPlaceholder(R__t->GetName(),TString("Placeholder for: ")+R__t->GetTitle());
+            R__t=new_R__t;
+          }
+          R__b << R__t;
+
+          //delete new_R__t only after the end of read/write operations by calling TFCSParametrizationBase::DoCleanup();
+          if(new_R__t) s_cleanup_list.push_back(new_R__t);
+
+          ++R__i;
+        }
+      }
+      R__b.SetByteCount(R__c, kTRUE);
+   }
+}
+
diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationPlaceholder.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationPlaceholder.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..96c1fcea73250463997f34132832cffe83fed992
--- /dev/null
+++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCSParametrizationPlaceholder.cxx
@@ -0,0 +1,16 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h"
+
+//=============================================
+//======= TFCSParametrizationPlaceholder =========
+//=============================================
+
+FCSReturnCode TFCSParametrizationPlaceholder::simulate(TFCSSimulationState& /*simulstate*/,const TFCSTruthState* /*truth*/, const TFCSExtrapolationState* /*extrapol*/)
+{
+  ATH_MSG_ERROR("TFCSParametrizationPlaceholder::simulate(). This is a placeholder and should never get called. Likely a problem in the reading of the parametrization file occured and this class was not replaced with the real parametrization");
+  return FCSFatal;
+}
+
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileBeamElem.h b/TileCalorimeter/TileEvent/TileEvent/TileBeamElem.h
index 49342f1ea3664d4e64f5d9888f20961d73f359db..ce8fdbb1c47123589971753701833c9928349de3 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileBeamElem.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileBeamElem.h
@@ -31,12 +31,14 @@ public:
 
     TileBeamElem() { }
 
-    TileBeamElem(const Identifier& id, const std::vector<uint32_t>& digits );
-
     TileBeamElem(const HWIdentifier& HWid, const std::vector<uint32_t>& digits );
     TileBeamElem(const HWIdentifier& HWid, std::vector<uint32_t>&& digits );
-  
-    TileBeamElem(const HWIdentifier& HWid, uint32_t digit );
+
+    // Needs to come after HWIdentifier for proper overload resolution
+    // with pyroot.
+    TileBeamElem(const Identifier& id, const std::vector<uint32_t>& digits );
+
+  TileBeamElem(const HWIdentifier& HWid, uint32_t digit );
   
     /* Destructor */
 
diff --git a/TileCalorimeter/TileEvent/TileEvent/TileDigits.h b/TileCalorimeter/TileEvent/TileEvent/TileDigits.h
index 880daa36a599ba50403605c6f46eddc902cd256b..34fd7acdad6e9d7eaf617612b1baa8f0cef774d2 100755
--- a/TileCalorimeter/TileEvent/TileEvent/TileDigits.h
+++ b/TileCalorimeter/TileEvent/TileEvent/TileDigits.h
@@ -34,18 +34,22 @@ public:
 
     TileDigits() { }
 
-    TileDigits(const Identifier& id, const std::vector<double>& digits );
-
     TileDigits(const HWIdentifier& HWid, const std::vector<double>& digits );
   
-    TileDigits(const HWIdentifier& HWid, const std::vector<short>& digits );
+    // Needs to come after HWIdentifier for proper overload resolution
+    // with pyroot.
+    TileDigits(const Identifier& id, const std::vector<double>& digits );
 
-    TileDigits(const Identifier& id, const std::vector<float>& digits );
+    TileDigits(const HWIdentifier& HWid, const std::vector<short>& digits );
 
     TileDigits(const HWIdentifier& HWid, const std::vector<float>& digits );
 
     TileDigits(const HWIdentifier& HWid, std::vector<float>&& digits );
 
+    // Needs to come after HWIdentifier for proper overload resolution
+    // with pyroot.
+    TileDigits(const Identifier& id, const std::vector<float>& digits );
+
 
     /** @return number of samples */
     int nsamples() const { return m_digits.size(); }
diff --git a/TileCalorimeter/TileGeoModel/CMakeLists.txt b/TileCalorimeter/TileGeoModel/CMakeLists.txt
index b65e008ec0ee4621b2a092b419e7d9447e62c63d..79a974a973a43092d1dfcf719ce58c572db3ab15 100644
--- a/TileCalorimeter/TileGeoModel/CMakeLists.txt
+++ b/TileCalorimeter/TileGeoModel/CMakeLists.txt
@@ -15,7 +15,7 @@ atlas_depends_on_subdirs( PUBLIC
                           PRIVATE
                           Calorimeter/CaloDetDescr
                           Calorimeter/CaloIdentifier
-                          Control/CLIDSvc
+                          Control/AthenaKernel
                           Control/SGTools
                           Database/RDBAccessSvc
                           GaudiKernel
diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx b/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx
index 5ec00014e5e9ddf36fd1404dbb298d9961386fdb..f6efcc608ae8643d1a9b20a2a54d9738c524b4c5 100755
--- a/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx
+++ b/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx
@@ -24,7 +24,7 @@
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 
-#include "CLIDSvc/tools/ClassID_traits.h"
+#include "AthenaKernel/ClassID_traits.h"
 #include "SGTools/DataProxy.h"
 
 TileDetectorTool::TileDetectorTool(const std::string& type, 
diff --git a/TileCalorimeter/TileRecUtils/CMakeLists.txt b/TileCalorimeter/TileRecUtils/CMakeLists.txt
index 9fecd97f772c27151baa5bc87cea77f85c60e75b..733259e82966e658cd25c2bef380bb6c6096f1bd 100644
--- a/TileCalorimeter/TileRecUtils/CMakeLists.txt
+++ b/TileCalorimeter/TileRecUtils/CMakeLists.txt
@@ -32,6 +32,7 @@ atlas_depends_on_subdirs( PUBLIC
 
 # External dependencies:
 find_package( Boost COMPONENTS filesystem thread system )
+find_package( ROOT COMPONENTS Core )
 find_package( CLHEP )
 
 # Component(s) in the package:
@@ -53,3 +54,15 @@ atlas_add_component( TileRecUtils
 atlas_install_python_modules( python/*.py )
 atlas_install_joboptions( share/*.py )
 
+atlas_add_dictionary( TileRecUtilsDict
+                      TileRecUtils/TileRecUtilsDict.h
+                      TileRecUtils/selection.xml
+                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} TileRecUtilsLib )
+
+
+atlas_add_test( TileCellBuilder_test
+  SCRIPT test/TileCellBuilder_test.sh
+  PROPERTIES TIMEOUT 600
+  EXTRA_PATTERNS "LArDetectorToolNV|is still valid|no data retrieved|Database being retired|Reading file|Unable to locate catalog|Resolved path|DigitizationFlags|^Domain|created CondCont|no dictionary for class|^ +[+]|Reading LArPedestalMC|IOV callback|^DetectorStore|TileDetectorTool|Creating TileCondProxyFile" )
+
diff --git a/TileCalorimeter/TileRecUtils/TileRecUtils/TileRecUtilsDict.h b/TileCalorimeter/TileRecUtils/TileRecUtils/TileRecUtilsDict.h
new file mode 100644
index 0000000000000000000000000000000000000000..f2cca8820b2639d1f1ae7661663ea4cd0eed993d
--- /dev/null
+++ b/TileCalorimeter/TileRecUtils/TileRecUtils/TileRecUtilsDict.h
@@ -0,0 +1,21 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration.
+ */
+/**
+ * @file TileRecUtils/TileRecUtilsDict.h
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Sep, 2018
+ * @brief Generate dictionary for TileRecUtils.
+ */
+
+
+#ifndef TILERECUTILS_TILERECUTILSDICT_H
+#define TILERECUTILS_TILERECUTILSDICT_H
+
+
+// Needed for tests.
+#include "TileRecUtils/TileBeamInfoProvider.h"
+
+
+#endif // not TILERECUTILS_TILERECUTILSDICT_H
diff --git a/TileCalorimeter/TileRecUtils/TileRecUtils/selection.xml b/TileCalorimeter/TileRecUtils/TileRecUtils/selection.xml
new file mode 100644
index 0000000000000000000000000000000000000000..680265273c37e0e34b83bab69ddfa91a31b65cf2
--- /dev/null
+++ b/TileCalorimeter/TileRecUtils/TileRecUtils/selection.xml
@@ -0,0 +1,3 @@
+<lcgdict>
+  <class name="TileBeamInfoProvider"/>
+</lcgdict>
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.py b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..ff87f189f380e573d03f9766a7fbbc5787d6d018
--- /dev/null
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.py
@@ -0,0 +1,710 @@
+#
+# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration.
+#
+# File: TileRecUtils/share/TileCellBuilder_test.py
+# Author: sss
+# Date: Aug, 2018
+# Brief: Test for TileCellBuilder.
+#
+
+from __future__ import print_function
+
+
+import ROOT
+ROOT.TH1F
+
+from AthenaCommon.DetFlags      import DetFlags
+DetFlags.detdescr.Tile_setOn()
+DetFlags.detdescr.LAr_setOn()
+
+RunNumber = 284500
+
+import sys
+import string
+import ROOT
+import math
+from AtlasGeoModel import SetGeometryVersion
+from AtlasGeoModel import GeoModelInit
+from AtlasGeoModel import SetupRecoGeometry
+include('TileConditions/TileConditions_jobOptions.py')
+
+from GeoModelSvc.GeoModelSvcConf import GeoModelSvc
+ServiceMgr += GeoModelSvc()
+theApp.CreateSvc += [ "GeoModelSvc"]
+from AtlasGeoModel import TileGM
+from AtlasGeoModel import LArGM   #LAr needed to get MBTS DD.
+
+from IOVDbSvc.IOVDbSvcConf import IOVDbSvc
+IOVDbSvc().GlobalTag = 'OFLCOND-RUN12-SDR-35'
+
+from AthenaCommon.AlgSequence import AlgSequence
+topSequence = AlgSequence()
+
+theApp.EvtMax=12
+
+
+
+hits_0 = [
+    # (sec, side, mod, tow, samp, pmt, adc), [adc, time, qual, ped]
+    [0, [
+        [(1, 1, 0, 1, 1, 0, 1), [ 0.2,  22.1,  2.4, 42.9]],
+        [(1, 1, 0, 1, 1, 1, 1), [-0.4,  75.0,  2.7, 31.4]],
+        [(1, 1, 0, 1, 0, 0, 1), [-0.9, -13.3,  1.5, 37.4]],
+        [(1, 1, 0, 2, 0, 1, 1), [41.8,   0.1,  2.5, 45.7]],
+        [(1, 1, 0, 2, 0, 0, 1), [30.6,  -0.4,  2.0, 33.1]],
+        [(1, 1, 0, 2, 1, 1, 1), [ 1.4,  12.9,  4.7, 43.1]],
+        [(1, 1, 0, 2, 1, 0, 1), [ 3.4,   3.5,  1.9, 54.2]],
+    ]],
+
+    [136, [
+        [(3, 1, 8, 13, 3, 0, 1),  [26.9, 4.8, 5.2, 45.4]],
+    ]],
+
+    [146, [
+        [(3, 1, 18, 13, 3, 0, 1), [ 4.4, -26.5, 23.9, 51.2]],
+        [(3, 1, 18, 15, 3, 0, 1), [-0.1, -75.0,  3.7, 51.0]],
+        [(3, 1, 18,  8, 2, 0, 1), [-0.1,  75.0,  4.2, 41.7]],
+        [(3, 1, 18,  8, 2, 1, 1), [ 3.5, -11.9,  2.6, 44.7]],
+        [(3, 1, 18,  9, 1, 0, 1), [ 0.8, -17.6,  1.8, 49.2]],
+        [(3, 1, 18,  9, 1, 1, 1), [ 0.1, -75.0,  3.4, 48.4]],
+        [(2, 1, 18, 11, 0, 0, 1), [ 8.7,   0.4,  2.7, 50.2]],
+        [(2, 1, 18, 11, 0, 1, 1), [ 6.3,   1.9,  1.6, 48.6]],
+        [(2, 1, 18, 10, 1, 0, 1), [53.3,   1.3,  3.8, 38.4]],
+        [(2, 1, 18, 10, 1, 1, 1), [64.1,   1.0,  3.5, 36.9]],
+        [(2, 1, 18, 12, 0, 0, 1), [-0.2, -75.0,  2.8, 38.1]],
+        [(2, 1, 18, 12, 0, 1, 1), [ 0.5, -32.7,  1.9, 40.3]],
+        [(3, 1, 18, 10, 3, 0, 1), [ 5.4,   7.7,  8.2, 57.0]],
+        [(3, 1, 18, 11, 3, 0, 1), [48.9,   0.4,  4.0, 32.3]],
+        [(2, 1, 18, 11, 1, 0, 1), [38.5,   0.5,  1.7, 46.8]],
+        [(2, 1, 18, 11, 1, 1, 1), [48.1,   0.3,  1.6, 46.3]],
+        [(2, 1, 18, 10, 2, 0, 1), [ 0.3,  75.0,  2.0, 34.9]],
+        [(2, 1, 18, 10, 2, 1, 1), [0.1,  -75.0,  3.7, 54.7]],
+    ]],
+
+    # Some MBTS cells.
+    [135, [ [(4,  1, 0, 1, 0, 0, 0), [ 59.1, 2.8, 6.9, 56.2]] ]],
+    [181, [ [(4,  1, 6, 1, 0, 0, 0), [ 56.4, 1.2, 2.9, 39.9]] ]],
+    [182, [ [(4,  1, 6, 0, 0, 0, 0), [ 44.9, 0.5, 1.4, 42.1]] ]],
+    [231, [ [(4, -1, 3, 0, 0, 0, 0), [107.9, 1.7, 7.8, 47.8]] ]],
+
+    # Some E4 cells.
+    [220, [ [(4, -1, 0, 2, 0, 0, 0), [  2.3,   3.2, 2.5, 44.4]] ]],
+    [223, [ [(4, -1, 1, 2, 0, 0, 0), [  3.1,  -5.3, 2.4, 44.4]] ]],
+    [225, [ [(4, -1, 2, 2, 0, 0, 0), [ -0.4,  27.6, 1.3, 32.5]] ]],
+    [228, [ [(4, -1, 3, 2, 0, 0, 0), [  0.2, -75.0, 2.4, 35.4]] ]],
+
+    # Some disconnected cells.
+    [253, [
+        [4706026383833300992, [ 0, 0, 0, 50000]],
+        [4706027483344928768, [ 0, 0, 0, 50000]] ], ],
+    [255, [
+        [4706157225717006336, [ 0, 0, 0, 80000]],
+        [4706158325228634112, [ 0, 0, 0, 80000]] ], ],
+]
+
+
+# Add an offset to one pedestal value.
+def add_pedestal (offs_addr, offs):
+    out = []
+    for icoll, colldata in hits_0:
+        colldata_out = []
+        for addr, data in colldata:
+            if addr == offs_addr:
+                data = data[:]
+                data[3] += offs
+            colldata_out.append ([addr, data])
+        out.append ([icoll, colldata_out])
+    return out
+
+
+exp_cells_0 = {
+    (1, 1, 0, 1, 0) : [-10.4734, -10.4734, -13.3, -13.3, 1, 1, 130, 138, 1, 1],
+    (1, 1, 0, 1, 1) : [  2.3274,  -4.6548,  22.1,  75.0, 2, 2, 130, 130, 1, 1],
+    (1, 1, 0, 2, 0) : [356.0956, 486.4312,  -0.4,   0.1, 2, 2, 162, 162, 1, 1],
+    (1, 1, 0, 2, 1) : [ 39.5662,  16.2920,   3.5,  12.9, 1, 4, 162, 130, 1, 1],
+
+    (2, 1, 18, 10, 1):[620.25793, 745.93872,  1.3,   1.0, 3, 3, 162, 162, 1, 1],
+    (2, 1, 18, 10, 2):[  3.49113,   1.16371, 75.0, -75.0, 2, 3, 130, 130, 1, 1],
+    (2, 1, 18, 11, 0):[101.24284,  73.31380,  0.4,   1.9, 2, 1, 162, 162, 1, 1],
+    (2, 1, 18, 11, 1):[448.02869, 559.74500,  0.5,   0.3, 1, 1, 162, 162, 1, 1],
+    (2, 1, 18, 12, 0):[ -2.32742,   5.81855,-75.0, -32.7, 2, 1, 130, 130, 1, 1],
+    (3, 1, 18,  8, 2):[ -0.96976,  33.94157, 75.0, -11.9, 4, 2, 130, 130, 1, 1],
+    (3, 1, 18,  9, 1):[  7.75807,   0.96976,-17.6, -75.0, 1, 3, 130, 130, 1, 1],
+    (3, 1, 18, 10, 3):[ 41.89359,   0.0,      7.7,   7.7, 8, 0, 162,   0, 1,-1],
+    (3, 1, 18, 11, 3):[379.36975,   0.0,      0.4,   0.4, 4, 0, 162,   0, 1,-1],
+    (3, 1, 18, 13, 3):[ 34.13552,   0.0,    -26.5, -26.5,23, 0, 130,   0, 1,-1],
+    (3, 1, 18, 15, 3):[ -0.77581,   0.0,    -75.0, -75.0, 3, 0, 130,   0, 1, -1],
+
+    # coll 136
+    (3, 1, 8, 13, 3) : [208.6922, 0.0, 4.8, 4.8, 5, 0, 162, 0, 1, -1],
+}
+
+
+exp_mbts_0 = {
+    (4,  1, 0, 1, 0) : [0.7221, 0.0, 2.8, 2.8, 6, 0, 162, 0, 1, -1],
+    (4,  1, 6, 1, 0) : [0.6891, 0.0, 1.2, 1.2, 2, 0, 162, 0, 1, -1],
+    (4,  1, 6, 0, 0) : [0.5486, 0.0, 0.5, 0.5, 1, 0, 162, 0, 1, -1],
+    (4, -1, 3, 0, 0) : [1.318,  0.0, 1.7, 1.7, 7, 0, 162, 0, 1, -1],
+}
+
+
+exp_e4_0 = {
+    (4, -1, 0, 2, 0) : [17.84357, 0.0,   3.2,   3.2, 2, 0, 130, 0, 1, -1],
+    (4, -1, 1, 2, 0) : [24.05003, 0.0,  -5.3,  -5.3, 2, 0, 130, 0, 1, -1],
+    (4, -1, 2, 2, 0) : [-3.10323, 0.0,  27.6,  27.6, 1, 0, 130, 0, 1, -1],
+    (4, -1, 3, 2, 0) : [1.551615, 0.0, -75.0, -75.0, 2, 0, 130, 0, 1, -1],
+}
+
+
+def exp_merge (base, d):
+    new = base.copy()
+    new.update (d)
+    return new
+
+
+# Underflow.
+hits_1 = add_pedestal ((3, 1, 18, 15, 3, 0, 1), 10000)
+exp_cells_1 = exp_merge (exp_cells_0, {
+    (3, 1, 18, 15, 3) : [-0.7758, 0.0, -75.0, -75.0, 3, 0, 146, 0, 1, -1],
+})
+
+# Overflow.
+hits_2 = add_pedestal ((3, 1, 18, 15, 3, 0, 1), 20000)
+exp_cells_2 = exp_merge (exp_cells_0, {
+    (3, 1, 18, 15, 3) : [-0.7758, 0.0, -75.0, -75.0, 3, 0, 146, 0, 1, -1],
+})
+
+# TileBadChan errors.
+exp_cells_3 = exp_merge (exp_cells_0, {
+    (3, 1, 18,  8, 2) : [ 33.9416, 33.9416, -11.9, -11.9, 2, 2, 138, 130, 1, 1],
+    (2, 1, 18, 11, 0) : [101.2428, 73.3138,   1.9,   1.9, 2, 1,  34, 162, 1, 1],
+    (2, 1, 18, 12, 0) : [ -2.3274, -2.3274, -75.0, -75.0, 2, 2, 130, 138, 1, 1],
+})
+exp_mbts_3 = exp_merge (exp_mbts_0, {
+    (4, 1,  0,  1, 0) : [  0.0,     0.0,   -100.0,-100.0,255,0,  10,   8, 1,-1],
+    (4, 1,  6,  1, 0) : [  0.6891,  0.0,      0.0,   0.0, 2, 0,  34,   0, 1,-1],
+})
+
+# TileBeamInfoProvider errors
+exp_cells_4 = exp_merge (exp_cells_0, {
+    (2, 1, 18, 10, 1):[620.2579,620.2579,  1.3,  1.3,   3,   3, 161, 169, 1, 1],
+    (2, 1, 18, 12, 0):[  0.5,     0.5,     0.0,  0.0, 255, 255,   9,   9, 1, 1],
+    (3, 1, 18,  8, 2):[ 33.9416, 33.9416,-11.9,-11.9,   2,   2, 137, 129, 1, 1],
+    (3, 1, 18, 13, 3):[  0.5,     0.0,     0.0,  0.0, 255,   0,   9,   8, 1,-1],
+    (3, 1, 18, 15, 3):[  0.5,     0.0,     0.0,  0.0, 255,   0,   9,   8, 1,-1],
+})
+
+
+# fakeCrackCells
+exp_cells_5 = exp_merge (exp_cells_0, {
+    (3, 1, 8,  8, 2) : [0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0,  0],
+    (3, 1, 8,  9, 1) : [0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0,  0],
+    (3, 1, 8, 10, 3) : [0.0, 0.0, 0.0, 0.0, 0, 0, 8, 8, 0, -1],
+    (3, 1, 8, 11, 3) : [0.0, 0.0, 0.0, 0.0, 0, 0, 8, 8, 0, -1],
+    (3, 1, 8, 15, 3) : [0.0, 0.0, 0.0, 0.0, 0, 0, 8, 8, 0, -1],
+})
+
+
+def filter_e (base, thresh):
+    out = {}
+    for addr, l in base.items():
+        if l[0] >= thresh or l[1] >= thresh:
+            out[addr] = l
+    return out
+
+# EThreshold
+exp_cells_6 = filter_e (exp_cells_0, 300)
+
+
+
+# corrections
+exp_cells_7 = exp_merge (exp_cells_0, {
+    (1, 1,  0,  2, 0) : [356.1491, 486.4361, -0.4, 0.1, 2, 2, 162, 162, 1, 1],
+    (2, 1, 18, 10, 1) : [621.3283, 746.7004,  1.3, 1.0, 3, 3, 162, 162, 1, 1],
+    (2, 1, 18, 11, 1) : [448.1431, 559.7963,  0.5, 0.3, 1, 1, 162, 162, 1, 1],
+    (3, 1,  8, 13, 3) : [213.6019,   0.0,     4.8, 4.8, 5, 0, 162,   0, 1,-1],
+    (3, 1, 18, 11, 3) : [379.4317,   0.0,     0.4, 0.4, 4, 0, 162,   0, 1,-1],
+})
+exp_mbts_7 = exp_merge (exp_mbts_0, {
+    (4,  1, 0, 1, 0) : [0.7279, 0.0, 2.8, 2.8, 6, 0, 162, 0, 1, -1],
+    (4,  1, 6, 1, 0) : [0.6902, 0.0, 1.2, 1.2, 2, 0, 162, 0, 1, -1],
+    (4, -1, 3, 0, 0) : [1.3223, 0.0, 1.7, 1.7, 7, 0, 162, 0, 1, -1],
+})
+
+
+# noisefilter
+exp_cells_8 = exp_merge (exp_cells_0, {
+    (1, 1, 0, 1, 0) : [-11.3462, -11.3462, -13.3, -13.3, 1, 1, 130, 138, 1, 1],
+    (1, 1, 0, 1, 1) : [  1.4546,  -5.5276,  22.1,  75.0, 2, 2, 130, 130, 1, 1],
+    (1, 1, 0, 2, 0) : [355.2228, 485.5583,  -0.4,   0.1, 2, 2, 162, 162, 1, 1],
+    (1, 1, 0, 2, 1) : [ 39.5662,  15.4192,   3.5,  12.9, 1, 4, 162, 130, 1, 1],
+})
+
+
+# DSP w/corrrections
+exp_cells_10 = exp_merge (exp_cells_7, {
+    (1, 1, 0, 2, 0) : [356.1227, 486.4159, -0.4, 0.1, 2, 2, 162, 162, 1, 1],
+})
+
+
+
+# TileFragHash::TYPE
+class TileFragHash:
+    Beam = 255
+    Default = 0
+    Digitizer = 0
+    OptFilterDsp = 1
+    OptFilterOffline = 2
+    OptFilterDspCompressed = 3
+    ManyAmps = 4
+    MF = 5
+    FitFilter = 6
+    FitFilterCool = 7
+    FlatFilter = 8
+
+
+from AthenaPython.PyAthenaComps import Alg, StatusCode
+class TestAlg (Alg):
+    def __init__ (self, name):
+        Alg.__init__ (self, name)
+        return
+
+    def initialize (self):
+        ROOT.ICaloCellMakerTool
+
+        def gettool (name):
+            tool = ROOT.ToolHandle(ROOT.ICaloCellMakerTool)('TileCellBuilder/' + name)
+            if not tool.retrieve():
+                assert 0
+            return tool
+
+        self.tool1 = gettool ('tool1')
+        self.tool2 = gettool ('tool2')
+        self.tool4 = gettool ('tool4')
+        self.tool5 = gettool ('tool5')
+        self.tool6 = gettool ('tool6')
+        self.tool7 = gettool ('tool7')
+        self.tool8 = gettool ('tool8')
+        self.tool9 = gettool ('tool9')
+        self.tool10 = gettool ('tool10')
+        self.tool11 = gettool ('tool11')
+
+        self.beaminfo4 = ROOT.ToolHandle(ROOT.TileBeamInfoProvider)('TileBeamInfoProvider/beaminfo4')
+        if not self.beaminfo4.retrieve():
+            return StatusCode.Failure
+        return StatusCode.Success
+
+
+    def finalize (self):
+        self.check_bad_chan_lines()
+        return StatusCode.Success
+
+
+    def execute (self):
+        iev = self.getContext().evt()
+
+        hits = hits_0
+        exp_cells = exp_cells_0
+        exp_mbts = exp_mbts_0
+        extra_ei_flags = 0
+        tool = self.tool1
+        baddq = {}
+        bsflags = 0x32002000
+        dspbsflags = 0x32002000
+        rctype = TileFragHash.OptFilterOffline
+        dspcolls = set()
+        if iev == 0:
+            # Event 0: nominal
+            pass
+
+        elif iev == 1:
+            # Event 1: Add an underflow.
+            hits = hits_1
+            extra_ei_flags = 0x40
+            exp_cells = exp_cells_1
+
+        elif iev == 2:
+            # Event 2: Add an overflow.
+            hits = hits_2
+            extra_ei_flags = 0x400
+            exp_cells = exp_cells_2
+
+        elif iev == 3:
+            # Event 3: Bad channels
+            tool = self.tool2
+            exp_cells = exp_cells_3
+            exp_mbts = exp_mbts_3
+
+        elif iev == 4:
+            # Event 4: Bad channels from BeamInfoProvider.
+            tool = self.tool4
+            rctype = TileFragHash.OptFilterDsp
+            baddq = {146 : [2, 10]}
+            exp_cells = exp_cells_4
+
+        elif iev == 5:
+            # Event 5: fakeCrackCells
+            tool = self.tool5
+            exp_cells = exp_cells_5
+
+        elif iev == 6:
+            # Event 6: Threshold.
+            tool = self.tool6
+            exp_cells = exp_cells_6
+
+        elif iev == 7:
+            # Event 7: Corrections
+            tool = self.tool7
+            bsflags = 0x32000000
+            exp_cells = exp_cells_7
+            exp_mbts = exp_mbts_7
+
+        elif iev == 8:
+            # Event 8: noise filter
+            tool = self.tool8
+            exp_cells = exp_cells_8
+
+        elif iev == 9:
+            # Event 9: dsp container
+            tool = self.tool9
+            dspcolls.add (0)
+
+        elif iev == 10:
+            # Event 10: dsp container + corrections
+            tool = self.tool10
+            dspcolls.add (0)
+            bsflags = 0x32000000
+            dspbsflags = 0x20000000
+            exp_cells = exp_cells_10
+            exp_mbts = exp_mbts_7
+
+        else:
+            # Event 11: dsp container + noise filter
+            tool = self.tool11
+            dspcolls.add (0)
+            exp_cells = exp_cells_8
+
+
+        self.record_raw_data (hits, rctype, baddq, bsflags, dspbsflags, dspcolls)
+        if iev == 4:
+            self.beaminfo4.setContainers (None,
+                                          self.evtStore['TileRawChannelCnt'],
+                                          None)
+
+        ccc = ROOT.CaloCellContainer()
+        if not tool.process (ccc):
+            return StatusCode.Failure
+
+        self.compare_cells (ccc, exp_cells, rctype)
+        self.compare_cells (self.evtStore['MBTSContainer'], exp_mbts, rctype)
+        self.compare_cells (self.evtStore['E4prContainer'], exp_e4_0, rctype)
+
+        self.check_ei (extra_ei_flags)
+        return StatusCode.Success
+
+
+    @staticmethod
+    def update_qbit (qb, rctype):
+        if qb == 0: return 0
+        return qb&(~7) | rctype
+
+
+    def record_raw_data (self, hits, typ, baddq, bsflags, dspbsflags, dspcolls):
+        idHelper  = self.detStore['CaloCell_ID'].tile_idHelper()
+
+        unit = 0 # TileRawChannelUnit::ADCcounts
+        cont = ROOT.TileRawChannelContainer (False, typ, unit)
+        cont.set_bsflags (bsflags)
+        hashFunc = cont.hashFunc()
+
+        dspcont = None
+        if dspcolls:
+            dspcont = ROOT.TileRawChannelContainer (False, typ, unit)
+            dspcont.set_bsflags (dspbsflags)
+
+        for icoll, colldata in hits:
+            coll = ROOT.TileRawChannelCollection (hashFunc.identifier(icoll))
+
+            mask = 0
+            for chan in baddq.get (icoll, []):
+                mask |= (1<<(chan/3))
+            coll.setFragMemoryPar(mask)
+
+            for addr, data in colldata:
+                if type(addr) == type(()):
+                    adc_id = idHelper.adc_id (*addr)
+                    chan = ROOT.TileRawChannel (adc_id, *data)
+                else:
+                    hwid = ROOT.HWIdentifier (addr)
+                    chan = ROOT.TileRawChannel (hwid, *data)
+                coll.push_back (chan)
+
+            if icoll in dspcolls:
+                thiscont = dspcont
+            else:
+                thiscont = cont
+            thiscont.addCollection (coll, ROOT.IdentifierHash(icoll))
+            ROOT.SetOwnership (coll, False)
+
+        self.evtStore.record (cont, 'TileRawChannelCnt', False)
+        if dspcont:
+            self.evtStore.record (dspcont, 'TileRawChannelCntDsp', False)
+        return
+
+
+    def compare_cells (self, ccc, exp_cells, rctype):
+        exp_cells = exp_cells.copy()
+        idHelper  = self.detStore['CaloCell_ID'].tile_idHelper()
+
+        for c in ccc:
+            lcell = [c.ene1(), c.ene2(), c.time1(), c.time2(),
+                     ord(c.qual1()), ord(c.qual2()),
+                     ord(c.qbit1()), ord(c.qbit2()),
+                     c.gain1(), c.gain2()]
+
+            cid = c.ID()
+            addr = (idHelper.section(cid),
+                    idHelper.side(cid),
+                    idHelper.module(cid),
+                    idHelper.tower(cid),
+                    idHelper.sampling(cid))
+            l = exp_cells.get (addr)
+            if not l:
+                print ('xxx unexpected cell', addr, lcell)
+                assert 0
+                continue
+
+            l = l[:]
+
+            # Low 3 bits of qbit correspond to rctype, unless cell was masked.
+            if l[0] != 0: l[6] = TestAlg.update_qbit (l[6], rctype)
+            if l[1] != 0: l[7] = TestAlg.update_qbit (l[7], rctype)
+
+            if (abs (lcell[0] - l[0]) > 1e-3 or
+                abs (lcell[1] - l[1]) > 1e-3 or
+                abs (lcell[2] - l[2]) > 1e-3 or
+                abs (lcell[3] - l[3]) > 1e-3 or
+                abs (lcell[4] != l[4]) or
+                abs (lcell[5] != l[5]) or
+                abs (lcell[6] != l[6]) or
+                abs (lcell[7] != l[7]) or
+                abs (lcell[8] != l[8]) or
+                abs (lcell[9] != l[9])):
+                print ('xxx cell mismatch: ', addr, lcell, l)
+                assert 0
+            del exp_cells[addr]
+
+        for extra in exp_cells:
+            print ('xxx unfound cell', extra)
+            assert 0
+        return
+
+
+    def check_ei (self, extra_flags):
+        ei = self.evtStore['EventInfo']
+        print ('zzz', hex(ei.eventFlags (ROOT.xAOD.EventInfo.Tile)), ei.errorState (ROOT.xAOD.EventInfo.Tile), hex(0xf0f0005 | extra_flags))
+        assert ei.eventFlags (ROOT.xAOD.EventInfo.Tile) == (0xf0f0005 | extra_flags)
+        assert ei.errorState (ROOT.xAOD.EventInfo.Tile) == ROOT.xAOD.EventInfo.Error
+        return
+
+
+    def make_bad_chan_lines (self, chans):
+        idHelper  = self.detStore['CaloCell_ID'].tile_idHelper()
+        hwidHelper = self.detStore['TileHWID']
+        cabling = ROOT.TileCablingService.getInstance()
+
+        lines = []
+        for addr, data in chans:
+            pmt_id = idHelper.pmt_id (*addr)
+            channel_id = cabling.s2h_channel_id (pmt_id)
+            frag = hwidHelper.frag (channel_id)
+            channel = hwidHelper.channel (channel_id)
+            line = '0x%03x %d 0 %d %d %d' % (frag, channel, data[0], data[1], data[2])
+            lines.append (line)
+
+        return '\n'.join (lines)
+
+
+    def check_bad_chan_lines (self):
+        for name, (chans, lines) in baddefs.items():
+            xlines = self.make_bad_chan_lines (chans)
+            if xlines.strip() != lines.strip():
+                print ('xxx Bad chan lines need updating: ', name)
+                print (xlines)
+        return
+
+
+#########################################################################
+
+
+baddefs = {}
+BAD_LOW  = [1<<1,    0,    0] # AdcDead
+BAD_HIGH = [   0, 1<<1,    0] # AdcDead
+BAD_BOTH = [   0,    0, 1<<1] # NoHV
+BADTIMING = [  0,    0, 1<<9] # BadTiming
+
+# chans: [(sec, side, mod, tow, samp, pmt), [DATA0, DATA1, DATA2]]
+# We'd like to specify cells using offline addressing, but the bad cell
+# file uses online addressing.  We can convert, but that requires
+# idhelpers, etc, that aren't available until after initialization.
+# So we pass in both representations; in finalize(), we'll check
+# that they match and print out the correct bad cell lines
+# if they do not.
+def make_tileBadChanTool (name, chans = [], lines = ''):
+    global ToolSvc
+    from TileConditions.TileCondProxyConf import getTileCondProxy
+    from TileConditions.TileConditionsConf import TileBadChanTool
+    from TileConditions.TileConditionsConf import TileBadChannelsCondAlg
+
+    # File data line format:
+    #  frag channel dummy adcStatus0 adcStatus1 chnStatus
+    #  chnStatus + adcStatusN are given to TileBchDecoder.
+    #  Offline problem masks:
+    #         chn                         adc
+    #   0     GeneralMaskChannel          GeneralMaskAdc
+    #   1     NoPmt                       AdcDead
+    #   2     NoHV                        StuckBit
+    #   3     WrongHV                     DataCorruption
+    #   4     NoLaser                     VeryLargeHfNoise
+    #   5     BadLaser                    NoData
+    #   6     NoCesium                    WrongDspConfig
+    #   7     BadCesium                   LargeHfNoise
+    #   8     NoTiming                    CorrelatedNoise
+    #   9     BadTiming                   LargeLfNoise
+    #  10     TrigGeneralMask             NoCis
+    #  11     TrigNoGain                  BadCis
+    #  12     TrigHalfGain                SevereStuckBit
+    #  13     TrigNoisy                   SevereDataCorruption
+    #  14     Emergency                   IgnoredByDQV
+    #  15     HVReadoutPb
+    #  16     BrokenClearFibre
+    #  17     IgnoreCs
+    #  18     UnstableCs
+    #
+    # 
+    #  Online problem masks:
+    #         chn                         adc
+    #   0     IgnoredInDsp                OnlineGeneralMaskAdc
+    #   1     IgnoredInHlt
+    #   2     DisableForL1
+    #   3     TrigGeneralMask
+    #   4     TrigNoGain
+    #   5     TrigHalfGain
+    #   6     TrigNoisy
+    #   7     OnlineBadTiming
+
+    if not chans:
+        TileBchList = 'TileNoBad.oflBch'
+    else:
+        TileBchList = name + '.bch'
+        f = open (TileBchList, 'w')
+        print ('OBJVERSION 0', file=f)
+        print ('0x000	0	0	0 0 0', file=f)
+        f.write (lines)
+        f.close()
+        baddefs[name] = (chans, lines)
+
+    from AthenaCommon.AlgSequence import AthSequencer
+    condSeq = AthSequencer("AthCondSeq")
+
+    condAlg = TileBadChannelsCondAlg (name + 'Cond',
+                                      TileBadChannels = name + 'CondData',
+                                      OflBchProxy = getTileCondProxy ('FILE', 'Bch', TileBchList, name + '_ofl'),
+                                      OnlBchProxy = getTileCondProxy ('FILE', 'Bch', 'TileNoBad.oflBch', name + '_onl'),
+                                      )
+    condSeq += condAlg
+
+    bct = TileBadChanTool (name,
+                           TileBadChannels = name + 'CondData')
+    ToolSvc += bct
+    return bct
+
+
+bct1 = make_tileBadChanTool ('tilecellbuilder_bct1')
+
+bct2 = make_tileBadChanTool ('tilecellbuilder_bct2',
+                             [[(3, 1, 18,  8, 2, 0), BAD_HIGH],
+                              [(2, 1, 18,  9, 1, 0), BAD_LOW],
+                              [(2, 1, 18, 12, 0, 1), BAD_BOTH],
+                              [(2, 1, 18, 11, 0, 0), BADTIMING],
+                              [(4, 1,  0,  1, 0, 0), BAD_BOTH],
+                              [(4, 1,  6,  1, 0, 0), BADTIMING],
+                              ],
+                             """
+0x312 2 0 0 2 0
+0x312 4 0 2 0 0
+0x312 11 0 0 0 2
+0x312 6 0 0 0 512
+0x307 12 0 0 0 2
+0x335 12 0 0 0 512
+""")
+
+
+
+from TileRecUtils.TileRecUtilsConf import TileCellBuilder, TileBeamInfoProvider, TileRawChannelNoiseFilter
+beaminfo4 = TileBeamInfoProvider ('beaminfo4')
+ToolSvc += beaminfo4
+noisefilter = TileRawChannelNoiseFilter ('noisefilter')
+ToolSvc += noisefilter
+
+def maketool (name, bct, **kw):
+    return TileCellBuilder (name, TileBadChanTool = bct, **kw)
+ToolSvc += maketool ('tool1', bct1)
+ToolSvc += maketool ('tool2', bct2)
+ToolSvc += maketool ('tool4', bct1, BeamInfo = beaminfo4)
+ToolSvc += maketool ('tool5', bct1, fakeCrackCells = True)
+ToolSvc += maketool ('tool6', bct1, EThreshold = 300)
+ToolSvc += maketool ('tool7', bct1, correctAmplitude = True, correctTime = True)
+ToolSvc += maketool ('tool8', bct1, NoiseFilterTools = [noisefilter])
+ToolSvc += maketool ('tool9', bct1, TileDSPRawChannelContainer = 'TileRawChannelCntDsp')
+ToolSvc += maketool ('tool10', bct1, TileDSPRawChannelContainer = 'TileRawChannelCntDsp',
+                     correctTime = True, correctAmplitude = True)
+ToolSvc += maketool ('tool11', bct1, TileDSPRawChannelContainer = 'TileRawChannelCntDsp',
+                     NoiseFilterTools = [noisefilter])
+
+from xAODEventInfoCnv.xAODEventInfoCnvConf import xAODMaker__EventInfoCnvAlg
+topSequence += xAODMaker__EventInfoCnvAlg (DoBeginRun = False)
+
+testalg1 = TestAlg ('testalg1')
+topSequence += testalg1
+
+
+
+def addr(x):
+    cabling=ROOT.TileCablingService.getInstance()
+    hwid = ROOT.HWIdentifier(x)
+    adcid=cabling.h2s_adc_id(hwid)
+    idHelper  = testalg1.detStore['CaloCell_ID'].tile_idHelper()
+    return (idHelper.section(adcid),
+            idHelper.side(adcid),
+            idHelper.module(adcid),
+            idHelper.tower(adcid),
+            idHelper.sampling(adcid),
+            idHelper.pmt(adcid),
+            idHelper.adc(adcid))
+
+def selindex (fname):
+    from array import array
+    cabling=ROOT.TileCablingService.getInstance()
+    lcoll = ''
+    for l in open(fname).readlines():
+        l = l.strip()
+        if l.find('Coll') == 0:
+            lcoll = l
+            continue
+        if l.find('[') < 0: continue
+        iid = int(l.split()[0])
+        hwid = ROOT.HWIdentifier(iid)
+        index=array('i',[0]) 
+        pmt=array('i',[0])
+        cabling.h2s_cell_id_index (hwid, index, pmt)
+        #if index[0] == -3:
+        #    print (iid, addr(iid), lcoll, l)
+        hwidHelper = testalg1.detStore['TileHWID']
+        ros = hwidHelper.ros (hwid)
+        chan = hwidHelper.channel (hwid)
+        if chan == 0 and ros > 2:
+            drawer = hwidHelper.drawer (hwid)
+            idx = (ros - 3) * 64 + drawer
+            print (iid, idx, addr(iid), lcoll, l)
+    return
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref
new file mode 100644
index 0000000000000000000000000000000000000000..23fa680eb4eb20ce68f17fd12341e908dfcee98e
--- /dev/null
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref
@@ -0,0 +1,611 @@
+Tue Sep 25 19:06:24 CEST 2018
+Preloading tcmalloc_minimal.so
+Py:Athena            INFO including file "AthenaCommon/Preparation.py"
+Py:Athena            INFO using release [AthenaWorkDir-22.0.1] [x86_64-slc6-gcc62-opt] [atlas-work3/8583d770640] -- built on [2018-09-25T1457]
+Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
+Py:Athena            INFO executing ROOT6Setup
+Py:Athena            INFO including file "AthenaCommon/Execution.py"
+Py:Athena            INFO including file "TileRecUtils/TileCellBuilder_test.py"
+[?1034hSetGeometryVersion.py obtained major release version 22
+Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
+Py:ConfigurableDb    INFO Read module info for 5501 configurables from 54 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.1
+Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
+Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
+Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
+Py:TileConditions_jobOptions.py    INFO Forcing RUN2 (2014-2017) cabling for run 284500 with geometry ATLAS-R2-2016-01-00-01
+Py:TileConditions_jobOptions.py    INFO Adjusting TileInfo for 7 samples
+Py:TileConditions_jobOptions.py    INFO setting up COOL for TileCal conditions data
+Py:TileInfoConf.     INFO Changing default TileBadChanTool configuration to COOL source
+Py:TileInfoConf.     INFO Changing default TileBadChanLegacyTool configuration to COOL source
+Py:TileInfoConf.     INFO Changing default TileCondToolEmscale configuration to COOL source
+Py:TileInfoConf.     INFO Changing default TileCondToolNoiseSample configuration to COOL source
+Py:TileInfoConf.     INFO Changing default TileCondToolTiming configuration to COOL source
+Py:TileConditions_jobOptions.py    INFO Adjusting TileInfo to return cell noise for Opt.Filter without iterations
+Py:Athena            INFO including file "AthenaCommon/runbatch.py"
+ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+ApplicationMgr    SUCCESS 
+====================================================================================================================================
+                                                   Welcome to ApplicationMgr (GaudiCoreSvc v30r3)
+                                          running on lxplus034.cern.ch on Tue Sep 25 19:06:33 2018
+====================================================================================================================================
+ApplicationMgr       INFO Successfully loaded modules : AthenaServices
+ApplicationMgr       INFO Application Manager Configured successfully
+ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
+StatusCodeSvc        INFO initialize
+AthDictLoaderSvc     INFO in initialize...
+AthDictLoaderSvc     INFO acquired Dso-registry
+ClassIDSvc           INFO  getRegistryEntries: read 6946 CLIDRegistry entries for module ALL
+CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
+CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
+MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
+AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
+PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
+PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
+PoolSvc              INFO Frontier compression level set to 5
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus034.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+PoolSvc              INFO Successfully setup replica sorting algorithm
+PoolSvc              INFO Setting up APR FileCatalog and Streams
+PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc           WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
+PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
+PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
+IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
+IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
+IOVDbSvc             INFO Cache alignment will be done in 3 slices
+IOVDbSvc             INFO Global tag: OFLCOND-RUN12-SDR-35 set from joboptions
+IOVDbSvc             INFO Read from meta data only for folder /TagInfo
+IOVDbSvc             INFO Initialised with 3 connections and 14 folders
+IOVDbSvc             INFO Service IOVDbSvc initialised successfully
+IOVDbSvc             INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
+IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
+IOVSvcTool           INFO IOVRanges will be checked at every Event
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_TILE/OFLP200
+IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
+IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
+IOVDbSvc             INFO Added taginfo remove for /LAR/Align
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/CES
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/CIS/FIT/LIN
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/CIS/FIT/NLN
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/EMS
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/LAS/FIBER
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/LAS/LIN
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/CALIB/LAS/NLN
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/NOISE/SAMPLE
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC
+IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
+IOVDbSvc             INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
+IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
+ClassIDSvc           INFO  getRegistryEntries: read 1856 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 22 CLIDRegistry entries for module ALL
+DetDescrCnvSvc       INFO  initializing 
+DetDescrCnvSvc       INFO Found DetectorStore service
+DetDescrCnvSvc       INFO  filling proxies for detector managers 
+DetDescrCnvSvc       INFO  filling address for CaloTTMgr with CLID 117659265 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloMgr with CLID 4548337 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloSuperCellMgr with CLID 241807251 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloIdManager with CLID 125856940 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArIdManager with CLID 79554919 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for IdDict with CLID 2411 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for AtlasID with CLID 164875623 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for PixelID with CLID 2516 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for SCT_ID with CLID 2517 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TRT_ID with CLID 2518 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for SiliconID with CLID 129452393 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArEM_ID with CLID 163583365 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArEM_SuperCell_ID with CLID 99488227 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHEC_ID with CLID 3870484 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHEC_SuperCell_ID with CLID 254277678 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArFCAL_ID with CLID 45738051 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArFCAL_SuperCell_ID with CLID 12829437 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArMiniFCAL_ID with CLID 79264204 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArOnlineID with CLID 158698068 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TTOnlineID with CLID 38321944 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArOnline_SuperCellID with CLID 115600394 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArHVLineID with CLID 27863673 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for LArElectrodeID with CLID 80757351 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileID with CLID 2901 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for Tile_SuperCell_ID with CLID 49557789 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileHWID with CLID 2902 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TileTBID with CLID 2903 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for MDTIDHELPER with CLID 4170 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CSCIDHELPER with CLID 4171 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for RPCIDHELPER with CLID 4172 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for TGCIDHELPER with CLID 4173 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for STGCIDHELPER with CLID 4174 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for MMIDHELPER with CLID 4175 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloLVL1_ID with CLID 108133391 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloCell_ID with CLID 123500438 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloCell_SuperCell_ID with CLID 128365736 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for CaloDM_ID with CLID 167756483 and storage type 68 to detector store 
+DetDescrCnvSvc       INFO  filling address for ZdcID with CLID 190591643 and storage type 68 to detector store 
+GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
+GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
+GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
+GeoModelSvc::RD...WARNING  Getting InDetMaterials with default tag
+GeoModelSvc.LAr...   INFO Keys for LAr are ATLAS-R2-2016-01-00-01  ATLAS
+GeoModelSvc.LAr...   INFO Building LAr version LAr-Revised-17-01 while ATLAS version is ATLAS-R2-2016-01-00-01
+GeoModelSvc.LAr...   INFO LAr Geometry Options:
+GeoModelSvc.LAr...   INFO   Sagging           = false
+GeoModelSvc.LAr...   INFO   Barrel            = ON
+GeoModelSvc.LAr...   INFO   Endcap            = ON
+BarrelConstruction   INFO Getting primary numbers for ATLAS, ATLAS-R2-2016-01-00-01
+BarrelConstruction   INFO   Makes detailed absorber sandwich  ? 1 1
+BarrelConstruction   INFO   Use sagging in geometry  ? 0
+============== EMEC Construction ===============
+  multi-layered version of absorbers activated, mlabs == 1
+================================================
+EventPersistenc...   INFO Added successfully Conversion service:DetDescrCnvSvc
+ClassIDSvc           INFO  getRegistryEntries: read 2398 CLIDRegistry entries for module ALL
+CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
+IdDictDetDescrCnv    INFO in initialize
+IdDictDetDescrCnv    INFO in createObj: creating a IdDictManager object in the detector store
+IdDictDetDescrCnv    INFO IdDictName:  IdDictParser/ATLAS_IDS.xml
+IdDictDetDescrCnv    INFO Reading InnerDetector    IdDict file InDetIdDictFiles/IdDictInnerDetector_IBL3D25-03.xml
+IdDictDetDescrCnv    INFO Reading LArCalorimeter   IdDict file IdDictParser/IdDictLArCalorimeter_DC3-05-Comm-01.xml
+IdDictDetDescrCnv    INFO Reading TileCalorimeter  IdDict file IdDictParser/IdDictTileCalorimeter.xml
+IdDictDetDescrCnv    INFO Reading Calorimeter      IdDict file IdDictParser/IdDictCalorimeter_L1Onl.xml
+IdDictDetDescrCnv    INFO Reading MuonSpectrometer IdDict file IdDictParser/IdDictMuonSpectrometer_R.03.xml
+IdDictDetDescrCnv    INFO Reading ForwardDetectors IdDict file IdDictParser/IdDictForwardDetectors_2010.xml
+IdDictDetDescrCnv    INFO Found id dicts:
+IdDictDetDescrCnv    INFO Using dictionary tag: null
+IdDictDetDescrCnv    INFO Dictionary ATLAS                version default              DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary Calorimeter          version default              DetDescr tag CaloIdentifier-LVL1-02 file IdDictParser/IdDictCalorimeter_L1Onl.xml
+IdDictDetDescrCnv    INFO Dictionary ForwardDetectors     version default              DetDescr tag ForDetIdentifier-01       file IdDictParser/IdDictForwardDetectors_2010.xml
+IdDictDetDescrCnv    INFO Dictionary InnerDetector        version IBL-DBM              DetDescr tag InDetIdentifier-IBL3D25-02 file InDetIdDictFiles/IdDictInnerDetector_IBL3D25-03.xml
+IdDictDetDescrCnv    INFO Dictionary LArCalorimeter       version fullAtlas            DetDescr tag LArIdentifier-DC3-05-Comm file IdDictParser/IdDictLArCalorimeter_DC3-05-Comm-01.xml
+IdDictDetDescrCnv    INFO Dictionary LArElectrode         version fullAtlas            DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary LArHighVoltage       version fullAtlas            DetDescr tag (using default) file 
+IdDictDetDescrCnv    INFO Dictionary MuonSpectrometer     version R.03                 DetDescr tag MuonIdentifier-08         file IdDictParser/IdDictMuonSpectrometer_R.03.xml
+IdDictDetDescrCnv    INFO Dictionary TileCalorimeter      version fullAtlasAndTestBeam DetDescr tag TileIdentifier-00         file IdDictParser/IdDictTileCalorimeter.xml
+TileTBID             INFO initialize_from_dictionary 
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+EndcapDMConstru...   INFO Start building EC electronics geometry
+============== EMEC Construction ===============
+  multi-layered version of absorbers activated, mlabs == 1
+================================================
+EndcapDMConstru...   INFO Start building EC electronics geometry
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 22964Kb 	 Time = 0.51S
+GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
+TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
+TileDddbManager      INFO n_tiglob = 5
+TileDddbManager      INFO n_timod = 320
+TileDddbManager      INFO n_cuts = 9
+TileDddbManager      INFO n_saddle = 1
+TileDddbManager      INFO n_tilb = 21
+TileDddbManager      INFO n_tileSwitches = 1
+ClassIDSvc           INFO  getRegistryEntries: read 213 CLIDRegistry entries for module ALL
+CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/TileNeighbour_reduced.txt
+TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
+TileHWID             INFO initialize_from_dictionary 
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+ClassIDSvc           INFO  getRegistryEntries: read 55 CLIDRegistry entries for module ALL
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCal3DNeighborsPrev-April2011.txt
+CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+GeoModelSvc.Til...   INFO  U-shape parameter from database is: 1
+GeoModelSvc.Til...   INFO  Glue parameter from database is: 1
+GeoModelSvc.Til...   INFO  Entering TileAtlasFactory::create()
+GeoModelSvc.Til...   INFO  Tile Geometry with Saddle supports, starting from TileCal-CSC-02 xxx
+GeoModelSvc.Til...   INFO  => New BFingerLengthPos 430.5
+GeoModelSvc.Til...   INFO  => New BFingerLengthNeg 420.5
+GeoModelSvc.Til...   INFO  Positioning barrel with translation 0
+GeoModelSvc.Til...   INFO  Positioning positive barrel finger with translation 3035.25
+GeoModelSvc.Til...   INFO  Positioning negative barrel finger with translation -3030.25
+GeoModelSvc.Til...   INFO  Positioning positive ext.barrel with translation 4854.75
+GeoModelSvc.Til...   INFO  Positioning positive ext.barrel finger with translation ztrans= 6338.5
+GeoModelSvc.Til...   INFO  Positioning positive ext.barrel saddle with translation ztrans= 6192.5
+GeoModelSvc.Til...   INFO  Positive ITC envelope parameters: PLUG1  Rmin= 3438.85 Rmax= 4250 dzITC1= 154.5
+GeoModelSvc.Til...   INFO                                    PLUG2  Rmin= 2981 Rmax= 3440 dzITC2= 47.425
+GeoModelSvc.Til...   INFO  Positioning positive ITC with translation 3405
+GeoModelSvc.Til...   INFO  Positioning positive Gap with translation 3552
+GeoModelSvc.Til...   INFO  Positioning positive Crack with translation 3536
+GeoModelSvc.Til...   INFO  Positioning negative ext.barrel with translation ztrans -4854.75
+GeoModelSvc.Til...   INFO  Positioning negative ext.barrel finger with translation ztrans= -6338.5
+GeoModelSvc.Til...   INFO  Positioning negative ext.barrel saddle with translation ztrans= -6192.5
+GeoModelSvc.Til...   INFO  Negative ITC envelope parameters: PLUG1  Rmin= 3438.85 Rmax= 4250 dzITC1= 154.5
+GeoModelSvc.Til...   INFO                                    PLUG2  Rmin= 2981 Rmax= 3440 dzITC2= 47.425
+GeoModelSvc.Til...   INFO  Positioning negative ITC with translation -3405
+GeoModelSvc.Til...   INFO  Positioning negative Gap with translation -3552
+GeoModelSvc.Til...   INFO  Positioning negative Crack with translation -3536
+GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) and translation (0,0,0) CLHEP::cm
+GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) CLHEP::cm
+GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) CLHEP::cm
+TileDetDescrMan...   INFO Entering create_elements()
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 4596Kb 	 Time = 0.2S
+ClassIDSvc           INFO  getRegistryEntries: read 65 CLIDRegistry entries for module ALL
+TileInfoLoader       INFO Initializing....TileInfoLoader
+TileInfoLoader       INFO New ATLAS geometry detected: ATLAS-R2-2016-01-00-01 (010001) version 10001
+TileInfoLoader       INFO Changing TTL1 calib from 4.1 to 6.9
+TileInfoLoader       INFO Changing TTL1 noise sigma from 2.5 to 2.8
+TileInfoLoader       INFO ATLAS IBL geometry - special sampling fractions for gap/crack scin are allowed
+TileInfoLoader       INFO Special C10 in EB module 39
+TileInfoLoader       INFO Special C10 in EB module 40
+TileInfoLoader       INFO Special C10 in EB module 41
+TileInfoLoader       INFO Special C10 in EB module 42
+TileInfoLoader       INFO Special C10 in EB module 55
+TileInfoLoader       INFO Special C10 in EB module 56
+TileInfoLoader       INFO Special C10 in EB module 57
+TileInfoLoader       INFO Special C10 in EB module 58
+TileInfoLoader       INFO Sampling fraction for normal cells 1/34
+TileInfoLoader       INFO Sampling fraction for special C10 cells 1/45
+TileInfoLoader       INFO Sampling fraction for E1 cells 1/125
+TileInfoLoader       INFO Sampling fraction for E2 cells 1/107
+TileInfoLoader       INFO Sampling fraction for E3 cells 1/97
+TileInfoLoader       INFO Sampling fraction for E4 cells 1/75
+TileInfoLoader       INFO Sampling fraction for E4' cells 1/75
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/pulsehi_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/pulselo_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/pulse_adder_tower_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/pulse_adder_muonRcv_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/pulse_adder_muon_physics.dat
+CaloIDHelper_ID...   INFO in createObj: creating a CaloLVL1_ID helper object in the detector store
+CaloLVL1_ID          INFO initialize_from_dictionary
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileCablingSvc       INFO RUN2 ATLAS geometry flag detected for geometry: ATLAS-R2-2016-01-00-01
+TileCablingSvc       INFO Cabling for RUN2 (2014-2017) ATLAS geometry is set via jobOptions 
+TileCablingSvc       INFO Setting Cabling type to 4
+TileInfoLoader       INFO Placed TileInfo object in the detector store.
+ToolSvc.TileBad...   INFO Creating TileCondProxyCool(ToolSvc.TileBadChanLegacyTool.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for TileCondProxyCool<TileCalibDrawerBch>[0x1c8f7700]+7f3afb649a70 bound to CondAttrListCollection[/TILE/ONL01/STATUS/ADC]
+ToolSvc.TileBad...   INFO Creating TileCondProxyCool(ToolSvc.TileBadChanLegacyTool.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for TileCondProxyCool<TileCalibDrawerBch>[0x1c8f6c00]+7f3afb649a70 bound to CondAttrListCollection[/TILE/OFL02/STATUS/ADC]
+ToolSvc.TileBad...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for TileBadChanLegacyTool[0x18f02000]+7f3afb5d83c0 bound to /TILE/ONL01/STATUS/ADC
+IOVSvcTool           INFO Still in initialize phase, not tiggering callback for TileBadChanLegacyTool[0x18f02000]+7f3afb5d83c0 bound to /TILE/OFL02/STATUS/ADC
+AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
+ClassIDSvc           INFO  getRegistryEntries: read 318 CLIDRegistry entries for module ALL
+CondInputLoader      INFO Initializing CondInputLoader...
+CondInputLoader      INFO Adding base classes:
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CES' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/LIN' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/NLN' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/EMS' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/FIBER' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/LIN' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/NLN' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/NOISE/SAMPLE' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/STATUS/ADC' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' )   ->
+  +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' )   ->
+CondInputLoader      INFO Will create WriteCondHandle dependencies for the following DataObjects:
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CES' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/LIN' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/NLN' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/EMS' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/FIBER' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/LIN' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/CALIB/LAS/NLN' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/NOISE/SAMPLE' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/STATUS/ADC' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
+    +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
+TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
+TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
+TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflCisLin) for folder: "/TILE/OFL02/CALIB/CIS/FIT/LIN"
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflCisNln) for folder: "/TILE/OFL02/CALIB/CIS/FIT/NLN"
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflLasLin) for folder: "/TILE/OFL02/CALIB/LAS/LIN"
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflLasNln) for folder: "/TILE/OFL02/CALIB/LAS/NLN"
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflLasFib) for folder: "/TILE/OFL02/CALIB/LAS/FIBER"
+TileEMScaleCondAlg   INFO ProxyOflLasFib is set up and can be used
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflCes) for folder: "/TILE/OFL02/CALIB/CES"
+TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OflEms) for folder: "/TILE/OFL02/CALIB/EMS"
+TileEMScaleCondAlg   INFO Loading of online calibration constants is not requested, since OnlCacheUnit= 'OnlCacheUnit':Invalid
+TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.TileCondProxyCool_NoiseSample) for folder: "/TILE/OFL02/NOISE/SAMPLE"
+TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/afs/cern.ch/work/s/ssnyder/builds/atlas-work3/build-x86_64-slc6-gcc62-opt/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch"
+tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
+ClassIDSvc           INFO  getRegistryEntries: read 504 CLIDRegistry entries for module ALL
+xAODMaker::Even...   INFO Initializing - Package version: xAODEventInfoCnv-00-00-00
+xAODMaker::Even...   INFO Initializing - Package version: xAODEventInfoCnv-00-00-00
+xAODMaker::Even...WARNING Beam conditions service not available
+xAODMaker::Even...WARNING Will not fill beam spot information into xAOD::EventInfo
+xAODMaker::Even...   INFO Luminosity information not available
+xAODMaker::Even...   INFO Will take information from the EventInfo object
+ClassIDSvc           INFO  getRegistryEntries: read 319 CLIDRegistry entries for module ALL
+PyComponentMgr       INFO Initializing PyComponentMgr...
+testalg1             INFO Initializing testalg1...
+ClassIDSvc           INFO  getRegistryEntries: read 4339 CLIDRegistry entries for module ALL
+ToolSvc.tool1        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.TileBea...   INFO in initialize()
+ToolSvc.tool1        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool1        INFO size of temp vector set to 5184
+ToolSvc.tool1        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool1        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool1        INFO TileCellBuilder initialization completed
+ToolSvc.tool2        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool2        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool2        INFO size of temp vector set to 5184
+ToolSvc.tool2        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool2        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool2        INFO TileCellBuilder initialization completed
+ToolSvc.tool4        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.beaminfo4    INFO in initialize()
+ToolSvc.tool4        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool4        INFO size of temp vector set to 5184
+ToolSvc.tool4        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool4        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool4        INFO TileCellBuilder initialization completed
+ToolSvc.tool5        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool5        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool5        INFO size of temp vector set to 5184
+ToolSvc.tool5        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool5        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool5        INFO TileCellBuilder initialization completed
+ToolSvc.tool6        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool6        INFO Ene threshold 300 MeV
+ToolSvc.tool6        INFO max time diff 100000 ns
+ToolSvc.tool6        INFO max time thr  100000 ns
+ToolSvc.tool6        INFO min time thr  -100000 ns
+ToolSvc.tool6        INFO max qual thr  100000
+ToolSvc.tool6        INFO min qual thr  -100000
+ToolSvc.tool6        INFO size of temp vector set to 5184
+ToolSvc.tool6        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool6        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool6        INFO TileCellBuilder initialization completed
+ToolSvc.tool7        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool7        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool7        INFO size of temp vector set to 5184
+ToolSvc.tool7        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool7        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool7        INFO TileCellBuilder initialization completed
+ToolSvc.tool8        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.noisefi...   INFO Initializing...
+ToolSvc.tool8        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool8        INFO size of temp vector set to 5184
+ToolSvc.tool8        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool8        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool8        INFO TileCellBuilder initialization completed
+ToolSvc.tool9        INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool9        INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool9        INFO size of temp vector set to 5184
+ToolSvc.tool9        INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool9        INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool9        INFO TileCellBuilder initialization completed
+ToolSvc.tool10       INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool10       INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool10       INFO size of temp vector set to 5184
+ToolSvc.tool10       INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool10       INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool10       INFO TileCellBuilder initialization completed
+ToolSvc.tool11       INFO Storing MBTS cells in MBTSContainer
+ToolSvc.tool11       INFO none of thresholds set, all RawChannels will be converted to Cells
+ToolSvc.tool11       INFO size of temp vector set to 5184
+ToolSvc.tool11       INFO taking RawChannels from 'TileRawChannelCnt'
+ToolSvc.tool11       INFO Storing E4'  cells in E4prContainer
+ToolSvc.tool11       INFO TileCellBuilder initialization completed
+HistogramPersis...WARNING Histograms saving not required.
+ApplicationMgr       INFO Application Manager Initialized successfully
+ClassIDSvc           INFO  getRegistryEntries: read 281 CLIDRegistry entries for module ALL
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/CES'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/LIN'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/CIS/FIT/NLN'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/EMS'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/LAS/FIBER'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/LAS/LIN'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/CALIB/LAS/NLN'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/NOISE/SAMPLE'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/STATUS/ADC'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY'
+CondInputLoader      INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/TILE/ONL01/STATUS/ADC'
+ApplicationMgr       INFO Application Manager Started successfully
+AthenaEventLoopMgr   INFO   ===>>>  start of run 1    <<<===
+EventPersistenc...   INFO Added successfully Conversion service:AthenaPoolCnvSvc
+EventPersistenc...   INFO Added successfully Conversion service:TagInfoMgr
+ClassIDSvc           INFO  getRegistryEntries: read 109 CLIDRegistry entries for module ALL
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to LARAlign-IOVDEP-00 for folder /LAR/Align
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to LArCellPositionShift-ideal for folder /LAR/LArCellPositionShift
+IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
+IOVDbSvc             INFO Opening COOL connection for COOLOFL_TILE/OFLP200
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibCes-SIM-06 for folder /TILE/OFL02/CALIB/CES
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibCisFitLin-COM-00 for folder /TILE/OFL02/CALIB/CIS/FIT/LIN
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibCisFitNln-COM-00 for folder /TILE/OFL02/CALIB/CIS/FIT/NLN
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibEms-COM-00 for folder /TILE/OFL02/CALIB/EMS
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibLasFiber-000-00 for folder /TILE/OFL02/CALIB/LAS/FIBER
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibLasLin-COM-00 for folder /TILE/OFL02/CALIB/LAS/LIN
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibLasNln-COM-00 for folder /TILE/OFL02/CALIB/LAS/NLN
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02NoiseSample-TwoGauss-19 for folder /TILE/OFL02/NOISE/SAMPLE
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02StatusAdc-IOVDEP-03 for folder /TILE/OFL02/STATUS/ADC
+IOVDbSvc             INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02TimeChanneloffsetPhy-000-00 for folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY
+IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
+DbSession            INFO     Open     DbSession    
+Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
+Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] EACFEBD4-9BD2-E211-848A-02163E006B20
+Domain[ROOT_All]     INFO                           /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000057.gen.COND/cond09_mc.000057.gen.COND._0001.pool.root
+RootDatabase.open    INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000057.gen.COND/cond09_mc.000057.gen.COND._0001.pool.root File version:52200
+ToolSvc.TileBad...   INFO ToolSvc.TileBadChanLegacyTool.TileCondProxyCool_OnlBch: callback has been triggered by: /TILE/ONL01/STATUS/ADC 
+ToolSvc.TileBad...   INFO ToolSvc.TileBadChanLegacyTool.TileCondProxyCool_OflBch: callback has been triggered by: /TILE/OFL02/STATUS/ADC 
+CaloMgrDetDescrCnv   INFO in createObj: creating a Calo Detector Manager object in the detector store
+CaloIdMgrDetDes...   INFO in createObj: creating a CaloDescrManager object in the detector store
+ClassIDSvc           INFO  getRegistryEntries: read 193 CLIDRegistry entries for module ALL
+CaloIDHelper_ID...   INFO in createObj: creating a CaloDM_ID helper object in the detector store
+CaloDM_ID            INFO initialize_from_dictionary
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
+TTOnlineID           INFO initialize_from_dictionary
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-opt/x86_64-slc6-gcc62-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIdMgrDetDes...   INFO  Finished 
+CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
+Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
+Domain[ROOT_All]     INFO                           /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root
+RootDatabase.open    INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root File version:52200
+ToolSvc.TileBad...   INFO TileBadChanLegacyTool::recache() has been triggered by: '/TILE/OFL02/STATUS/ADC' '/TILE/ONL01/STATUS/ADC' 
+ToolSvc.TileBad...   INFO Updating TileBchStatus::isBad() definition from DB
+ToolSvc.TileBad...   INFO Updating TileBchStatus::isNoisy() definition from DB
+ToolSvc.TileBad...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
+ToolSvc.TileBad...   INFO No TileBchStatus::isBadTiming() definition found in DB, using defaults
+ToolSvc.TileBad...   INFO TileBchStatus::isBad() is defined by: ADC masked (unspecified); ADC dead; Very large HF noise; No data; Wrong DSP configuration; Severe stuck bit; Severe data corruption; Channel masked (unspecified); No PMT connected; No HV; Wrong HV; 
+ToolSvc.TileBad...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise; Correlated noise; Large LF noise; 
+ToolSvc.TileBad...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; <no description available>; 
+ToolSvc.TileBad...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
+ToolSvc.TileBad...   INFO No drawer trips probabilities found in DB
+xAODMaker::Even...WARNING Algorithm::BeginRun is deprecated. Use Start instead
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #1, run #1 0 events processed so far  <<<===
+TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
+TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
+TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
+TileBadChannels...   INFO No TileBchStatus::isBadTiming() definition found in DB, using defaults
+TileBadChannels...   INFO TileBchStatus::isBad() is defined by: ADC masked (unspecified); ADC dead; Very large HF noise; No data; Wrong DSP configuration; Severe stuck bit; Severe data corruption; Channel masked (unspecified); No PMT connected; No HV; Wrong HV; 
+TileBadChannels...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise; Correlated noise; Large LF noise; 
+TileBadChannels...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; <no description available>; 
+TileBadChannels...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
+TileBadChannels...   INFO No drawer trips probabilities found in DB
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isBadTiming() definition found in DB, using defaults
+tilecellbuilder...   INFO TileBchStatus::isBad() is defined by: ADC masked (unspecified); ADC dead; Very large HF noise; No data; Wrong DSP configuration; Severe stuck bit; Severe data corruption; Channel masked (unspecified); No PMT connected; No HV; Wrong HV; Online ADC masked (unspecified); 
+tilecellbuilder...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise; Correlated noise; Large LF noise; 
+tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; <no description available>; 
+tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
+tilecellbuilder...   INFO No drawer trips probabilities found in DB
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-09-24T2056/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/afs/cern.ch/work/s/ssnyder/builds/atlas-work3/build-x86_64-slc6-gcc62-opt/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch"
+tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
+tilecellbuilder...   INFO No TileBchStatus::isBadTiming() definition found in DB, using defaults
+tilecellbuilder...   INFO TileBchStatus::isBad() is defined by: ADC masked (unspecified); ADC dead; Very large HF noise; No data; Wrong DSP configuration; Severe stuck bit; Severe data corruption; Channel masked (unspecified); No PMT connected; No HV; Wrong HV; Online ADC masked (unspecified); 
+tilecellbuilder...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise; Correlated noise; Large LF noise; 
+tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; <no description available>; 
+tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
+tilecellbuilder...   INFO No drawer trips probabilities found in DB
+ClassIDSvc           INFO  getRegistryEntries: read 650 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 67 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 8 CLIDRegistry entries for module ALL
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 1 events processed so far  <<<===
+/cvmfs/atlas-co...   INFO Database being retired...
+Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] EACFEBD4-9BD2-E211-848A-02163E006B20
+/cvmfs/atlas-co...   INFO Database being retired...
+Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
+Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #2, run #1 1 events processed so far  <<<===
+ClassIDSvc           INFO  getRegistryEntries: read 51 CLIDRegistry entries for module ALL
+zzz 0xf0f0045L 2 0xf0f0045
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #1 2 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #3, run #1 2 events processed so far  <<<===
+zzz 0xf0f0405L 2 0xf0f0405
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #1 3 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #4, run #1 3 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #1 4 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #5, run #1 4 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #1 5 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #6, run #1 5 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #1 6 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #7, run #1 6 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #1 7 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #8, run #1 7 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #1 8 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #9, run #1 8 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #1 9 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #10, run #1 9 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #1 10 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #11, run #1 10 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #1 11 events processed so far  <<<===
+AthenaEventLoopMgr   INFO   ===>>>  start processing event #12, run #1 11 events processed so far  <<<===
+zzz 0xf0f0005L 2 0xf0f0005
+AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #1 12 events processed so far  <<<===
+TileInfoLoader       INFO Handling EndRun incident
+TileInfoLoader       INFO Removed TileInfo object from detector store.
+Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
+ApplicationMgr       INFO Application Manager Stopped successfully
+IncidentProcAlg1     INFO Finalize
+CondInputLoader      INFO Finalizing CondInputLoader...
+testalg1             INFO Finalizing testalg1...
+IncidentProcAlg2     INFO Finalize
+PyComponentMgr       INFO Finalizing PyComponentMgr...
+IdDictDetDescrCnv    INFO in finalize
+IOVDbSvc             INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     0.04 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.06 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.03 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.13 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/2 objs/chan/bytes 277/277/97884 ((     0.69 ))s
+IOVDbSvc             INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.68 ))s
+IOVDbSvc             INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/2 objs/chan/bytes 277/277/76 ((     0.07 ))s
+IOVDbSvc             INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     0.01 ))s
+IOVDbSvc             INFO Total payload read from COOL: 844581 bytes in ((      1.87 ))s
+IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     0.05 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     1.82 ))s
+TileInfoLoader       INFO TileInfoLoader::finalize()
+AthDictLoaderSvc     INFO in finalize...
+ToolSvc              INFO Removing all tools created by ToolSvc
+ToolSvc.tool11       INFO Finalizing
+ToolSvc.tool10       INFO Finalizing
+ToolSvc.tool9        INFO Finalizing
+ToolSvc.tool8        INFO Finalizing
+ToolSvc.tool7        INFO Finalizing
+ToolSvc.tool6        INFO Finalizing
+ToolSvc.tool5        INFO Finalizing
+ToolSvc.tool4        INFO Finalizing
+ToolSvc.tool2        INFO Finalizing
+ToolSvc.tool1        INFO Finalizing
+ToolSvc.beaminfo4    INFO Finalizing
+ToolSvc.TileBea...   INFO Finalizing
+*****Chrono*****     INFO ****************************************************************************************************
+*****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
+*****Chrono*****     INFO ****************************************************************************************************
+cObjR_ALL            INFO Time User   : Tot=  390 [ms] Ave/Min/Max=  195(+-  185)/   10/  380 [ms] #=  2
+cObj_ALL             INFO Time User   : Tot=  470 [ms] Ave/Min/Max= 31.3(+-  102)/    0/  410 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 41.8  [s]                                             #=  1
+*****Chrono*****     INFO ****************************************************************************************************
+ChronoStatSvc.f...   INFO  Service finalized successfully 
+ApplicationMgr       INFO Application Manager Finalized successfully
+ApplicationMgr       INFO Application Manager Terminated successfully
+Py:Athena            INFO leaving with code 0: "successful run"
diff --git a/TileCalorimeter/TileRecUtils/src/TileBeamInfoProvider.cxx b/TileCalorimeter/TileRecUtils/src/TileBeamInfoProvider.cxx
index fb1431f2dd4af24cdf3677a85653b63d89e685a4..6d47670062537afc708c97eba837f083afd69979 100644
--- a/TileCalorimeter/TileRecUtils/src/TileBeamInfoProvider.cxx
+++ b/TileCalorimeter/TileRecUtils/src/TileBeamInfoProvider.cxx
@@ -641,7 +641,7 @@ const TileDQstatus * TileBeamInfoProvider::getDQstatus() {
     TileFragHash::TYPE RChType = m_rcCnt->get_type();
     if (RChType != TileFragHash::OptFilterDsp
         && RChType != TileFragHash::OptFilterDspCompressed) {
-      ATH_MSG_INFO("RawChannelContaier didn't come from BS - don't check DQ flags");
+      ATH_MSG_INFO("RawChannelContainer didn't come from BS - don't check DQ flags");
       ATH_MSG_INFO("RChType = " << RChType);
       m_DQstatus.setAllGood();
       m_checkDQ = false;
diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
index 4d4761ec962a34ef2bbc1391e7586dcec4c1af44..0fa4c4d5e5aa80d456b37b2346beb90b2bc21d95 100644
--- a/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
+++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilder.cxx
@@ -172,7 +172,7 @@ TileCellBuilder::~TileCellBuilder(){
  * Initializer
  */
 StatusCode TileCellBuilder::initialize() {
-  
+
   // retrieve MBTS and Tile detector manager, TileID helper and TileIfno from det store
   if (m_MBTSContainerKey.key().empty()) {
     m_mbtsMgr = nullptr;
@@ -310,7 +310,7 @@ StatusCode TileCellBuilder::process(CaloCellContainer * theCellContainer) {
 
   } else {
     
-    ATH_MSG_DEBUG( "Container " << m_rawChannelContainerKey.key() << " with TileRawChannles found ");
+    ATH_MSG_DEBUG( "Container " << m_rawChannelContainerKey.key() << " with TileRawChannels found ");
 
     m_RChType = rawChannelContainer->get_type();
     m_RChUnit = rawChannelContainer->get_unit();
@@ -402,7 +402,7 @@ StatusCode TileCellBuilder::process(CaloCellContainer * theCellContainer) {
           dspTimeCut = 63.9375; // 64-1/16 ns is hard limit in DSP
           dspCorrectAmplitude = ((dspFlags & 0x3000000) == 0);
           dspCorrectTime = ((dspFlags & 0x3000000) != 0);
-        } else { // dsp container contains resluts of offline reco
+        } else { // dsp container contains results of offline reco
           dspTimeCut = ((dspFlags >> 27) & 1) ? 100.0 : 75.0; // 100 or 75 ns is the limit for 9 or 7 samples
         }
 
@@ -1140,7 +1140,7 @@ void TileCellBuilder::build(const ITERATOR & begin, const ITERATOR & end, COLLEC
 
     if (index == -3) { // E4' cells
 
-      if (m_E4prCells) { // do something with them only if contaier existst
+      if (m_E4prCells) { // do something with them only if container exists
         ++nE4pr;
 
         // convert ADC counts to MeV. like for normal cells
diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
index 0a4eff3f873af35c1befe49be216db6530a65274..70ddb67e9dfbf160c22f92925456bdd7eaf59cfc 100644
--- a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
+++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
@@ -370,7 +370,7 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
     flag |= fl << (p - 1);
   }
 
-  // number of cosecutively masked modules (if it's > 15 we have error already set)
+  // number of consecutively masked modules (if it's > 15 we have error already set)
   flag |= (std::min(15, drConsecMaxMax) << 16);
 
   if (drConsecMaxMax > 1 && error < xAOD::EventInfo::Warning) {
diff --git a/TileCalorimeter/TileRecUtils/test/TileCellBuilder_test.sh b/TileCalorimeter/TileRecUtils/test/TileCellBuilder_test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..04fd6c3842f085edb2fa1225c00b1d28c48259de
--- /dev/null
+++ b/TileCalorimeter/TileRecUtils/test/TileCellBuilder_test.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+#
+# Script running the TileCellBuilder_test.py test with CTest.
+#
+
+# Run the job:
+athena.py TileRecUtils/TileCellBuilder_test.py
diff --git a/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_15.6.4_test.py b/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_15.6.4_test.py
index 2f80024fe2db21226ba0fe328334f59959d42979..ac2868486507aae19604f7c98b52128943bde665 100644
--- a/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_15.6.4_test.py
+++ b/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_15.6.4_test.py
@@ -16,7 +16,3 @@ noMuon = True
 noID = True
 
 include ('AthenaPoolUtilities/TPCnvTest.py')
-
-from TileConditions.TileInfoConfigurator import TileInfoConfigurator
-tileInfoConfigurator = TileInfoConfigurator()
-
diff --git a/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_20.1.7.2_test.py b/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_20.1.7.2_test.py
index 360517ac885e1f02cf872b47e34aeff438380800..00c316c6f2b8abd9aa220272a3bba356ed9d99c6 100644
--- a/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_20.1.7.2_test.py
+++ b/TileCalorimeter/TileSvc/TileEventAthenaPool/share/TileTPCnv_20.1.7.2_test.py
@@ -19,7 +19,3 @@ noMuon = True
 noID = True
 
 include ('AthenaPoolUtilities/TPCnvTest.py')
-
-from TileConditions.TileInfoConfigurator import TileInfoConfigurator
-tileInfoConfigurator = TileInfoConfigurator()
-
diff --git a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h
index 4b07e59b0cc13cbbbfcd81f40eb921cac9786645..2c0c7fe9c9c69ecd504231cffe5638eb5c12384f 100644
--- a/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h
+++ b/Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/DiscSurface.h
@@ -19,6 +19,8 @@
 // Amg
 #include "EventPrimitives/EventPrimitives.h" 
 #include "GeoPrimitives/GeoPrimitives.h"
+//std
+#include <cmath> //for cos, sin etc
 
 class MsgStream;
 template< class SURFACE, class BOUNDS_CNV > class BoundSurfaceCnv_p1;
@@ -174,6 +176,9 @@ namespace Trk {
       /**  Special method for Disc surface : local<->local transformations polar <-> cartesian */
       const Amg::Vector2D* localCartesianToPolar(const Amg::Vector2D& loccart) const;      
       
+      /**  Special method for Disc surface : local<->local transformations polar <-> cartesian by value*/
+      Amg::Vector2D localCartesianToPolarValue(const Amg::Vector2D& loccart) const;  
+      
       /**  Special method for DiscSurface : local<->local transformations polar <-> cartesian */
       const Amg::Vector2D* localPolarToLocalCartesian(const Amg::Vector2D& locpol) const;
       
@@ -257,12 +262,17 @@ namespace Trk {
   }
 
   inline const Amg::Vector2D* DiscSurface::localPolarToCartesian(const Amg::Vector2D& locpol) const
-  { return(new Amg::Vector2D(locpol[locR]*cos(locpol[locPhi]),locpol[locR]*sin(locpol[locPhi]))); }
+  { return(new Amg::Vector2D(locpol[locR]*std::cos(locpol[locPhi]),locpol[locR]*std::sin(locpol[locPhi]))); }
   
   inline const Amg::Vector2D* DiscSurface::localCartesianToPolar(const Amg::Vector2D& loccart) const
   {
-    return(new Amg::Vector2D(sqrt(loccart[locX]*loccart[locX]+loccart[locY]*loccart[locY]),
-                             atan2(loccart[locY], loccart[locX])));    
+    return(new Amg::Vector2D(std::sqrt(loccart[locX]*loccart[locX]+loccart[locY]*loccart[locY]),
+                             std::atan2(loccart[locY], loccart[locX])));    
+  }
+  inline Amg::Vector2D DiscSurface::localCartesianToPolarValue(const Amg::Vector2D& loccart) const
+  {
+    return(Amg::Vector2D(std::sqrt(loccart[locX]*loccart[locX]+loccart[locY]*loccart[locY]),
+                             std::atan2(loccart[locY], loccart[locX])));    
   }
   
   inline Intersection DiscSurface::straightLineIntersection(const Amg::Vector3D& pos, 
diff --git a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h
index ca396bd94b6d67d570f0e03d797110907e18facb..b5581b906ae7354b95edbc98de0037acb24d814d 100755
--- a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h
+++ b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h
@@ -209,25 +209,20 @@ class MaterialEffectsUpdator : public AthAlgTool,
      * the same behaviour as boost::thread_specific_ptr<T>
      */
 
-    Cache* getTLSCache() const{ 
+    Cache& getTLSCache() const{ 
 
-      typedef std::vector<std::unique_ptr<Cache>> TLSCollection;
+      typedef std::vector<Cache> TLSCollection;
       /* Initialize a unique ptr to default constructed TLSCollection*/
       thread_local std::unique_ptr<TLSCollection> s_cacheStore= std::make_unique<TLSCollection>();        
       
-      /*This should never happen*/
-      if(s_cacheStore.get()==nullptr){
-        return nullptr;
-      }
-      /* Get the actual cache*/
-      size_t index= m_uniqueID-1;
+      /* Resize the vector, to the requested number of Caches
+       * Default constructs elements
+       */
       if (m_uniqueID>s_cacheStore->size()) {
         s_cacheStore->resize(m_uniqueID);
-      }
-      if (s_cacheStore->operator[](index).get()==nullptr) {
-        s_cacheStore->operator[](index)= std::make_unique<Cache>();
-      }
-      return s_cacheStore->operator[](index).get(); 
+      } 
+      size_t index= m_uniqueID-1;
+      return s_cacheStore->operator[](index); 
     }
 
   public:
@@ -240,7 +235,7 @@ class MaterialEffectsUpdator : public AthAlgTool,
                                             ParticleHypothesis particle=pion,
                                             MaterialUpdateMode matupmode=addNoise) const override{
 
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       const TrackParameters* outparam = updateImpl(cache,parm,sf,dir,particle,matupmode);
       return outparam;
     }
@@ -249,7 +244,7 @@ class MaterialEffectsUpdator : public AthAlgTool,
                                            const MaterialEffectsOnTrack& meff,
                                            Trk::ParticleHypothesis particle=pion,
                                            MaterialUpdateMode matupmode=addNoise) const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       const TrackParameters* outparam = updateImpl(cache,parm,meff,particle,matupmode);
       return outparam;
     }
@@ -259,7 +254,7 @@ class MaterialEffectsUpdator : public AthAlgTool,
                                                 PropDirection dir=alongMomentum,
                                                 ParticleHypothesis particle=pion,
                                                 MaterialUpdateMode matupmode=addNoise) const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       const TrackParameters* outparam = preUpdateImpl(cache,parm,sf,dir,particle,matupmode);
       return outparam;
     }
@@ -269,7 +264,7 @@ class MaterialEffectsUpdator : public AthAlgTool,
                                                 PropDirection dir=alongMomentum,
                                                 ParticleHypothesis particle=pion,
                                                 MaterialUpdateMode matupmode=addNoise) const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       const TrackParameters* outparam = postUpdateImpl(cache,parm,sf,dir,particle,matupmode);
       return outparam;
     }
@@ -280,20 +275,19 @@ class MaterialEffectsUpdator : public AthAlgTool,
                                            PropDirection dir=alongMomentum,
                                            ParticleHypothesis particle=pion,
                                            MaterialUpdateMode matupmode=addNoise) const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       const TrackParameters* outparam = updateImpl(cache,parm,mprop,pathcorrection,dir,particle,matupmode);
       return outparam;
     }
 
     virtual void validationAction() const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       validationActionImpl(cache);
-
       return;
     }
 
     virtual void modelAction(const TrackParameters* parm = 0) const override{
-      Cache& cache = (*getTLSCache());
+      Cache& cache = getTLSCache();
       modelActionImpl(cache,parm);  
       return;
     }
diff --git a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MultipleScatteringUpdator.h b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MultipleScatteringUpdator.h
index bbd7547f9d638b3212b01e6d68885d80d22e237a..7a11175e96bb9aae4ff0c0d59699407ad86ef397 100755
--- a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MultipleScatteringUpdator.h
+++ b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MultipleScatteringUpdator.h
@@ -78,31 +78,6 @@ namespace Trk {
       /** Random engine  */
       CLHEP::HepRandomEngine*                             m_randomEngine;
       std::string                                  m_randomEngineName;                   //!< Name of the random number stream
-
-      static ParticleMasses s_particleMasses;        //!< struct of Particle masses
-
-      static double         s_main_RutherfordScott;  //!< main factor of Rutherford-Scott formula
-      static double         s_log_RutherfordScott;   //!< log factor of Rutherford-Scott formula
-
-      static double         s_main_RossiGreisen;     //!< main factor for Rossi-Greisen formula
-      static double         s_log_RossiGreisen;      //!< main factor for Rossi-Greisen formula
-
-
-      // ========= Gaussian mixture model Fruehwirth, Regler Nucl. Inst. Methods A 456(2001) =========
-
-      static double         s_gausMixSigma1_a0;     //!< Gaussian mixture model: Sigma parameter a0
-      static double         s_gausMixSigma1_a1;     //!< Gaussian mixture model: Sigma parameter a1
-      static double         s_gausMixSigma1_a2;     //!< Gaussian mixture model: Sigma parameter a2
-
-      static double         s_gausMixEpsilon_a0;     //!< Gaussian mixture model: Epsilon parameter a0
-      static double         s_gausMixEpsilon_a1;     //!< Gaussian mixture model: Epsilon parameter a1
-      static double         s_gausMixEpsilon_a2;     //!< Gaussian mixture model: Epsilon parameter a2
-
-      static double         s_gausMixEpsilon_b0;     //!< Gaussian mixture model: Epsilon parameter b0
-      static double         s_gausMixEpsilon_b1;     //!< Gaussian mixture model: Epsilon parameter b1
-      static double         s_gausMixEpsilon_b2;     //!< Gaussian mixture model: Epsilon parameter b2
-
-
                                                       
   };
 
diff --git a/Tracking/TrkExtrapolation/TrkExTools/src/MultipleScatteringUpdator.cxx b/Tracking/TrkExtrapolation/TrkExTools/src/MultipleScatteringUpdator.cxx
index 09715ddf7131bea0a88daba88ead0d0bfce7eff2..cf93e7a7356d450fff5a78ae6a9ed4355ea83a98 100755
--- a/Tracking/TrkExtrapolation/TrkExTools/src/MultipleScatteringUpdator.cxx
+++ b/Tracking/TrkExtrapolation/TrkExTools/src/MultipleScatteringUpdator.cxx
@@ -14,28 +14,30 @@
 #include "TrkExUtils/MaterialInteraction.h"
 #include "CLHEP/Random/RandFlat.h"
 
+namespace{
 // static particle masses
-Trk::ParticleMasses Trk::MultipleScatteringUpdator::s_particleMasses;
+constexpr Trk::ParticleMasses s_particleMasses;
 // static doubles
-double Trk::MultipleScatteringUpdator::s_main_RutherfordScott = 13.6 * Gaudi::Units::MeV;
-double Trk::MultipleScatteringUpdator::s_log_RutherfordScott = 0.038;
+constexpr double s_main_RutherfordScott = 13.6 * Gaudi::Units::MeV;
+constexpr double s_log_RutherfordScott = 0.038;
 
-double Trk::MultipleScatteringUpdator::s_main_RossiGreisen = 17.5 * Gaudi::Units::MeV;
-double Trk::MultipleScatteringUpdator::s_log_RossiGreisen = 0.125;
+constexpr double s_main_RossiGreisen = 17.5 * Gaudi::Units::MeV;
+constexpr double s_log_RossiGreisen = 0.125;
 
 // ============================= Gaussian mixture model =============
-double Trk::MultipleScatteringUpdator::s_gausMixSigma1_a0 = 8.471e-1;
-double Trk::MultipleScatteringUpdator::s_gausMixSigma1_a1 = 3.347e-2;
-double Trk::MultipleScatteringUpdator::s_gausMixSigma1_a2 = -1.843e-3;
+constexpr double s_gausMixSigma1_a0 = 8.471e-1;
+constexpr double s_gausMixSigma1_a1 = 3.347e-2;
+constexpr double s_gausMixSigma1_a2 = -1.843e-3;
 
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_a0 = 4.841e-2;
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_a1 = 6.348e-3;
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_a2 = 6.096e-4;
+constexpr double s_gausMixEpsilon_a0 = 4.841e-2;
+constexpr double s_gausMixEpsilon_a1 = 6.348e-3;
+constexpr double s_gausMixEpsilon_a2 = 6.096e-4;
+
+constexpr double s_gausMixEpsilon_b0 = -1.908e-2;
+constexpr double s_gausMixEpsilon_b1 = 1.106e-1;
+constexpr double s_gausMixEpsilon_b2 = -5.729e-3;
+}
 
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_b0 = -1.908e-2;
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_b1 = 1.106e-1;
-double Trk::MultipleScatteringUpdator::s_gausMixEpsilon_b2 = -5.729e-3;
-Trk::MaterialInteraction matInt;
 
 // constructor
 Trk::MultipleScatteringUpdator::MultipleScatteringUpdator(const std::string &t, const std::string &n,
@@ -125,6 +127,7 @@ Trk::MultipleScatteringUpdator::sigmaSquare(const MaterialProperties &mat,
 
   double sigma2(0.);
 
+  Trk::MaterialInteraction matInt;
   double sigma = matInt.sigmaMS(t, p, beta);
   sigma2 = sigma * sigma;
 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/BremFind.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/BremFind.h
deleted file mode 100644
index 5d549bab03fb4a9454c573798dded0ca9bdefe04..0000000000000000000000000000000000000000
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/BremFind.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/********************************************************************************
-                      BremFind.h * description
-
-completed   : Tuesday 18th November 2008
-author      : Tony Shao
-email       : Qi.Tao.Shao@cern.ch
-description : Class for finding brem points in the inner detector using the GSF
-**********************************************************************************/
-
-#ifndef Trk_BremFind_H
-#define Trk_BremFind_H
-
-#include "TrkGaussianSumFilter/IBremsstrahlungFinder.h"
-
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
-#include "GaudiKernel/ServiceHandle.h"
-
-#include "AthContainers/DataVector.h"
-#include "TrkFitterUtils/FitterTypes.h"
-#include "TrkParameters/TrackParameters.h"
-
-#include "TrkExInterfaces/IPropagator.h"
-#include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h"
-#include "TrkGeometry/MagneticFieldProperties.h"
-
-#include "GeoPrimitives/GeoPrimitives.h"
-
-#include "StoreGate/ReadHandleKey.h"
-#include "xAODEventInfo/EventInfo.h"
-
-#include <vector>
-
-//class ITrackingGeometrySvc;
-class TTree;
-
-namespace Trk {
-
-class IMultiComponentStateCombiner;
-class MultiComponentStateOnSurface;
-class TrackStateOnSurface;
-class EstimatedBremOnTrack;
-class Layer;
-class TrackingVolume;
-class TrackingGeometry;
-class EntryLayerProvider;
-class AbstractVolume;
-class Surface;
-class QoverPBremFit;
-    
-struct GraphParameter {
-  double constant;
-  std::vector<double> coefficient{};
-  std::vector<double> value{};
-  std::vector<double> width{};
-};
-    
-struct Element {
-  double value{};
-  double width{};
-  bool sign{};
-};
- 
-  
-#define TRKFGSF_VALSURFACES 100
-#define TRKGSF_VALSTATES 24
-#define POTENTIAL_BREM_THRESHOLD 0.0001
-#define MIN_KINK_THRESHOLD 0.005
-#define BREM_AMPLITUDE 1.0 //in GeV
-#define BREM_SEPARATION 0.005
-#define COEFFICIENT_THRESHOLD 0.005
-#define BOUND_THRESHOLD 20.0 //in percentage
-
-class BremFind : public AthAlgTool, virtual public IBremsstrahlungFinder{
-  public:
-    
-    BremFind(const std::string&, const std::string&, const IInterface*);
-
-    virtual ~BremFind () {};
-
-    StatusCode initialize();
-
-    /** AlgTool finalise method */
-    StatusCode finalize();
-
-    //Find the brem points from a forward and smooth track fit
-    virtual void BremFinder(const Trk::ForwardTrajectory&, const Trk::SmoothedTrajectory&);
-
-    virtual void BremFinder(const Trk::ForwardTrajectory&, const Trk::SmoothedTrajectory&, bool);
-    
-    virtual void CombineParameters();
-
-    virtual void GetBremLocations();
- 
-    virtual double GetBound(double, int);
-
-    virtual double BremSignificance(double, QoverPBremFit*, QoverPBremFit*);
-
-    virtual double GetPhiFromValue(double, QoverPBremFit*);
-    
-    virtual int ClosestMeasurement(double, QoverPBremFit*);
-
-    virtual void CalibrateValue();
-    
-    virtual const Surface* ClosestSurface(double, double, double, const TrackParameters&); 
-    
-    virtual Amg::Vector3D SurfacePosition(const TrackParameters&, const Surface&, double, double, double);
-    
-    virtual StatusCode retrieveTrackingGeometry();
-    
-    virtual int GetNBrems();
-
-    virtual void MakeTrackStateOnSurfaces ();
-    
-    virtual const TrackStateOnSurface* GetEstimatedBremOnTrack(int);
-    
-
-  private:
-    
-    double Graph_value(GraphParameter, double);
-      
-    double GetMaximumX(GraphParameter, double, double);
-
-    double GetMaximumY(GraphParameter, double, double);
-
-    double UniqueAngle(double);
-
-    void SeparationQuality(std::vector<double>*, std::vector<double>*);
-
-    std::pair<double,double> ProbabilityScore(double, double, double, double);
-
-    //defining the tools used in this package
-    ToolHandle<IMultiComponentStateCombiner>     m_stateCombiner;    
- 
-    ToolHandle<IPropagator> m_propagator;
-    MagneticFieldProperties m_fieldProperties;
-   
-    ServiceHandle<ITrackingGeometrySvc> m_trackingGeometrySvc;   //!< Name of the TrackingGeometrySvc
-    std::string                       m_trackingGeometryName;    //!< TrackingGeometry to be retrieved from DetectorStore
-    mutable const TrackingGeometry*   m_trackingGeometry;        //!< The underlying TrackingGeometry
-    
-    //Validation variables
-          
-    bool m_validationMode;
-    std::string m_validationTreeName;
-    std::string m_validationTreeName2;
-    std::string m_validationTreeDescription;
-    std::string m_validationTreeFolder;
-    std::string m_validationTreeFolder2;
-
-    TTree* m_validationTree;
-    TTree* m_validationTree2;
-
-    //Calibration option
-    bool m_useCalibration;
-    
-    //Propagation option
-    bool m_usePropagate;
-        
-    //Class variables
-    GraphParameter m_forwardparameters;
-    GraphParameter m_smoothedparameters;
-    GraphParameter m_combinedparameters;
-
-    double m_perigee_1overP;
-    double m_perigee_Phi;
-    double m_perigee_Theta;
-    double m_perigee_d0;
-    double m_perigee_z0;
-
-    std::vector<double> *m_brem_value; //could be R or Z;
-    std::vector<double> *m_brem_phi;
-    std::vector<double> *m_brem_theta;
-    std::vector<double> *m_brem_energy;
-    std::vector<double> *m_brem_UpperBound;
-    std::vector<double> *m_brem_LowerBound;
-    std::vector<double> *m_forward_kink;
-    std::vector<double> *m_smoothed_kink;
-    std::vector<double> *m_brem_significance;
-    std::vector<double> *m_brem_valueCalibrated;
-    std::vector<double> *m_surfaceX;
-    std::vector<double> *m_surfaceY;
-    std::vector<double> *m_surfaceZ;
-  
-
-    int m_nBrems;
-    bool m_Z_mode;
-
-    std::vector<const Trk::TrackStateOnSurface*> m_brem_trackStateOnSurface;
-    std::vector<const Trk::TrackParameters*> m_brem_TrackParameters;
-    std::vector<const Trk::EstimatedBremOnTrack*> m_EstimatedBremOnTrack;
-    std::vector<const Trk::Surface*> m_brem_surfaces;
-    std::vector<const Trk::Layer*> m_brem_layers;
-    std::vector<Amg::Vector3D> m_surface_positions;
-
-    int m_event_ID;
-    double m_forwardparameter_constant;
-    std::vector<double> *m_forwardparameter_coefficient;
-    std::vector<double> *m_forwardparameter_value;
-    std::vector<double> *m_forwardparameter_width;
-    double m_smoothparameter_constant;
-    std::vector<double> *m_smoothparameter_coefficient;
-    std::vector<double> *m_smoothparameter_value;
-    std::vector<double> *m_smoothparameter_width;
-
-    std::vector<double> *m_forward_1overP;
-    std::vector<double> *m_forward_1overPerr;
-    std::vector<double> *m_forward_value;
-    std::vector<double> *m_smooth_1overP;
-    std::vector<double> *m_smooth_1overPerr;
-    std::vector<double> *m_smooth_value;
-    
-    std::vector<double> *m_KinkSeparationScores;
-    std::vector<double> *m_KinkSeparationScoresErr;
-
-    QoverPBremFit *m_forwardBremFit;
-    QoverPBremFit *m_smoothedBremFit;
-
-    SG::ReadHandleKey<xAOD::EventInfo> m_readKey;
-
-  };
-
-}
-
-#endif
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h
index 743f45db70e0c8448cb45b65d3b8808415283cb0..3714b3c87cf03df01420a9f253397973fc210382 100755
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h
@@ -40,7 +40,6 @@ class TrackFitInputPreparator;
 class IForwardGsfFitter;
 class IGsfSmoother;
 class Track;
-class IBremsstrahlungFinder;
 
 class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool {
  public:
@@ -125,19 +124,12 @@ class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool {
 
   bool                                      m_makePerigee;
   PropDirection                             m_directionToPerigee;
-
-  bool                                      m_runBremFinder;
-
   bool                                      m_refitOnMeasurementBase;
-
   bool                                      m_doHitSorting;
   TrkParametersComparisonFunction*          m_trkParametersComparisonFunction;
   std::vector<double>                       m_sortingReferencePoint;
 
   ToolHandle<IMultiComponentStateCombiner>  m_stateCombiner;
-  ToolHandle<IBremsstrahlungFinder>         m_BremFind;
-  ToolHandle<IBremsstrahlungFinder>         m_BremFind2;
-
   ServiceHandle<IChronoStatSvc>             m_chronoSvc;
   
   TrackFitInputPreparator*                  m_inputPreparator;
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMaterialEffectsUpdator.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMaterialEffectsUpdator.h
index 8684faf07d76d60489247126afba693d6b361bbc..6003f11dee7cea8740c08138a7d846ea49de9e60 100755
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMaterialEffectsUpdator.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfMaterialEffectsUpdator.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -79,15 +79,9 @@ class GsfMaterialEffectsUpdator : public AthAlgTool, virtual public IMultiStateM
   
  private:
 
-  int                                m_outputlevel;                      //!< to cache current output level
-
-  PublicToolHandle<IMultiComponentStateAssembler> m_stateAssembler
-     {this,"MultiComponentStateAssembler","Trk::MultiComponentStateAssembler/GsfMaterialEffectsStateAssembler",""};
-
+  int                                       m_outputlevel;                      //!< to cache current output level
   ToolHandle<IMultiStateMaterialEffects>    m_materialEffects;
-
   bool                                      m_useReferenceMaterial;
-
   double                                    m_momentumCut;
 
 };
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBremsstrahlungFinder.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBremsstrahlungFinder.h
deleted file mode 100644
index c54728fcfd8412c849cd66b5bafe70752ff535d9..0000000000000000000000000000000000000000
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBremsstrahlungFinder.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/*********************************************************************************
-			IBremsstrahlungFinder.h  -  description
-			---------------------------------------------
-created              : Thursday 8th January 2009
-author               : amorley
-email                : Anthony.Morley@cern.ch
-description          : Interface for bremsstrahlung finding using the GSF
-*********************************************************************************/
-
-
-#ifndef Trk_IBremsstrahlungFinder_H
-#define Trk_IBremsstrahlungFinder_H
-
-#include "GaudiKernel/IAlgTool.h"
-
-#include "TrkParameters/TrackParameters.h"
-#include "TrkFitterUtils/FitterTypes.h"
-
-#include "GeoPrimitives/GeoPrimitives.h"
-
-namespace Trk{
-
-class MultiComponentState;
-class TrackStateOnSurface;
-class Surface;
-class QoverPBremFit;
-
-
-//!< Interface ID for IBremsstrahlungFinder
-static const InterfaceID IID_IBremsstrahlungFinder( "IBremsstrahlungFinder", 1, 0 );
-
-class IBremsstrahlungFinder : virtual public IAlgTool{
-
- public:
-
-  //!< Virtual destructor
-  virtual ~IBremsstrahlungFinder(){};
-
-  //!< IAlgTool-AlgTool interface
-  static const InterfaceID& interfaceID() { return IID_IBremsstrahlungFinder; };
-
-	//Find the brem points from a forward and smooth track fit
-	virtual void BremFinder(const Trk::ForwardTrajectory&, const Trk::SmoothedTrajectory&) = 0;
-
-	virtual void BremFinder(const Trk::ForwardTrajectory&, const Trk::SmoothedTrajectory&, bool) = 0;
-	
-	virtual void CombineParameters() = 0;
-
-	virtual void GetBremLocations() = 0;
-
-	virtual double GetBound(double, int) = 0;
-
-	virtual double BremSignificance(double, QoverPBremFit*, QoverPBremFit*) = 0;
-
-	virtual double GetPhiFromValue(double, QoverPBremFit*) = 0;
-	
-	virtual int ClosestMeasurement(double, QoverPBremFit*) = 0;
-
-	virtual void CalibrateValue() = 0;
-	
-	virtual const Surface* ClosestSurface(double, double, double, const TrackParameters&) = 0; 
-	
-	virtual Amg::Vector3D SurfacePosition(const TrackParameters&, const Surface&, double, double, double) = 0;
-	
-	virtual StatusCode retrieveTrackingGeometry() = 0;
-	
-	virtual int GetNBrems() = 0;
-
-	virtual void MakeTrackStateOnSurfaces () = 0;
-	
-	virtual const TrackStateOnSurface* GetEstimatedBremOnTrack(int) = 0;
-
-};
-
-} // end Trk namespace
-
-#endif
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiComponentStateAssembler.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiComponentStateAssembler.h
index 4a5c7f59709a48bf72f49ab6e9694f8f1a42e5b3..3212bc6bb1f2cf0c1bd79319e4ca5f0c573c5bd7 100755
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiComponentStateAssembler.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IMultiComponentStateAssembler.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -16,11 +16,10 @@ decription           : Abstract interface for Multi Component State Assembler
 
 #include "TrkMultiComponentStateOnSurface/MultiComponentState.h"
 #include "GaudiKernel/IAlgTool.h"
+#include <memory>
 
 namespace Trk {
-
 static const InterfaceID IID_MultiComponentStateAssembler("MultiComponentStateAssembler", 1, 0);
-	
 class IMultiComponentStateAssembler : virtual public IAlgTool {
   public:
   
@@ -30,26 +29,37 @@ class IMultiComponentStateAssembler : virtual public IAlgTool {
   /** AlgTool interface methods */
   static const InterfaceID& interfaceID () { return IID_MultiComponentStateAssembler; };
   
+  struct Cache{
+    Cache():validWeightSum{0},
+    invalidWeightSum{0},
+    multiComponentState{std::make_unique<MultiComponentState>()},
+    assemblyDone{false}{
+    }
+    double                               validWeightSum;
+    double                               invalidWeightSum;
+    std::unique_ptr<MultiComponentState> multiComponentState; 
+    bool                                 assemblyDone; 
+  };
   /** Resets the AlgTool */
-  virtual bool reset() = 0 ;
+  virtual bool reset(Cache& cache) const = 0 ;
 
   /** Print the status of the assembler */
-  virtual void status() const = 0;
+  virtual void status(const Cache& cache) const = 0;
 
   /** Method to add a single set of Trk::ComponentParameters to the cashed Trk::MultiComponentState object under construction */
-  virtual bool addComponent  (const ComponentParameters&) = 0;
+  virtual bool addComponent  (Cache& cache, const ComponentParameters&) const = 0;
   
   /** Method to add a new Trk::MultiComponentState to the cashed Trk::MultiComponentState onject under construction */
-  virtual bool addMultiState (const MultiComponentState&) = 0;
+  virtual bool addMultiState (Cache& cache,const MultiComponentState&) const = 0;
   
   /** Method to include the weights of states that are invalid */
-  virtual bool addInvalidComponentWeight (const double&) = 0;
+  virtual bool addInvalidComponentWeight (Cache& cache,const double) const = 0;
   
   /** Method to return the cashed state object - it performs a reweighting before returning the object based on the valid and invaid weights */
-  virtual const MultiComponentState* assembledState () = 0;
+  virtual const MultiComponentState* assembledState (Cache& cache) const = 0;
   
   /** Method to return the cashed state object - it performs a reweighting based on the input parameter  */
-  virtual const MultiComponentState* assembledState (const double&) = 0;
+  virtual const MultiComponentState* assembledState (Cache& cache, const double) const = 0;
 
 };
 } // End Trk namepace
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/MultiComponentStateAssembler.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/MultiComponentStateAssembler.h
index 7c5a813dd7716ec102d66f7221611abcc62ad10d..bf0a627b4674cc061e578bf8edabb7654b29b2c4 100755
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/MultiComponentStateAssembler.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/MultiComponentStateAssembler.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -40,65 +40,61 @@ class MultiComponentStateAssembler : public AthAlgTool, virtual public IMultiCom
   virtual ~MultiComponentStateAssembler ();
     
   /** AlgTool initialise method */
-  StatusCode initialize();
+  virtual StatusCode initialize() override;
 
   /** AlgTool finalise method */
-  StatusCode finalize();
+  virtual StatusCode finalize() override;
+
+  typedef IMultiComponentStateAssembler::Cache Cache;
 
   /** Resets the AlgTool */
-  virtual bool reset();
+  virtual bool reset(Cache& cache) const override;
 
   /** Print the status of the assembler */
-  virtual void status() const;
+  virtual void status(const Cache& cache) const override;
 
   /** Method to add a single set of Trk::ComponentParameters to the cashed Trk::MultiComponentState object under construction */
-  virtual bool addComponent  (const ComponentParameters&);
+  virtual bool addComponent  (Cache& cache, const ComponentParameters&)  const override ;
   
   /** Method to add a new Trk::MultiComponentState to the cashed Trk::MultiComponentState onject under construction */
-  virtual bool addMultiState (const MultiComponentState&);
+  virtual bool addMultiState (Cache& cache, const MultiComponentState&) const override ;
   
   /** Method to include the weights of states that are invalid */
-  virtual bool addInvalidComponentWeight (const double&);
+  virtual bool addInvalidComponentWeight (Cache& cache, const double) const override;
   
   /** Method to return the cashed state object - it performs a reweighting before returning the object based on the valid and invaid weights */
-  virtual const MultiComponentState* assembledState ();
+  virtual const MultiComponentState* assembledState (Cache& cache) const override ;
   
   /** Method to return the cashed state object - it performs a reweighting based on the input parameter  */
-  virtual const MultiComponentState* assembledState (const double&);
+  virtual const MultiComponentState* assembledState (Cache& cache, const double) const override;
   
  private:
   
   /** Method to Check component entries before full assembly */
-  bool prepareStateForAssembly ();
+  bool prepareStateForAssembly (Cache& cache) const;
   
   /** Method to assemble state with correct weightings */
-  const MultiComponentState* doStateAssembly (const double&);
+  const MultiComponentState* doStateAssembly (Cache& cache,const double) const;
   
   /** Method to check the validity of of the cashed state */
-  bool isStateValid () const;
+  bool isStateValid (Cache& cache) const;
   
   /** Method to Remove components with insignificantly small weightings */
-  void removeSmallWeights ();
+  void removeSmallWeights (Cache& cache) const;
 
   /** Method for the actual addition of a multi-component state to the cashed state */
-  void addComponentsList (const MultiComponentState*);
+  void addComponentsList (Cache& cache, const MultiComponentState*) const;
   
   // Private data members
  private:
-  int                                m_outputlevel;                      //!< to cache current output level  bool m_sortComponents;
-  bool                               m_assemblyDone;
-  double                             m_minimumFractionalWeight;
-  double                             m_minimumValidFraction;
-  double                             m_validWeightSum;
-  double                             m_invalidWeightSum;
-  MultiComponentState*               m_multiComponentState;
-
+  Gaudi::Property<double> m_minimumFractionalWeight {this, "minimumFractionalWeight",1.e-9," Minimum Fractional Weight"};
+  Gaudi::Property<double> m_minimumValidFraction {this, "minimumValidFraction",0.01," Minimum Valid Fraction"};
 };
 } // End Trk namepace
 
-inline bool Trk::MultiComponentStateAssembler::isStateValid () const
+inline bool Trk::MultiComponentStateAssembler::isStateValid ( Cache& cache) const
 {
-  return !m_multiComponentState->empty();
+  return !cache.multiComponentState->empty();
 }
 
 #endif
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/QuickCloseComponentsMultiStateMerger.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/QuickCloseComponentsMultiStateMerger.h
index fd16e666b6785c73f0d44c579a5f72b642112384..ec756407c2dcf7901f349f91f5e80a392f478fcc 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/QuickCloseComponentsMultiStateMerger.h
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/QuickCloseComponentsMultiStateMerger.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -84,8 +84,10 @@ namespace Trk{
           std::vector<const ComponentParameters*>&,
           int& minIndex) const;
 
-    const MultiComponentState* mergeFullDistVector(const MultiComponentState&) const;
-    const MultiComponentState* mergeFullDistArray(const MultiComponentState&) const;
+    const MultiComponentState* mergeFullDistVector(IMultiComponentStateAssembler::Cache& cache, 
+                                                   const MultiComponentState&) const;
+    const MultiComponentState* mergeFullDistArray(IMultiComponentStateAssembler::Cache& cache,
+                                                  const MultiComponentState&) const;
 
     void deleteStateComponents(int ind1, int ind2, std::vector<const ComponentParameters*>&) const;
 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/BremFind.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/BremFind.cxx
deleted file mode 100644
index 88733889ac8814888cee8ebf807088822d53bcb0..0000000000000000000000000000000000000000
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/BremFind.cxx
+++ /dev/null
@@ -1,1001 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/********************************************************************************
-                      BremFind.cxx * description
-
-completed   : Tuesday 18th November 2008
-author      : Tony Shao
-email       : Qi.Tao.Shao@cern.ch
-description : Class for finding brem points in the inner detector using the GSF
-**********************************************************************************/
-
-
-
-#include "TrkGaussianSumFilter/BremFind.h"
-#include "QoverPBremFit.h"
-
-#include <math.h>
-#include "TMath.h"
-
-#include "TrkGaussianSumFilter/IMultiComponentStateCombiner.h"
-
-#include "TrkMultiComponentStateOnSurface/MultiComponentStateOnSurface.h"
-#include "TrkParameters/TrackParameters.h"
-
-#include "TrkTrack/Track.h"
-#include "TrkMaterialOnTrack/EstimatedBremOnTrack.h"
-
-#include "TrkGeometry/Layer.h"
-#include "TrkGeometry/TrackingVolume.h"
-#include "TrkGeometry/TrackingGeometry.h"
-#include "TrkGeometry/MagneticFieldProperties.h"
-
-#include "TrkVolumes/AbstractVolume.h"
-#include "TrkSurfaces/Surface.h"
-#include "TrkSurfaces/CylinderSurface.h"
-
-#include "GaudiKernel/ITHistSvc.h"
-
-#include "TTree.h"
-
-
-
-Trk::BremFind::BremFind(const std::string& type, const std::string& name, const IInterface* parent):
-  AthAlgTool(type, name, parent),
-  m_stateCombiner("Trk::MultiComponentStateCombiner"),
-  m_propagator("Trk::IntersectorWrapper/IntersectorWrapper"),
-  //m_fieldProperties
-  m_trackingGeometrySvc("TrackingGeometrySvc","AtlasTrackingGeometrySvc"),
-  m_trackingGeometryName("AtlasTrackingGeometry"),
-  m_trackingGeometry(nullptr),
-  //m_validationMode
-  m_validationTreeName("BremInfo"),
-  m_validationTreeName2("BremInfoZ"),
-  m_validationTreeDescription("Brem Information"),
-  m_validationTreeFolder("/valGSF2/BremInfo"),
-  m_validationTreeFolder2("/valGSF2/BremInfoZ"),
-  m_validationTree(nullptr),
-  m_validationTree2(nullptr),
-  //m_useCalibration{},
-  //m_usePropagate{},
-  m_forwardparameters{},
-  m_smoothedparameters{},
-  m_combinedparameters{},
-  m_perigee_1overP{},
-  m_perigee_Phi{},
-  m_perigee_Theta{},
-  m_perigee_d0{},
-  m_perigee_z0{},
-  m_brem_value{},
-  m_brem_phi{},
-  m_brem_theta{},
-  m_brem_energy{},
-  m_brem_UpperBound{},
-  m_brem_LowerBound{},
-  m_forward_kink{},
-  m_smoothed_kink{},
-  m_brem_significance{},
-  m_brem_valueCalibrated{},
-  m_surfaceX{},
-  m_surfaceY{},
-  m_surfaceZ{},
-  m_nBrems{},
-  m_Z_mode{},
-  //vectors could be initialised here
-  m_event_ID{},
-  m_forwardparameter_constant{},
-  m_forwardparameter_coefficient{},
-  m_forwardparameter_value{},
-  m_forwardparameter_width{},
-  m_smoothparameter_constant{},
-  m_smoothparameter_coefficient{},
-  m_smoothparameter_value{},
-  m_smoothparameter_width{},
-  m_forward_1overP{},
-  m_forward_1overPerr{},
-  m_forward_value{},
-  m_smooth_1overP{},
-  m_smooth_1overPerr{},
-  m_smooth_value{},
-  m_KinkSeparationScores{},
-  m_KinkSeparationScoresErr{},
-  m_forwardBremFit{},
-  m_smoothedBremFit{}
-{
-  declareInterface<IBremsstrahlungFinder>(this);
-  //jobOptions Variables
-  declareProperty("StateCombiner",   m_stateCombiner );
-  declareProperty("TrackingGeometrySvc",  m_trackingGeometrySvc);
-  declareProperty("Propagator", m_propagator);
-  declareProperty("UseCalibration", m_useCalibration=true);
-  declareProperty("ValidationMode", m_validationMode=false);
-  declareProperty("UseSurfacePropagation", m_usePropagate=false);
-  declareProperty("TreeFolderName", m_validationTreeFolder);
-  declareProperty("TreeFolderName2", m_validationTreeFolder2);
-  declareProperty("EventInfoKey", m_readKey = "EventInfo");
-}
-
-
-StatusCode Trk::BremFind::initialize()
-{
-   // The TrackingGeometrySvc ------------------------------------------------------
-  ATH_CHECK (m_trackingGeometrySvc.retrieve());
-  
-  msg(MSG::DEBUG) << "Retrieved service " << m_trackingGeometrySvc << endmsg;
-  m_trackingGeometryName = m_trackingGeometrySvc->trackingGeometryName();
-  
-
-  // Request the state combiner
-  ATH_CHECK ( m_stateCombiner.retrieve() );
- 
-  //Retrieve the propagator
-  ATH_CHECK (m_propagator.retrieve());
-  
-  m_fieldProperties= Trk::MagneticFieldProperties(Trk::FullField);
-
-
-
-  //The Validation step ----------------------------------------------------------
-  
-  if (m_validationMode) {
-    
-    if (not m_validationTree) {
-      //Crate a new tree if there doesn't exist one already
-      m_validationTree = new TTree( m_validationTreeName.c_str(), m_validationTreeDescription.c_str() );
-    
-      
-      m_validationTree->Branch("nBrems" , &m_nBrems, "nBrems/I");
-      m_validationTree->Branch("Brem_Radii", &m_brem_value);
-      m_validationTree->Branch("Brem_Phi", &m_brem_phi);
-      m_validationTree->Branch("Brem_Theta", &m_brem_theta);
-      m_validationTree->Branch("Brem_Energy", &m_brem_energy);
-      m_validationTree->Branch("Brem_UpperBound", &m_brem_UpperBound);
-      m_validationTree->Branch("Brem_LowerBound", &m_brem_LowerBound);
-      m_validationTree->Branch("Forward_Kink", &m_forward_kink);
-      m_validationTree->Branch("Backward_Kink", &m_smoothed_kink);
-      m_validationTree->Branch("Brem_Significance", &m_brem_significance);
-      m_validationTree->Branch("Brem_RadiiCalibrated", &m_brem_valueCalibrated);
-      m_validationTree->Branch("SurfaceX", &m_surfaceX);
-      m_validationTree->Branch("SurfaceY", &m_surfaceY);
-      m_validationTree->Branch("SurfaceZ", &m_surfaceZ);
-      m_validationTree->Branch("EventID" , &m_event_ID, "EventID/I");
-      m_validationTree->Branch("ForwardParameterConstant", &m_forwardparameter_constant,"ForwardParameterConstant/D");
-      m_validationTree->Branch("SmoothParameterConstant", &m_smoothparameter_constant,"SmoothParameterConstant/D");
-      m_validationTree->Branch("ForwardParameterCoefficient", &m_forwardparameter_coefficient);
-      m_validationTree->Branch("ForwardParameterRadii", &m_forwardparameter_value);
-      m_validationTree->Branch("ForwardParameterWidth", &m_forwardparameter_width);
-      m_validationTree->Branch("SmoothParameterCoefficient", &m_smoothparameter_coefficient);
-      m_validationTree->Branch("SmoothParameterRadii", &m_smoothparameter_value);
-      m_validationTree->Branch("SmoothParameterWidth", &m_smoothparameter_width);
-      m_validationTree->Branch("Forward1overP", &m_forward_1overP);
-      m_validationTree->Branch("Forward1overPerr", &m_forward_1overPerr);
-      m_validationTree->Branch("ForwardRadii", &m_forward_value);
-      m_validationTree->Branch("Smooth1overP", &m_smooth_1overP);
-      m_validationTree->Branch("Smooth1overPerr", &m_smooth_1overPerr);
-      m_validationTree->Branch("SmoothRadii", &m_smooth_value);
-      m_validationTree->Branch("SeparationQuality", &m_KinkSeparationScores);
-      m_validationTree->Branch("SeparationQualityErr", &m_KinkSeparationScoresErr);
-           
-    }
-
-    
-
-
-    if (not m_validationTree2) {
-      //Crate a new tree if there doesn't exist one already
-      m_validationTree2 = new TTree( m_validationTreeName2.c_str(), m_validationTreeDescription.c_str() );
-    
-      
-      m_validationTree2->Branch("nBrems" , &m_nBrems, "nBrems/I");
-      m_validationTree2->Branch("Brem_Z", &m_brem_value);
-      m_validationTree2->Branch("Brem_Phi", &m_brem_phi);
-      m_validationTree2->Branch("Brem_Theta", &m_brem_theta);
-      m_validationTree2->Branch("Brem_Energy", &m_brem_energy);
-      m_validationTree2->Branch("Brem_UpperBound", &m_brem_UpperBound);
-      m_validationTree2->Branch("Brem_LowerBound", &m_brem_LowerBound);
-      m_validationTree2->Branch("Forward_Kink", &m_forward_kink);
-      m_validationTree2->Branch("Backward_Kink", &m_smoothed_kink);
-      m_validationTree2->Branch("Brem_Significance", &m_brem_significance);
-      m_validationTree2->Branch("Brem_ZCalibrated", &m_brem_valueCalibrated);
-      m_validationTree2->Branch("SurfaceX", &m_surfaceX);
-      m_validationTree2->Branch("SurfaceY", &m_surfaceY);
-      m_validationTree2->Branch("SurfaceZ", &m_surfaceZ);
-      m_validationTree2->Branch("EventID" , &m_event_ID, "EventID/I");
-      m_validationTree2->Branch("ForwardParameterConstant", &m_forwardparameter_constant,"ForwardParameterConstant/D");
-      m_validationTree2->Branch("SmoothParameterConstant", &m_smoothparameter_constant,"SmoothParameterConstant/D");
-      m_validationTree2->Branch("ForwardParameterCoefficient", &m_forwardparameter_coefficient);
-      m_validationTree2->Branch("ForwardParameterZ", &m_forwardparameter_value);
-      m_validationTree2->Branch("ForwardParameterWidth", &m_forwardparameter_width);
-      m_validationTree2->Branch("SmoothParameterCoefficient", &m_smoothparameter_coefficient);
-      m_validationTree2->Branch("SmoothParameterZ", &m_smoothparameter_value);
-      m_validationTree2->Branch("SmoothParameterWidth", &m_smoothparameter_width);
-      m_validationTree2->Branch("Forward1overP", &m_forward_1overP);
-      m_validationTree2->Branch("Forward1overPerr", &m_forward_1overPerr);
-      m_validationTree2->Branch("ForwardZ", &m_forward_value);
-      m_validationTree2->Branch("Smooth1overP", &m_smooth_1overP);
-      m_validationTree2->Branch("Smooth1overPerr", &m_smooth_1overPerr);
-      m_validationTree2->Branch("SmoothZ", &m_smooth_value);
-      m_validationTree2->Branch("SeparationQuality", &m_KinkSeparationScores);
-      m_validationTree2->Branch("SeparationQualityErr", &m_KinkSeparationScoresErr);
-           
-    }
- 
-
-    //register the Tree
-    ITHistSvc* tHistSvc = 0;
-    if (service("THistSvc",tHistSvc).isFailure()) {
-      msg(MSG::ERROR) << "initialize() Could not find Hist Service -> Switching ValidationMode Off !" << endmsg;
-      delete m_validationTree; 
-      delete m_validationTree2;
-      m_validationTree=0;
-      m_validationTree2=0;
-    }
-    if ((tHistSvc->regTree(m_validationTreeFolder, m_validationTree)).isFailure()) {
-      msg(MSG::ERROR)<<"initialize() Could not register the validation Tree -> Switching ValidationMode off !" << endmsg;
-      delete m_validationTree;
-      m_validationTree = 0;
-    }
-    if ((tHistSvc->regTree(m_validationTreeFolder2, m_validationTree2)).isFailure()) {
-      msg(MSG::ERROR)<<"initialize() Could not register the validation Tree 2 -> Switching ValidationMode off !" << endmsg;
-      delete m_validationTree2;
-      m_validationTree2 = 0;
-    }
-    
-  }
-
-  //---------------------------- end of validation mode ------------------------------------
-
- 
-  ATH_CHECK( m_readKey.initialize() );
-
-  ATH_MSG_DEBUG( "Initialisation of " << name() << " was successful" );
-  
-  return StatusCode::SUCCESS;
-
-}
-
-
-StatusCode Trk::BremFind::finalize(){
- 
- ATH_MSG_DEBUG( "Finalisation of " << name() << " was successful" );
-
- return StatusCode::SUCCESS;
-
-}
-
-void Trk::BremFind::BremFinder(const Trk::ForwardTrajectory& forwardTrajectory, const Trk::SmoothedTrajectory& smoothedTrajectory) {
-  BremFinder(forwardTrajectory, smoothedTrajectory, false);
-}
-
-void Trk::BremFind::BremFinder(const Trk::ForwardTrajectory& forwardTrajectory, const Trk::SmoothedTrajectory& smoothedTrajectory, bool Z_mode)
-{
-  m_Z_mode = Z_mode;
-  
-  if (!m_trackingGeometry)
-    retrieveTrackingGeometry();
-
-  
-  msg(MSG::DEBUG) << "Entering BremFinder Function " << endmsg;
-
-  m_brem_value = new std::vector<double>;
-  m_brem_phi = new std::vector<double>;
-  m_brem_theta = new std::vector<double>;
-  m_brem_energy = new std::vector<double>;
-  m_brem_UpperBound = new std::vector<double>;
-  m_brem_LowerBound = new std::vector<double>;
-  m_forward_kink = new std::vector<double>;
-  m_smoothed_kink = new std::vector<double>;
-  m_brem_significance = new std::vector<double>;
-  m_brem_valueCalibrated = new std::vector<double>;
-  m_surfaceX = new std::vector<double>;
-  m_surfaceY = new std::vector<double>;
-  m_surfaceZ = new std::vector<double>;
-  m_brem_trackStateOnSurface.clear();
-  m_EstimatedBremOnTrack.clear();
-  m_brem_TrackParameters.clear();
-  m_brem_surfaces.clear();
-  m_brem_layers.clear();
-  m_surface_positions.clear();
-
-  m_forwardparameter_coefficient = new std::vector<double>;
-  m_forwardparameter_value = new std::vector<double>;
-  m_forwardparameter_width = new std::vector<double>;
-  m_smoothparameter_coefficient = new std::vector<double>;
-  m_smoothparameter_value = new std::vector<double>;
-  m_smoothparameter_width = new std::vector<double>;
-  m_forward_1overP = new std::vector<double>;
-  m_forward_1overPerr = new std::vector<double>;
-  m_forward_value = new std::vector<double>;
-  m_smooth_1overP = new std::vector<double>;
-  m_smooth_1overPerr = new std::vector<double>;
-  m_smooth_value = new std::vector<double>;
-  m_KinkSeparationScores = new std::vector<double>;
-  m_KinkSeparationScoresErr = new std::vector<double>;
-
-
-  //Obtain the parameters of the Tanh fit for both forward and smooth trajectories
-  m_forwardBremFit = new QoverPBremFit(1,m_Z_mode);
-  m_forwardparameters = m_forwardBremFit->GetParameters(forwardTrajectory);
-  m_smoothedBremFit = new QoverPBremFit(-1,m_Z_mode);
-  m_smoothedparameters = m_smoothedBremFit->GetParameters(smoothedTrajectory);
-  //GetPerigee functions will only make sense when using the smoothed trajectory
-  m_perigee_1overP = m_smoothedBremFit->GetPerigee_1overP();
-  m_perigee_Phi = m_smoothedBremFit->GetPerigee_Phi();
-  m_perigee_Theta = m_smoothedBremFit->GetPerigee_Theta();
-  m_perigee_d0 = m_smoothedBremFit->GetPerigee_d0();
-  m_perigee_z0 = m_smoothedBremFit->GetPerigee_z0();
-  
-  
-  CombineParameters();
-  
-  GetBremLocations();
-  
-  m_nBrems = m_brem_value->size();
-  
-  for (int bound_counter(0); bound_counter < (int) m_brem_value->size(); bound_counter++) {
-    m_brem_UpperBound->push_back(GetBound((*m_brem_value)[bound_counter],1));
-    m_brem_LowerBound->push_back(GetBound((*m_brem_value)[bound_counter],-1));
-    m_brem_significance->push_back(BremSignificance((*m_brem_value)[bound_counter],m_forwardBremFit,m_smoothedBremFit));
-  }
-  
-  //Calibration of the brem value
-  if (m_useCalibration) {
-    CalibrateValue();
-  }
-  else {
-    for (int copy_counter(0); copy_counter < (int) m_brem_value->size(); copy_counter++) {
-      m_brem_valueCalibrated->push_back((*m_brem_value)[copy_counter]);
-    }
-  }
-  
-  for (int fill_counter(0); fill_counter < (int) m_brem_value->size(); fill_counter++) {
-    m_brem_theta->push_back(m_perigee_Theta);
-    m_brem_phi->push_back(GetPhiFromValue((*m_brem_valueCalibrated)[fill_counter],m_smoothedBremFit));
-  }
-
-  //double closest_floorF,closest_floorS;
-  //int closestSurfaceNoF(0);
-  int closestSurfaceNoS(0);
-
-  for (int brem_counter2(0); brem_counter2 < (int) m_brem_value->size(); brem_counter2++) {
-
-    //The closest measurement numbers to the brem location
-    //closestSurfaceNoF=ClosestMeasurement((*m_brem_valueCalibrated)[brem_counter2],m_forwardBremFit);
-    closestSurfaceNoS=ClosestMeasurement((*m_brem_valueCalibrated)[brem_counter2],m_smoothedBremFit);
-
-    //closest_floorF = m_forwardBremFit->GetValue(closestSurfaceNoF);
-    //closest_floorS = m_smoothedBremFit->GetValue(closestSurfaceNoS);
-    
-    //Filling the associated surfaces for each brem
-    const Trk::TrackParameters* closestTrackParameters = m_smoothedBremFit->GetTrackParameters(closestSurfaceNoS);
-    m_brem_surfaces.push_back(ClosestSurface((*m_brem_value)[brem_counter2],(*m_brem_phi)[brem_counter2],(*m_brem_theta)[brem_counter2],*closestTrackParameters));
-    
-    m_surface_positions.push_back(SurfacePosition(*closestTrackParameters,*m_brem_surfaces[brem_counter2],(*m_brem_value)[brem_counter2],(*m_brem_phi)[brem_counter2],(*m_brem_theta)[brem_counter2]));
-
-
-    m_surfaceX->push_back(m_surface_positions[brem_counter2].x());
-    m_surfaceY->push_back(m_surface_positions[brem_counter2].y());
-    m_surfaceZ->push_back(m_surface_positions[brem_counter2].z());
-    
-       
-  }
-  
-  double remaining_energy(1/m_perigee_1overP);
-  
-
-  //This loop fills the EstimatedBremOnTrack vector
-  
-  for (int brem_counter(0); brem_counter < (int) m_brem_value->size(); brem_counter++) {
-
-    
-    Trk::EstimatedBremOnTrack *estimatedBremOnTrack(0);
-    remaining_energy -= (*m_brem_energy)[brem_counter];
-    double retainedEnFraction(remaining_energy*m_perigee_1overP);
-    
-    double sigma1overPsquared(m_smoothedBremFit->Get1overPerror(0));
-    
-    
-    if (m_brem_layers[brem_counter] && m_brem_surfaces[brem_counter] && m_brem_TrackParameters[brem_counter]) {
-      estimatedBremOnTrack = new EstimatedBremOnTrack(m_brem_layers[brem_counter]->thickness(),
-						      retainedEnFraction,0.0,
-						      sigma1overPsquared,
-						      //*m_brem_surfaces[brem_counter], 
-						      *m_brem_TrackParameters[brem_counter]->associatedSurface().clone(),
-						      bothway);
-      
-    }
-
-    m_EstimatedBremOnTrack.push_back(estimatedBremOnTrack);
-    
-  }
-  
-  //Creates a vector of TrackStateOnSurface
-  MakeTrackStateOnSurfaces();
-    
-  
-  //* Retrieve the event info for later syncrinization
-  SG::ReadHandle< xAOD::EventInfo>  eventInfo (m_readKey);
-  if (!eventInfo.isValid()) {
-    msg(MSG::ERROR) << "Could not retrieve event info" << endmsg;
-  }
-  
-  m_event_ID            =  eventInfo->eventNumber();
-
-  //Fill the TanH coefficients and graph values
-  for (int forward_fill(0); forward_fill < (int) m_forwardparameters.coefficient.size(); forward_fill++) {
-    m_forwardparameter_coefficient->push_back(m_forwardparameters.coefficient[forward_fill]);
-    m_forwardparameter_value->push_back(m_forwardparameters.value[forward_fill]);
-    m_forwardparameter_width->push_back(m_forwardparameters.width[forward_fill]);
-  }
-
-  for (int smooth_fill(0); smooth_fill < (int) m_smoothedparameters.coefficient.size(); smooth_fill++) {
-    m_smoothparameter_coefficient->push_back(m_smoothedparameters.coefficient[smooth_fill]);
-    m_smoothparameter_value->push_back(m_smoothedparameters.value[smooth_fill]);
-    m_smoothparameter_width->push_back(m_smoothedparameters.width[smooth_fill]);
-  }
-
-  for (int forwardgraph_fill(0); forwardgraph_fill < m_forwardBremFit->GetnSurfaces(); forwardgraph_fill++) {
-    m_forward_1overP->push_back(m_forwardBremFit->Get1overP(forwardgraph_fill));
-    m_forward_1overPerr->push_back(m_forwardBremFit->Get1overPerror(forwardgraph_fill));
-    m_forward_value->push_back(m_forwardBremFit->GetValue(forwardgraph_fill));
-  } 
-
-  for (int smoothgraph_fill(0); smoothgraph_fill < m_smoothedBremFit->GetnSurfaces(); smoothgraph_fill++) {
-    m_smooth_1overP->push_back(m_smoothedBremFit->Get1overP(smoothgraph_fill));
-    m_smooth_1overPerr->push_back(m_smoothedBremFit->Get1overPerror(smoothgraph_fill));
-    m_smooth_value->push_back(m_smoothedBremFit->GetValue(smoothgraph_fill));
-  } 
-
-  m_forwardparameter_constant = m_forwardparameters.constant;
-  m_smoothparameter_constant = m_smoothedparameters.constant;
-  
-  //Calculate the SeparationQuality
-
-  SeparationQuality(m_smoothed_kink,m_forward_kink);
-
-  if (m_validationTree && !m_Z_mode)
-    m_validationTree->Fill();
-  else if (m_validationTree2 && m_Z_mode)
-    m_validationTree2->Fill();
-  
-  delete m_brem_value;
-  delete m_brem_phi;
-  delete m_brem_theta;
-  delete m_brem_energy;
-  delete m_brem_UpperBound;
-  delete m_brem_LowerBound;
-  delete m_forward_kink;
-  delete m_smoothed_kink;
-  delete m_brem_significance;
-  delete m_brem_valueCalibrated;
-  delete m_surfaceX;
-  delete m_surfaceY;
-  delete m_surfaceZ;
-  
-  delete m_forwardBremFit;
-  delete m_smoothedBremFit;
-
-
-  delete m_forwardparameter_coefficient;
-  delete m_forwardparameter_value;
-  delete m_forwardparameter_width;
-  delete m_smoothparameter_coefficient;
-  delete m_smoothparameter_value;
-  delete m_smoothparameter_width;
-  delete m_forward_1overP;
-  delete m_forward_1overPerr;
-  delete m_forward_value;
-  delete m_smooth_1overP;
-  delete m_smooth_1overPerr;
-  delete m_smooth_value;
-  delete m_KinkSeparationScores;
-  delete m_KinkSeparationScoresErr;
-
-  
-}
-
-void Trk::BremFind::CombineParameters()
-{
-  //Firstly clear all previous entries
-  m_combinedparameters.coefficient.clear();
-  m_combinedparameters.width.clear();
-  m_combinedparameters.value.clear();
-
-  //The combined graph is the backward fit - forward fit
-  m_combinedparameters.constant = m_smoothedparameters.constant - m_forwardparameters.constant;
-  
-  for (int forward_counter(0); forward_counter < (int) m_forwardparameters.value.size(); forward_counter++) {
-    m_combinedparameters.coefficient.push_back(-m_forwardparameters.coefficient[forward_counter]);
-    m_combinedparameters.value.push_back(m_forwardparameters.value[forward_counter]);
-    m_combinedparameters.width.push_back(m_forwardparameters.width[forward_counter]);
-  }
-
-  for (int smooth_counter(0); smooth_counter < (int) m_smoothedparameters.value.size(); smooth_counter++) {
-    m_combinedparameters.coefficient.push_back(m_smoothedparameters.coefficient[smooth_counter]);
-    m_combinedparameters.value.push_back(m_smoothedparameters.value[smooth_counter]);
-    m_combinedparameters.width.push_back(m_smoothedparameters.width[smooth_counter]);
-  }
-
-}
-
-
-//This function returns the value of the tanh series at position x
-double Trk::BremFind::Graph_value(GraphParameter graphparameter, double x)
-{
-  double arg = graphparameter.constant;
-
-  for (int arg_counter(0); arg_counter < (int) graphparameter.value.size(); arg_counter++) {
-    arg+=graphparameter.coefficient[arg_counter]*TMath::TanH(x/graphparameter.width[arg_counter] - graphparameter.value[arg_counter]/graphparameter.width[arg_counter]);
-  }
-  return arg;
-
-}
-
-//Returns the x value of the local maximum between the min and max terms
-double Trk::BremFind::GetMaximumX(GraphParameter graphparameter, double min, double max)
-{
-  double value(0);
-  double maximum(0);
-  double eval(0);
-  for (double value_counter(min); value_counter < max; value_counter++) {
-    eval=Graph_value(graphparameter, value_counter);
-   
-    if (eval > maximum) {
-      maximum=eval;
-      value=value_counter;
-    }
-      
-  }
-  return value;
-}
-
-//Returns the y value of the local maximum between the min and max terms
-double Trk::BremFind::GetMaximumY(GraphParameter graphparameter, double min, double max)
-{
-  double maximum(0);
-  double eval(0);
-  for (double value_counter(min); value_counter < max; value_counter++) {
-    eval=Graph_value(graphparameter, value_counter);
-    if (eval > maximum) {
-      maximum = eval;
-    }
-  }
-  return maximum;
-}
-
-
-void Trk::BremFind::GetBremLocations()
-{
-  bool double_back_boolean=false;
-  //Normalisation factor introduced because initial parameters were chosen and optimised
-  //for 10GeV Pt electrons. So the normalization factor for 10GeV events will be 1.0
-  
-  double P_T(sin(m_perigee_Theta)*(1/(m_perigee_1overP)));
-
-  double normalisation(P_T/10.0);
-
-  for (int smooth_counter(0); smooth_counter < (int) m_smoothedparameters.value.size(); smooth_counter++) {
-    double_back_boolean=false;
-
-    for (int forward_counter(0); forward_counter < (int) m_forwardparameters.value.size(); forward_counter++) {
-      
-      //backward kink must have a value lower than the forward kink
-      if (m_forwardparameters.value[forward_counter] < m_smoothedparameters.value[smooth_counter]) {
-	continue;
-      }
-      
-      //If there are multiple back kinks before the forward kink, then the back kinks must
-      //iterate forward until it's just before the forward kink
-      //Therefore the forward loop is broken to iterate the smooth_counter
-      if ((smooth_counter+1 < (int) m_smoothedparameters.value.size()) ) {
-	if (m_forwardparameters.value[forward_counter] > m_smoothedparameters.value[smooth_counter+1] && m_smoothedparameters.coefficient[smooth_counter+1]/sin(m_perigee_Theta) > (MIN_KINK_THRESHOLD/normalisation)) {
-	  double_back_boolean=true;
-	}
-      }
-      
-      if (double_back_boolean) {
-	break;
-      }
-    
-      //If forward kink is just in front of the backward kink then proceed to find the brem value
-      else if (m_forwardparameters.value[forward_counter] > m_smoothedparameters.value[smooth_counter]) {
-	
-	double brem_separation( GetMaximumY(m_combinedparameters, m_smoothedparameters.value[smooth_counter], m_forwardparameters.value[forward_counter])/sin(m_perigee_Theta) );
-	
-
-	//Calculates the energy of the brem based on the change in momentum in the 
-	//1overP parameter
-	double coefficient_average( (m_forwardparameters.coefficient[forward_counter]+m_smoothedparameters.coefficient[smooth_counter])/(2*m_perigee_Theta) );
-	double p_before_bremF( Graph_value(m_forwardparameters, m_forwardparameters.value[forward_counter] - 2*m_forwardparameters.width[forward_counter])/m_perigee_Theta );
-	double p_before_bremS( Graph_value(m_smoothedparameters, m_smoothedparameters.value[smooth_counter] - 2*m_smoothedparameters.width[smooth_counter])/m_perigee_Theta );
-	double p_before_bremAverage( (p_before_bremF + p_before_bremS)/2 );
-	double p_after_brem( p_before_bremAverage + 2*coefficient_average );
-	double brem_amplitude( 1/p_before_bremAverage - 1/p_after_brem );
-	
-	
-	//Check the strength of the brem and its coefficients
-	if (brem_amplitude > (BREM_AMPLITUDE*normalisation) && brem_separation > (BREM_SEPARATION/normalisation) && m_forwardparameters.coefficient[forward_counter]/sin(m_perigee_Theta) > (COEFFICIENT_THRESHOLD/normalisation) && m_smoothedparameters.coefficient[smooth_counter]/sin(m_perigee_Theta) > (COEFFICIENT_THRESHOLD/normalisation)) {
-	  
-	  m_brem_energy->push_back(brem_amplitude);
-	  m_brem_value->push_back( GetMaximumX(m_combinedparameters,m_smoothedparameters.value[smooth_counter],m_forwardparameters.value[forward_counter]) );
-	  m_forward_kink->push_back(m_forwardparameters.value[forward_counter]);
-	  m_smoothed_kink->push_back(m_smoothedparameters.value[smooth_counter]);
-	  
-	  break;
-	}	
-	
-      }
-	
-    }
-
-  }
-
-}
-
-//This function obtains the upper and lower bounds of the brem value by scanning the peak
-//till there's a drop in magnitude equal to the desired threshold. If type=1 then, this
-//function will return an upperbound. If type=-1, then this function will return the lower
-//bound. Threshold must be used as a percentage in drop from the maximum Y value.
-double Trk::BremFind::GetBound(double start, int type)
-{
-  double maximum(Graph_value(m_combinedparameters,start));
-  double eval(maximum);
-  double value(start);
-  
-  while (eval > ((100.0-BOUND_THRESHOLD)/100.0)*maximum) {
-    eval = Graph_value(m_combinedparameters,value);
-    value+=type;
-
-    //if the value is above the end of the inner detector
-    if (value > m_smoothedBremFit->LastFitMeasurement()) {
-      return m_smoothedBremFit->LastFitMeasurement();
-    }
-    //if the value is below zero, then return 0 as the lower bound
-    if (value < 0.0) {
-      return 0.0;
-    }
-  }
-  
-  return value;
-}
-
-int Trk::BremFind::ClosestMeasurement(double x, QoverPBremFit *BremFit)
-{
-  double min_distance(1000);
-  double distance(1000);
-  //double value(x);
-  int measurement_no(0);
-
-  for (int counter(0); counter < BremFit->GetNMeasurements(); counter++) {
-    distance = fabs(x - BremFit->GetValue(counter));
-    if (distance < min_distance) {
-      min_distance = distance;
-      //value = BremFit->GetValue(counter);
-      measurement_no = counter;
-    } 
-  }
-  return measurement_no;
-}
-
-double Trk::BremFind::BremSignificance(double x,QoverPBremFit *forwardBremFit, QoverPBremFit *smoothedBremFit)
-{
-  int measurement_noF( ClosestMeasurement(x, forwardBremFit) );
-  double PiF( 1/forwardBremFit->Get1overP(measurement_noF) );
-
-  //Making sure the next measurement is not on the same surface
-  int additional_forward(1);
-  double value1F( forwardBremFit->GetValue(measurement_noF+1) );
-  while (fabs(x-value1F) < 20.0) {
-    additional_forward++;
-    value1F = forwardBremFit->GetValue(measurement_noF + additional_forward);
-  }
-    double Pi1F( 1/forwardBremFit->Get1overP(measurement_noF+1) );
-
-
-  int measurement_noS( ClosestMeasurement(x, smoothedBremFit) );
-  double PiS( 1/smoothedBremFit->Get1overP(measurement_noS) );
-
-  int additional_smoothed(1);
-  double value1S( smoothedBremFit->GetValue(measurement_noS-1) );
-  while (fabs(x-value1S) < 20.0){
-    additional_smoothed++;
-    value1S = smoothedBremFit->GetValue(measurement_noS - additional_smoothed);
-  }
-  double Pi1S( 1/smoothedBremFit->Get1overP(measurement_noS-1) );
-
-  double sigf( (1-(Pi1F/PiF))/forwardBremFit->Get1overPerror(measurement_noF) );
-  double sigb( (1-(PiS/Pi1S))/smoothedBremFit->Get1overPerror(measurement_noS) );
-
-  double sigsum( sigf + sigb);
-
-  return std::max(sigsum, std::max(sigf,sigb));
-}
-
-//This function provides an estimate of the phi position using the value
-//The smoothed trajectory is used because it is more accurate in the pixels
-//where the majority of brems occur
-double Trk::BremFind::GetPhiFromValue(double value, QoverPBremFit* smoothedBremFit)
-{
-  int closest_measurement_no( ClosestMeasurement(value, smoothedBremFit) );
-  
-  double value_difference;
-  double phi_difference;
-  
-  if (closest_measurement_no == 0) {
-    value_difference = smoothedBremFit->GetValue(closest_measurement_no) - smoothedBremFit->GetValue(closest_measurement_no + 1);
-    phi_difference = smoothedBremFit->GetPhi(closest_measurement_no) - smoothedBremFit->GetPhi(closest_measurement_no + 1);
-  }
-
-  else {
-    value_difference = smoothedBremFit->GetValue(closest_measurement_no) - smoothedBremFit->GetValue(closest_measurement_no - 1);
-    phi_difference = smoothedBremFit->GetPhi(closest_measurement_no) - smoothedBremFit->GetPhi(closest_measurement_no - 1);
-  }
-
-  double gradient( phi_difference/value_difference );
-  double estimated_phi;
-  if (closest_measurement_no == 0) 
-    estimated_phi = smoothedBremFit->GetPhi(closest_measurement_no+1) + gradient*(value - smoothedBremFit->GetValue(closest_measurement_no + 1));
-  else
-    estimated_phi = smoothedBremFit->GetPhi(closest_measurement_no-1) + gradient*(value - smoothedBremFit->GetValue(closest_measurement_no - 1)); 
-			 
-  return estimated_phi;
-
-}
-
-void Trk::BremFind::CalibrateValue()
-{     
-  double new_value(0);
-  double max_value_measurement(m_smoothedBremFit->LastFitMeasurement());
-  double min_value_measurement(m_smoothedBremFit->FirstFitMeasurement());
- 
-        
-  for (int counter(0); counter < (int) m_brem_value->size(); counter++) {
-      
-    double smoothed_kink((*m_smoothed_kink)[counter]);
-    double forward_kink((*m_forward_kink)[counter]);
-    new_value = ((max_value_measurement - min_value_measurement)-((*m_brem_value)[counter]-min_value_measurement))*smoothed_kink/(max_value_measurement-min_value_measurement);
-    new_value += ((*m_brem_value)[counter]-min_value_measurement)*forward_kink/(max_value_measurement-min_value_measurement);
-    m_brem_valueCalibrated->push_back( new_value );
-  }
-}
-
-
-//This function uses the closest measurement trackparameter and propagates to the brem surface
-//and returns the global position at the intersection. It also fills a vector of trackparameters
-//at the brem surface.
-Amg::Vector3D Trk::BremFind::SurfacePosition(const Trk::TrackParameters& trackparameter, const Trk::Surface& surface, double bremvalue, double bremphi, double bremtheta)
-{
-  const Trk::TrackParameters* surfaceParameters1;
-  const Trk::TrackParameters* surfaceParameters2;
-
-  Amg::Vector3D Pos1 (0, 0, 0);
-  Amg::Vector3D Pos2 (0, 0, 0);
-  double phidifference1(0.), phidifference2(0.);
-
-  //Pushing back just the global position of the brem not the extrapolated
-  double x,y,z,r;
-  if (m_Z_mode) {
-    x = bremvalue * tan(bremtheta) * cos(bremphi);
-    y = bremvalue * tan(bremtheta) * sin(bremphi);
-    z = bremvalue;
-    r = sqrt(x*x+y*y);
-  }
-  else {
-    x = bremvalue * cos(bremphi);
-    y = bremvalue * sin(bremphi);
-    z = bremvalue * cos(bremtheta);
-    r = bremvalue;
-  }
-  
-  const Amg::Vector3D position(x,y,z);
-  const Amg::Vector3D momentum((&trackparameter)->momentum());
-
-  ATH_MSG_DEBUG("x,y,z,r = " << x << "," << y << "," << z << "," << r);
-  ATH_MSG_DEBUG("momentum = " << momentum.mag());
-  ATH_MSG_DEBUG("charge   = " << (&trackparameter)->charge());
-
-  if (!m_usePropagate && momentum.mag() > 0) {
-
-    Amg::Transform3D *trans = new Amg::Transform3D(trackparameter.associatedSurface().transform());
-    Trk::CylinderSurface cylinderSurface(trans, r, 5000.0);
-    const Trk::TrackParameters *bremParameters = new AtaCylinder(position, momentum, (&trackparameter)->charge(), cylinderSurface);
-
-    //Broken code - causes FPEs.
-    //Trk::CylinderSurface cylinderSurface(new Amg::Transform3D, r, 5000.0);
-
-    m_brem_TrackParameters.push_back(bremParameters);
-    return position;
-  }
-
-  //function will propagate both ways and return the trackparameter that has the closest phi
-  //to the measured brem phi angle
-  surfaceParameters1 = m_propagator->propagate(trackparameter,surface,Trk::oppositeMomentum,true,m_fieldProperties,electron);
-  if (surfaceParameters1) {
-    Pos1 = surfaceParameters1->position();
-    double phi1(atan(Pos1.y()/Pos1.x()));
-    phidifference1 = UniqueAngle(phi1 - bremphi);
-  }
-  surfaceParameters2 = m_propagator->propagate(trackparameter,surface,Trk::alongMomentum,true,m_fieldProperties,electron);
-  if (surfaceParameters2) {
-    Pos2 = surfaceParameters2->position();
-    double phi2((Pos2.y()/Pos2.x()));
-    phidifference2 = UniqueAngle(phi2 - bremphi);
-  }
-  if (surfaceParameters1 && !surfaceParameters2) {
-    m_brem_TrackParameters.push_back(surfaceParameters1);
-    return Pos1;
-  }
-  else if (!surfaceParameters1 && surfaceParameters2) {
-    m_brem_TrackParameters.push_back(surfaceParameters2);
-    return Pos2;
-  }
-  else if (surfaceParameters1 && surfaceParameters2) {
-    if (phidifference1 > phidifference2) {
-      m_brem_TrackParameters.push_back(surfaceParameters2);
-      return Pos2;
-    }
-    else {
-      m_brem_TrackParameters.push_back(surfaceParameters1);
-    return Pos1;
-    }
-    
-  }
-  
-  //backup method. This really shouldn't be called
-  const Trk::TrackParameters* surfaceParameters3 = m_propagator->propagate(trackparameter,surface,Trk::anyDirection,true,m_fieldProperties,electron);
-  if (surfaceParameters3) {
-    m_brem_TrackParameters.push_back(surfaceParameters3);
-    return surfaceParameters3->position();
-  }
-  m_brem_TrackParameters.push_back(0);
-  Amg::Vector3D nullPos(0.0,0.0,0.0);
-  return nullPos;
-}
-
-const Trk::Surface* Trk::BremFind::ClosestSurface(double, double, double, const Trk::TrackParameters& trackparameter)
-{
-  const Trk::Layer* associatedLayer = m_trackingGeometry->closestMaterialLayer<const Trk::TrackParameters>(trackparameter).object;      
-  if (associatedLayer) {
-    m_brem_layers.push_back(associatedLayer);
-    const Trk::Surface* associatedSurface = &(associatedLayer->surfaceRepresentation());
-    return associatedSurface;
-  }
-  else {
-    m_brem_layers.push_back(0);
-  }
-  
-  return 0;
-}
-
-
-StatusCode Trk::BremFind::retrieveTrackingGeometry()
-{
-  // Retrieve the TrackingGeometry from the DetectorStore
-  StatusCode sc = detStore()->retrieve(m_trackingGeometry, m_trackingGeometryName);
-  if (sc.isFailure()){
-    msg(MSG::FATAL) << "Could not retrieve TrackingGeometry from DetectorStore!" << endmsg;
-  }
-  return sc;
-
-}
-
-double Trk::BremFind::UniqueAngle(double phi)
-{
-  if (phi > TMath::Pi()) {
-    return UniqueAngle(phi - TMath::Pi());
-  }
-  else if (phi < 0.0) {
-    return UniqueAngle(phi + TMath::Pi());
-  }
-  return phi;
-}
-
-int Trk::BremFind::GetNBrems()
-{
-  return m_nBrems;
-}
-
-void Trk::BremFind::MakeTrackStateOnSurfaces ()
-{
- 
-  for (int make_counter(0); make_counter < m_nBrems; make_counter++) {
-    
-		std::bitset<TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
-		typePattern.set(TrackStateOnSurface::BremPoint);
-		const Trk::TrackStateOnSurface* BremTrackStateOnSurface = new Trk::TrackStateOnSurface(0,m_brem_TrackParameters[make_counter],0,m_EstimatedBremOnTrack[make_counter],typePattern);
-
-    if (!m_Z_mode)
-      m_brem_trackStateOnSurface.push_back(BremTrackStateOnSurface);
-    else
-      delete BremTrackStateOnSurface;
-    
-  }
-
-}
-
-const Trk::TrackStateOnSurface* Trk::BremFind::GetEstimatedBremOnTrack(int n)
-{
-  return m_brem_trackStateOnSurface[n];
-}
-
-
-//A function that rates the quality of a bremsstrahlung signal based on the separation quality
-//of the forward and smoothed fit. A lower score indicates that the measurements are unlikely to
-//be the same value. Therefore a lower score means a better fit.
-
-void Trk::BremFind::SeparationQuality(std::vector<double> *backwardkink, std::vector<double> *forwardkink) 
-{
-  int ForwardHit_Counter(0);
-  int SmoothHit_Counter(1);
-  std::vector<double> OverlapScore(0);
-  std::vector<double> OverlapErr(0);
-  
-  
-  for (int kink_counter(0); kink_counter < (int) backwardkink->size(); kink_counter++) {
-    
-    OverlapScore.clear();
-    OverlapErr.clear();
-
-    ForwardHit_Counter = 0;
-    SmoothHit_Counter = 1;
-
-    for (; ForwardHit_Counter < (int) m_forward_1overP->size(); ForwardHit_Counter++,SmoothHit_Counter++) {
-      
-      
-      if ( (*m_forward_value)[ForwardHit_Counter] > (*backwardkink)[kink_counter] && (*m_forward_value)[ForwardHit_Counter] < (*forwardkink)[kink_counter] && (*m_smooth_value)[SmoothHit_Counter] > (*backwardkink)[kink_counter] && (*m_smooth_value)[SmoothHit_Counter] < (*forwardkink)[kink_counter]) {
-	
-	std::pair<double,double> probabilitypair(ProbabilityScore((*m_forward_1overP)[ForwardHit_Counter],3*(*m_forward_1overPerr)[ForwardHit_Counter],(*m_smooth_1overP)[SmoothHit_Counter],3*(*m_smooth_1overPerr)[SmoothHit_Counter]));
-	OverlapScore.push_back(probabilitypair.first);
-	OverlapErr.push_back(probabilitypair.second);
-	
-      }
-      
-    }
-
-    //Now combing the multiple measurements into one score
-    
-    double sum1(0);
-    double sum2(0);
-    double LowestScore(1.0);
-    double LowestScoreErr(0.0);
-
-    for(int score_counter(0); score_counter < (int) OverlapScore.size(); score_counter++) {
-      
-      sum1 += OverlapScore[score_counter]/(pow(OverlapErr[score_counter],2));
-      sum2 += 1/(pow(OverlapErr[score_counter],2));
-
-      if (OverlapScore[score_counter] < LowestScore || score_counter==0) {
-	LowestScore = OverlapScore[score_counter];
-	LowestScoreErr = OverlapErr[score_counter];
-      }
-    }
-
-    if (sum2==0) {
-      m_KinkSeparationScores->push_back(1.0);
-      m_KinkSeparationScoresErr->push_back(0.0);
-    }
-    else {
-      m_KinkSeparationScores->push_back(sum1/sum2);
-      m_KinkSeparationScoresErr->push_back(LowestScoreErr);
-      //m_KinkSeparationScoresErr->push_back(1/sqrt(sum2));
-    }
-  
-  }
-
-}
-
-
-std::pair<double,double> Trk::BremFind::ProbabilityScore(double Gauss1_mean, double Gauss1_var, double Gauss2_mean, double Gauss2_var) 
-{
-  double value(exp(-(Gauss1_mean - Gauss2_mean)*(Gauss1_mean - Gauss2_mean)/(2*(Gauss1_var*Gauss1_var + Gauss2_var*Gauss2_var)))*(1/Gauss1_var*Gauss2_var*2*sqrt(TMath::Pi()))*sqrt(2*Gauss1_var*Gauss1_var*Gauss2_var*Gauss2_var/(Gauss1_var*Gauss1_var + Gauss2_var*Gauss2_var)));
-  double error(value*(Gauss1_mean - Gauss2_mean)*(Gauss1_var + Gauss2_var)/(Gauss1_var*Gauss1_var + Gauss2_var*Gauss2_var));
-
-  std::pair<double,double> probabilityscore;
-  probabilityscore.first = value;
-  probabilityscore.second = fabs(error);
-
-  return probabilityscore;
-  
-}
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/CloseComponentsMultiStateMerger.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/CloseComponentsMultiStateMerger.cxx
index 8ba081b3e636310e18707a096448294a53f9a4d3..f008ec20a67b48c9073dd3976d85f2df096b404c 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/CloseComponentsMultiStateMerger.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/CloseComponentsMultiStateMerger.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -122,8 +122,10 @@ const Trk::MultiComponentState* Trk::CloseComponentsMultiStateMerger::merge(cons
 
   unsigned int numberOfComponents = unmergedState.size();
 
+  //Assembler Cache
+  IMultiComponentStateAssembler::Cache cache;
   // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning 0" << endmsg;
@@ -248,7 +250,7 @@ const Trk::MultiComponentState* Trk::CloseComponentsMultiStateMerger::merge(cons
   for ( ; mapComponent != unmergedComponentsMap.end(); ++mapComponent){
 
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(mapComponent->second);
+    bool componentAdded = m_stateAssembler->addComponent(cache,mapComponent->second);
 
     if ( !componentAdded )
       msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
@@ -263,7 +265,7 @@ const Trk::MultiComponentState* Trk::CloseComponentsMultiStateMerger::merge(cons
   for ( ; mapComponent != mergedComponentsMap.end(); ++mapComponent){
 
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(mapComponent->second);
+    bool componentAdded = m_stateAssembler->addComponent(cache,mapComponent->second);
 
     if ( !componentAdded )
       msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
@@ -273,7 +275,7 @@ const Trk::MultiComponentState* Trk::CloseComponentsMultiStateMerger::merge(cons
 
   }
 
-  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState(cache);
 
   if (msgLvl(MSG::VERBOSE)) msg() << "Number of components in merged state: " << mergedState->size() << endmsg;
 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx
index 2d93211ab46305c515d5f86f7f671ed6dd98a848..9dfaa23988fa809c8d57646378187a10f490c0bc 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx
@@ -17,7 +17,6 @@ decription           : Implementation code for Gaussian Sum Fitter class
 #include "TrkGaussianSumFilter/IMultiStateExtrapolator.h"
 #include "TrkGaussianSumFilter/IForwardGsfFitter.h"
 #include "TrkGaussianSumFilter/IGsfSmoother.h"
-#include "TrkGaussianSumFilter/IBremsstrahlungFinder.h"
 
 #include "TrkEventUtils/MeasurementBaseComparisonFunction.h"
 #include "TrkEventUtils/PrepRawDataComparisonFunction.h"
@@ -54,13 +53,10 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, const std::st
   m_reintegrateOutliers(false),
   m_makePerigee(true),
   m_directionToPerigee(Trk::oppositeMomentum),
-  m_runBremFinder(false),
   m_refitOnMeasurementBase(true),
   m_doHitSorting(true),
   m_trkParametersComparisonFunction(0),
   m_stateCombiner("Trk::MultiComponentStateCombiner"),
-  m_BremFind("Trk::BremFind"),
-  m_BremFind2("Trk::BremFind"),
   m_chronoSvc("ChronoStatSvc", name),
   m_inputPreparator(nullptr),
   m_FitPRD{0},
@@ -82,9 +78,6 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, const std::st
   declareProperty("DoHitSorting",             m_doHitSorting              );
   declareProperty("SortingReferencePoint",    m_sortingReferencePoint     );
   declareProperty("StateCombiner",            m_stateCombiner             );
-  declareProperty("BremFind",                 m_BremFind                  );
-  declareProperty("BremFind2",                m_BremFind2                 );
-  declareProperty("runBremFinder",            m_runBremFinder             );
   declareProperty("GsfSmoother",m_gsfSmoother);  
   declareProperty("ForwardGsfFitter",m_forwardGsfFitter);
 
@@ -119,17 +112,6 @@ StatusCode Trk::GaussianSumFitter::initialize()
  
   // Request the state combiner
   ATH_CHECK ( m_stateCombiner.retrieve() );
-   //Request the brem finder
-  if (m_runBremFinder){
-    if ( m_BremFind.retrieve().isFailure() || m_BremFind2.retrieve().isFailure() ) {
-      msg(MSG::WARNING) << "Request is to retrieve the bremsstrahlung finder failed... turning off brem finding!" << endmsg;
-      m_runBremFinder = false; 
-    }
-  }
-  else {
-    m_BremFind.disable();
-    m_BremFind2.disable();
-  }
   
   // Request the RIO_OnTrack creator
   // No need to return if RioOnTrack creator tool, only if PrepRawData is used in fit
@@ -466,16 +448,7 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::PrepRawDataSet&    prepRawD
     }
   }
  
-  //Find bremsstrahlung points and save them
-  if (m_runBremFinder) {
-    if (msgLvl(MSG::DEBUG)) msg() << "Entering the BremFind tool" << endmsg;
-    
-    //The z mode must be ahead of the r mode to make sure the right TSOS is being pushed into the smoothedTrajectory
-    m_BremFind2->BremFinder(*forwardTrajectory, *smoothedTrajectory,true);
-    m_BremFind->BremFinder(*forwardTrajectory, *smoothedTrajectory,false);
-    
-  }
-   
+  
   // Delete forward trajectory. New memory was assigned in ForwardGsfFitter.
   delete forwardTrajectory;
   
@@ -483,15 +456,7 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::PrepRawDataSet&    prepRawD
   //Reverse the order of the TSOS's to make be order flow from inside to out
   std::reverse(smoothedTrajectory->begin(), smoothedTrajectory->end());
  
-  //Add brem information to Track
-  if (m_runBremFinder) {
-    //Filling in the brem information in the smoothedTrajectory
-    for (int brem_counter(0); brem_counter < m_BremFind->GetNBrems(); brem_counter++) {
-      smoothedTrajectory->push_back(m_BremFind->GetEstimatedBremOnTrack(brem_counter));
-    } 
-  }
-
-  
+   
   // Create new track
   Trk::TrackInfo info(Trk::TrackInfo::GaussianSumFilter, particleHypothesis); 
   info.setTrackProperties(TrackInfo::BremFit); 
@@ -641,15 +606,6 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::MeasurementSet&    measurem
     }
   }
 
-  //Find bremsstrahlung points and save them
-  if (m_runBremFinder) {
-    if (msgLvl(MSG::DEBUG)) msg() << "Entering the BremFind tool" << endmsg;
-
-    //The z mode must be ahead of the r mode to make sure the right TSOS is being pushed into the smoothedTrajectory
-    m_BremFind2->BremFinder(*forwardTrajectory, *smoothedTrajectory,true);
-    m_BremFind->BremFinder(*forwardTrajectory, *smoothedTrajectory,false);   
-  }
-
   //Delete forward trajectory. New memory was assigned in ForwardGsfFitter.
   delete forwardTrajectory;
   
@@ -658,14 +614,7 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::MeasurementSet&    measurem
   //Reverse the order of the TSOS's to make be order flow from inside to out
   std::reverse(smoothedTrajectory->begin(), smoothedTrajectory->end());
 
-  //Add brem information to the track
-  if (m_runBremFinder) {
-    //Filling in the brem information in the smoothedTrajectory
-    for (int brem_counter(0); brem_counter < m_BremFind->GetNBrems(); brem_counter++) {
-      smoothedTrajectory->push_back(m_BremFind->GetEstimatedBremOnTrack(brem_counter));
-    }
-  }
-  
+ 
   // Create new track
   Trk::TrackInfo info(Trk::TrackInfo::GaussianSumFilter, particleHypothesis); 
   info.setTrackProperties(TrackInfo::BremFit); 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialEffectsUpdator.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialEffectsUpdator.cxx
index fad26c45ee0036814d53eb53ccd7362c81131ef3..220415cf2e3fd2229e1feb0b98f3b3243c505c7f 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialEffectsUpdator.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialEffectsUpdator.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /***********************************************************************************
@@ -55,12 +55,6 @@ StatusCode Trk::GsfMaterialEffectsUpdator::initialize ()
     return StatusCode::FAILURE;
   }
 
-  // Retrieve an instance of the multi-component state assembler service
-  if ( m_stateAssembler.retrieve().isFailure() ){
-    msg(MSG::FATAL) << "Could not retrieve multi-component state assembler tool... Exiting!" << endmsg;
-    return StatusCode::FAILURE;
-  }
-
   msg(MSG::INFO) << "Initialisation of " << name() << " was successful" << endmsg;
 
   return StatusCode::SUCCESS;
@@ -397,16 +391,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialEffectsUpdator::compute ( const
   // msg(MSG::VERBOSE) << "Computing updated parameters, covariances and weights" << endmsg;
 
   Trk::MultiComponentState* computedState = new Trk::MultiComponentState();
-
-  // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
-
-  if ( !isAssemblerReset ){
-    msg(MSG::ERROR) << "Could not reset the state assembler... returning 0" << endmsg;
-    return 0;
-  }
-
-   /* Get values for:
+    /* Get values for:
      - Change in momentum
      - Change in covariance of momentum
      - Weights of new states
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx
index fef1e8f891fc336ba54e09650500dd82e592af05..e2d80e1a540f6bf7e2aeca0c4bedc0c389350751 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx
@@ -97,9 +97,11 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::update( cons
   /* -------------------------------------
      Preliminary checks
      ------------------------------------- */
-  
+ 
+  //Assembler Cache
+  IMultiComponentStateAssembler::Cache cache; 
   // Reset the assembler and check 
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning clone of original state" << endmsg;
@@ -124,7 +126,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::update( cons
       continue;
     }
 
-    bool componentAdded = m_stateAssembler->addMultiState( *updatedState );
+    bool componentAdded = m_stateAssembler->addMultiState( cache,*updatedState );
     
     // New memory allocated in the combiner so it is ok to delete the original state
     delete updatedState;
@@ -134,7 +136,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::update( cons
     
   }
   
-  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(cache);
    
   if(!assembledState)
     return 0;
@@ -170,9 +172,10 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::preUpdate( c
   /* -------------------------------------
      Preliminary checks
      ------------------------------------- */
-
+  //Assembler Cache
+  IMultiComponentStateAssembler::Cache cache;
   // Reset the assembler and check 
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning clone of original state" << endmsg;
@@ -197,7 +200,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::preUpdate( c
       continue;
     }
 
-    bool componentAdded = m_stateAssembler->addMultiState( *updatedState );
+    bool componentAdded = m_stateAssembler->addMultiState( cache,*updatedState );
     
     // New memory allocated in the combiner so it is ok to delete the original state
     delete updatedState;
@@ -207,7 +210,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::preUpdate( c
     
   }
   
-  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(cache);
   
  if(!assembledState)
     return 0;
@@ -244,8 +247,10 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::postUpdate(
      Preliminary checks
      ------------------------------------- */
 
+  //Assembler Cache
+  IMultiComponentStateAssembler::Cache cache;
   // Reset the assembler and check 
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning clone of original state" << endmsg;
@@ -270,7 +275,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::postUpdate(
       continue;
     }
 
-    bool componentAdded = m_stateAssembler->addMultiState( *updatedState );
+    bool componentAdded = m_stateAssembler->addMultiState( cache,*updatedState );
     
     // New memory allocated in the combiner so it is ok to delete the original state
     delete updatedState;
@@ -280,7 +285,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::postUpdate(
     
   }
   
-  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(cache);
   
   if(!assembledState)
     return 0;
@@ -310,9 +315,10 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::simpliedMate
   /* -------------------------------------
      Preliminary checks
      ------------------------------------- */
-
+  //Assembler Cache
+  IMultiComponentStateAssembler::Cache cache;
   // Reset the assembler and check 
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning clone of original state" << endmsg;
@@ -377,7 +383,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::simpliedMate
     bool componentAdded = false;
     
     if ( updatedState )
-      componentAdded = m_stateAssembler->addMultiState( *updatedState );
+      componentAdded = m_stateAssembler->addMultiState( cache,*updatedState );
     
     if ( !componentAdded )
       msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
@@ -387,7 +393,7 @@ const Trk::MultiComponentState* Trk::GsfMaterialMixtureConvolution::simpliedMate
     
   } // end loop over components
   
-  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(cache);
   
   // Renormalise the state
   const Trk::MultiComponentState* renormalisedState = assembledState->clonedRenormalisedState();
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
index 7561b2106fbe2fdc1a1a0edcea03169d3601e6c9..005d4c24940efb98a312ff52cbfcf9a2ed05eed4 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -99,24 +99,17 @@ const Trk::MultiComponentState* Trk::GsfMeasurementUpdator::update (const Trk::M
     rebuildStateWithErrors = rebuildStateWithErrors || invalidComponent( component->first ) ;
   }
 
-  if ( rebuildStateWithErrors ){
-
+  if (rebuildStateWithErrors){
     ATH_MSG_VERBOSE( "Rebuilding state with errors");
-
     Trk::MultiComponentState* stateWithInsertedErrors = rebuildState( stateBeforeUpdate );
-
     // Perform the measurement update with the modified state
     updatedState = calculateFilterStep(*stateWithInsertedErrors, measurement, updator);
-    
     delete stateWithInsertedErrors;
-
     if ( !updatedState ) {
       ATH_MSG_DEBUG("Updated state could not be calculated... Returning 0" );
-      return 0;
+      return nullptr;
     }
-
     return updatedState;
-
   }
 
   // Perform the measurement update
@@ -124,7 +117,7 @@ const Trk::MultiComponentState* Trk::GsfMeasurementUpdator::update (const Trk::M
 
   if ( !updatedState ) {
     ATH_MSG_DEBUG("Updated state could not be calculated... Returning 0" );
-    return 0;
+    return nullptr;
   }
 
   return updatedState;
@@ -200,8 +193,10 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
   // Start the timer
   //Chrono chrono( &(*m_chronoSvc), "GsfMeasurementUpdate" );
 
+  //state Assembler cache
+  IMultiComponentStateAssembler::Cache cache;
   // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     ATH_MSG_DEBUG("Could not reset the state assembler... returning 0");
@@ -264,7 +259,7 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
     Trk::ComponentParameters updatedComponentParameters(updatedTrackParameters, component->second);
 
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(updatedComponentParameters);
+    bool componentAdded = m_stateAssembler->addComponent(cache,updatedComponentParameters);
 
     if ( !componentAdded )
       ATH_MSG_DEBUG( "Component could not be added to the state in the assembler");
@@ -275,24 +270,23 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
   
   delete stateWithNewWeights;
 
-  const Trk::MultiComponentState* assembledUpdatedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledUpdatedState = m_stateAssembler->assembledState(cache);
 
 
  
-  if(!assembledUpdatedState)
+  if(!assembledUpdatedState){
     return 0;
+  }
       
   // Renormalise state
   const Trk::MultiComponentState* renormalisedUpdatedState = assembledUpdatedState->clonedRenormalisedState();
   
   // Clean up memory
   delete assembledUpdatedState;
-
-  
+ 
   ATH_MSG_VERBOSE( "Successful calculation of filter step"); 
 
   return renormalisedUpdatedState;
-
 }
 
 
@@ -361,8 +355,10 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
   // Start the timer
   //Chrono chrono( &(*m_chronoSvc), "GsfMeasurementUpdate" );
 
+  //state Assembler cache
+  IMultiComponentStateAssembler::Cache cache;
   // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     ATH_MSG_ERROR("Could not reset the state assembler... returning 0");
@@ -455,7 +451,7 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
     Trk::ComponentParameters updatedComponentParameters(updatedTrackParameters, component->second);
 
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(updatedComponentParameters);
+    bool componentAdded = m_stateAssembler->addComponent(cache,updatedComponentParameters);
 
     if ( !componentAdded )
       ATH_MSG_DEBUG( "Component could not be added to the state in the assembler");
@@ -466,7 +462,7 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( const Trk::MultiComponentState&
   
   delete stateWithNewWeights;
 
-  const Trk::MultiComponentState* assembledUpdatedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* assembledUpdatedState = m_stateAssembler->assembledState(cache);
   
   if(!assembledUpdatedState)
     return 0;
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/LargestWeightsMultiStateMerger.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/LargestWeightsMultiStateMerger.cxx
index fdfb6184d81f1297ffbf397854bec6efd7844aff..6697551091149795bf1cd4e7f6b09cd4ce446efe 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/LargestWeightsMultiStateMerger.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/LargestWeightsMultiStateMerger.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /***********************************************************************************
@@ -68,8 +68,10 @@ const Trk::MultiComponentState* Trk::LargestWeightsMultiStateMerger::merge(const
   if (m_outputlevel < 0) 
     msg(MSG::VERBOSE) << "Merging state with " << multiComponentState.size() << " components" << endmsg;
 
+  //state Assembler cache
+  IMultiComponentStateAssembler::Cache cache;
   // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if ( !isAssemblerReset ){
     msg(MSG::ERROR) << "Could not reset the state assembler... returning 0" << endmsg;
@@ -109,7 +111,7 @@ const Trk::MultiComponentState* Trk::LargestWeightsMultiStateMerger::merge(const
       if (numberOfComponents < m_maximumNumberOfComponents){
 
         // Add component to state being prepared for assembly and check that it is valid
-        bool componentAdded = m_stateAssembler->addComponent(*component);
+        bool componentAdded = m_stateAssembler->addComponent(cache,*component);
       
         if ( !componentAdded )
           msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
@@ -130,7 +132,7 @@ const Trk::MultiComponentState* Trk::LargestWeightsMultiStateMerger::merge(const
    delete componentsForCollapse;
 
    // Add component to state being prepared for assembly and check that it is valid
-   bool componentAdded = m_stateAssembler->addComponent(*collapsedComponent);
+   bool componentAdded = m_stateAssembler->addComponent(cache,*collapsedComponent);
 
    // Memory clean-up
    delete collapsedComponent->first;
@@ -139,10 +141,8 @@ const Trk::MultiComponentState* Trk::LargestWeightsMultiStateMerger::merge(const
    if ( !componentAdded )
 	  msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
 
-   const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(1.);
-
+   const Trk::MultiComponentState* assembledState = m_stateAssembler->assembledState(cache,1.);
    delete unmergedState;
 
    return assembledState;
-
 }
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/MultiComponentStateAssembler.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/MultiComponentStateAssembler.cxx
index d1db64f2fe43b1c8dc7ca3ed527dc50a71a39f5b..c5070058c1ea6a56604443981a7ba995be13057a 100755
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/MultiComponentStateAssembler.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/MultiComponentStateAssembler.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -16,23 +16,12 @@ description          : Implementation code for MultiComponentStateAssembler
 #include "TrkGaussianSumFilter/SortingClasses.h"
 #include "TrkParameters/TrackParameters.h"
 
-Trk::MultiComponentStateAssembler::MultiComponentStateAssembler (const std::string& type, const std::string& name, const IInterface* parent)
-  :
-  AthAlgTool(type, name, parent),
-  m_outputlevel(0),
-  m_assemblyDone(false),
-  m_minimumFractionalWeight(1.e-9),
-  m_minimumValidFraction(0.01),
-  m_validWeightSum(0.),
-  m_invalidWeightSum(0.),
-  m_multiComponentState( new Trk::MultiComponentState() )
-{
-  
+Trk::MultiComponentStateAssembler::MultiComponentStateAssembler (const std::string& type, 
+                                                                 const std::string& name, 
+                                                                 const IInterface* parent)
+  : AthAlgTool(type, name, parent)
+{ 
   declareInterface<IMultiComponentStateAssembler>(this);
-  
-  declareProperty("minimumFractionalWeight", m_minimumFractionalWeight);
-  declareProperty("minimumValidFraction",    m_minimumValidFraction);
-
 }
 
 Trk::MultiComponentStateAssembler::~MultiComponentStateAssembler () 
@@ -40,125 +29,92 @@ Trk::MultiComponentStateAssembler::~MultiComponentStateAssembler ()
 
 StatusCode Trk::MultiComponentStateAssembler::initialize(){
   
-  m_outputlevel = msg().level()-MSG::DEBUG;   // save the threshold for debug printout in private member
-  
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Initialisation of " << name() << " successful" << endmsg;
-  
+  ATH_MSG_DEBUG("Initialisation of " << name() << " successful \n"); 
   return StatusCode::SUCCESS;
 }
 
 StatusCode Trk::MultiComponentStateAssembler::finalize(){
  
-  delete m_multiComponentState;
- 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Finalisation of " << name() << " successful" << endmsg;
-  
+  ATH_MSG_DEBUG ("Finalisation of " << name() << " successful \n");  
   return StatusCode::SUCCESS;
-  
 }
 
-bool Trk::MultiComponentStateAssembler::reset()
+bool Trk::MultiComponentStateAssembler::reset(Cache& cache) const
 {
 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Resetting the MultiComponentStateAssembler: " << name() << endmsg;
-
-  m_assemblyDone = false;
-
-  if ( !m_multiComponentState->empty() ){
-    
-    Trk::MultiComponentState::const_iterator component = m_multiComponentState->begin();
-
-    for ( ; component != m_multiComponentState->end(); ++component )
+  ATH_MSG_VERBOSE("Resetting the MultiComponentStateAssembler: " << name()<<"\n");
+  cache.assemblyDone = false;
+  if (cache.multiComponentState.get()!=nullptr && !cache.multiComponentState->empty() ){
+    Trk::MultiComponentState::const_iterator component = cache.multiComponentState->begin();
+    for ( ; component != cache.multiComponentState->end(); ++component ){
       delete component->first;
-    
-    m_multiComponentState->clear();
-
+    }
+    cache.multiComponentState->clear();
   }
-
-  m_validWeightSum = 0.;
-  m_invalidWeightSum = 0.;
-  
+  cache.validWeightSum = 0.;
+  cache.invalidWeightSum = 0.; 
   return true;
-
 }
 
-void Trk::MultiComponentStateAssembler::status() const
+void Trk::MultiComponentStateAssembler::status(const Cache& cache) const
 {
-
-  if (m_outputlevel <= 0) {
-    std::cout << "**************** Current status of assembler: " << name() << " ****************" << std::endl;
-    std::cout << "Number of components in cached state: " << m_multiComponentState->size() << std::endl;
-    std::cout << "Assembly done? (Bool): " << m_assemblyDone << std::endl;
-    std::cout << "Total valid weight:    " << m_validWeightSum << std::endl;
-    std::cout << "Total invalid weight:  " << m_invalidWeightSum << std::endl;
-    std::cout << "**************** End assembler status ****************" << std::endl;
-  }
-
+    ATH_MSG_DEBUG( "**************** Current status of assembler: " << name() << " **************** \n "
+                   << "Number of components in cached state: " << cache.multiComponentState->size() << "\n"
+                   << "Assembly done? (Bool): " << cache.assemblyDone << "\n"
+                   << "Total valid weight:    " << cache.validWeightSum << "\n"
+                   << "Total invalid weight:  " << cache.invalidWeightSum << "\n"
+                   << "**************** End assembler status **************** \n");
 }
 
-bool Trk::MultiComponentStateAssembler::addComponent (const ComponentParameters& componentParameters){
+bool Trk::MultiComponentStateAssembler::addComponent (Cache&  cache, const ComponentParameters& componentParameters) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Adding single component to mixture" << endmsg;
-
-  if ( m_assemblyDone ){
-    msg(MSG::WARNING) << "Trying to add state after assembly... returning false" << endmsg;
+  ATH_MSG_VERBOSE ( "Adding single component to mixture \n");
+  if ( cache.assemblyDone ){
+    ATH_MSG_WARNING("Trying to add state after assembly... returning false \n");
     return false;
-  }
-  
-  const Trk::ComponentParameters* clonedComponentParameters = new Trk::ComponentParameters( (componentParameters.first)->clone(), componentParameters.second);
+  } 
+  const Trk::ComponentParameters* clonedComponentParameters = 
+    new Trk::ComponentParameters( (componentParameters.first)->clone(), componentParameters.second);
 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Creating multiple component state from single component. Weight of state is: " << componentParameters.second << endmsg;
+  ATH_MSG_VERBOSE("Creating multiple component state from single component. Weight of state is: " 
+                  << componentParameters.second << "\n");
 
   Trk::MultiComponentState* singleComponentList = new Trk::MultiComponentState(*clonedComponentParameters);
-  this->addComponentsList(singleComponentList);
+  this->addComponentsList(cache,singleComponentList);
   delete clonedComponentParameters;
   singleComponentList->clear();
   delete singleComponentList;
-
   return true;
 }
 
-bool Trk::MultiComponentStateAssembler::addMultiState (const MultiComponentState& multiComponentState){
+bool Trk::MultiComponentStateAssembler::addMultiState (Cache& cache, const MultiComponentState& multiComponentState) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Adding multiple component state to mixture" << endmsg;
-
-  if ( m_assemblyDone ){
-    msg(MSG::WARNING) << "Trying to add state after assembly... returning false" << endmsg;
+  ATH_MSG_VERBOSE("Adding multiple component state to mixture \n");
+  if (cache.assemblyDone ){
+    ATH_MSG_WARNING("Trying to add state after assembly... returning false \n");
     return false;
   }
-  
+
   Trk::MultiComponentState* clonedMultiComponentState = const_cast<Trk::MultiComponentState*>( multiComponentState.clone() );
 
-  this->addComponentsList(clonedMultiComponentState);
+  this->addComponentsList(cache,clonedMultiComponentState);
   clonedMultiComponentState->clear();
   delete clonedMultiComponentState;
   return true;
 }
 
-bool Trk::MultiComponentStateAssembler::addInvalidComponentWeight (const double& invalidComponentWeight){
+bool Trk::MultiComponentStateAssembler::addInvalidComponentWeight (Cache& cache, const double invalidComponentWeight) const {
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Adding the weight of an invalid state to the mixture" << endmsg;
-
-  m_invalidWeightSum += invalidComponentWeight;
-
+  ATH_MSG_VERBOSE( "Adding the weight of an invalid state to the mixture \n");
+  cache.invalidWeightSum += invalidComponentWeight;
   return true;
-
 }
 
-void Trk::MultiComponentStateAssembler::addComponentsList (const MultiComponentState* multiComponentState){
+void Trk::MultiComponentStateAssembler::addComponentsList (Cache& cache, const MultiComponentState* multiComponentState) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Add multiple component state to exisiting mixture" << endmsg;
-
-  if ( m_assemblyDone ){
-    msg(MSG::WARNING) << "Trying to add state after assembly" << endmsg;
+  ATH_MSG_VERBOSE ("Add multiple component state to exisiting mixture \n");
+  if ( cache.assemblyDone ){
+    ATH_MSG_WARNING( "Trying to add state after assembly \n");
     return;
   }
   
@@ -169,159 +125,140 @@ void Trk::MultiComponentStateAssembler::addComponentsList (const MultiComponentS
     sumW += (*component).second;
   
 
-  m_multiComponentState->insert( m_multiComponentState->end(), multiComponentState->begin(), multiComponentState->end() );
+  cache.multiComponentState->insert(cache.multiComponentState->end(), multiComponentState->begin(), multiComponentState->end() );
 
-  m_validWeightSum += sumW;
+  cache.validWeightSum += sumW;
 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Successfully inserted state" << endmsg;
+  ATH_MSG_VERBOSE( "Successfully inserted state \n");
 
 }
 
-bool Trk::MultiComponentStateAssembler::prepareStateForAssembly (){
+bool Trk::MultiComponentStateAssembler::prepareStateForAssembly (Cache& cache) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Preparing state for assembly" << endmsg;
+   ATH_MSG_VERBOSE( "Preparing state for assembly \n");
 
   // Protect against empty state
-  if ( !isStateValid () ){
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "State is not valid... returning false" << endmsg;
+  if ( !isStateValid (cache) ){
+    ATH_MSG_DEBUG("State is not valid... returning false \n");
     return false;
   }
   
   // Check for minimum fraction of valid states
-  double validWeightFraction = m_validWeightSum / ( m_validWeightSum + m_invalidWeightSum );
+  double validWeightFraction = cache.validWeightSum / ( cache.validWeightSum + cache.invalidWeightSum );
 
-  if (m_invalidWeightSum > 0. && validWeightFraction < m_minimumValidFraction){
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "Insufficient valid states in the state... returning false" << endmsg;
+  if (cache.invalidWeightSum > 0. && validWeightFraction < m_minimumValidFraction){
+    ATH_MSG_DEBUG( "Insufficient valid states in the state... returning false \n");
     return false;
   }
-
   // Check to see assembly has not already been done
-  if ( m_assemblyDone ){
-    if (m_outputlevel < 0) 
-      msg(MSG::VERBOSE) << "Assembly of state already complete... returning true" << endmsg;
+  if ( cache.assemblyDone ){
+     ATH_MSG_VERBOSE("Assembly of state already complete... returning true \n");
     return true;
   }
 
   // Remove components with negligable weights
-  removeSmallWeights ();
+  removeSmallWeights (cache);
   
   // Now recheck to make sure the state is now still valid
-  if ( !isStateValid () ){
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "After removal of small weights, state is invalid... returning false" << endmsg;
+  if ( !isStateValid (cache) ){
+     ATH_MSG_DEBUG("After removal of small weights, state is invalid... returning false \n");
     return false;
   }
   
   // Sort Multi-Component State by weights
-  m_multiComponentState->sort( SortByLargerComponentWeight() );
+  cache.multiComponentState->sort( SortByLargerComponentWeight() );
   
   // Set assembly flag
-  m_assemblyDone = true;
+  cache.assemblyDone = true;
 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "State is prepared for assembly... returning true" << endmsg;
+  ATH_MSG_VERBOSE ("State is prepared for assembly... returning true \n");
 
   return true;
 }
 
 const Trk::MultiComponentState*
-Trk::MultiComponentStateAssembler::assembledState () {
+Trk::MultiComponentStateAssembler::assembledState (Cache& cache)  const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Finalising assembly... no specified reweighting" << endmsg;
+  ATH_MSG_VERBOSE( "Finalising assembly... no specified reweighting \n");
 
-  if ( !prepareStateForAssembly() ) {
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "Unable to prepare state for assembly... returning 0" << endmsg;
+  if ( !prepareStateForAssembly(cache) ) {
+    ATH_MSG_DEBUG ("Unable to prepare state for assembly... returning 0 \n");
     return 0;
   }
 
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Successful preparation for assembly" << endmsg;
+  ATH_MSG_VERBOSE("Successful preparation for assembly \n");
   
-  if ( m_invalidWeightSum > 0. || m_validWeightSum <= 0.) {
-    if (m_outputlevel < 0) 
-      msg(MSG::VERBOSE) << "Assembling state with invalid weight components" << endmsg;
-    double totalWeight = m_validWeightSum + m_invalidWeightSum;
-    const Trk::MultiComponentState* stateAssembly = doStateAssembly(totalWeight);
+  if ( cache.invalidWeightSum > 0. || cache.validWeightSum <= 0.) {
+    ATH_MSG_VERBOSE("Assembling state with invalid weight components \n");
+    double totalWeight = cache.validWeightSum + cache.invalidWeightSum;
+    const Trk::MultiComponentState* stateAssembly = doStateAssembly(cache,totalWeight);
     return stateAssembly;
   }
   
-  const Trk::MultiComponentState* multiComponentState = m_multiComponentState->clone();
-
+  const Trk::MultiComponentState* multiComponentState = cache.multiComponentState->clone();
   // Reset state cache before leaving
-  this->reset();
-
+  this->reset(cache);
+ 
   return multiComponentState;
 }
 
 const Trk::MultiComponentState*
-Trk::MultiComponentStateAssembler::assembledState (const double& newWeight) {
+Trk::MultiComponentStateAssembler::assembledState (Cache& cache, const double newWeight) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Finalising assembly with reweighting of components" << endmsg;
+  ATH_MSG_VERBOSE( "Finalising assembly with reweighting of components \n");
 
-  if ( !prepareStateForAssembly() ) {
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "Unable to prepare state for assembly... returing 0" << endmsg;
+  if ( !prepareStateForAssembly(cache) ) {
+     ATH_MSG_DEBUG("Unable to prepare state for assembly... returing 0 \n");
     return 0;
   }
   
-  const Trk::MultiComponentState* stateAssembly = doStateAssembly(newWeight);
+  const Trk::MultiComponentState* stateAssembly = doStateAssembly(cache,newWeight);
 
   return stateAssembly;	
 }
 
 const Trk::MultiComponentState*
-Trk::MultiComponentStateAssembler::doStateAssembly (const double& newWeight) {
+Trk::MultiComponentStateAssembler::doStateAssembly (Cache& cache, const double newWeight) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Do state assembly" << endmsg;
+  ATH_MSG_VERBOSE( "Do state assembly \n");
   
-  if ( !isStateValid() ) {
-    if (m_outputlevel < 0) 
-      msg(MSG::VERBOSE) << "Cached state is empty... returning 0" << endmsg;
+  if ( !isStateValid(cache) ) {
+    ATH_MSG_VERBOSE( "Cached state is empty... returning 0 \n");
     return 0;
   }
   
   
-  if (m_validWeightSum <= 0.) {
-    if (!m_multiComponentState->empty()) {
-      double fixedWeights = 1. / (double) m_multiComponentState->size();
-      Trk::MultiComponentState::iterator component = m_multiComponentState->begin();
-      for ( ; component != m_multiComponentState->end() ; ++component ){
+  if (cache.validWeightSum <= 0.) {
+    if (!cache.multiComponentState->empty()) {
+      double fixedWeights = 1. / (double) cache.multiComponentState->size();
+      Trk::MultiComponentState::iterator component = cache.multiComponentState->begin();
+      for ( ; component != cache.multiComponentState->end() ; ++component ){
         component->second = fixedWeights;
       } 
     }
-    const Trk::MultiComponentState* assembledState = m_multiComponentState->clone();
+    const Trk::MultiComponentState* assembledState = cache.multiComponentState->clone();
     // Reset the cache before leaving
-    this->reset();
+    this->reset(cache);
     return assembledState;
   }
 
-  double scalingFactor = m_validWeightSum > 0. ? newWeight / m_validWeightSum : 1. ;
-  const Trk::MultiComponentState* assembledState = m_multiComponentState->cloneWithWeightScaling( scalingFactor );
+  double scalingFactor = cache.validWeightSum > 0. ? newWeight / cache.validWeightSum : 1. ;
+  const Trk::MultiComponentState* assembledState = cache.multiComponentState->cloneWithWeightScaling( scalingFactor );
 
   // Reset the cashe before leaving
-  this->reset();
+  this->reset(cache);
 
   return assembledState;
 }
 
-void Trk::MultiComponentStateAssembler::removeSmallWeights () {
+void Trk::MultiComponentStateAssembler::removeSmallWeights (Cache& cache) const{
   
-  if (m_outputlevel < 0) 
-    msg(MSG::VERBOSE) << "Removing small weights" << endmsg;
+  ATH_MSG_VERBOSE("Removing small weights \n");
 
-  double totalWeight( m_validWeightSum + m_invalidWeightSum );
+  double totalWeight( cache.validWeightSum + cache.invalidWeightSum );
   
   if ( totalWeight == 0. ) {
-    if (m_outputlevel <= 0) 
-      msg(MSG::DEBUG) << "Total weight of state is zero... exiting" << endmsg;
+    ATH_MSG_VERBOSE("Total weight of state is zero... exiting \n");
     return;
   }
   
@@ -331,18 +268,16 @@ void Trk::MultiComponentStateAssembler::removeSmallWeights () {
   do {
     continueToRemoveComponents = false;
     MultiComponentState::iterator component;
-    for ( component  = m_multiComponentState->begin() ;
-	  component != m_multiComponentState->end()   ;
+    for ( component  = cache.multiComponentState->begin() ;
+	  component != cache.multiComponentState->end()   ;
 	  ++component ) {
       if ( (*component).second / totalWeight < m_minimumFractionalWeight ) {
         delete component->first;
-        m_multiComponentState->erase(component);
-        if (m_outputlevel <= 0) 
-          msg(MSG::DEBUG) << "State with weight " << (*component).second << " has been removed from mixture" << endmsg;
+        cache.multiComponentState->erase(component);
+        ATH_MSG_DEBUG("State with weight " << (*component).second << " has been removed from mixture");
         continueToRemoveComponents = true;
         break;
       } // end if
     } // end for
   } while ( continueToRemoveComponents );
-
 }
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.cxx
deleted file mode 100644
index af6df4cb5a43b0db0cde733317a51dd37f47b7dd..0000000000000000000000000000000000000000
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.cxx
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/********************************************************************************
-                      QoverPBremFit.cxx * description
-
-completed   : Tuesday 18th November 2008
-author      : Tony Shao
-email       : Qi.Tao.Shao@cern.ch
-description : Class called by BremFind to fit 1overp vs R plots using a sum of Tanh graphs
-**********************************************************************************/
-#include "QoverPBremFit.h"
-
-#include "TrkGaussianSumFilter/IMultiComponentStateCombiner.h"
-#include "TrkMultiComponentStateOnSurface/MultiComponentStateOnSurface.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkTrack/Track.h"
-#include "TrkFitterUtils/FitterTypes.h"
-
-#include <math.h>
-#include <algorithm>
-#include "TMath.h"
-
-
-
-Trk::QoverPBremFit::QoverPBremFit(int type, bool Z_mode):
-  m_stateCombiner("Trk::MultiComponentStateCombiner")
-{  
-  m_potentialvalue = new std::vector<double>;
-  m_potentialwidth = new std::vector<double>;
-  m_1overPvalue = new std::vector<double>;
-  m_1overPvalueerror = new std::vector<double>;
-  m_PhiValue = new std::vector<double>;
-  m_PhiValueerror = new std::vector<double>;
-  m_ThetaValue = new std::vector<double>;
-  m_ThetaValueerror = new std::vector<double>;
-  m_RadiusValue = new std::vector<double>;
-  m_Zvalue = new std::vector<double>;
-  m_FitValue = new std::vector<double>;
-  m_trackParameters = new std::vector<const Trk::TrackParameters*>;
-  m_type = type;
-  m_Z_mode = Z_mode;
-  m_surfaceCounter = 0;  
-  m_charge =0;
-}
-
-StatusCode Trk::QoverPBremFit::initialize()
-{
-  // Request the state combiner
-  if ( m_stateCombiner.retrieve().isFailure() ){
-    printf("Failed to retrieve m_stateCombiner");
-    return StatusCode::FAILURE;
-  }  
-  return StatusCode::SUCCESS;
-}
-
-
-Trk::QoverPBremFit::~QoverPBremFit()
-{
-	for (unsigned int d(0);d < m_trackParameters->size(); d++) {
-		delete (*m_trackParameters)[d];
-	}
-	
-  delete m_potentialvalue;
-  delete m_potentialwidth;
-  delete m_1overPvalue;
-  delete m_1overPvalueerror;
-  delete m_PhiValue;
-  delete m_PhiValueerror;
-  delete m_ThetaValue;
-  delete m_ThetaValueerror;
-  delete m_RadiusValue;
-  delete m_Zvalue;
-  delete m_FitValue;
-	delete m_trackParameters;
-}
-
-
-
-Trk::GraphParameter Trk::QoverPBremFit::GetParameters(const DataVector <const Trk::TrackStateOnSurface>& Trajectory)
-{
-  FillVariables(Trajectory);
-  
-  for (int copy_counter(0); (int) copy_counter < GetNMeasurements(); copy_counter++) {
-    if (m_Z_mode)
-      m_FitValue->push_back(fabs((*m_Zvalue)[copy_counter]));
-    else
-      m_FitValue->push_back((*m_RadiusValue)[copy_counter]);
-  }
-    
-
-  FindPotentials();
-  
-  m_graphparameter=FindParameters();
-  
-  m_mergedparameter = MergeParameters(m_graphparameter);
-
-   
-  return m_mergedparameter;
-}
-
-
-void 
-Trk::QoverPBremFit::FillVariables(const DataVector <const Trk::TrackStateOnSurface>& Trajectory) {
-  //iterators will be constructed as NULL
-  DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStateOnSurface;
-  DataVector<const Trk::TrackStateOnSurface>::const_iterator Trajectory_end; 
-  
-
-  if (m_type==1) {
-    trackStateOnSurface = Trajectory.begin();
-    Trajectory_end = Trajectory.end(); 
-  } else if (m_type==-1) {
-    trackStateOnSurface = Trajectory.end();
-    trackStateOnSurface--;
-    Trajectory_end = Trajectory.begin();
-    Trajectory_end--;
-  } else {
-    //trackStateOnSurface and Trajectory_end will be NULL in this case, as constructed
-    return;
-  }
-  
-
-  m_surfaceCounter=0;
-  
-  
-    for ( ; trackStateOnSurface != Trajectory_end; )  {
-      const Trk::MultiComponentState *TrajectoryMultiState=0;
-      const Trk::MultiComponentStateOnSurface *TrajectoryMultiStateOnSurface = dynamic_cast<const Trk::MultiComponentStateOnSurface*>(*trackStateOnSurface);
-      if (m_surfaceCounter < TRKFGSF_VALSURFACES) {
-        if (!TrajectoryMultiStateOnSurface) {
-          // Create new multiComponentState from a single state
-          Trk::ComponentParameters componentParameters( (*trackStateOnSurface)->trackParameters(), 1.0);
-          TrajectoryMultiState = new Trk::MultiComponentState(componentParameters);
-        } else {
-          TrajectoryMultiState = TrajectoryMultiStateOnSurface->components();
-        }
-
-        const Amg::Vector3D posOnSurf = TrajectoryMultiStateOnSurface->trackParameters()->position();
-      
-
-        //Fill the radius values
-        m_RadiusValue->push_back( posOnSurf.perp() );
-        m_Zvalue->push_back( posOnSurf.z() );
-
-        //Specify in joboptions whether to use mode or mean
-        const Trk::TrackParameters* CombinedMultiState = m_stateCombiner->combine(*TrajectoryMultiState,true);
-      
-        if (CombinedMultiState->parameters()[Trk::qOverP] > 0.0) m_charge = 1.0;    
-        else m_charge = -1.0;
-
-        //Fill the 1overPvalues in GeV
-        m_trackParameters->push_back( CombinedMultiState );
-        m_1overPvalue->push_back( 1000.0*fabs(CombinedMultiState->parameters()[Trk::qOverP]) );
-        m_PhiValue->push_back( CombinedMultiState->parameters()[Trk::phi] );
-        m_ThetaValue->push_back( CombinedMultiState->parameters()[Trk::theta] );
-
-        const AmgSymMatrix(5)* measuredCov = CombinedMultiState->covariance();
-
-        if (measuredCov) {
-          m_1overPvalueerror->push_back( 1000.0*sqrt((*measuredCov)(Trk::qOverP,Trk::qOverP)));
-          m_PhiValueerror->push_back( sqrt((*measuredCov)(Trk::phi,Trk::phi)));
-          m_ThetaValueerror->push_back( sqrt((*measuredCov)(Trk::theta,Trk::theta)));
-        }
-        else {
-          m_1overPvalueerror->push_back( 1000.0*fabs(CombinedMultiState->parameters()[Trk::qOverP]) );
-          m_PhiValueerror->push_back( fabs(CombinedMultiState->parameters()[Trk::phi]) );
-          m_ThetaValueerror->push_back( fabs(CombinedMultiState->parameters()[Trk::theta]) );
-        }  
-      }
-    
-      if (!TrajectoryMultiStateOnSurface) { 
-        delete TrajectoryMultiState;
-      }
-      m_surfaceCounter++;
-      if (m_type==1) {
-        trackStateOnSurface++;
-      }
-      else if (m_type==-1) {
-        trackStateOnSurface--;
-      }
-    }//end of for loop
-}
-
-
-void Trk::QoverPBremFit::FindPotentials()
-{
-  double width;
-  double oneoverPgradient;
-
-  //Search for potential brem locations
-  for (int datapoint=0; datapoint < m_surfaceCounter-1; datapoint++) {
-    //Calculates gradient between adajacent points
-    oneoverPgradient=(1 - (*m_1overPvalue)[datapoint]/(*m_1overPvalue)[datapoint+1])/((*m_FitValue)[datapoint+1]-(*m_FitValue)[datapoint]);
-
-    if (oneoverPgradient > POTENTIAL_BREM_THRESHOLD) {
-      
-      m_potentialvalue->push_back(((*m_FitValue)[datapoint+1]+(*m_FitValue)[datapoint])/2);
-      width=((*m_FitValue)[datapoint+1]-(*m_FitValue)[datapoint])/2;
-
-      if (width < 20) {
-	width=20;
-      }
-      
-      m_potentialwidth->push_back(width);
-      
-    }
-  }   
-}
-
-
-Trk::GraphParameter Trk::QoverPBremFit::FindParameters()
-{
-  
-  GraphParameter graphparameter;
-  int nparameters = (int) m_potentialvalue->size() + 1;
-  int totalparameters = nparameters;
-  int nsurfaces = m_1overPvalue->size();
-
-
-  std::vector<Element> elements;
-  elements.clear();
-  Element thePoint;
-
-  //Fill in the elements
-  for (int elementfill=0; elementfill < totalparameters-1; elementfill++) {
-
-    thePoint.value=(*m_potentialvalue)[elementfill];
-    thePoint.width=(*m_potentialwidth)[elementfill];
-    thePoint.sign=true;
-    elements.push_back(thePoint);
-  }
-
-  while (true) {
-    //printf("Starting the matrix iterations\n");
-    Amg::VectorX theta(nparameters); theta.setZero();
-    Amg::VectorX ymatrix(nsurfaces); ymatrix.setZero();
-    Amg::MatrixX Amatrix (nsurfaces,nparameters); Amatrix.setZero();
-    Amg::MatrixX Gy (nsurfaces,nsurfaces); Gy.setZero();
-
-    //temporary matrices to store the operations
-    Amg::MatrixX ATranspose(nparameters,nsurfaces); ATranspose.setZero();
-    Amg::MatrixX AGA(nparameters,nparameters); AGA.setZero();
-    Amg::MatrixX AGAinverse(nparameters,nparameters); AGAinverse.setZero();
-
-    //printf("nparameters=%i\n",nparameters);
-
-
-    //Filling each of the matrices --- y matrix first
-    for (int yfill=0; yfill < nsurfaces; yfill++) {
-      ymatrix[yfill]=(*m_1overPvalue)[yfill];
-    }
-
-
-    //Filling the A matrix.
-    for (int afill=0; afill < nsurfaces; afill++) {
-
-      int afill3(0);
-
-      //afill2 starts at -1 because we want the elements vector to start at zero.
-      //The first iteration is taken away by the constant parameters.
-      for (int afill2=-1; afill2 < totalparameters-1; afill2++) {
-
-        //First column of the A matrix is a constant
-        if (afill3==0){
-          Amatrix(afill,afill3)=1;
-          afill3++;
-        }
-
-        //Only the terms with positive coefficients are kept
-        else if (elements[afill2].sign) {
-
-          Amatrix(afill,afill3)=TMath::TanH((*m_FitValue)[afill]/elements[afill2].width-elements[afill2].value/elements[afill2].width);
-          afill3++;
-        }
-
-      }
-    }
-
-
-    //Fill the Gy matrix (the error matrix)
-    for (int gfill(0); gfill < nsurfaces; gfill++) {
-
-      for (int gfill2(0); gfill2 < nsurfaces; gfill2++) {
-
-        if (gfill==gfill2) {
-          Gy(gfill,gfill2)=1/(*m_1overPvalueerror)[gfill];
-        }
-        else {
-          Gy(gfill,gfill2)=0;
-        }	  
-      }
-    }
-
-
-
-    //int inv;
-    ATranspose=Amatrix.transpose();
-    AGA=ATranspose*(Gy*(Amatrix));
-    AGAinverse=AGA.inverse();
-    //printf("Inv=%i\n",inv);
-
-    theta=AGAinverse*(ATranspose*(Gy*ymatrix));
-
-
-    //Check the signs of the calculated coefficients. Negative coefficients will be taken away
-    //on the next iteration until all coefficients are >= 0
-
-    int nNegative(0);
-
-    int signcheck2(1);  //Iterations start at 1 because the constant parameter doesn't matter
-    for (int signcheck(0); signcheck < totalparameters-1; signcheck++) {
-
-      if (!elements[signcheck].sign) { //if the term is already taken away, then ignore it
-        continue;
-      }
-      else if (theta[signcheck2] < 0) { //checks to the sign of the calculated coefficient
-        elements[signcheck].sign=false;
-        nNegative++;  //counts the number of negative coefficients
-        signcheck2++;
-      }
-      else {
-        signcheck2++;
-      }
-    }
-
-    if (nNegative==0) {//Ends the iterations because all terms are positive
-
-      int graphfill2(0);
-      for(int graphfill(-1); graphfill < totalparameters-1; graphfill++) {
-        if (graphfill2==0) { //Fills the constant with the corresponding theta element
-          graphparameter.constant=theta[graphfill2];
-          if (isnan(graphparameter.constant))
-            graphparameter.constant=0.0;
-          graphfill2++;
-        }
-
-        else if (!elements[graphfill].sign) { 
-          //if the parameter is negative then its coefficient is assigned zero
-          graphparameter.value.push_back(elements[graphfill].value);
-          graphparameter.coefficient.push_back(0.0);
-          graphparameter.width.push_back(20.0);
-        }
-
-        else {
-          //fills the graphparameter with the coefficients, radii and width
-          if (isnan(theta[graphfill2])) {
-            graphparameter.coefficient.push_back(0.0);
-            graphparameter.value.push_back(elements[graphfill].value);
-            graphparameter.width.push_back(elements[graphfill].width);
-          }
-          else {
-            graphparameter.value.push_back(elements[graphfill].value);
-            graphparameter.coefficient.push_back(theta[graphfill2]);
-            graphparameter.width.push_back(elements[graphfill].width);
-          }
-          graphfill2++;
-        }
-      }
-
-      break;
-
-    }
-    else {
-      nparameters-=nNegative; //resets the matrices with less degrees of freedom
-    }
-  }
-
-  return graphparameter;
-}     
-
-
-Trk::GraphParameter Trk::QoverPBremFit::MergeParameters(GraphParameter graphparameter) 
-{
-  GraphParameter MergedParameters;
-  MergedParameters.constant=graphparameter.constant;
-
-  double joinscore(0);
-  std::vector<int> nonzero_coefficients;  //contains the coefficient numbers that are non-zero
-
-
-  for (int coeff_test(0); coeff_test < (int) graphparameter.coefficient.size(); coeff_test++) {
-    if ( graphparameter.coefficient[coeff_test] != 0) {
-      nonzero_coefficients.push_back(coeff_test);
-    }
-  }
-
-  //Returns the singular case
-  if ( (int) nonzero_coefficients.size() == 1 ) {
-    MergedParameters.coefficient.push_back(graphparameter.coefficient[nonzero_coefficients[0]]);
-    MergedParameters.value.push_back(graphparameter.value[nonzero_coefficients[0]]);
-    MergedParameters.width.push_back(graphparameter.width[nonzero_coefficients[0]]);
-    return MergedParameters;
-  }
-
-  std::vector<bool> joinboolean ((int) nonzero_coefficients.size()-1,false);
-  double kinkdistance; //distance between adjacent kinks
-  double maxmeasure;   //the maximum distance between measurements between the adjacent kinks
-  //int npotential;     //number of potential brem points between kinks
-  int nmeasurement;   //number of measurements between kinks
-  double regionbias;   //takes into account the joining bias of the region based on value  
-
-  //The first element of the joinboolean array will represent whether 
-  //kink #1 and kink#2 should be joined 
-
-  for (int join_counter(0); join_counter < (int) nonzero_coefficients.size()-1; join_counter++) {
-
-    joinscore=0;
-
-    kinkdistance = graphparameter.value[nonzero_coefficients[join_counter+1]] - graphparameter.value[nonzero_coefficients[join_counter]];
-    maxmeasure = maxvalue(graphparameter.value[nonzero_coefficients[join_counter]],graphparameter.value[nonzero_coefficients[join_counter+1]]);
-    //npotential = npotentials(graphparameter.value[nonzero_coefficients[join_counter]],graphparameter.value[nonzero_coefficients[join_counter+1]]);
-    nmeasurement = nmeasurements(graphparameter.value[nonzero_coefficients[join_counter]],graphparameter.value[nonzero_coefficients[join_counter+1]]);
-    regionbias = (LastFitMeasurement()/2-graphparameter.value[nonzero_coefficients[join_counter+1]]+LastFitMeasurement()/2-graphparameter.value[nonzero_coefficients[join_counter]])/5;
-
-    joinscore+= -10*nmeasurement;
-    joinscore+= 2*maxmeasure;
-    joinscore+= 50-kinkdistance;
-    joinscore+= m_type*regionbias;
-    //joinscore+= 20*npotential;
-
-    //printf("Join Score%i=%f\n",join_counter,joinscore);
-
-    //Scoring system thresholds
-    if (kinkdistance > 350) {
-      joinboolean[join_counter] = false;
-      continue;
-    }
-
-    if (joinscore > 0) {
-      joinboolean[join_counter] = true;
-    }
-
-    else {
-      joinboolean[join_counter] = false;
-    }
-
-  }
-
-  //Use the joinboolean array to join multiple smaller kinks into one larger one
-
-  int nkinks_merged(0);
-
-  std::vector<double> coefficient_vector;
-  std::vector<double> width_vector;
-  std::vector<double> value_vector;
-
-  for (int merge_counter(0); merge_counter < (int) nonzero_coefficients.size(); merge_counter++) {
-
-    if (merge_counter < (int) nonzero_coefficients.size()-1) {
-
-      if (joinboolean[merge_counter]) {
-        coefficient_vector.push_back(graphparameter.coefficient[nonzero_coefficients[merge_counter]]);
-        width_vector.push_back(graphparameter.width[nonzero_coefficients[merge_counter]]);
-        value_vector.push_back(graphparameter.value[nonzero_coefficients[merge_counter]]);
-        nkinks_merged++;
-      }
-
-      else if (!joinboolean[merge_counter]) {
-        coefficient_vector.push_back(graphparameter.coefficient[nonzero_coefficients[merge_counter]]);
-        value_vector.push_back(graphparameter.value[nonzero_coefficients[merge_counter]]);
-        width_vector.push_back(graphparameter.width[nonzero_coefficients[merge_counter]]);
-        MergedParameters.coefficient.push_back(coefficient_sum(coefficient_vector));
-        MergedParameters.value.push_back(value_sum(value_vector,coefficient_vector));
-        MergedParameters.width.push_back(width_sum(width_vector,coefficient_vector,value_vector));
-        coefficient_vector.clear();
-        value_vector.clear();
-        width_vector.clear();
-        nkinks_merged=0;
-      }
-    }
-
-    else {
-      coefficient_vector.push_back(graphparameter.coefficient[nonzero_coefficients[merge_counter]]);
-      value_vector.push_back(graphparameter.value[nonzero_coefficients[merge_counter]]);
-      width_vector.push_back(graphparameter.width[nonzero_coefficients[merge_counter]]);
-      MergedParameters.coefficient.push_back(coefficient_sum(coefficient_vector));
-      MergedParameters.value.push_back(value_sum(value_vector,coefficient_vector));
-      MergedParameters.width.push_back(width_sum(width_vector,coefficient_vector,value_vector));
-    }
-
-  }
-
-  return MergedParameters;
-}
-
-
-//This function calculates the number of measurements between kinks
-int Trk::QoverPBremFit::nmeasurements (double start, double end)
-{
-  int npoints(0);
-  for (int i=0; i < (int) m_FitValue->size(); i++) {
-    if ((*m_FitValue)[i] > start && (*m_FitValue)[i] < end) {
-      npoints++;
-    }
-  }
-
-  return npoints;
-} 
-
-//This function calculates the number of potential brem points between kinks
-int Trk::QoverPBremFit::npotentials(double start, double end) 
-{
-  int potentialcount(0);
-  for (int i=0; i < (int) m_potentialvalue->size(); i++) {
-    if ( (*m_potentialvalue)[i] > start && (*m_potentialvalue)[i] < end) {
-      potentialcount++;    
-    }
-  
-  }
-  return potentialcount;
-}
-
-
-//This function calculates the maximum distance between measurements within adjacent kinks
-//Note: the measured points considered can be outside the radii of the kinks, hence the use
-//of "if" conditions #2 and #4 below.
-double Trk::QoverPBremFit::maxvalue(double start, double end)
-{
-  double max(-1);
-  double max2(-1);
-  int endcounter(0);
-  for (int value_counter(0); value_counter < (int) m_FitValue->size(); value_counter++) {
-    
-    if ((*m_FitValue)[value_counter] < start) {
-      continue;
-    }
-        
-    if ((*m_FitValue)[value_counter] > end && endcounter > 0) {
-      continue;
-    }
-
-    //A measurement outside the value of the kink will counter if it is the first and only one
-    else if ((*m_FitValue)[value_counter] > end && endcounter==0) {
-      max2 = (*m_FitValue)[value_counter] - (*m_FitValue)[value_counter - 1];
-      endcounter++;
-    }
-
-    else {
-      max2 = (*m_FitValue)[value_counter] - (*m_FitValue)[value_counter - 1];
-    }
-
-    if (max2 > max) {
-      max = max2;
-    }
-    
-  }
-  return max;
-
-}
-
-
-double Trk::QoverPBremFit::coefficient_sum (std::vector<double> coefficients)
-{
-  double sum(0);
-  for (int sum_counter(0); sum_counter < (int) coefficients.size(); sum_counter++) {
-    sum+=coefficients[sum_counter];
-  }
-
-  return sum;
-
-}
-
-double Trk::QoverPBremFit::value_sum (std::vector<double> radii, std::vector<double> coefficients)
-{
-  double value(0);
-  double mod_squared(0);
-  for (int value_counter(0); value_counter < (int) radii.size(); value_counter++) {
-    value+=coefficients[value_counter]*coefficients[value_counter]*radii[value_counter];
-    mod_squared+=coefficients[value_counter]*coefficients[value_counter];
-  }
-  value/=mod_squared;
-  return value;
-}
-
-double Trk::QoverPBremFit::width_sum (std::vector<double> widths, std::vector<double> coefficients, std::vector<double> radii)
-{
-  double width(0);
-  double coefficient_average(0);
-  double mod_squared(0);
-
-  //singular case
-  if ( (int)coefficients.size() == 1)
-    {
-      return widths[0];
-    }
-
-
-  for (int coefficient_counter(0); coefficient_counter < (int)coefficients.size(); coefficient_counter++) {
-    coefficient_average+=coefficients[coefficient_counter]/coefficients.size();
-    mod_squared+=coefficients[coefficient_counter]*coefficients[coefficient_counter];
-  }
-  
-  for (int width_counter(0); width_counter < (int) widths.size()-1 ; width_counter++) {
-    width+=std::min(coefficients[width_counter]*coefficients[width_counter]*(radii[width_counter+1]-radii[width_counter]),coefficients[width_counter+1]*coefficients[width_counter+1]*(radii[width_counter+1]-radii[width_counter]));
-  }
-  width/=mod_squared;
-
-  for (int width_counter2(0); width_counter2 < (int) widths.size(); width_counter2++) {
-    width+=coefficients[width_counter2]*coefficients[width_counter2]*widths[width_counter2]/(coefficients[width_counter2]*coefficients[width_counter2]+coefficient_average*coefficient_average);
-  }
-
-  return width;
-}
-
-double Trk::QoverPBremFit::GetPerigee_1overP()
-{
-  return (*m_1overPvalue)[0];
-}
-
-double Trk::QoverPBremFit::GetPerigee_Phi()
-{
-  return (*m_PhiValue)[0];
-}
-
-double Trk::QoverPBremFit::GetPerigee_Theta()
-{
-  return (*m_ThetaValue)[0];
-}
-
-double Trk::QoverPBremFit::GetPerigee_d0()
-{
-  return (*m_RadiusValue)[0];
-}
-
-double Trk::QoverPBremFit::GetPerigee_z0()
-{
-  return (*m_Zvalue)[0];
-}
-
-double Trk::QoverPBremFit::Get1overP(int n)
-{
-  return (*m_1overPvalue)[n];
-}
-
-double Trk::QoverPBremFit::GetPhi(int n)
-{
-  return (*m_PhiValue)[n];
-}
-
-double Trk::QoverPBremFit::GetTheta(int n)
-{
-  return (*m_ThetaValue)[n];
-}
-
-double Trk::QoverPBremFit::GetRadius(int n)
-{
-  return (*m_RadiusValue)[n];
-}
-
-double Trk::QoverPBremFit::GetZ(int n)
-{
-  return (*m_Zvalue)[n];
-}
-
-double Trk::QoverPBremFit::Get1overPerror(int n)
-{
-  return (*m_1overPvalueerror)[n];
-}
-
-double Trk::QoverPBremFit::GetPhierror(int n)
-{
-  return (*m_PhiValueerror)[n];
-}
-
-double Trk::QoverPBremFit::GetThetaerror(int n)
-{
-  return (*m_ThetaValueerror)[n];
-}
-
-int Trk::QoverPBremFit::GetNMeasurements()
-{
-  return (int) (*m_1overPvalue).size();
-}
-
-double Trk::QoverPBremFit::GetCharge()
-{
-  return m_charge;
-}
-
-const Trk::TrackParameters* Trk::QoverPBremFit::GetTrackParameters(int n)
-{
-  return (*m_trackParameters)[n];
-}
-
-int Trk::QoverPBremFit::GetnSurfaces()
-{
-  return m_surfaceCounter;
-}
-
-double Trk::QoverPBremFit::GetValue(int n)
-{
-  return (*m_FitValue)[n];
-}
-
-
-double Trk::QoverPBremFit::LastFitMeasurement()
-{
-  int lastmeasurement(GetNMeasurements() - 1);
-  return (*m_FitValue)[lastmeasurement];
-}
-
-double Trk::QoverPBremFit::FirstFitMeasurement()
-{
-  if (m_type == 1)
-    return (*m_FitValue)[0];
-  else if (m_type == -1)
-    return (*m_FitValue)[1];
-  return (*m_FitValue)[0];
-}
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.h b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.h
deleted file mode 100644
index 91d187aaf16b3a86b4d0cc4b53213f05123063a9..0000000000000000000000000000000000000000
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QoverPBremFit.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/********************************************************************************
-  QoverPBremFit.h * description
-
-  completed   : Tuesday 18th November 2008
-  author      : Tony Shao
-  email       : Qi.Tao.Shao@cern.ch
-  description : Class called by BremFind to fit QoverP vs R plots using a sum of Tanh graphs
-  **********************************************************************************/
-
-#ifndef Trk_QoverPBremFit_H
-#define Trk_QoverPBremFit_H
-
-#include <vector>
-
-#include "GaudiKernel/ToolHandle.h"
-#include "AthContainers/DataVector.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkGaussianSumFilter/BremFind.h"
-
-namespace Trk {
-
-  class IMultiComponentStateCombiner;
-  class MultiComponentStateOnSurface; 
-  class TrackStateOnSurface;
-
-
-#define TRKFGSF_VALSURFACES 100
-#define TRKGSF_VALSTATES 24
-#define POTENTIAL_BREM_THRESHOLD 0.0001
- 
-
-  class QoverPBremFit {
-
-    // forbid copying
-    QoverPBremFit(const QoverPBremFit &) = delete ;
-    QoverPBremFit &operator=(const QoverPBremFit &) = delete;
-
-  public:
-  
-    QoverPBremFit(int, bool); //type=1 for forward fit || type=-1 for backward fit
-    //bool for Z mode or not. True for Z mode.
-   
-    StatusCode initialize();
-   
-    ~QoverPBremFit();
-   
-    GraphParameter GetParameters(const DataVector <const Trk::TrackStateOnSurface>&);
-   
-    double GetPerigee_1overP();
-    double GetPerigee_Phi();  
-    double GetPerigee_Theta();
-    double GetPerigee_d0();
-    double GetPerigee_z0();
-   
-    int GetnSurfaces();
-    double Get1overP(int);
-    double GetPhi(int);
-    double GetTheta(int);
-    double GetRadius(int);
-    double GetZ(int);
-    double Get1overPerror(int);
-    double GetPhierror(int);
-    double GetThetaerror(int);
-    double GetRadiuserror(int);
-    double GetZerror(int);
-    double GetValue(int);
-    double GetCharge();
-    double LastFitMeasurement();
-    double FirstFitMeasurement();
-    
-    const Trk::TrackParameters* GetTrackParameters(int);
-   
-    int GetNMeasurements();
-   
-    void FillVariables(const DataVector <const Trk::TrackStateOnSurface>&);
-  
-    void FindPotentials();
-   
-    GraphParameter FindParameters();
-   
-    GraphParameter MergeParameters(GraphParameter);
-   
-  private:
-   
-    int nmeasurements (double, double);
-   
-    int npotentials (double, double); 
-   
-    double maxvalue (double, double);
-  
-    double coefficient_sum (std::vector<double>);
-  
-    double value_sum (std::vector<double>,std::vector<double>);
-  
-    double width_sum (std::vector<double>,std::vector<double>,std::vector<double>);
-
-    //defining the tools used in this class
-    ToolHandle<IMultiComponentStateCombiner> m_stateCombiner;
-
-    int m_surfaceCounter;
-    int m_type;
-    bool m_Z_mode;
-
-    mutable std::vector<double> *m_potentialvalue;
-    mutable std::vector<double> *m_potentialwidth;
-
-    double m_charge;
-    std::vector<double> *m_1overPvalue;
-    std::vector<double> *m_1overPvalueerror;
-    std::vector<double> *m_PhiValue;
-    std::vector<double> *m_PhiValueerror;
-    std::vector<double> *m_ThetaValue;
-    std::vector<double> *m_ThetaValueerror;
-    std::vector<double> *m_RadiusValue;
-    std::vector<double> *m_Zvalue;
-    std::vector<double> *m_FitValue;
-    std::vector<const Trk::TrackParameters*> *m_trackParameters;
-
-    GraphParameter m_graphparameter;
-    GraphParameter m_mergedparameter;
-    
-  };
-
-}
-#endif
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx
index f5cd0349f946d88cf427995f5d57bb375f0cd09d..c7373c2c2b571410223329f7ad7ab31e96040e54 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/QuickCloseComponentsMultiStateMerger.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
 */
 
 /*********************************************************************************
@@ -132,9 +132,10 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
   ATH_MSG_VERBOSE(  "Merging state with " << unmergedState.size() << " components" );
 
   unsigned int numberOfComponents = unmergedState.size();
-
+  //Assembler Cache
+    IMultiComponentStateAssembler::Cache cache;
   // Check that the assember is reset
-  bool isAssemblerReset = m_stateAssembler->reset();
+  bool isAssemblerReset = m_stateAssembler->reset(cache);
 
   if (unmergedState.size() <= m_maximumNumberOfComponents){
     ATH_MSG_VERBOSE( "State is already sufficiently small... no component reduction required" );
@@ -175,10 +176,10 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
   // Options to use full KL distance-based algorithm.
   if (m_useFullDistanceCalcArray) {
     delete combinedState;
-    return mergeFullDistArray(unmergedState);
+    return mergeFullDistArray(cache,unmergedState);
   } else if(m_useFullDistanceCalcVector){
     delete combinedState;
-    return mergeFullDistVector(unmergedState);
+    return mergeFullDistVector(cache,unmergedState);
   }
  
   
@@ -300,7 +301,7 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
   for ( ; mapComponent != unmergedComponentsMap.end(); ++mapComponent) {
 
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(mapComponent->second);
+    bool componentAdded = m_stateAssembler->addComponent(cache,mapComponent->second);
 
     if ( !componentAdded )
       ATH_MSG_WARNING( "Component could not be added to the state in the assembler" );
@@ -310,7 +311,7 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
 
   }
   
-  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState(cache);
 
   ATH_MSG_VERBOSE( "Number of components in merged state: " << mergedState->size() );
 
@@ -582,7 +583,8 @@ void Trk::QuickCloseComponentsMultiStateMerger::mergeStateComponents (std::vecto
 
 // Method to take an input MCS and minimize it from 'X' components to
 // 'm_maximumNumberOfComponents' components.
-const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::mergeFullDistVector(const Trk::MultiComponentState& mcs) const
+const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::mergeFullDistVector(IMultiComponentStateAssembler::Cache& cache,
+                                                                                               const Trk::MultiComponentState& mcs) const
 {
 
   m_chronoSvc->chronoStart("QCCM::mergeFullDist");
@@ -628,7 +630,7 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
   for ( ; mcsIter != tempComponents.end(); ++mcsIter){
     
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent(*(*mcsIter));
+    bool componentAdded = m_stateAssembler->addComponent(cache,*(*mcsIter));
 
     if ( !componentAdded )
       msg(MSG::WARNING) << "Component could not be added to the state in the assembler" << endmsg;
@@ -637,7 +639,7 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
 
   ATH_MSG_VERBOSE("Got states, doing final assembly of merged state");
   
-  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState(cache);
 
   // Memory clean up. Gotta also clean up those pesky track parameters.
   // for (unsigned int ic(0); ic < clonedUnmergedState->size(); ic++)
@@ -651,7 +653,7 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
   for (unsigned int it(0); it < tempComponents.size(); it++) {
     if (tempComponents[it]) {
       if (tempComponents[it]->first)
-  delete tempComponents[it]->first;
+        delete tempComponents[it]->first;
       delete tempComponents[it];
     }
   }
@@ -693,7 +695,8 @@ void Trk::QuickCloseComponentsMultiStateMerger::deleteStoredDistances(int i1, in
       
 }
 
-const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::mergeFullDistArray(const Trk::MultiComponentState& mcs) const
+const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::mergeFullDistArray(IMultiComponentStateAssembler::Cache& cache,
+                                                                                              const Trk::MultiComponentState& mcs) const
 {
   //m_chronoSvc->chronoStart("QCCM::mergeFullDistArray");
 
@@ -866,13 +869,13 @@ const Trk::MultiComponentState* Trk::QuickCloseComponentsMultiStateMerger::merge
     if(state == 0) continue;
     
     // Add component to state being prepared for assembly and check that it is valid
-    bool componentAdded = m_stateAssembler->addComponent( *state );
+    bool componentAdded = m_stateAssembler->addComponent( cache,*state );
 
     if ( !componentAdded )
       ATH_MSG_WARNING( "Component could not be added to the state in the assembler" );
   }
   
-  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState();
+  const Trk::MultiComponentState* mergedState = m_stateAssembler->assembledState(cache);
 
   ATH_MSG_VERBOSE( "Number of components in merged state: " << mergedState->size() );
 
diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx
index faae31bfe1fa7ace7af3455acd4ba8309f373bfc..4b91eb5328b6f7e3808198fb996358344c1e995e 100644
--- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx
+++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx
@@ -20,8 +20,6 @@
 #include "TrkGaussianSumFilter/GsfOutlierLogic.h"
 #include "TrkGaussianSumFilter/GsfExtrapolator.h"
 #include "TrkGaussianSumFilter/GsfSmoother.h"
-#include "TrkGaussianSumFilter/BremFind.h"
-//#include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h"
 
 DECLARE_COMPONENT( Trk::QuickCloseComponentsMultiStateMerger )
 DECLARE_COMPONENT( Trk::MultiComponentStateModeCalculator )
@@ -45,5 +43,4 @@ DECLARE_COMPONENT( Trk::ForwardGsfFitter )
 DECLARE_COMPONENT( Trk::GsfOutlierLogic )
 DECLARE_COMPONENT( Trk::GsfExtrapolator )
 DECLARE_COMPONENT( Trk::GsfSmoother )
-DECLARE_COMPONENT( Trk::BremFind )
 
diff --git a/Trigger/TrigAlgorithms/TrigEgammaRec/src/TrigEgammaRec.cxx b/Trigger/TrigAlgorithms/TrigEgammaRec/src/TrigEgammaRec.cxx
index 0677b8af109ac027e520c576476cf8c65af5ab11..8a4027494f17dc3618fefb0bd0403a81ce229e5a 100755
--- a/Trigger/TrigAlgorithms/TrigEgammaRec/src/TrigEgammaRec.cxx
+++ b/Trigger/TrigAlgorithms/TrigEgammaRec/src/TrigEgammaRec.cxx
@@ -469,58 +469,59 @@ HLT::ErrorCode TrigEgammaRec::hltInitialize() {
         if (runIsoType.find(flavName) == runIsoType.end()) runIsoType.insert(flavName);
     }
     
-    /** @brief Retrieve IsolationTools based on IsoTypes configured */
-    if(m_doTrackIsolation){
-        if (!m_trackIsolationTool.empty() && runIsoType.find("ptcone") != runIsoType.end()){ 
-            ATH_MSG_DEBUG("Retrieve TrackIsolationTool");
-
-            if(m_trackIsolationTool.retrieve().isFailure()){
-                ATH_MSG_ERROR("Unable to retrieve " << m_trackIsolationTool);
-                return HLT::BAD_JOB_SETUP;
-            }
-            else {
-                ATH_MSG_DEBUG("Retrieved Tool "<<m_trackIsolationTool);
-                if (timerSvc()) m_timerIsoTool1 = addTimer("TrackIsolationTool");
-            }
-        }
-    } else {
+    // /** @brief Retrieve IsolationTools based on IsoTypes configured */
+    // // BROKEN! WORTH FIXING, OR IS THIS FILE NOW OBSOLETE
+    // if(m_doTrackIsolation){
+    //     if (!m_trackIsolationTool.empty() && runIsoType.find("ptcone") != runIsoType.end()){ 
+    //         ATH_MSG_DEBUG("Retrieve TrackIsolationTool");
+
+    //         if(m_trackIsolationTool.retrieve().isFailure()){
+    //             ATH_MSG_ERROR("Unable to retrieve " << m_trackIsolationTool);
+    //             return HLT::BAD_JOB_SETUP;
+    //         }
+    //         else {
+    //             ATH_MSG_DEBUG("Retrieved Tool "<<m_trackIsolationTool);
+    //             if (timerSvc()) m_timerIsoTool1 = addTimer("TrackIsolationTool");
+    //         }
+    //     }
+    // } else {
       m_trackIsolationTool.disable();
-    }
-
-    if(m_doCaloCellIsolation){
-        if (!m_caloCellIsolationTool.empty() && runIsoType.find("etcone") != runIsoType.end()) {
-            ATH_MSG_DEBUG("Retrieve CaloIsolationTool is empty");
-            if(m_caloCellIsolationTool.retrieve().isFailure()){
-                ATH_MSG_ERROR("Unable to retrieve " << m_caloCellIsolationTool);
-                return HLT::BAD_JOB_SETUP;
-            }
-            else {
-                ATH_MSG_DEBUG("Retrieved Tool "<<m_caloCellIsolationTool);
-                if (timerSvc()) m_timerIsoTool2 = addTimer("CaloCellIsolationTool");
-            }
-        } else {
-          m_caloCellIsolationTool.disable();
-        }
-    } else {
+    // }
+
+    // if(m_doCaloCellIsolation){
+    //     if (!m_caloCellIsolationTool.empty() && runIsoType.find("etcone") != runIsoType.end()) {
+    //         ATH_MSG_DEBUG("Retrieve CaloIsolationTool is empty");
+    //         if(m_caloCellIsolationTool.retrieve().isFailure()){
+    //             ATH_MSG_ERROR("Unable to retrieve " << m_caloCellIsolationTool);
+    //             return HLT::BAD_JOB_SETUP;
+    //         }
+    //         else {
+    //             ATH_MSG_DEBUG("Retrieved Tool "<<m_caloCellIsolationTool);
+    //             if (timerSvc()) m_timerIsoTool2 = addTimer("CaloCellIsolationTool");
+    //         }
+    //     } else {
+    //       m_caloCellIsolationTool.disable();
+    //     }
+    // } else {
       m_caloCellIsolationTool.disable();
-    }
-    if(m_doTopoIsolation){
-        if (!m_topoIsolationTool.empty() && runIsoType.find("topoetcone") != runIsoType.end()) {
-            ATH_MSG_DEBUG("Retrieve TopoIsolationTool is empty");
-            if(m_topoIsolationTool.retrieve().isFailure()){
-                ATH_MSG_ERROR("Unable to retrieve " << m_topoIsolationTool);
-                return HLT::BAD_JOB_SETUP;
-            }
-            else {
-                ATH_MSG_DEBUG("Retrieved Tool "<<m_topoIsolationTool);
-                if (timerSvc()) m_timerIsoTool3 = addTimer("topoIsolationTool");
-            }
-        } else {
-          m_topoIsolationTool.disable();
-        }
-    } else {
+    // }
+    // if(m_doTopoIsolation){
+    //     if (!m_topoIsolationTool.empty() && runIsoType.find("topoetcone") != runIsoType.end()) {
+    //         ATH_MSG_DEBUG("Retrieve TopoIsolationTool is empty");
+    //         if(m_topoIsolationTool.retrieve().isFailure()){
+    //             ATH_MSG_ERROR("Unable to retrieve " << m_topoIsolationTool);
+    //             return HLT::BAD_JOB_SETUP;
+    //         }
+    //         else {
+    //             ATH_MSG_DEBUG("Retrieved Tool "<<m_topoIsolationTool);
+    //             if (timerSvc()) m_timerIsoTool3 = addTimer("topoIsolationTool");
+    //         }
+    //     } else {
+    //       m_topoIsolationTool.disable();
+    //     }
+    // } else {
       m_topoIsolationTool.disable();
-    }
+    // }
     //print summary info
     ATH_MSG_INFO("REGTEST: xAOD Reconstruction for Run2" );
     ATH_MSG_INFO("REGTEST: Initialization completed successfully, tools initialized:  " );
@@ -631,28 +632,28 @@ HLT::ErrorCode TrigEgammaRec::hltExecute( const HLT::TriggerElement* inputTE,
     }
     
 
-    bool topoClusTrue = false; 
-    std::vector<const xAOD::CaloClusterContainer*> vectorClusterContainerTopo;
-    if(m_doTopoIsolation){
-        stat = getFeatures(inputTE, vectorClusterContainerTopo,m_topoClusterContName);
+    // bool topoClusTrue = false; 
+    // std::vector<const xAOD::CaloClusterContainer*> vectorClusterContainerTopo;
+    // if(m_doTopoIsolation){
+    //     stat = getFeatures(inputTE, vectorClusterContainerTopo,m_topoClusterContName);
     
-        if ( stat!= HLT::OK ) {
-            ATH_MSG_ERROR(" REGTEST: No CaloTopoClusterContainers retrieved for the trigger element");
-            //return HLT::OK; // If you did not get it, it is not a problem, continue!
-        }  
+    //     if ( stat!= HLT::OK ) {
+    //         ATH_MSG_ERROR(" REGTEST: No CaloTopoClusterContainers retrieved for the trigger element");
+    //         //return HLT::OK; // If you did not get it, it is not a problem, continue!
+    //     }  
              
-        //debug message
-        if ( msgLvl() <= MSG::VERBOSE){
-        msg() << MSG::VERBOSE << " REGTEST: Got " << vectorClusterContainerTopo.size()
-             << " CaloCTopoclusterContainers associated to the TE " << endmsg;
-        }
-        // Get the last ClusterContainer
-        if ( !vectorClusterContainerTopo.empty() ) {
-            const xAOD::CaloClusterContainer* clusContainerTopo = vectorClusterContainerTopo.back();
-            if (clusContainerTopo->size() > 0) topoClusTrue = true;
-            ATH_MSG_DEBUG("REGTEST: Number of topo containers : " << clusContainerTopo->size());
-        } // vector of Cluster Container empty?!
-    }
+    //     //debug message
+    //     if ( msgLvl() <= MSG::VERBOSE){
+    //     msg() << MSG::VERBOSE << " REGTEST: Got " << vectorClusterContainerTopo.size()
+    //          << " CaloCTopoclusterContainers associated to the TE " << endmsg;
+    //     }
+    //     // Get the last ClusterContainer
+    //     if ( !vectorClusterContainerTopo.empty() ) {
+    //         const xAOD::CaloClusterContainer* clusContainerTopo = vectorClusterContainerTopo.back();
+    //         if (clusContainerTopo->size() > 0) topoClusTrue = true;
+    //         ATH_MSG_DEBUG("REGTEST: Number of topo containers : " << clusContainerTopo->size());
+    //     } // vector of Cluster Container empty?!
+    // }
 
 
     if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG 
@@ -696,7 +697,7 @@ HLT::ErrorCode TrigEgammaRec::hltExecute( const HLT::TriggerElement* inputTE,
 
     // Shower Shape & CaloCellContainer
     const CaloCellContainer* pCaloCellContainer = 0;
-    const xAOD::CaloClusterContainer* pTopoClusterContainer = 0;
+    //const xAOD::CaloClusterContainer* pTopoClusterContainer = 0;
     
     // Get vector of pointers to all CaloCellContainers from TE
     std::string clusCollKey="";
@@ -744,7 +745,7 @@ HLT::ErrorCode TrigEgammaRec::hltExecute( const HLT::TriggerElement* inputTE,
                 if ( msgLvl() <= MSG::VERBOSE) msg() << MSG::VERBOSE << "Running m_showerBuilder: " << m_showerBuilder << endmsg;
             } //pCaloCellContainer
         }
-        if(topoClusTrue) pTopoClusterContainer = vectorClusterContainerTopo.back();
+        //if(topoClusTrue) pTopoClusterContainer = vectorClusterContainerTopo.back();
     }
 
     //**********************************************************************
@@ -1078,50 +1079,52 @@ HLT::ErrorCode TrigEgammaRec::hltExecute( const HLT::TriggerElement* inputTE,
         // Isolation
         //
         // Calo Isolation types
-        
-        if(m_doCaloCellIsolation || m_doTopoIsolation){       
-            if (timerSvc()) m_timerIsoTool2->start(); //timer
-            std::map<std::string,CaloIsoHelp>::iterator itc = m_egCaloIso.begin(), itcE = m_egCaloIso.end();
-            for (; itc != itcE; itc++) {
-                CaloIsoHelp isoH = itc->second;
-                std::string flav = itc->first;
-                bool bsc = false;
-                if (flav == "etcone" && pCaloCellContainer)
-                    bsc = m_caloCellIsolationTool->decorateParticle_caloCellIso(*eg, isoH.help.isoTypes, isoH.CorrList, pCaloCellContainer);
-                /*else if (flav == "topoetcone" )
-                    // Add check for topoclusters (when available);
-                    //bsc = m_topoIsolationTool->decorateParticle_topoClusterIso(*eg, isoH.help.isoTypes, isoH.CorrList, pTopoClusterContainer);*/
-                if (!bsc && flav=="etcone") 
-                    ATH_MSG_WARNING("Call to CaloIsolationTool failed for flavour " << flav);
-            }
-            ATH_MSG_DEBUG(" REGTEST: etcone20   =  " << getIsolation_etcone20(eg));
-            ATH_MSG_DEBUG(" REGTEST: etcone30   =  " << getIsolation_etcone30(eg));
-            ATH_MSG_DEBUG(" REGTEST: etcone40   =  " << getIsolation_etcone40(eg));
-            if (timerSvc()) m_timerIsoTool2->stop(); //timer
-        }
-        if(m_doTrackIsolation){
-            ATH_MSG_DEBUG("Running TrackIsolationTool for Electrons");
-
-            if (timerSvc()) m_timerIsoTool1->start(); //timer
-            if(m_egTrackIso.size() != 0) {
-                // Track Isolation types
-                std::map<std::string,TrackIsoHelp>::iterator itt = m_egTrackIso.begin(), ittE = m_egTrackIso.end();
-                for (; itt != ittE; itt++) {
-                    TrackIsoHelp isoH = itt->second;
-                    std::string flav  = itt->first;
-                    const std::set<const xAOD::TrackParticle*> tracksToExclude = xAOD::EgammaHelpers::getTrackParticles(eg, m_useBremAssoc); // For GSF this may need to be property
-                    // Need the decorate methods from IsolationTool
-                    bool bsc = m_trackIsolationTool->decorateParticle(*eg, isoH.help.isoTypes, isoH.CorrList, &leadTrkVtx, &tracksToExclude,pTrackParticleContainer);
-                    if (!bsc) 
-                        ATH_MSG_WARNING("Call to TrackIsolationTool failed for flavour " << flav);
-                }
-                ATH_MSG_DEBUG(" REGTEST: ptcone20   =  " << getIsolation_ptcone20(eg));
-                ATH_MSG_DEBUG(" REGTEST: ptcone30   =  " << getIsolation_ptcone30(eg));
-                ATH_MSG_DEBUG(" REGTEST: ptcone40   =  " << getIsolation_ptcone40(eg));
 
-            }
-            if (timerSvc()) m_timerIsoTool1->stop(); //timer       
-        }
+	// THIS IS NOW BROKEN. IS IT WORTH FIXING, OR WILL THIS BECOME OBSOLETE IN 22.0?
+        
+        // if(m_doCaloCellIsolation || m_doTopoIsolation){       
+        //     if (timerSvc()) m_timerIsoTool2->start(); //timer
+        //     std::map<std::string,CaloIsoHelp>::iterator itc = m_egCaloIso.begin(), itcE = m_egCaloIso.end();
+        //     for (; itc != itcE; itc++) {
+        //         CaloIsoHelp isoH = itc->second;
+        //         std::string flav = itc->first;
+        //         bool bsc = false;
+        //         if (flav == "etcone" && pCaloCellContainer)
+        //             bsc = m_caloCellIsolationTool->decorateParticle_caloCellIso(*eg, isoH.help.isoTypes, isoH.CorrList, pCaloCellContainer);
+        //         /*else if (flav == "topoetcone" )
+        //             // Add check for topoclusters (when available);
+        //             //bsc = m_topoIsolationTool->decorateParticle_topoClusterIso(*eg, isoH.help.isoTypes, isoH.CorrList, pTopoClusterContainer);*/
+        //         if (!bsc && flav=="etcone") 
+        //             ATH_MSG_WARNING("Call to CaloIsolationTool failed for flavour " << flav);
+        //     }
+        //     ATH_MSG_DEBUG(" REGTEST: etcone20   =  " << getIsolation_etcone20(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: etcone30   =  " << getIsolation_etcone30(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: etcone40   =  " << getIsolation_etcone40(eg));
+        //     if (timerSvc()) m_timerIsoTool2->stop(); //timer
+        // }
+        // if(m_doTrackIsolation){
+        //     ATH_MSG_DEBUG("Running TrackIsolationTool for Electrons");
+
+        //     if (timerSvc()) m_timerIsoTool1->start(); //timer
+        //     if(m_egTrackIso.size() != 0) {
+        //         // Track Isolation types
+        //         std::map<std::string,TrackIsoHelp>::iterator itt = m_egTrackIso.begin(), ittE = m_egTrackIso.end();
+        //         for (; itt != ittE; itt++) {
+        //             TrackIsoHelp isoH = itt->second;
+        //             std::string flav  = itt->first;
+        //             const std::set<const xAOD::TrackParticle*> tracksToExclude = xAOD::EgammaHelpers::getTrackParticles(eg, m_useBremAssoc); // For GSF this may need to be property
+        //             // Need the decorate methods from IsolationTool
+        //             bool bsc = m_trackIsolationTool->decorateParticle(*eg, isoH.help.isoTypes, isoH.CorrList, &leadTrkVtx, &tracksToExclude,pTrackParticleContainer);
+        //             if (!bsc) 
+        //                 ATH_MSG_WARNING("Call to TrackIsolationTool failed for flavour " << flav);
+        //         }
+        //         ATH_MSG_DEBUG(" REGTEST: ptcone20   =  " << getIsolation_ptcone20(eg));
+        //         ATH_MSG_DEBUG(" REGTEST: ptcone30   =  " << getIsolation_ptcone30(eg));
+        //         ATH_MSG_DEBUG(" REGTEST: ptcone40   =  " << getIsolation_ptcone40(eg));
+
+        //     }
+        //     if (timerSvc()) m_timerIsoTool1->stop(); //timer       
+        // }
      
         // PID
         ATH_MSG_DEBUG("about to run execute(eg) for PID");
@@ -1162,34 +1165,35 @@ HLT::ErrorCode TrigEgammaRec::hltExecute( const HLT::TriggerElement* inputTE,
         if (timerSvc()) m_timerTool5->stop(); //timer
         
         // Isolation
-        
-        if(m_doCaloCellIsolation || m_doTopoIsolation){       
-            if (timerSvc()) m_timerIsoTool2->start(); //timer
-            std::map<std::string,CaloIsoHelp>::iterator itc = m_egCaloIso.begin(), itcE = m_egCaloIso.end();
-            for (; itc != itcE; itc++) {
-                CaloIsoHelp isoH = itc->second;
-                std::string flav = itc->first;
-                bool bsc = false;
-                bool tbsc = false;
-                if (flav == "etcone" && pCaloCellContainer)
-                    bsc = m_caloCellIsolationTool->decorateParticle_caloCellIso(*eg, isoH.help.isoTypes, isoH.CorrList, pCaloCellContainer);
-                else if (flav == "topoetcone" && topoClusTrue)
-                    // Add check for topoclusters (when available);
-                    tbsc = m_topoIsolationTool->decorateParticle_topoClusterIso(*eg, isoH.help.isoTypes, isoH.CorrList, pTopoClusterContainer);
-                if (!bsc && m_doCaloCellIsolation && flav=="etcone") 
-                    ATH_MSG_WARNING("Call to CaloIsolationTool failed for flavour " << flav);
-                if (!tbsc && m_doTopoIsolation && flav =="topoetcone") 
-                    ATH_MSG_WARNING("Call to CaloTopoIsolationTool failed for flavour " << flav);
-            }
-            ATH_MSG_DEBUG(" REGTEST: etcone20   =  " << getIsolation_etcone20(eg));
-            ATH_MSG_DEBUG(" REGTEST: etcone30   =  " << getIsolation_etcone30(eg));
-            ATH_MSG_DEBUG(" REGTEST: etcone40   =  " << getIsolation_etcone40(eg));
-            ATH_MSG_DEBUG(" REGTEST: topoetcone20   =  " << getIsolation_topoetcone20(eg));
-            ATH_MSG_DEBUG(" REGTEST: topoetcone30   =  " << getIsolation_topoetcone30(eg));
-            ATH_MSG_DEBUG(" REGTEST: topoetcone40   =  " << getIsolation_topoetcone40(eg));
-
-            if (timerSvc()) m_timerIsoTool2->stop(); //timer
-        }
+
+	// BROKEN. WORTH FIXING, OR IS THIS FILE MOVING?
+        // if(m_doCaloCellIsolation || m_doTopoIsolation){       
+        //     if (timerSvc()) m_timerIsoTool2->start(); //timer
+        //     std::map<std::string,CaloIsoHelp>::iterator itc = m_egCaloIso.begin(), itcE = m_egCaloIso.end();
+        //     for (; itc != itcE; itc++) {
+        //         CaloIsoHelp isoH = itc->second;
+        //         std::string flav = itc->first;
+        //         bool bsc = false;
+        //         bool tbsc = false;
+        //         if (flav == "etcone" && pCaloCellContainer)
+        //             bsc = m_caloCellIsolationTool->decorateParticle_caloCellIso(*eg, isoH.help.isoTypes, isoH.CorrList, pCaloCellContainer);
+        //         else if (flav == "topoetcone" && topoClusTrue)
+        //             // Add check for topoclusters (when available);
+        //             tbsc = m_topoIsolationTool->decorateParticle_topoClusterIso(*eg, isoH.help.isoTypes, isoH.CorrList, pTopoClusterContainer);
+        //         if (!bsc && m_doCaloCellIsolation && flav=="etcone") 
+        //             ATH_MSG_WARNING("Call to CaloIsolationTool failed for flavour " << flav);
+        //         if (!tbsc && m_doTopoIsolation && flav =="topoetcone") 
+        //             ATH_MSG_WARNING("Call to CaloTopoIsolationTool failed for flavour " << flav);
+        //     }
+        //     ATH_MSG_DEBUG(" REGTEST: etcone20   =  " << getIsolation_etcone20(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: etcone30   =  " << getIsolation_etcone30(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: etcone40   =  " << getIsolation_etcone40(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: topoetcone20   =  " << getIsolation_topoetcone20(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: topoetcone30   =  " << getIsolation_topoetcone30(eg));
+        //     ATH_MSG_DEBUG(" REGTEST: topoetcone40   =  " << getIsolation_topoetcone40(eg));
+
+        //     if (timerSvc()) m_timerIsoTool2->stop(); //timer
+        // }
     
         // Particle ID
         if (timerSvc()) m_timerPIDTool3->start(); //timer
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/TrigT2CaloCommon/IReAlgToolCalo.h b/Trigger/TrigAlgorithms/TrigT2CaloCommon/TrigT2CaloCommon/IReAlgToolCalo.h
index 2794859df67b9995205e60d80febf4889d2f3c2a..b46b331d571bf8f8a0aec207e3fe663edbb6bcbd 100755
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/TrigT2CaloCommon/IReAlgToolCalo.h
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/TrigT2CaloCommon/IReAlgToolCalo.h
@@ -146,7 +146,7 @@ class IReAlgToolCalo: public virtual IAlgTool,
     It prints out a grid of cells eta and phi positions and energies.
     Only exist in DEBUG versions of the code. */
     void PrintCluster(const double energyFromAlg, const int nCaloType,const int nCaloSamp,
-		const CaloSampling::CaloSample, const CaloSampling::CaloSample );
+		const CaloSampling::CaloSample, const CaloSampling::CaloSample ) const;
 #endif
          /** Store All Calorimeter Cells in RoI in an StoreGate Container. */
          void storeCells(void);
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/src/IReAlgToolCalo.cxx b/Trigger/TrigAlgorithms/TrigT2CaloCommon/src/IReAlgToolCalo.cxx
index f6f43ca28767ef46c42566c9c03b7a45da2b198d..d08330d84d60ddaecb42a51387218fc31e1bd453 100755
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/src/IReAlgToolCalo.cxx
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/src/IReAlgToolCalo.cxx
@@ -108,7 +108,7 @@ void IReAlgToolCalo::PrintCluster(const double ARG(energyFromAlg),
                                 const int ARG(nCaloType),
                                 const int ARG(nCaloSamp),
                                 CaloSampling::CaloSample ARG(SAMP1), 
-                                CaloSampling::CaloSample ARG(SAMP2) )
+                                CaloSampling::CaloSample ARG(SAMP2) ) const
 #undef ARG
 {
 #ifdef EXTRADEBUG
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/comparitor.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/comparitor.cxx
index a4d2e83d79b7b9095913364b0aa908f209aacfcf..a9221fa7bdd332eeade91b541769da22686b65f1 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/comparitor.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/Analysis/src/comparitor.cxx
@@ -59,7 +59,6 @@ bool fulldbg = false;
 template<typename T=TH1F>
 T* Get( TFile& f, const std::string& n, const std::string& dir="", std::vector<std::string>* saved=0  ) { 
 
-
   std::string name;
 
   size_t pos = n.find("+");
@@ -80,6 +79,8 @@ T* Get( TFile& f, const std::string& n, const std::string& dir="", std::vector<s
     }
   }
 
+  if ( h ) h->SetDirectory(0);
+
   return h;
 }
 
diff --git a/Trigger/TrigEvent/TrigEventAthenaPool/share/TrigEventAthenaPool_16.0.3.3_test.py b/Trigger/TrigEvent/TrigEventAthenaPool/share/TrigEventAthenaPool_16.0.3.3_test.py
index e39ba7e125683b177fa8135644df20cdb0c63141..1a0b7c540e75d53d4f388cf9a011d6d98b3f73e0 100644
--- a/Trigger/TrigEvent/TrigEventAthenaPool/share/TrigEventAthenaPool_16.0.3.3_test.py
+++ b/Trigger/TrigEvent/TrigEventAthenaPool/share/TrigEventAthenaPool_16.0.3.3_test.py
@@ -164,7 +164,3 @@ from AthenaCommon.DetFlags      import DetFlags
 DetFlags.detdescr.Calo_setOn()
 
 include ('AthenaPoolUtilities/TPCnvTest.py')
-
-from TileConditions.TileInfoConfigurator import TileInfoConfigurator
-tileInfoConfigurator = TileInfoConfigurator()
-
diff --git a/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.cxx b/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.cxx
deleted file mode 100644
index 756254aa84f54f5989ac9923ef846a009b0658d4..0000000000000000000000000000000000000000
--- a/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.cxx
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "TrigL2CaloViewsMergerTool.h"
-
-
-TrigL2CaloViewsMergerTool::TrigL2CaloViewsMergerTool( const std::string& type, 
-							      const std::string& name, 
-							      const IInterface* parent ) 
-  : AthAlgTool( type, name, parent ) {}
-
-StatusCode TrigL2CaloViewsMergerTool::initialize() {
-  CHECK( m_mergedClustersKey.initialize() );
-  renounce( m_inViewClustersKey ); // this is an input no to be seen by scheduler
-  CHECK( m_inViewClustersKey.initialize() );
-  return StatusCode::SUCCESS;
-}
-
-StatusCode TrigL2CaloViewsMergerTool::merge( const EventContext& context, const ViewContainer& views ) const {
-
-  auto output = std::make_unique< ConstDataVector< xAOD::TrigEMClusterContainer > >();
-  output->clear( SG::VIEW_ELEMENTS );
-
-  for ( auto view : views ) {
-    // make input electrons 
-    EventContext viewContext( context );
-    viewContext.setExtension(  Atlas::ExtendedEventContext( view ) );
-    auto clustersInViewHandle = SG::makeHandle( m_inViewClustersKey, viewContext );
-    CHECK ( clustersInViewHandle.isValid() );
-    ATH_MSG_DEBUG( "Found: "<< clustersInViewHandle->size() << "clusters in view" );
-    for ( auto electron: *clustersInViewHandle ) {
-      output->push_back( electron );
-    }
-  }
-  ATH_MSG_DEBUG( "Output clusters container size: " << output->size() );
-  
-  auto outputHandle = SG::makeHandle( m_mergedClustersKey, context );
-  CHECK( outputHandle.record( std::move( output ) ) );  
-  return StatusCode::SUCCESS;
-}
diff --git a/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.h b/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.h
deleted file mode 100644
index 2a86bf3ecf6ea2823aba7c21018dbd4bd405ac84..0000000000000000000000000000000000000000
--- a/Trigger/TrigSteer/ViewAlgs/src/TrigL2CaloViewsMergerTool.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef TrigEgammaHypo_TrigL2CaloViewsMergeTool_h
-#define TrigEgammaHypo_TrigL2CaloViewsMergeTool_h
-
-
-#include "AthViews/IViewsMergerTool.h"
-#include "AthenaBaseComps/AthAlgTool.h"
-
-#include "AthViews/View.h"
-#include "AthContainers/ConstDataVector.h"
-#include "xAODTrigCalo/TrigEMClusterContainer.h"
-
-class TrigL2CaloViewsMergerTool : virtual public IViewsMergerTool, virtual public AthAlgTool {
-public:
-  TrigL2CaloViewsMergerTool( const std::string& type, 
-				 const std::string& name, 
-				 const IInterface* parent );
-  StatusCode initialize() override;
-  StatusCode merge( const EventContext& context, const ViewContainer& ) const override;
-
-private:
-  SG::ReadHandleKey< xAOD::TrigEMClusterContainer > m_inViewClustersKey {this, "InViewClusters", "L2CaloClustersInView", "Input"};
-  SG::WriteHandleKey< ConstDataVector<xAOD::TrigEMClusterContainer> > m_mergedClustersKey {this, "MergedClusters", "L2CaloClustersMerged", "Output"};
-};
-
-
-#endif
diff --git a/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.cxx b/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.cxx
deleted file mode 100644
index 55a4407cad0baefc489c5ecc76b00290efa62eba..0000000000000000000000000000000000000000
--- a/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.cxx
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "TrigL2ElectronViewsMergerTool.h"
-
-
-TrigL2ElectronViewsMergerTool::TrigL2ElectronViewsMergerTool( const std::string& type, 
-							      const std::string& name, 
-							      const IInterface* parent ) 
-  : AthAlgTool( type, name, parent ) {}
-
-StatusCode TrigL2ElectronViewsMergerTool::initialize() {
-  CHECK( m_mergedElectronsKey.initialize() );
-  renounce( m_inViewElectronsKey ); // this is an input no to be seen by scheduler
-  CHECK( m_inViewElectronsKey.initialize() );
-  return StatusCode::SUCCESS;
-}
-
-StatusCode TrigL2ElectronViewsMergerTool::merge( const EventContext& context, const ViewContainer& views ) const {
-
-  auto output = std::make_unique< ConstDataVector< xAOD::TrigElectronContainer > >();
-  output->clear( SG::VIEW_ELEMENTS );
-
-  for ( auto view : views ) {
-    // make input electrons 
-    EventContext viewContext( context );
-    viewContext.setExtension(  Atlas::ExtendedEventContext( view ) );
-    auto electronsInViewHandle = SG::makeHandle( m_inViewElectronsKey, viewContext );
-    CHECK ( electronsInViewHandle.isValid() );
-    ATH_MSG_DEBUG( "Found: "<< electronsInViewHandle->size() << "electrons in view" );
-    for ( auto electron: *electronsInViewHandle ) {
-      output->push_back( electron );
-    }
-  }
-  ATH_MSG_DEBUG( "Output electrons container size: " << output->size() );
-  
-  auto outputHandle = SG::makeHandle( m_mergedElectronsKey, context );
-  CHECK( outputHandle.record( std::move( output ) ) );  
-  return StatusCode::SUCCESS;
-}
diff --git a/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.h b/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.h
deleted file mode 100644
index 07c53fc3e650f82804ace001e01676a5ff5e359a..0000000000000000000000000000000000000000
--- a/Trigger/TrigSteer/ViewAlgs/src/TrigL2ElectronViewsMergerTool.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef TrigEgammaHypo_TrigL2ElectronViewsMergeTool_h
-#define TrigEgammaHypo_TrigL2ElectronViewsMergeTool_h
-
-
-#include "AthViews/IViewsMergerTool.h"
-#include "AthenaBaseComps/AthAlgTool.h"
-
-#include "AthViews/View.h"
-#include "AthContainers/ConstDataVector.h"
-#include "xAODTrigEgamma/TrigElectronContainer.h"
-
-
-class TrigL2ElectronViewsMergerTool : virtual public IViewsMergerTool, virtual public AthAlgTool {
-public:
-  TrigL2ElectronViewsMergerTool( const std::string& type, 
-				 const std::string& name, 
-				 const IInterface* parent );
-  StatusCode initialize() override;
-  StatusCode merge( const EventContext& context, const ViewContainer& ) const override;
-
-private:
-  SG::ReadHandleKey< xAOD::TrigElectronContainer > m_inViewElectronsKey {this, "InViewElectrons", "L2ElectronContainerInView", "Input"};
-  SG::WriteHandleKey< ConstDataVector<xAOD::TrigElectronContainer> > m_mergedElectronsKey {this, "MergedElectrons", "L2ElectronContainerMerged", "Output"};
-};
-
-
-#endif
diff --git a/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx b/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx
index 94cc6cc70c362fa93bb37d9c313c26412dbdf87a..be3e4f9570bc3ef023f3e97b3e3175e3b98b19f0 100644
--- a/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx
+++ b/Trigger/TrigSteer/ViewAlgs/src/components/ViewAlgs_entries.cxx
@@ -2,12 +2,9 @@
 
 #include "../EventViewCreatorAlgorithm.h"
 #include "../MergeViews.h"
-#include "../TrigL2ElectronViewsMergerTool.h"
-#include "../TrigL2CaloViewsMergerTool.h"
 
 
 
 DECLARE_COMPONENT( EventViewCreatorAlgorithm )
 DECLARE_COMPONENT( MergeViews )
-DECLARE_COMPONENT( TrigL2ElectronViewsMergerTool )
-DECLARE_COMPONENT( TrigL2CaloViewsMergerTool )
+
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt b/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt
index 251b42fc39640e77f625e4786f5169f206418d4f..d527409c3160c7ca89f61ac93dbd1a5c8c806495 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt
+++ b/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt
@@ -129,13 +129,13 @@ atlas_add_test( EmuStepProcessing
 		PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_emu_step_processing
 )
 
-file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_NewJO )
-atlas_add_test( NewJO
-		SCRIPT test/test_newJO.sh
-		EXTRA_PATTERNS "-s .*ERROR.*|.*newJOtest.pkl.*|TrigSignatureMoniMT .*DEBUG.*"
-                PROPERTIES TIMEOUT 500
-		PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_NewJO
-		)
+# file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_NewJO )
+# atlas_add_test( NewJO
+# 		SCRIPT test/test_newJO.sh
+# 		EXTRA_PATTERNS "-s .*ERROR.*|.*newJOtest.pkl.*|TrigSignatureMoniMT .*DEBUG.*"
+#                 PROPERTIES TIMEOUT 500
+# 		PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_NewJO
+# 		)
 
 file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_l1sim )
 atlas_add_test( l1sim
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py
deleted file mode 100644
index d5fe9fb9ca56d97a3a59d380d8d7b002a9fb9c67..0000000000000000000000000000000000000000
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFConfig.py
+++ /dev/null
@@ -1,349 +0,0 @@
-# Classes to configure the CF graph, via Nodes
-from AthenaCommon.CFElements import parOR, seqAND, seqOR
-from AthenaCommon.Logging import logging
-from AthenaCommon.AlgSequence import dumpSequence
-from TrigUpgradeTest.HLTCFDot import  stepCF_DataFlow_to_dot, stepCF_ControlFlow_to_dot, all_DataFlow_to_dot
-
-import sys
-import copy
-from AthenaCommon.Constants import VERBOSE,INFO,DEBUG
-log = logging.getLogger('HLTCFConfig')
-log.setLevel( VERBOSE )
-
-#### Here functions to create the CF tree from CF configuration objects
-def makeSummary(name, flatDecisions):
-    """ Returns a TriggerSummaryAlg connected to given decisions"""
-    from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg
-    summary = TriggerSummaryAlg( name, OutputLevel = 2 )
-    summary.InputDecision = "HLTChains"
-  
-    summary.FinalDecisions = flatDecisions
-    summary.HLTSummary = "MonitoringSummary"+name
-    return summary
-
-def makeMonitor(name, decisions, EnabledChainNames):
-    from TrigSteerMonitor.TrigSteerMonitorConf import TrigSignatureMoniMT, DecisionCollectorTool
-    mon = TrigSignatureMoniMT(name, OutputLevel = 2)
-    flatDecisions=[]
-    for step in decisions: flatDecisions.extend (step)
-    mon.FinalDecisions = flatDecisions
-    mon.L1Decisions = "HLTChainsResult" # connection with L1Decoder
-    from TrigUpgradeTest.TestUtils import MenuTest
-    mon.ChainsList = EnabledChainNames
-    tools=[]
-    for step in range (0, len(decisions)):
-        print "adding collector ",step
-        print decisions[step]
-        collect = DecisionCollectorTool("StepCollector%d"%step)
-        collect.Decisions = decisions[step]
-        print collect
-        tools.append(collect)
-    mon.CollectorTools=tools
-    print mon
-    return mon
-
-def makeStreamESD(name, flatDecisions):
-    import AthenaPoolCnvSvc.WriteAthenaPool
-    from OutputStreamAthenaPool.OutputStreamAthenaPool import  createOutputStream
-    StreamESD=createOutputStream(name,"myESD.pool.root",True)
-    StreamESD.OutputLevel=3
-    from AthenaCommon.AlgSequence import AlgSequence
-    topSequence = AlgSequence()
-    topSequence.remove( StreamESD )
-    def addTC(name):   
-        StreamESD.ItemList += [ "xAOD::TrigCompositeContainer#"+name, "xAOD::TrigCompositeAuxContainer#"+name+"Aux." ]
-
-    for tc in flatDecisions:
-        addTC( tc )
-
-    addTC("HLTSummary")
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("ESD file content: ")
-        log.debug( StreamESD.ItemList  )
-    return StreamESD
-
-
-def create_step_reco_node(name, seq_list, dump=False):
-    """ elementary HLT reco step, contianing all sequences of the step """
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("Create reco step %s with %d sequences", name, len(seq_list))
-    stepCF = parOR(name+"_reco")
-    for seq in seq_list:        
-        step_seq = create_CFSequence(seq)             
-        stepCF += step_seq
-    
-    if dump: dumpSequence (stepCF, indent=0)        
-    return stepCF
-
-
-def create_step_filter_node(name, seq_list, dump=False):
-    """ elementary HLT filter step: OR node containing all Filters of the sequences. The node gates execution of next reco step """
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("Create filter step %s with %d filters", name, len(seq_list))
-    stepCF = parOR(name+"_filter")
-    for seq in seq_list:
-        filterAlg=seq.filter.Alg                    
-        log.info("Add  %s to filter node %s", filterAlg.name(), name)
-        stepCF += filterAlg
-    
-    if dump: dumpSequence (stepCF, indent=0)        
-    return stepCF
-
-
-
-def create_step_sequence(name, filterAlg, rest,sublist):
-    """ elementary HLT step sequencer, filterAlg is gating, rest is anything that needs to happe within the step """
-    toadd=rest
-    for k, v in sublist.iteritems():
-        seq= seqAND(k, v)
-        toadd.append(seq)
-        
-    stepReco = parOR(name+"_reco", toadd)    
-    stepAnd = seqAND(name, [ filterAlg, stepReco ])
-    return stepAnd
-
-
-def create_CFSequence(CFseq):
-    """ Creates AthSequencer nodes with sequences attached """
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug(" *** Create CFSequence %s with FilterAlg %s *", CFseq.name, CFseq.filter.Alg.name())
-    filterAlg=CFseq.filter.Alg
-
-
-    stepReco = parOR(CFseq.name+"_reco") # all reco algoritms from al lthe sequences in a parallel sequence
-    seqAndView = seqAND(CFseq.name+"_view", [stepReco]) #include in seq:And to run in views: add here the Hypo
-    seqAndWithFilter = seqAND(CFseq.name, [filterAlg, seqAndView]) # add to the main step+filter
-    
-    for menuseq in CFseq.step.sequences:
-        ath_sequence=menuseq.sequence.Alg
-        subs = ath_sequence
-        stepReco += subs
-        seqAndView += menuseq.hypo.Alg 
-
-    if CFseq.step.isCombo:
-        seqAndView += CFseq.step.combo.Alg
-        print CFseq.step.combo.Alg
-        
-    return seqAndWithFilter
-
-
-def addChainToHypoAlg(hypoAlg, chain):
-    """ Tmp functions for Combo Hypo """
-    if "Comb" in hypoAlg.algname:
-        prop="Chains"
-        cval = hypoAlg.Alg.getProperties()[prop]
-        try:
-            cval.append(chain)
-            setattr(hypoAlg.Alg, prop, cval)
-        except:
-            pass
-
-
-#######################################
-## CORE of Decision Handling
-#######################################
-
-
-
-def makeHLTTree(HLTChains):
-    """ creates the full HLT tree"""
-   
-    #    TopHLTRootSeq = seqAND("TopHLTRoot") # Root
-    # main HLT top sequence
-    hltTop = seqOR( "hltTop")
-
-    #add the L1Upcacking
-#    TopHLTRootSeq += L1UnpackingSeq
-
-    # add the HLT steps Node
-    steps = seqAND("HLTAllSteps")
-    hltTop +=  steps
-    
-    # make CF tree
-    finalDecisions = decisionTree_From_Chains(steps, HLTChains)
-    EnabledChainNames = [c.name for c in HLTChains]
-    
-
-    flatDecisions=[]
-    for step in finalDecisions: flatDecisions.extend (step)
-    summary= makeSummary("TriggerSummaryFinal", flatDecisions)
-    #from TrigOutputHandling.TrigOutputHandlingConf import HLTEDMCreator
-    #edmCreator = HLTEDMCreator()
-    
-    #edmCreator.TrigCompositeContainer = flatDecisions
-    #summary.OutputTools= [ edmCreator ]
-    hltTop += summary
-    hltTop += makeMonitor("TriggerMonitorFinal", finalDecisions, EnabledChainNames)
-    #hltTop += makeStreamESD("StreamESD", flatDecisions)
-   
-    
-    from AthenaCommon.AlgSequence import AlgSequence
-    topSequence = AlgSequence()
-    topSequence += hltTop
-
-        
-
-def decisionTree_From_Chains(HLTNode, chains):
-    """ creates the decision tree, given the starting node and the chains containing the sequences  """
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("Run decisionTree_From_Chains on %s", HLTNode.name())
-
-    from TrigUpgradeTest.MenuComponents import CFSequence, RoRSequenceFilterNode, ComboMaker
-    HLTNodeName= HLTNode.name()
-
-    # find nsteps
-    NSTEPS=0
-    for chain in chains:
-        steps =len(chain.steps)
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("Adding chain %s with %d steps"%(chain.name,steps))
-        if NSTEPS < steps:
-            NSTEPS = steps
-            
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("Run on %d steps", NSTEPS)
-    
-
-    #loop over chains to configure hypotools
-    # must be done after all chains are created, to avoid conflicts 
-    for chain in chains:
-        chain.decodeHypoToolConfs()
-
-    finalDecisions = [] # needed for monitor
-    allSeq_list = []
-    for nstep in range(0, NSTEPS):
-        finalDecisions.append([]) # list of final deciisons per step
-        stepCF_name =  "Step%i"%(nstep+1)
-        CFseq_list = []
-        step_decisions = []
-        for chain in chains:
-            # skip this step if missing
-            if len(chain.steps) <= nstep:               
-                continue
-
-            chain_step=chain.steps[nstep]
-            if log.isEnabledFor(logging.DEBUG):
-                log.debug("\n************* Start step %d %s for chain %s", nstep+1, stepCF_name, chain.name)
-            
-            # one filter per step_chain
-            # one filter input per previous menusequence output (the L1Seed for first step)
-            # one filter output per menuSeq
-            
-            filter_input =[]
-            if nstep == 0: # L1 seeding
-                previous_sequence="".join(chain.group_seed)              
-                seeds=chain.group_seed
-                filter_input.extend( seeds )
-                if log.isEnabledFor(logging.DEBUG):
-                    log.debug("Found these seeds from the sequence: %s", seeds)
-                    log.debug("Seeds from this chain: %s", filter_input)
-                previous_seeds=seeds  
-                                      
-            else:
-                # from previous step, map the seuqence in the same order?
-                previous_sequence = chain_step.name
-                prev=chain.steps[nstep-1].sequences
-                previous_seeds=[]
-                for seq in prev:
-                    filter_input.extend(seq.outputs)
-                    previous_seeds.append( seq.seed)
-
-                if log.isEnabledFor(logging.DEBUG):    
-                    log.debug("Connect to previous sequence through these filter inputs: %s" %str( filter_input) )
-                if len(filter_input) != len(previous_seeds):
-                    log.error("found %d filter inputs and %d seeds", len(filter_input), len(previous_seeds))
-                    sys.exit("ERROR, in size")
-                    
-          
-            (sfilter, alreadyFoundFilter) = buildFilter(stepCF_name,previous_sequence, CFseq_list, chain, filter_input, previous_seeds)
-             
-            if not alreadyFoundFilter:
-                CF_seq = CFSequence( ChainStep=chain_step, FilterAlg=sfilter)
-                CFseq_list.append(CF_seq)
-                for sequence in chain_step.sequences:                
-                    step_decisions.extend(sequence.outputs)                
-            
-            if len(chain.steps) == nstep+1:  
-                if log.isEnabledFor(logging.DEBUG):
-                    log.debug("Adding finalDecisions for chain %s at step %d:"%(chain.name, nstep+1))
-                for seq in chain_step.sequences:
-                    finalDecisions[nstep].extend(seq.outputs)
-                    if log.isEnabledFor(logging.DEBUG):
-                        log.debug(seq.outputs)
-            
-            #end of loop over menu sequences
-                
-        #end of loop over chains for this step, now implement CF:
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("\n******** Create CF Tree %s with AthSequencers", stepCF_name)        
-        #first make the filter step
-        stepFilter = create_step_filter_node(stepCF_name, CFseq_list, dump=False)
-        HLTNode += stepFilter
-        allSeq_list.append(CFseq_list)
-
-        # then the reco step
-        stepCF = create_step_reco_node("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list, dump=False)
-        HLTNode += stepCF
-
-
-        # then the monitor summary
-        summary=makeSummary("TriggerSummary"+ stepCF_name, step_decisions)
-        HLTNode += summary
-
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("Now Draw...")
-        stepCF_DataFlow_to_dot("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list)
-        stepCF_ControlFlow_to_dot(stepCF)
-
-        if log.isEnabledFor(logging.DEBUG):
-            log.info("************* End of step %d, %s", nstep+1, stepCF_name)
-        # end of steps
-
-
-    if log.isEnabledFor(logging.DEBUG):
-        log.debug("finalDecisions: %s" %str( finalDecisions) )
-    all_DataFlow_to_dot(HLTNodeName, allSeq_list)
-    return finalDecisions
-
-
-
-## This can be simplified!
-def buildFilter(stepCF_name,previous_sequence, CFseq_list, chain, filter_input, previous_seeds):
-        from TrigUpgradeTest.MenuComponents import  RoRSequenceFilterNode
-#### Build the FILTER
-# one filter per previous sequence at the start of the sequence: check if it exists or create a new one        
-# if the previous hypo has more than one output, try to get all of them
-# one filter per previous sequence: 1 input/previous seq, 1 output/next seq 
-        filter_name="Filter%s_on_%s"%(stepCF_name,previous_sequence)
-        findFilter= [cfseq.filter for cfseq in CFseq_list if filter_name in cfseq.filter.algname]
-        n_filters = len(findFilter)
-        if n_filters == 1:
-            sfilter=findFilter[0]
-            sfilter.setChains(chain.name)
-            if log.isEnabledFor(logging.DEBUG):
-                log.debug("Filter %s already exists", filter_name)
-                log.debug("Adding chain %s to %s", chain.name,sfilter.algname)
-                log.debug(sfilter.getChains())
-
-
-        elif n_filters == 0:
-            sfilter = RoRSequenceFilterNode(name=filter_name)
-            for i in previous_seeds: sfilter.addSeed(i)
-            for i in filter_input: sfilter.addInput(i)                        
-            filter_out=["%s_from_%s"%(filter_name,i) for i in filter_input]
-            for o in filter_out: sfilter.addOutput(o)            
-            sfilter.setChains(chain.name)
-            if log.isEnabledFor(logging.DEBUG):
-                log.debug("Adding these seeds to filter: %s", previous_seeds)
-                log.debug("Filter Done: %s", sfilter.name)
-        else:
-            log.error("found %d filters  with name %s", n_filters, filter_name)
-            sys.exit("ERROR, in filter configuration")
-
-        return (sfilter,n_filters)
-
-
-
-
-
-    
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureConfig.py
index 94e07794262bb745ea29998c2cd2a49dc6a0ff9e..120ea01fe8060ed8c5b4cce723f92404bb8040f0 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/HLTSignatureConfig.py
@@ -15,7 +15,7 @@ def InputMakerAlg(name):
 # - declare all the RecoAlg and the HypoAlg -> create the Sequence
 # - creates the InputMaker, without the inputs
 
-from TrigUpgradeTest.MenuComponents import MenuSequence
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence
 from AthenaCommon.CFElements import parOR, seqAND, stepSeq
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py b/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py
deleted file mode 100644
index 112e19d9118dd09ab46671b97a705342bbbf1164..0000000000000000000000000000000000000000
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/MenuComponents.py
+++ /dev/null
@@ -1,607 +0,0 @@
-import sys, re, copy
-from AthenaCommon.Logging import logging
-from AthenaCommon.Constants import VERBOSE,INFO,DEBUG
-log = logging.getLogger('MenuComponents')
-log.setLevel( VERBOSE )
-logLevel=DEBUG
-
-from DecisionHandling.DecisionHandlingConf import RoRSeqFilter
-
-class Node():
-    """ base class representing one Alg + inputs + outputs, to be used to Draw dot diagrams and connect objects"""
-    def __init__(self, Alg):
-        self.name = ("%sNode")%( Alg.name())
-        self.Alg=Alg
-        self.algname = Alg.name()
-        self.inputs=[]
-        self.outputs=[]
-        
-    def addOutput(self, name):
-        self.outputs.append(name)
-
-    def addInput(self, name):
-        self.inputs.append(name)
-
-    def getOutputList(self):        
-        return self.outputs
-
-    def getInputList(self):        
-        return self.inputs
-
-    def __str__(self):
-        return "Node::%s  [%s] -> [%s]"%(self.algname, ' '.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):
-        Node.__init__(self, Alg)
-        self.outputProp=outputProp
-        self.inputProp=inputProp
-
-    def addDefaultOutput(self):
-        if self.outputProp is not '':
-            self.addOutput(("%s_%s"%(self.algname,self.outputProp)))
-        
-    def setPar(self, prop, name):
-        cval = self.Alg.getProperties()[prop]
-        try:
-            if type(cval) == type(list()):                
-                cval.append(name)
-                return setattr(self.Alg, prop, cval)
-            else:
-                return setattr(self.Alg, prop, name)
-        except:
-            pass
-
-    def getPar(self, prop):
-        try:
-            return getattr(self.Alg, prop)
-        except:
-            return self.Alg.getDefaultProperty(prop)
-        raise "Error in reading property " + prop + " from " + self.Alg
-
-    def addOutput(self, name):
-        if self.outputProp is not '':
-            return self.setPar(self.outputProp,name) 
-    
-    def getOutputList(self):
-        outputs = []
-        cval = self.getPar(self.outputProp)
-        if cval == '':
-            return outputs
-        if type(cval) == type(list()):  
-            outputs.extend(cval)
-        else:
-            outputs.append(cval)
-        return outputs
-  
-    def addInput(self, name):
-        if self.inputProp is not '':
-            return self.setPar(self.inputProp,name)
-    
-    def getInputList(self):
-        inputs = []
-        cval = self.getPar(self.inputProp)
-        if cval =='':
-            return inputs
-        if type(cval) == type(list()):  
-            inputs.extend(cval)
-        else:
-            inputs.append(cval)
-        return inputs
-
-    def __str__(self):
-        return "Alg::%s  [%s] -> [%s]"%(self.algname, ' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
-    
-
-class HypoToolConf():
-    """ Class to group info on hypotools"""
-    def __init__(self, hypoToolGen):
-        self.hypoToolGen = hypoToolGen
-        self.name=''
-        self.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 )
-
-        
-class HypoAlgNode(AlgNode):
-    """Node for HypoAlgs"""
-    def __init__(self, Alg):
-        assert isHypoBase(Alg), "Error in creating HypoAlgNode from Alg "  + Alg.name()
-        AlgNode.__init__(self, Alg, 'HypoInputDecisions', 'HypoOutputDecisions')
-        self.addDefaultOutput()
-        self.tools = []
-        self.previous=[]
-
-    def addHypoTool (self, hypoToolConf):
-        
-        if hypoToolConf.name 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 )
-        else:
-            raise RuntimeError("The hypo tool of name "+ hypoToolConf.name +" already present")
-           
-
-    def setPreviousDecision(self,prev):        
-        self.previous.append(prev)
-        return self.addInput(prev)
-
-    def __str__(self):
-        return "HypoAlg::%s  [%s] -> [%s], previous = [%s], HypoTools=[%s]"%(self.Alg.name(),' '.join(map(str, self.getInputList())),
-                                                                                 ' '.join(map(str, self.getOutputList())),
-                                                                                 ' '.join(map(str, self.previous)),
-                                                                                 ' '.join(map(str, self.tools)))
-
-
-
-
-class SequenceFilterNode(AlgNode):
-    """Node for any kind of sequence filter"""
-    def __init__(self, Alg, inputProp, outputProp):
-        AlgNode.__init__(self,  Alg, inputProp, outputProp)
-        self.seeds = []
-              
-    def setChains(self, name):
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("Adding Chain %s to filter %s"%(name, self.name))
-        return self.setPar("Chains", name)
-    
-    def getChains(self):
-        return self.getPar("Chains")
-
-    def addSeed(self, seed):
-        self.seeds.append(seed)
-
-    def __str__(self):
-        return "SequenceFilter::%s  [%s] -> [%s], seeds=[%s], chains=%s"%(self.Alg.name(),' '.join(map(str, self.getInputList())),' '.join(map(str, self.getOutputList())), ' '.join(map(str, self.seeds)), self.getChains()) 
-
-
-
-
-class RoRSequenceFilterNode(SequenceFilterNode):
-    def __init__(self, name):
-        Alg= RoRSeqFilter(name, OutputLevel = logLevel)
-        SequenceFilterNode.__init__(self,  Alg, 'Input', 'Output')
-
-
-
-class InputMakerNode(AlgNode):
-    def __init__(self, Alg):
-        assert isInputMakerBase(Alg), "Error in creating InputMakerNode from Alg "  + Alg.name()
-        AlgNode.__init__(self,  Alg, 'InputMakerInputDecisions', 'InputMakerOutputDecisions')
-        Alg.OutputLevel = logLevel
-
-
-from DecisionHandling.DecisionHandlingConf import ComboHypo
-class ComboMaker(AlgNode):
-    def __init__(self, name):
-        Alg = ComboHypo(name)
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("Making combo Alg %s"%name)
-        AlgNode.__init__(self,  Alg, 'HypoInputDecisions', 'HypoOutputDecisions')
-        Alg.OutputLevel = logLevel
-        self.prop="MultiplicitiesMap"
-
-
-    def addChain(self, chain):
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("ComboMaker %s adding chain %s"%(self.algname,chain))
-        from MenuChains import getConfFromChainName
-        confs=getConfFromChainName(chain)
-        for conf in confs:
-            seed=conf.replace("HLT_", "")
-            integers = map(int, re.findall(r'^\d+', seed))
-            multi=0
-            if len(integers)== 0:
-                multi=1
-            elif len(integers)==1:
-                multi=integers[0]
-                re.sub('^\d+',"",seed) #remove the multiplicity form the string
-            else:
-                sys.exit("ERROR in decoding combined chain %s"%(chain))
-
-            newdict={chain:[multi]}
-            cval = self.Alg.getProperties()[self.prop]            
-            if type(cval) == type(dict()):
-                if chain in cval.keys():
-                    cval[chain].append(multi)
-                else:
-                    cval[chain]=[multi]
-            else:
-                cval=newdict
-            setattr(self.Alg, self.prop, cval)
-            
-
-
-#########################################################
-# USEFULL TOOLS
-#########################################################
-
-def isHypoBase(alg):
-    if  'HypoInputDecisions'  in alg.__class__.__dict__:
-        return True
-    prop = alg.__class__.__dict__.get('_properties')
-    return  ('HypoInputDecisions'  in prop)
-
-def isInputMakerBase(alg):
-    return  ('InputMakerInputDecisions'  in alg.__class__.__dict__)
-
-def isFilterAlg(alg):
-    return isinstance(alg, RoRSeqFilter)
-        
-##########################################################
-# NOW sequences and chains
-##########################################################
-
-        
-class MenuSequence():
-    """ Class to group reco sequences with the Hypo"""
-    def __init__(self, Sequence, Maker,  Hypo, HypoToolGen ):
-        from AthenaCommon.AlgSequence import AthSequencer
-        self.name = "S_%s"%(Hypo.name()) # sequence name is based on hypo name
-        self.sequence     = Node( Alg=Sequence)
-        self.maker        = InputMakerNode( Alg = Maker )
-        self.hypoToolConf = HypoToolConf( HypoToolGen )
-        self.hypo         = HypoAlgNode( Alg = Hypo )
-        self.inputs=[]
-        self.outputs=[]
-        self.seed=''
-        self.reuse = False # flag to draw dot diagrmas
-
-    def replaceHypoForCombo(self, HypoAlg):
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("set new Hypo %s for combo sequence %s "%(HypoAlg.name(), self.name))
-        self.hypo= HypoAlgNode( Alg=HypoAlg)
-
-    def connectToFilter(self,sfilter):
-        filter_output = sfilter.getOutputList()
-        inputs=[filter_output[i] for i,fseed in enumerate (sfilter.seeds) if self.seed in fseed  ]
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("connectToFilter: found %d inputs to sequence::%s from Filter::%s (from seed %s)",
-                          len(inputs), self.name, sfilter.algname, self.seed)
-            for i in inputs: log.debug("- "+i)
-        if len(inputs) == 0:
-                sys.exit("ERROR, no inputs to sequence are set!")
-        for inp in inputs:
-            new_output = "%s_from_%s"%(self.hypo.algname, inp)
-            self.hypo.addOutput(new_output)
-            self.outputs.append( new_output)
-        
-        #### Connect the InputMaker
-        for i in inputs:
-            self.maker.addInput(i)
-            self.inputs.append(i)
-        input_maker_output=["%s_from_%s"%(self.maker.algname,i)  for i in inputs  ]
-        if len(input_maker_output) == 0:
-            sys.exit("ERROR, no outputs to sequence are set!")
-        for out in input_maker_output:
-            self.maker.addOutput(out) 
-            self.hypo.setPreviousDecision(out)
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("connectToFilter: connecting InputMaker to HypoAlg: adding %d output to InputMaker::%s and sending to HypoAlg::%s",
-                          len(inputs), self.maker.algname, self.hypo.algname)
-        for i in inputs: log.debug(i)
-
-    def __str__(self):
-        return "MenuSequence::%s \n Hypo::%s \n Maker::%s \n Sequence::%s"%(self.name, self.hypo, self.maker, self.sequence)
-
-    
-class Chain:
-    """Basic class to define the trigger menu """
-    def __init__(self, name, Seed, ChainSteps=[]):
-        self.name = name
-        self.seed=Seed
-        self.steps=ChainSteps         
-        self.vseeds = Seed.strip().split("_")        
-        self.vseeds.pop(0) #remove first L1 string
-        # group_seed is used to se tthe seed type (EM, MU,JET), removing the actual threshold
-        self.group_seed  = ["L1"+filter(lambda x: x.isalpha(), stri) for stri in self.vseeds]
-        self.setSeedsToSequences() # save seed of each menuseq
-        if log.isEnabledFor(logging.DEBUG):
-            log.debug("Chain " + name + " with seeds: %s "%str( self.vseeds))
-
-        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
-        tot_seq=len(sequences1)
-        tot_seed=len(self.vseeds)
-        if tot_seq==tot_seed:
-            nseq=0
-            for seed in self.vseeds:
-                for step in self.steps:
-                    seq=step.sequences[nseq]
-                    seq.seed ="L1"+filter(lambda x: x.isalpha(), seed)
-                    if log.isEnabledFor(logging.DEBUG):
-                        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") 
-        
-    def decodeHypoToolConfs(self):
-        """ This is extrapolating the hypotool configuration from the (combined) chain name"""
-        from MenuChains import getConfFromChainName
-        signatures = getConfFromChainName(self.name)
-        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)))
-                sys.exit("ERROR, in chain configuration")
-            nseq=0
-            for seq in step.sequences:
-                seq.hypoToolConf.setConf(signatures[nseq])
-                seq.hypoToolConf.setName(self.name)
-                seq.hypo.addHypoTool(seq.hypoToolConf)
-                nseq +=1
-                
-
-class CFSequence():
-    """Class to describe the ChainStep + filter"""
-    def __init__(self, ChainStep, FilterAlg):
-        self.name = ChainStep.name   # not needed?     
-        self.filter = FilterAlg
-        self.step=ChainStep
-        self.connect()
-
-    def connect(self):
-        """Connect filter to ChainStep (all its sequences)"""
-        for seq in self.step.sequences:
-            seq.connectToFilter(self.filter)
-
-        if self.step.isCombo: self.connectCombo()
-
-    def connectCombo(self):
-        # 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)
-            log.debug("Adding inputs %s to combo %s"%(combo_input, self.step.combo.algname))
-            # inputs are the output decisions of the hypos of the sequences
-            # outputs are the modified name of input deciions that need to be connected to the next filter
-            combo_output="combo_%s"%combo_input
-            self.step.combo.addOutput(combo_output)
-            seq.outputs.append(combo_output)
-            log.debug("Adding outputs %s to combo %s"%(combo_output, self.step.combo.algname))
-        
-    
-    def __str__(self):
-        return "--- CFSequence %s ---\n + Filter: %s \n +  %s \n "%(self.name,\
-            self.filter, self.step )
-          
-
-
-
-
-class ChainStep:
-    """Class to describe one step of a chain; if more than one menuSequence, then the step is combo"""
-    def __init__(self, name,  Sequences=[]):
-        self.name = name
-        self.sequences=[]
-        self.isCombo=len(Sequences)>1
-        self.combo=None
-        if self.isCombo:            
-            self.makeCombo(Sequences)
-        else:
-            self.sequences = Sequences
-
-
-    def replaceSequence(self, old, new):
-        # maybe obsolete?
-        idx=self.sequences.index(old) # this raise exception
-        self.sequences.pop(idx)
-        self.sequences.insert(idx, new)
-
-    def makeCombo(self, Sequences):        
-        # For combo sequences, duplicate the Hypo with a Combo_name and create the comboHypoAlg
-        self.combo = ComboMaker("ComboHypo_%s"%self.name)
-        for sequence in Sequences:
-            new_sequence=copy.deepcopy(sequence)
-            new_sequence.name=("%s_Combo"%sequence.name)
-            oldhypo=sequence.hypo.Alg
-            new_hypoAlg=oldhypo.clone("%s_Combo"%oldhypo.name())
-            new_sequence.replaceHypoForCombo(new_hypoAlg)
-            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) ))
-
-
-
-# this is fragment for New JO
-
-    
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-class InEventReco( ComponentAccumulator ):
-    """ Class to handle in-event reco """
-    pass
-
-
-class InViewReco( ComponentAccumulator ):
-    """ Class to handle in-view reco, sets up the View maker if not provided and exposes InputMaker so that more inputs to it can be added in the process of assembling the menu """
-    def __init__(self, name, viewMaker=None):
-        super( InViewReco, self ).__init__()
-        self.name = name
-        from AthenaCommon.CFElements import parOR, seqAND
-        self.mainSeq = seqAND( name )
-        self.addSequence( self.mainSeq )
-
-        from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
-        if viewMaker:
-            self.viewMakerAlg = viewMaker 
-        else:
-            from AthenaCommon.Constants import DEBUG
-            self.viewMakerAlg = EventViewCreatorAlgorithm(name+'ViewsMaker',
-                                                          ViewFallThrough = True,
-                                                          RoIsLink        = 'initialRoI', # -||-
-                                                          InViewRoIs      = name+'RoIs',
-                                                          Views           = name+'Views',
-                                                          ViewNodeName    = name+"InView",
-                                                          OutputLevel=DEBUG)
-
-        self.addEventAlgo( self.viewMakerAlg, self.mainSeq.name() )
-        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_", "") ) )
-
-    def addInput(self, inKey, outKey ):
-        """Adds input (DecisionsContainer) from which the views should be created """
-        self.viewMakerAlg.InputMakerInputDecisions += [ inKey ]
-        self.viewMakerAlg.InputMakerOutputDecisions += [ outKey ]
-
-    def addRecoAlg( self, alg ):
-        """Reconstruction alg to be run per view"""
-        self.addEventAlgo( alg, self.viewsSeq.name() )
-
-    def sequence( self ):
-        return self.mainSeq
-
-    def inputMaker( self ):
-        return self.viewMakerAlg 
-
-
-class RecoFragmentsPool:
-    """ Class to host all the reco fragments that need to be reused """
-    fragments = {}
-    @classmethod
-    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. 
-        The flags are not part of unique identifier as creation of new reco fragments should not be caused by difference in the unrelated flags.
-        """
-        
-        from AthenaCommon.Logging import logging
-        requestHash = hash( ( creator, tuple(kwargs.keys()), tuple(kwargs.values()) ) ) 
-        if requestHash not in cls.fragments:
-            recoFragment = creator( flags, **kwargs )
-            cls.fragments[requestHash] = recoFragment
-            log.debug( "created reconstruction fragment" )
-            return recoFragment
-        else:
-            log.debug( "reconstruction fragment from the cache" )
-            return cls.fragments[requestHash]
-
-           
-class NJMenuSequence( ComponentAccumulator ):
-    def __init__( self, name ):
-        super( NJMenuSequence, self ).__init__()
-        from AthenaCommon.CFElements import seqAND
-        self.name = name
-        self.mainSeq = seqAND( name )
-        self.addSequence( self.mainSeq )
-        self.filterAlg =  None
-        self.reco = None
-        self.hypoAlg = None
-
-    def addReco( self, reco ):
-        """ Adds reconstruction sequence, has to be one of InViewReco or InEventReco objects """
-        assert self.filterAlg, "The filter alg has to be setup first"
-        self.reco = reco
-        reco.addInputFromFilter( self.filterAlg )
-        self.addSequence( reco.sequence(), self.mainSeq.name() )
-        self.merge( reco )
-
-    def addFilter( self, chains, inKey ):
-        """ adds filter alg of type RoRSeqFilter, output key is predefined by the sequence name as: Filtered + the name"""
-        from DecisionHandling.DecisionHandlingConf import RoRSeqFilter
-        self.filterAlg = RoRSeqFilter( self.name+'Filter' )
-        self.filterAlg.Input       = [ inKey ]
-        self.filterAlg.Output      = [ 'Filtered_'+self.name ]
-        self.filterAlg.Chains      = chains
-        from AthenaCommon.Constants import DEBUG
-        self.filterAlg.OutputLevel = DEBUG
-        self.addEventAlgo( self.filterAlg, self.mainSeq.name() )
-
-    def hypoDecisions( self ):
-        return "Decisions_"+self.name
-
-    def addHypo( self, hypo ):
-        self.hypoAlg = hypo
-        self.hypoAlg.HypoInputDecisions = self.reco.inputMaker().InputMakerOutputDecisions[-1]
-        self.hypoAlg.HypoOutputDecisions = self.hypoDecisions()
-        self.addEventAlgo( hypo, self.mainSeq.name() )
-
-    def sequence( self ):
-        return self.mainSeq
-
-    def filter( self ):
-        return self.filterAlg
-
-    def check( self ):
-        assert self.filterAlg, "Filter not configured"
-        assert self.hypoAlg, "Hypo alg is not configured"
-
-
-class HLTMenuAccumulator( ComponentAccumulator ):
-    def __init__( self ):
-        super( HLTMenuAccumulator, self ).__init__()
-        from AthenaCommon.CFElements import seqAND
-        HLTSteps =  seqAND( "HLTSteps" )
-        self.addSequence( HLTSteps )
-
-    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
-       # make sure that sequences for previous steps are in place
-       for p in range( 1, step ):
-           self.__getOrMakeStepSequence( p, isFilter = True )
-           self.__getOrMakeStepSequence( p, isFilter = False )
-       # make sure that filtering steps is placed before reco steps
-       if not isFilter:
-           self.__getOrMakeStepSequence( step, isFilter = True )
-       s = parOR( name )
-       self.addSequence( s, parentName="HLTSteps")
-       return s
-
-
-    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)
-        """
-        for stepNo, fhSeq in enumerate( steps, 1 ):
-            filterStep = self.__getOrMakeStepSequence( stepNo, isFilter = True )
-            filterStep += fhSeq.filter() # FilterHypoSequence API
-
-            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/TrigValidation/TrigUpgradeTest/share/DictFromChainName.py b/Trigger/TrigValidation/TrigUpgradeTest/share/DictFromChainName.py
deleted file mode 100644
index e9280f7e0bc1e22e7510af74da467c4f7fe3e505..0000000000000000000000000000000000000000
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/DictFromChainName.py
+++ /dev/null
@@ -1,261 +0,0 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
-"""
-
-Class to obtain the chain configuration dictionary from the short or long name
-
-Authors: Catrin Bernius, Joerg Stelzer, Moritz Backes
-Written in December 2013
-Re-written for AthenaMT starting in July 2017
-
-"""
-__author__  = 'Moritz Backes & Catrin Bernius & Joerg Stelzer'
-__version__=""
-__doc__="Obtaining Dictionaries from Chain Names"
-
-from AthenaCommon.Logging import logging
-logging.getLogger().info("Importing %s",__name__)
-log = logging.getLogger('TriggerMenu.menu.DictFromChainName')
-
-include("TrigUpgradeTest/SignatureDicts.py")
-
-
-class DictFromChainName(object):
-
-    def getChainDict(self,chainInfo):
-        log.debug("chainInfo %s", chainInfo)
-        
-        m_chainName = chainInfo[0]
-        m_L1item = chainInfo[1]
-        m_L1items_chainParts=[]
-
-        log.debug("Analysing chain with name: %s", m_chainName)
-        chainProp = self.analyseShortName(m_chainName,  m_L1items_chainParts, m_L1item)
-        log.debug('ChainProperties: %s', chainProp)
-               
-        if (chainProp['L1item']== ''): chainProp['L1item'] = m_L1item
-
-        import pprint
-        pp = pprint.PrettyPrinter(indent=4, depth=8)
-        log.info('FINAL dictionary: %s', pp.pformat(chainProp))
-
-        return chainProp
-
-    def analyseShortName(self, chainName, L1items_chainParts, L1item_main):
-        """
-        Function to obtain the chain configuration dictionay from the short name 
-        by parsing its components and finding the corrsponding properties which 
-        are defined in SliceDicts
-        """        
-        from copy import deepcopy
-
-        # ---- dictionary with all chain properties ----
-        finalChainDict = deepcopy(ChainDictTemplate)
-        finalChainDict['chainName'] = chainName
-        
-        # ---- specific chain part information ----
-        cparts = chainName.split("_") 
-        log.debug("cparts: %s", cparts)
-                   
-        # ---- Find the signature defining patterns as BasePattern ----
-        # ---- <Multiplicity(int)><TriggerType(str)><Threshold(int)><etra,...(str|str+int)> ----
-        pattern = getBasePattern()
-
-        # ---- define some dictionaries ----
-        chainPartDicts=[] # stores the list of dictionaries in case of multiple chain parts
-        mdicts=[] # generated when checking for the BasePattern
-        multichainindex=[]
-        signatureNames = []
-
-        # ---- Loop over all chain name parts ----
-        for cpart in cparts:
-            log.debug("Looping over cpart: %s", cpart)
-
-            m = pattern.match(cpart)
-            if m: 
-                log.debug("Pattern found in this string: %s", cpart)
-                m_groupdict = m.groupdict()
-                multiChainIndices = [i for i in range(len(chainName)) if ( chainName.startswith(cpart, i) ) ]
-                log.debug("MultiChainIndices: %s", multiChainIndices)
-                for theMultiChainIndex in multiChainIndices:
-                    # this check is necessary for the bjet chains, example: j45_bloose_3j45
-                    if (theMultiChainIndex != 0) & (chainName[theMultiChainIndex-1] != '_'): continue
-                    if not theMultiChainIndex in multichainindex:
-                        multichainindex.append(theMultiChainIndex)
-                log.debug("multichainindex: %s", multichainindex)
-                                        
-                m_groupdict['signature'] = getSignatureNameFromToken(cpart)
-                sigToken = getSignatureNameFromToken(cpart)
-                if sigToken not in signatureNames: signatureNames.append(sigToken)
-                mdicts.append(m_groupdict)
-                    
-            else: 
-                log.info('not a BasePattern, continue with analysis')
-           
-        # ---- If multiple parts exist, split the string and analyse each  ----
-        # ---- part depending on the signature it belongs to ----
-        multichainparts=[]
-        multichainindex = sorted(multichainindex, key=int)
-        cN = chainName
-        for i in reversed(multichainindex):
-            if i!=0:
-                log.debug('Appending to multichainparts (i!=0): %s', chainName[i:len(cN)])
-                multichainparts.append(chainName[i:len(cN)])
-                cN = cN[0:i-1]
-            else:
-                log.debug('Appending to multichainparts: %s', chainName[i:len(cN)])
-                multichainparts.append(cN)
-        log.debug("multichainparts: %s",multichainparts)
-
-        # ---- build the chainProperties dictionary for each part of the chain ----
-        # ---- add it to a chainPartDicts ----
-        multichainparts.reverse()
-        for chainindex, chainparts in enumerate(multichainparts):
-            chainProperties = {} #will contain properties for one part of chain if multiple parts
-            log.debug('chainparts %s', chainparts)
-
-            # ---- check if L1 item is specified in chain Name ----
-            L1itemfromChainName = ''; L1item = ''; 
-            chainpartsNoL1 = chainparts
-            
-            # Checking for L1 item for chain part and overall in the name and the L1 for the overall chain
-            if (chainparts.count("_L1") > 1):
-                # get position of all L1 items
-                import re
-                allL1indices = [match.start() for match in re.finditer(re.escape("_L1"), chainparts)]
-                allL1items = []
-                m_chainparts = deepcopy(chainparts)
-                for index in reversed(allL1indices):
-                    newindex = index+1
-                    m_newitem = m_chainparts[newindex:]  
-                    m_chainparts = m_chainparts[:newindex-1]
-                    newitem = m_newitem[:2]+'_'+m_newitem[2:]
-                    allL1items.append(newitem)
-                    
-                allL1items.reverse()            
-                if (allL1items[1] != L1item_main):
-                    log.error("Typo in chain name for overall L1 item? Please check again")
-                else:  # remove the L1 item from the chain name
-                    chainparts = chainparts[:allL1indices[1]]
-                    
-                if (allL1items[0] not in L1items_chainParts):
-                    log.error("L1 chain part " +L1items_chainParts+" does not match the one in the chain name "+allL1items[0])
-
-            #this only finds the FIRST instance on L1
-            L1index = chainparts.find('_L1')                                         
-            log.debug('chainparts: %s', chainparts)
-            log.debug('L1index: %s', L1index)
-            if L1index != -1:
-                L1index = L1index+1 # to compensate the _
-                L1itemfromChainName = chainparts[L1index:]
-                if (L1itemfromChainName[2]=='_'):
-                    raise RuntimeError('ERROR IN CHAIN NAME: L1 items are specified as e.g. *_L1EM4, not *_L1_EM4')
-                else:
-                    L1item = L1itemfromChainName[:2]+'_'+L1itemfromChainName[2:]
-                    if (L1item[-1] == '_'): L1item = L1item[:-1]
-                        
-                chainpartsNoL1 = chainparts[:L1index-1] # -1 to also remove _
- 
-            else: 
-                log.debug('No L1 item specified in the name')
-                
-            # ---- assign L1 to chain parts from L1 item list in menu ----
-            # ---- check if enough L1 items given for chain parts ----
-            if (len(L1items_chainParts) > 0):
-                if (len(L1items_chainParts) != len(multichainparts)):
-                    log.info("Not enough L1 items for chain parts of chain %s defined", finalChainDict['chainName'])
-
-                chainProperties['L1item'] = L1items_chainParts[chainindex]                
-                if (L1item !=  chainProperties['L1item']) & (L1item !=''):
-                    log.info("L1 item in name (%s) of chain %s does not match with given L1item list (%s)!",
-                                 L1item, chainName, chainProperties['L1item'])
-            else:
-                log.debug('No L1 item specified in the name')
-
-            parts = chainpartsNoL1.split('_')
-            parts = filter(None,parts)
-
-            # ---- start writing first base pattern info into dict and remove it afterwards ----
-            chainProperties['trigType']=mdicts[chainindex]['trigType']
-            chainProperties['extra']=mdicts[chainindex]['extra']
-            multiplicity = mdicts[chainindex]['multiplicity'] if not mdicts[chainindex]['multiplicity'] == '' else '1'
-            chainProperties['multiplicity'] = multiplicity
-            chainProperties['threshold']=mdicts[chainindex]['threshold']
-            chainProperties['signature']=mdicts[chainindex]['signature']
-
-            # ---- if we have a L1 topo in a multi-chain then we want to remove it from the chain name
-            # but only if it's the same as the L1item_main; otherwise it belongs to chain part and we keep it ----
-            chainProperties['chainPartName'] = chainparts
-            if ('-' in L1item) and (len(multichainparts) > 1) and (L1item_main == L1item):
-                chainProperties['chainPartName'] = chainpartsNoL1                
-            ## if we have the overall L1 item in a multi-part chains, then we want to remove it from the chain part name
-            if( L1item==L1item_main and (len(multichainparts) > 1) and (L1item.count("_") > 1 )):                
-                chainProperties['chainPartName'] = chainpartsNoL1
-                                
-            log.debug('Chainparts: %s', chainparts)
-            parts.pop(0)
-
-            # ---- import the relevant dictionaries for each part of the chain ---- 
-            SignatureDefaultValues, allowedSignaturePropertiesAndValues = getSignatureInformation(chainProperties['signature'])
-            log.debug('SignatureDefaultValues: %s', SignatureDefaultValues)
-            
-            # ---- update chain properties with default properties ----
-            sigDefault = deepcopy(SignatureDefaultValues)
-            sigDefault.update(chainProperties)
-            chainProperties = sigDefault
-
-            # ---- check remaining parts for complete machtes in allowedPropertiesAndValues Dict ----
-            parts = filter(None, parts)     #removing empty strings from list
-
-            matchedparts = []
-            for pindex, part in enumerate(parts):
-                origpart = part
-                for prop, allowedValues in allowedSignaturePropertiesAndValues.items():
-                    if part in allowedValues:
-                        if type(chainProperties[prop]) == list:
-                            chainProperties[prop] += [part]
-                        else:
-                            chainProperties[prop] = part
-                        matchedparts.append(part)
-                        
-            log.debug("matched parts %s", matchedparts)
-            leftoverparts = set(parts)-set(matchedparts)
-            log.debug('leftoverparts %s', leftoverparts)
-            for pindex, part in enumerate(leftoverparts):
-                for prop, allowedValues in allowedSignaturePropertiesAndValues.items():
-                    if prop in chainProperties.keys():  continue
-                    for aV in allowedValues:
-                        if (aV in part):
-                            if (chainProperties['signature'] in ['Egamma', 'Muon'] )& (prop in ['trkInfo','hypoInfo']):
-                                chainProperties[prop] = part
-                                part = part.replace(part,'')
-                            elif (chainProperties['signature'] in ['Jet'] )& (prop in ['gscThreshold']):
-                                chainProperties[prop] = part
-                                part = part.replace(part,'')
-                            else:                                    
-                                chainProperties[prop] = aV
-                                part = part.replace(aV,'')
-                                break # done with allowed values for that property
-                            
-                if len(part.split())>0:
-                    raise RuntimeError("These parts of the chain name %s are not understood %r" % (origpart,part))
-
-            # ---- remove properties that aren't allowed in the chain properties for a given siganture ----
-            forbiddenProperties = set(chainProperties.keys()) - set(allowedSignaturePropertiesAndValues.keys())
-            log.debug('%s', set(chainProperties.keys()))
-            log.debug('%s', set(allowedSignaturePropertiesAndValues.keys()))
-            for fb in forbiddenProperties:
-                forbiddenValue = chainProperties.pop(fb)
-                if forbiddenValue != '':
-                    raise RuntimeError("Property %s not allowed for signature '%s', but specified '%s'" % (fb, chainProperties['signature'], forbiddenValue))
-                
-            # ---- the info of the general and the specific chain parts dict ----
-            chainPartDicts.append(chainProperties)
-
-        # ---- depending on if signatures are different in this chain, break up the chainProperties dictionary ----
-        # ---- finally also taking care of the signatrue key ----
-        finalChainDict['chainParts'] = chainPartDicts
-        finalChainDict['signature'] = chainPartDicts[0]['signature']
-        log.debug('finalChainDict that is passed as Final dict %s', finalChainDict)
-             
-        return finalChainDict
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py
index a639b04d4487642f7170ad2c6ed493cd7886bca3..f706bb9f39567fe4c3f026a0316608ce5ee8ac50 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuStepProcessingTest.py
@@ -69,8 +69,8 @@ from AthenaCommon.CFElements import parOR, seqAND, stepSeq
 
 
 # signatures
-from TrigUpgradeTest.HLTCFConfig import makeHLTTree
-from TrigUpgradeTest.MenuComponents import MenuSequence, Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, Chain, ChainStep
 
 
 doMuon=True
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/HLTCF.py b/Trigger/TrigValidation/TrigUpgradeTest/share/HLTCF.py
index b4830f123486e4f69d47327648f502694b1833a9..01d7c3160608024394729bae65bdc5019dd71e31 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/HLTCF.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/HLTCF.py
@@ -20,7 +20,7 @@ def remember(name, instance):
 
 
 from AthenaCommon.CFElements import parOR, seqAND, stepSeq
-from TrigUpgradeTest.HLTCFConfig import *
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import *
 
 def seqFilter(name, Inputs=[], Outputs=[], Chains=[]):
     from DecisionHandling.DecisionHandlingConf import RoRSeqFilter, DumpDecisions
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/TriggerMenuMT.py b/Trigger/TrigValidation/TrigUpgradeTest/share/TriggerMenuMT.py
deleted file mode 100644
index 4339e1bb59db0935f3f30cb0a15ee0936e41901e..0000000000000000000000000000000000000000
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/TriggerMenuMT.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#-------------------------
-# Imports
-#-------------------------
-# logging 
-from AthenaCommon.Logging import logging
-logging.getLogger().info("Importing %s",__name__)
-log = logging.getLogger('TriggerMenuMT')
-
-include("TrigUpgradeTest/DictFromChainName.py")
-
-#-------------------------
-# List of chains to run
-#-------------------------
-def triggerMenuList():
-    # --- Input formate for now:
-    # --- ['chainName',  'L1itemforchain']
-
-    electrons =[
-        ['HLT_e20', 'L1_EM15'],
-        ['HLT_e30', 'L1_EM24VHI'],
-        ['HLT_e30_ringer', 'L1_EM24VHI'],
-        ]
-
-    photons = [ 
-        ['HLT_g100', 'L1_EM24VHI'],
-        ['HLT_2g50', 'L1_2EM15VH' ],
-        ]
-
-    muons =[
-        ['HLT_mu20', 'L1_MU20' ],
-        ['HLT_mu8', 'L1_MU6'],
-        ['HLT_2mu8', 'L1_2MU4'],
-        ]
-    
-    allchains = electrons + photons + muons
-    log.info('List of all chains to run: %s', allchains)
-    return allchains
-
-
-#-------------------------
-# GenerateMenu class:
-# assembels it all
-#-------------------------
-class GenerateMenu:
-
-    def generate(self):
-        log.info('GenerateMenu.generate')
-        
-        # get names of chains to be generated
-        chainsInMenu = triggerMenuList()
-        log.info('chainsInMenu %s', chainsInMenu)
-        
-        # get chain dict for each chain
-        myChainDict = DictFromChainName()
-    
-        for chain in chainsInMenu:
-            log.info('Processing chain:  %s', chain)
-            chainDicts = myChainDict.getChainDict(chain)
-        
-        import pprint
-        pp = pprint.PrettyPrinter(indent=4, depth=8)
-        log.info('FINAL dictionary: %s', pp.pformat(chainDicts))
-                
-        # use info from dictionary to send it to the right signature
-                    
-        # in the relevant signature, use the info from dict to assemble the correct 
-
-
-
-
-    
-
-
-
-
-
-
-    
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py
index ed9ef3a38df1e18ae7f958138fab02a812ff4d32..52de3b4f178e295f4d56bff8e7f8b3a13d3f0cca 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.menu.py
@@ -8,7 +8,7 @@ include("TrigUpgradeTest/testHLT_MT.py")
 ##########################################
 # menu
 ##########################################
-from TrigUpgradeTest.MenuComponents import Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
 from TrigUpgradeTest.egammaMenuDefs import fastCaloSequence, electronSequence
 
 fastCaloStep= fastCaloSequence()
@@ -70,7 +70,7 @@ topSequence.L1DecoderTest.prescaler.Prescales = ["HLT_e3_etcut:2", "HLT_2e3_etcu
 ##########################################
 
 ##### Make all HLT #######
-from TrigUpgradeTest.HLTCFConfig import makeHLTTree
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
 makeHLTTree(testChains)
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
index 9d4cfdbb3bb1825b4bc9ae08eb7dc7766fb5d210..34fa6bf7f6559507b04f8d6912a1fc55f0c98390 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
@@ -67,13 +67,14 @@ def createFastCaloSequence(rerun=False):
    clusterMaker.ClustersName=clustersKey
    svcMgr.ToolSvc.TrigDataAccess.ApplyOffsetCorrection=False
 
-   from TrigMultiVarHypo.TrigL2CaloRingerFexMTInit import init_ringer
-   trigL2CaloRingerFexMT = init_ringer()
-   trigL2CaloRingerFexMT.ClustersKey = clusterMaker.ClustersName
-   trigL2CaloRingerFexMT.OutputLevel = DEBUG    
+   # from TrigMultiVarHypo.TrigL2CaloRingerFexMTInit import init_ringer
+   # trigL2CaloRingerFexMT = init_ringer()
+   # trigL2CaloRingerFexMT.ClustersKey = clusterMaker.ClustersName
+   # trigL2CaloRingerFexMT.OutputLevel = DEBUG    
    
    
-   fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker, trigL2CaloRingerFexMT ])
+   #fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker, trigL2CaloRingerFexMT ])
+   fastCaloInViewAlgs = seqAND( __prefix+"fastCaloInViewAlgs", [ clusterMaker ])
 
    filterL1RoIsAlg = RoRSeqFilter( __prefix+"filterL1RoIsAlg")
    filterL1RoIsAlg.Input = [__l1RoIDecisions]
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaMenu.ref
index 2a3176651600b37a12ed5e7e31374a2690a15eed..499ce7b5ba5254a3eb0bb8da3f8f6bec23e57555 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaMenu.ref
@@ -98,9 +98,6 @@ TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e5_etcut ID#607
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -108,6 +105,6 @@ TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerMonitorFinal                               DEBUG HLT_e3_etcut1step             20        20        18        0         18        
-TriggerMonitorFinal                               DEBUG HLT_e3_etcut                  20        9         8         17        59        
-TriggerMonitorFinal                               DEBUG HLT_e5_etcut                  20        20        17        17        68        
-TriggerMonitorFinal                               DEBUG HLT_e7_etcut                  20        20        15        17        66        
+TriggerMonitorFinal                               DEBUG HLT_e3_etcut                  20        9         8         16        56        
+TriggerMonitorFinal                               DEBUG HLT_e5_etcut                  20        20        17        16        65        
+TriggerMonitorFinal                               DEBUG HLT_e7_etcut                  20        20        15        16        63        
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
index 41a2162f042ee9a582bbb4110fa6374d2e63fb1b..e066b59aba4cb93ce18c1dab6cdc212711abf609 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.py
@@ -15,7 +15,7 @@ include("TrigUpgradeTest/testHLT_MT.py")
 # nightly/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-opt/XML/TriggerMenuXML/LVL1config_Physics_pp_v7.xml
 ##########################################
 
-from TrigUpgradeTest.MenuComponents import Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
 
 EnabledElChains = []
 EnabledMuChains = []
@@ -115,7 +115,7 @@ topSequence.L1DecoderTest.ChainToCTPMapping = EnabledChainNamesToCTP
 ##########################################
 
 ##### Make all HLT #######
-from TrigUpgradeTest.HLTCFConfig import makeHLTTree
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
 makeHLTTree(testChains)
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
index 6822c26b413f831a201b7a75af35191ba9f4d2bd..02e3f47cfa1b6f9a501b17669ffdb635f4a5baf8 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/fullMenu.ref
@@ -118,9 +118,6 @@ TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e5_etcut ID#607
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep1                     18  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e5_etcut ID#607406625
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
-TriggerSummaryStep2                     18  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e5_etcut ID#607406625
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e3_etcut1step ID#1509456583
 TriggerSummaryStep1                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
@@ -129,9 +126,9 @@ TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e5_etcut ID#607
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e7_etcut ID#2430733989
 TriggerSummaryStep2                     19  0     DEBUG  +++ HLT_e3_etcut ID#2711808158
 TriggerMonitorFinal                               DEBUG HLT_e3_etcut1step             20        20        18        0         18        
-TriggerMonitorFinal                               DEBUG HLT_e3_etcut                  20        20        18        18        72        
-TriggerMonitorFinal                               DEBUG HLT_e5_etcut                  20        20        17        18        71        
-TriggerMonitorFinal                               DEBUG HLT_e7_etcut                  20        20        15        18        69        
+TriggerMonitorFinal                               DEBUG HLT_e3_etcut                  20        20        18        17        69        
+TriggerMonitorFinal                               DEBUG HLT_e5_etcut                  20        20        17        17        68        
+TriggerMonitorFinal                               DEBUG HLT_e7_etcut                  20        20        15        17        66        
 TriggerMonitorFinal                               DEBUG HLT_mu6                       20        20        3         0         6         
 TriggerMonitorFinal                               DEBUG HLT_2mu6                      20        20        0         0         0         
 TriggerMonitorFinal                               DEBUG HLT_mu6Comb                   20        20        3         2         10        
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/mu.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/mu.menu.py
index b83b02c9d43365f5041dc1e5108cca4ba3a0dfcc..1455d659d3b5a094c9238e7ee117c0ce180a8c10 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/mu.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/mu.menu.py
@@ -29,11 +29,11 @@ AlgScheduler.setDataLoaderAlg( 'SGInputLoader' )
 
 
 # menu components   
-from TrigUpgradeTest.HLTCFConfig import decisionTree_From_Chains
-from TrigUpgradeTest.MenuComponents import MenuSequence, Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import decisionTree_From_Chains
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, Chain, ChainStep
 
 ### CF construction ###
-from TrigUpgradeTest.MenuComponents import Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
 from TrigUpgradeTest.egammaMenuDefs import fastCaloSequence, electronSequence
 
 
@@ -44,7 +44,7 @@ if  TriggerFlags.doMuon==True:
     # menu
     ##########################################
 
-    from TrigUpgradeTest.MenuComponents import Chain, ChainStep
+    from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
     from TrigUpgradeTest.muMenuDefs import muFastStep, muCombStep, muonEFSAStep, muIsoStep, doL2SA, doL2CB, doEFSA, doL2ISO
 
     MenuChains  = []
@@ -137,5 +137,5 @@ if  TriggerFlags.doMuon==True:
     ##########################################
 
     ##### Make all HLT #######
-    from TrigUpgradeTest.HLTCFConfig import makeHLTTree
+    from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
     makeHLTTree(MenuChains)
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/muMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/muMenu.ref
index 8725aa0fa8486b6cf2b543d2dd82122a2ba36de3..a78fd072b88baf566f810dd024e03384816e0c31 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/muMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/muMenu.ref
@@ -6,7 +6,5 @@ TriggerSummaryStep1                     2   0     DEBUG  +++ HLT_mu6fast ID#2393
 TriggerSummaryStep1                     5   0     DEBUG  +++ HLT_mu6 ID#1672162766
 TriggerSummaryStep1                     5   0     DEBUG  +++ HLT_mu6fast ID#2393852230
 TriggerMonitorFinal                               DEBUG HLT_mu6fast                   10        10        3         0         0         3         
-TriggerMonitorFinal                               DEBUG HLT_mu6                       0         0         0         0         0         0         
-TriggerMonitorFinal                               DEBUG HLT_2mu6                      0         0         0         0         0         0         
 TriggerMonitorFinal                               DEBUG HLT_mu6                       10        10        3         0         0         3         
 TriggerMonitorFinal                               DEBUG HLT_2mu6                      10        10        1         0         0         1         
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
index 3c8c5c70fc234c1614687b9ceb3f32f2348a99e9..7c7b7774d736cdc768f4950eff72d376a776861c 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/photon.menu.py
@@ -31,7 +31,7 @@ for unpack in topSequence.L1DecoderTest.rerunRoiUnpackers:
 ##########################################
 # menu
 ##########################################
-from TrigUpgradeTest.MenuComponents import Chain, ChainStep
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep
 from TrigUpgradeTest.photonMenuDefs import fastCaloSequence, photonSequence
 
 calostep=fastCaloSequence()
@@ -54,7 +54,7 @@ topSequence.L1DecoderTest.ChainToCTPMapping = EnabledChainNamesToCTP
 ##########################################
 
 ##### Make all HLT #######
-from TrigUpgradeTest.HLTCFConfig import makeHLTTree
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree
 makeHLTTree(testChains)
 
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/photonMenu.ref b/Trigger/TrigValidation/TrigUpgradeTest/share/photonMenu.ref
index 5a1a5e1760920930546f41212f431ae912b9822e..6ce72edb1f3ea4e13238c94c74718aa152cd3bfd 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/photonMenu.ref
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/photonMenu.ref
@@ -1,5 +1,3 @@
-TriggerSummaryStep1                     2   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
-TriggerSummaryStep2                     2   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     5   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     5   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     7   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
@@ -8,4 +6,4 @@ TriggerSummaryStep1                     8   0     DEBUG  +++ HLT_g5_etcut ID#140
 TriggerSummaryStep2                     8   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep1                     9   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
 TriggerSummaryStep2                     9   0     DEBUG  +++ HLT_g5_etcut ID#1407390618
-TriggerMonitorFinal                               DEBUG HLT_g5_etcut                  10        10        0         5         5         
+TriggerMonitorFinal                               DEBUG HLT_g5_etcut                  10        10        0         4         4         
diff --git a/Trigger/TriggerCommon/TriggerMenu/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenu/CMakeLists.txt
index c96cd1457fe7f37d57ff92c7b0f5f0fbacddaccf..fa766915a7fe50f44166b430edc576d260afb2d2 100644
--- a/Trigger/TriggerCommon/TriggerMenu/CMakeLists.txt
+++ b/Trigger/TriggerCommon/TriggerMenu/CMakeLists.txt
@@ -55,11 +55,6 @@ function( atlas_run_lowestunprescaled )
       ${CMAKE_CURRENT_BINARY_DIR}/LowestUnprescaledLists/unprescaled
       COMMAND ${CMAKE_BINARY_DIR}/atlas_build_run.sh
       ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/generateUnprescaledLists.py ${CMAKE_CURRENT_BINARY_DIR}/LowestUnprescaledLists/unprescaled
-      COMMAND ${CMAKE_COMMAND} -E make_directory
-      ${CMAKE_PYTHON_OUTPUT_DIRECTORY}/TriggerMenu
-      COMMAND ${CMAKE_COMMAND} -E copy_directory
-      ${CMAKE_CURRENT_BINARY_DIR}/LowestUnprescaledLists/unprescaled/
-      ${CMAKE_PYTHON_OUTPUT_DIRECTORY}/TriggerMenu/api/
       COMMAND ${CMAKE_COMMAND} -E touch
       ${CMAKE_CURRENT_BINARY_DIR}/unprescaled.stamp
       DEPENDS "Package_$<JOIN:$<TARGET_PROPERTY:ATLAS_PACKAGES_TARGET,ATLAS_PACKAGES>,;Package_>" )
@@ -88,7 +83,7 @@ function( atlas_run_lowestunprescaled )
    # executed after the previous code. So by this time the files should be
    # in place, if they could be produced.
    install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/LowestUnprescaledLists/unprescaled/
-      DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/TriggerMenu
+      DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/TriggerMenu/api
       USE_SOURCE_PERMISSIONS
       FILES_MATCHING PATTERN "list*.py" )
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
index f80326d98f910612eb1d558204a7fcc96e45cc8a..eb786fad010c7fcf8ae7fd7a9ff7eb3a1aa296e5 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
+++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt
@@ -87,7 +87,7 @@ function( atlas_build_lvl1_trigger_menu menu )
    if( NOT TARGET TriggerMenuMTMain )
       add_custom_target( TriggerMenuMTMain ALL
          COMMAND ${CMAKE_COMMAND} -E echo
-         "TriggerMenuMT: LVL1 menu generation build succeeded" )
+         "TriggerMenuMT: Package build succeeded" )
    endif()
    add_dependencies( TriggerMenuMTMain build_menu_${menu} )
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
index 454fa3d13cd8dc3ec68dbe8d1b3115c9e714a219..0d9a3e76ba28731732e87c54a683eb35a9946dd2 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
@@ -1,218 +1,72 @@
 # Classes to configure the CF graph, via Nodes
-from AthenaCommon.CFElements import parOR, seqAND, stepSeq
-
-
-allAlgs={}
-def useExisting(name):
-    global allAlgs
-    return allAlgs[name]
-
-def AlgExisting(name):
-    global allAlgs
-    return name in allAlgs
-
-
-def remember(name, instance):
-    global allAlgs
-    allAlgs[name] = instance
-    return instance
-
-
-class AlgNode():
-    def __init__(self, Alg, inputProp, outputProp):
-        self.name = ("%s_%s_%s")%( Alg.name(), inputProp, outputProp)
-        self.algname = Alg.name()
-        self.outputProp=outputProp
-        self.inputProp=inputProp
-        self.configureAlg(Alg)
-                
-    def configureAlg(self, Alg):
-        alg_name = Alg.getName()
-        if AlgExisting(alg_name):
-            print "AlgNode::%s: found already Alg %s"%(self.name,alg_name)
-            self.Alg = useExisting(alg_name)
-        else:
-            print "AlgNode::%s: new Alg %s"%(self.name,alg_name)
-            self.Alg=Alg
-            remember(alg_name, self.Alg)
-            
-        if self.Alg is  None:
-            return
-
-        self.addDefaultOutput()
-
-    def addDefaultOutput(self):
-        print "This is main addDefaultOutput"
-        self.setOutput(("%s_%s_out"%(self.algname,self.outputProp)))
-        #self.setOutput(("%s_out"%(self.name)))
-        
-
-    def setPar(self, prop, name):
-        cval = self.Alg.getProperties()[prop]
-        try:
-            if type(cval) == type(list()):                
-                cval.append(name)
-                setattr(self.Alg, prop, cval)
-            else:
-                setattr(self.Alg, prop, name)
-        except:
-            pass
-
-    def setParArray(self, prop, name):
-        cval = self.Alg.getProperties()[prop]
-        try:
-            cval.append(name)
-            setattr(self.Alg, prop, cval)
-        except:
-            pass
- 
-    def getPar(self, prop):
-        try:
-            return getattr(self.Alg, prop)
-        except:
-            return self.Alg.getDefaultProperty(prop)
-        raise "Error in reading property " + prop + " from " + self.Alg
-
-
-    def setOutput(self, name):
-        return self.setPar(self.outputProp,name)
-
-    def getOutput(self):
-        return self.getPar(self.outputProp)
-
-    def getOutputList(self):
-        outputs = []
-        cval = self.getOutput()
-        if type(cval) == type(list()):  
-            outputs.extend(cval)
-        else:
-            outputs.append(cval)
-        return outputs
-    
-    def setInput(self, name):
-        return self.setPar(self.inputProp,name)
-
-    def addInput(self, name):
-        return self.setParArray(self.inputProp,name)
-    
-    def getInput(self):
-        return self.getPar(self.inputProp)
-
-    def getInputList(self):
-        inputs = []
-        cval = self.getInput()
-        if type(cval) == type(list()):  
-            inputs.extend(cval)
-        else:
-            inputs.append(cval)
-        return inputs
-
-    def __str__(self):
-        return "Alg::%s  [%s] -> [%s]"%(self.name,' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
-
-
- 
-class HypoAlgNode(AlgNode):
-    def __init__(self, Alg, inputProp, outputProp):
-        AlgNode.__init__(self, Alg, inputProp, outputProp)
-        self.tools = []
-        self.previous=[]
-       
-
-    def addHypoTool(self, hypotool):
-        if "Comb" in self.name: ###TMP combo, only one threshold
-            import re
-            thresholds = map(int, re.findall(r'\d+', hypotool.getName()))
-            self.setPar('Threshold1', thresholds[0])
-            self.setPar('Threshold2', thresholds[1])
-            status=self.setPar('DecisionLabel', hypotool.getName())
-        else:
-            self.tools.append(hypotool.getName())
-            status= self.setParArray('HypoTools',hypotool)        
-        return status
-
-    def addPreviousDecision(self,prev):
-        self.previous.append(prev)
-        status= self.setParArray('previousDecisions',prev)
-        return status
-
-    def setPreviousDecision(self,prev):
-        if "Comb" in self.name: ###TMP combo: how handle previous decisions in combo?            
-            self.previous.append(prev)
-            if  "from_L1MU" in prev:
-                if "pt" in self.getPar("Property1"):
-                    status= self.setPar('previousDecisions1',prev)
-                if "pt" in self.getPar("Property2"):
-                    status= self.setPar('previousDecisions2',prev)
-
-            if  "from_L1EM" in prev:
-                if "et" in self.getPar("Property1"):
-                    status= self.setPar('previousDecisions1',prev)
-                if "et" in self.getPar("Property2"):
-                    status= self.setPar('previousDecisions2',prev)
-
-            if  "Output1" in prev:
-                status= self.setPar('previousDecisions1',prev)
-            if  "Output2" in prev:
-                status= self.setPar('previousDecisions2',prev)
-
-        else:
-            self.previous.append(prev)
-            status= self.setPar('previousDecisions',prev)
-        return status
-    
-    def __str__(self):
-        return "HypoAlg::%s  [%s] -> [%s], previous = [%s], HypoTools=[%s] --> Alg %s"%(self.name,' '.join(map(str, self.getInputList())),
-                                                                                 ' '.join(map(str, self.getOutputList())),
-                                                                                 ' '.join(map(str, self.previous)),
-                                                                                 ' '.join(map(str, self.tools)), self.Alg)
-
-
-
-class SequenceFilterNode(AlgNode):
-    def __init__(self, Alg, inputProp, outputProp):
-        AlgNode.__init__(self,  Alg, inputProp, outputProp)
-        
-    def addDefaultOutput(self):
-        print "This is SequenceFilter addDefaultOutput"
-        return #do nothing    
-       
-    def setChains(self, name):
-        return self.setPar("Chains", name)
-    
-    def getChains(self):
-        return self.getPar("Chains")
-
-
-from TrigUpgradeTest.TrigUpgradeTestConf import HLTTest__TestRoRSeqFilter
-class TestRoRSequenceFilterNode(SequenceFilterNode):       
-    def __init__(self, name):
-        Alg= HLTTest__TestRoRSeqFilter(name, OutputLevel = 2)
-        inputProp='Inputs'
-        outputProp='Outputs'
-        SequenceFilterNode.__init__(self,  Alg, inputProp, outputProp)
-        if "Step1" in self.name: # so that we see events running through, will be gone once L1 emulation is included
-            self.Alg.AlwaysPass = True   
-  
-   
-
-from DecisionHandling.DecisionHandlingConf import RoRSeqFilter, DumpDecisions
-class RoRSequenceFilterNode(SequenceFilterNode):
-    def __init__(self, name):
-        Alg= RoRSeqFilter(name, OutputLevel = 2)
-        inputProp='Input'
-        outputProp='Output'
-        SequenceFilterNode.__init__(self,  Alg, inputProp, outputProp)
-        
-
+from AthenaCommon.CFElements import parOR, seqAND, seqOR
+from AthenaCommon.Logging import logging
+from AthenaCommon.AlgSequence import dumpSequence
+from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFDot import  stepCF_DataFlow_to_dot, stepCF_ControlFlow_to_dot, all_DataFlow_to_dot
 
+import sys
+import copy
+from AthenaCommon.Constants import VERBOSE,INFO,DEBUG
+log = logging.getLogger('HLTCFConfig')
+log.setLevel( VERBOSE )
 
 #### Here functions to create the CF tree from CF configuration objects
-
-
-from AthenaCommon.AlgSequence import dumpSequence
-def create_step_reco_node(name, seq_list, dump=0):
-    print "Create reco step %s with %d sequences"%(name, len(seq_list))
+def makeSummary(name, flatDecisions):
+    """ Returns a TriggerSummaryAlg connected to given decisions"""
+    from DecisionHandling.DecisionHandlingConf import TriggerSummaryAlg
+    summary = TriggerSummaryAlg( name, OutputLevel = 2 )
+    summary.InputDecision = "HLTChains"
+  
+    summary.FinalDecisions = flatDecisions
+    summary.HLTSummary = "MonitoringSummary"+name
+    return summary
+
+def makeMonitor(name, decisions, EnabledChainNames):
+    from TrigSteerMonitor.TrigSteerMonitorConf import TrigSignatureMoniMT, DecisionCollectorTool
+    mon = TrigSignatureMoniMT(name, OutputLevel = 2)
+    flatDecisions=[]
+    for step in decisions: flatDecisions.extend (step)
+    mon.FinalDecisions = flatDecisions
+    mon.L1Decisions = "HLTChainsResult" # connection with L1Decoder
+    from TrigUpgradeTest.TestUtils import MenuTest
+    mon.ChainsList = EnabledChainNames
+    tools=[]
+    for step in range (0, len(decisions)):
+        print "adding collector ",step
+        print decisions[step]
+        collect = DecisionCollectorTool("StepCollector%d"%step)
+        collect.Decisions = decisions[step]
+        print collect
+        tools.append(collect)
+    mon.CollectorTools=tools
+    print mon
+    return mon
+
+def makeStreamESD(name, flatDecisions):
+    import AthenaPoolCnvSvc.WriteAthenaPool
+    from OutputStreamAthenaPool.OutputStreamAthenaPool import  createOutputStream
+    StreamESD=createOutputStream(name,"myESD.pool.root",True)
+    StreamESD.OutputLevel=3
+    from AthenaCommon.AlgSequence import AlgSequence
+    topSequence = AlgSequence()
+    topSequence.remove( StreamESD )
+    def addTC(name):   
+        StreamESD.ItemList += [ "xAOD::TrigCompositeContainer#"+name, "xAOD::TrigCompositeAuxContainer#"+name+"Aux." ]
+
+    for tc in flatDecisions:
+        addTC( tc )
+
+    addTC("HLTSummary")
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("ESD file content: ")
+        log.debug( StreamESD.ItemList  )
+    return StreamESD
+
+
+def create_step_reco_node(name, seq_list, dump=False):
+    """ elementary HLT reco step, contianing all sequences of the step """
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("Create reco step %s with %d sequences", name, len(seq_list))
     stepCF = parOR(name+"_reco")
     for seq in seq_list:        
         step_seq = create_CFSequence(seq)             
@@ -222,64 +76,59 @@ def create_step_reco_node(name, seq_list, dump=0):
     return stepCF
 
 
-def create_step_filter_node(name, seq_list, dump=0):
-    print "Create filter step %s with %d filters"%(name, len(seq_list))
+def create_step_filter_node(name, seq_list, dump=False):
+    """ elementary HLT filter step: OR node containing all Filters of the sequences. The node gates execution of next reco step """
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("Create filter step %s with %d filters", name, len(seq_list))
     stepCF = parOR(name+"_filter")
     for seq in seq_list:
         filterAlg=seq.filter.Alg                    
-        print "Add  %s to filter node %s"%(filterAlg.name(),name)
+        log.info("Add  %s to filter node %s", filterAlg.name(), name)
         stepCF += filterAlg
     
     if dump: dumpSequence (stepCF, indent=0)        
     return stepCF
 
 
-def create_CFSequence(CFseq):   
-    print "\n * Create CFSequence %s"%(CFseq.name)
-    filterAlg=CFseq.filter.Alg
-   
-    nodes = CFseq.getAllNodes()
-    algos = []
-    for node in nodes:
-        algos.append(node.Alg)
-
-    algos=list(set(algos))
-
-    step_seq = create_step_sequence( CFseq.name, filterAlg=filterAlg, rest=algos)       
-    return step_seq
 
-def create_step_sequence(name, filterAlg, rest):
+def create_step_sequence(name, filterAlg, rest,sublist):
     """ elementary HLT step sequencer, filterAlg is gating, rest is anything that needs to happe within the step """
-    stepReco = parOR(name+"_reco", rest)
+    toadd=rest
+    for k, v in sublist.iteritems():
+        seq= seqAND(k, v)
+        toadd.append(seq)
+        
+    stepReco = parOR(name+"_reco", toadd)    
     stepAnd = seqAND(name, [ filterAlg, stepReco ])
     return stepAnd
-  
 
-def find_stepCF_algs(step_list):
-    algos = []
-    for step in step_list:
-        #print "Finding algos of step %s"%step
-        step_algs = []
-        step_algs.append(step.filter)
-        for seq in step.menuSeq.nodeSeqList:
-            step_algs.extend(seq.algs )
-            step_algs.append(seq.hypo)
-        algos.extend(step_algs)
-    return algos        
-            
 
+def create_CFSequence(CFseq):
+    """ Creates AthSequencer nodes with sequences attached """
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug(" *** Create CFSequence %s with FilterAlg %s *", CFseq.name, CFseq.filter.Alg.name())
+    filterAlg=CFseq.filter.Alg
 
-def addChainToHypoTool(hypotool, chain):
-    prop="Chains"
-    cval = hypotool.getProperties()[prop]
-    try:
-        cval.append(chain)
-        setattr(hypotool, prop, cval)
-    except:
-        pass
+
+    stepReco = parOR(CFseq.name+"_reco") # all reco algoritms from al lthe sequences in a parallel sequence
+    seqAndView = seqAND(CFseq.name+"_view", [stepReco]) #include in seq:And to run in views: add here the Hypo
+    seqAndWithFilter = seqAND(CFseq.name, [filterAlg, seqAndView]) # add to the main step+filter
+    
+    for menuseq in CFseq.step.sequences:
+        ath_sequence=menuseq.sequence.Alg
+        subs = ath_sequence
+        stepReco += subs
+        seqAndView += menuseq.hypo.Alg 
+
+    if CFseq.step.isCombo:
+        seqAndView += CFseq.step.combo.Alg
+        print CFseq.step.combo.Alg
+        
+    return seqAndWithFilter
 
 
 def addChainToHypoAlg(hypoAlg, chain):
+    """ Tmp functions for Combo Hypo """
     if "Comb" in hypoAlg.algname:
         prop="Chains"
         cval = hypoAlg.Alg.getProperties()[prop]
@@ -291,259 +140,210 @@ def addChainToHypoAlg(hypoAlg, chain):
 
 
 #######################################
-def decisionTree_From_Chains(HLTAllStepsSeq, chains, NSTEPS=1):
+## CORE of Decision Handling
+#######################################
+
+
+
+def makeHLTTree(HLTChains):
+    """ creates the full HLT tree"""
+   
+    #    TopHLTRootSeq = seqAND("TopHLTRoot") # Root
+    # main HLT top sequence
+    hltTop = seqOR( "hltTop")
+
+    #add the L1Upcacking
+#    TopHLTRootSeq += L1UnpackingSeq
+
+    # add the HLT steps Node
+    steps = seqAND("HLTAllSteps")
+    hltTop +=  steps
+    
+    # make CF tree
+    finalDecisions = decisionTree_From_Chains(steps, HLTChains)
+    EnabledChainNames = [c.name for c in HLTChains]
+    
+
+    flatDecisions=[]
+    for step in finalDecisions: flatDecisions.extend (step)
+    summary= makeSummary("TriggerSummaryFinal", flatDecisions)
+    #from TrigOutputHandling.TrigOutputHandlingConf import HLTEDMCreator
+    #edmCreator = HLTEDMCreator()
+    
+    #edmCreator.TrigCompositeContainer = flatDecisions
+    #summary.OutputTools= [ edmCreator ]
+    hltTop += summary
+    hltTop += makeMonitor("TriggerMonitorFinal", finalDecisions, EnabledChainNames)
+    #hltTop += makeStreamESD("StreamESD", flatDecisions)
+   
+    
+    from AthenaCommon.AlgSequence import AlgSequence
+    topSequence = AlgSequence()
+    topSequence += hltTop
+
+        
+
+def decisionTree_From_Chains(HLTNode, chains):
+    """ creates the decision tree, given the starting node and the chains containing the sequences  """
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("Run decisionTree_From_Chains on %s", HLTNode.name())
+
+    from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import CFSequence, RoRSequenceFilterNode, ComboMaker
+    HLTNodeName= HLTNode.name()
+
+    # find nsteps
+    NSTEPS=0
+    for chain in chains:
+        steps =len(chain.steps)
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("Adding chain %s with %d steps"%(chain.name,steps))
+        if NSTEPS < steps:
+            NSTEPS = steps
+            
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("Run on %d steps", NSTEPS)
+    
 
-    testRoR=False
-    from TrigUpgradeTest.MenuComponents import CFSequence
-    #loop over chains to configure
-    count_steps=0
+    #loop over chains to configure hypotools
+    # must be done after all chains are created, to avoid conflicts 
+    for chain in chains:
+        chain.decodeHypoToolConfs()
+
+    finalDecisions = [] # needed for monitor
+    allSeq_list = []
     for nstep in range(0, NSTEPS):
+        finalDecisions.append([]) # list of final deciisons per step
         stepCF_name =  "Step%i"%(nstep+1)
         CFseq_list = []
-
+        step_decisions = []
         for chain in chains:
-            chain_step_name= "%s:%s"%(stepCF_name, chain.name)
-            print "\n*******Filling step %s for chain  %s"%(stepCF_name, chain.name)
-      
-            chain_step=chain.steps[count_steps]
-            sequenceHypoTools=chain_step.sequenceHypoTools
-            countseq=0
-            for st in sequenceHypoTools:
-                sequence=st.sequence
-                hypotool=st.hypotool
-                addChainToHypoTool(hypotool, chain.name)
-                cfseq_name= sequence.name
-
-                print "Going through sequence %s with threshold %s"%(sequence.name, hypotool.getName())
-                #define sequence input
-                if count_steps == 0: # seeding
-                    sequence_input= [nodeSeq.seed for nodeSeq in sequence.nodeSeqList]
-                    print "Seeds from this chain: %s"%(sequence_input)
-                    previous_sequence="".join(chain.group_seed)
-                else:
-                    # from previous step, map the seuqence in the same order?
-                    previous_sequence=chain.steps[count_steps-1].sequences[countseq].name #menu sequence
-                    sequence_input=chain.steps[count_steps-1].sequences[countseq].outputs
-                    print "Connect to previous sequence:"
-                    print sequence_input
-                # add hypotools
-                for nodeSeq in sequence.nodeSeqList:
-                    hypoAlg= nodeSeq.hypo                
-                    print "Adding %s to %s"%(hypotool.getName(),hypoAlg.algname)
-                    hypoAlg.addHypoTool(hypotool)
-                    addChainToHypoAlg(hypoAlg, chain.name) # only for TMP Combo
-                    
-
+            # skip this step if missing
+            if len(chain.steps) <= nstep:               
+                continue
 
-                #### FILTER
-                # one filter per previous sequence at the start of the sequence: check if it exists or create a new one        
-                # if the previous hypo has more than one output, try to get all of them
-                # one filter per previous sequence: 1 input/previous seq, 1 output/next seq 
-                filter_name="Filter%s_on_%s"%(stepCF_name,previous_sequence)
-                filter_out=["%s_from_%s_out"%(filter_name,i) for i in sequence_input]
-                filter_already_exists=False
-                findFilter= [cfseq.filter for cfseq in CFseq_list if filter_name in cfseq.filter.algname]        
-                if len(findFilter):
-                    print "Filter %s already exists"%(filter_name)
-                    filter_already_exists=True
-                    sfilter=findFilter[0]
-                    print "Adding chain %s to %s"%(chain.name,sfilter.algname)
-                    sfilter.setChains(chain.name)
-                    continue
-                else:
-                    if (testRoR):
-                        sfilter = TestRoRSequenceFilterNode(name=filter_name)
-                    else:
-                        sfilter = RoRSequenceFilterNode(name=filter_name)
-                    for o in filter_out: sfilter.setOutput(o)            
-                    for i in sequence_input: sfilter.addInput(i)
-                    sfilter.setChains(chain.name)
-                    print "Filter Done: %s"%(sfilter)
+            chain_step=chain.steps[nstep]
+            if log.isEnabledFor(logging.DEBUG):
+                log.debug("\n************* Start step %d %s for chain %s", nstep+1, stepCF_name, chain.name)
+            
+            # one filter per step_chain
+            # one filter input per previous menusequence output (the L1Seed for first step)
+            # one filter output per menuSeq
+            
+            filter_input =[]
+            if nstep == 0: # L1 seeding
+                previous_sequence="".join(chain.group_seed)              
+                seeds=chain.group_seed
+                filter_input.extend( seeds )
+                if log.isEnabledFor(logging.DEBUG):
+                    log.debug("Found these seeds from the sequence: %s", seeds)
+                    log.debug("Seeds from this chain: %s", filter_input)
+                previous_seeds=seeds  
+                                      
+            else:
+                # from previous step, map the seuqence in the same order?
+                previous_sequence = chain_step.name
+                prev=chain.steps[nstep-1].sequences
+                previous_seeds=[]
+                for seq in prev:
+                    filter_input.extend(seq.outputs)
+                    previous_seeds.append( seq.seed)
+
+                if log.isEnabledFor(logging.DEBUG):    
+                    log.debug("Connect to previous sequence through these filter inputs: %s" %str( filter_input) )
+                if len(filter_input) != len(previous_seeds):
+                    log.error("found %d filter inputs and %d seeds", len(filter_input), len(previous_seeds))
+                    sys.exit("ERROR, in size")
                     
-                #loop over NodeSequences of this sequence to add inputs to InputMaker and send decisions to HypoAlg
-                for nodeSeq in sequence.nodeSeqList:
-                    seed=nodeSeq.seed                    
-                    input_maker_input= [inp for inp in sfilter.getOutputList() if ("from_"+seed) in inp]
-                    print "Adding %d inputs to sequence::%s from Filter::%s (from seed %s)"%(len(input_maker_input), nodeSeq.name, sfilter.algname, seed)
-                    for i in input_maker_input: print i
-                    if len(input_maker_input) == 0:
-#                        print "ERROR, no inputs to sequence are set!"
-                        sys.exit("ERROR, no inputs to sequence are set!") 
-#                        return                    
-                    for i in input_maker_input: nodeSeq.addInput(i)
-
-                    hypoAlg= nodeSeq.hypo
-                    #node = AlgNode(Alg=hypoAlg.Alg,inputProp='', outputProp='Output1')
-                    for i in input_maker_input: hypoAlg.setPreviousDecision(i) # works for one
-                    #for i in input_maker_input: hypoAlg.addPreviousDecision(i)
-
-                    print hypoAlg
-
-                                    
-                CF_seq = CFSequence( cfseq_name, FilterAlg=sfilter, MenuSequence=sequence)    
-                #for node in otherNodes: CF_seq.addNode(node)
-                print CF_seq
+          
+            (sfilter, alreadyFoundFilter) = buildFilter(stepCF_name,previous_sequence, CFseq_list, chain, filter_input, previous_seeds)
+             
+            if not alreadyFoundFilter:
+                CF_seq = CFSequence( ChainStep=chain_step, FilterAlg=sfilter)
                 CFseq_list.append(CF_seq)
-                countseq+=1
-           
-            #end of sequence/threshold
+                for sequence in chain_step.sequences:                
+                    step_decisions.extend(sequence.outputs)                
+            
+            if len(chain.steps) == nstep+1:  
+                if log.isEnabledFor(logging.DEBUG):
+                    log.debug("Adding finalDecisions for chain %s at step %d:"%(chain.name, nstep+1))
+                for seq in chain_step.sequences:
+                    finalDecisions[nstep].extend(seq.outputs)
+                    if log.isEnabledFor(logging.DEBUG):
+                        log.debug(seq.outputs)
+            
+            #end of loop over menu sequences
                 
         #end of loop over chains for this step, now implement CF:
-        print "\n******** Create CF Tree %s with AthSequencers",stepCF_name
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("\n******** Create CF Tree %s with AthSequencers", stepCF_name)        
         #first make the filter step
-        stepFilter = create_step_filter_node(stepCF_name, CFseq_list, dump=0)
-        HLTAllStepsSeq += stepFilter
-        
-        stepCF = create_step_reco_node(stepCF_name, CFseq_list, dump=0)
-        HLTAllStepsSeq += stepCF
-        
-        print "Now Draw..."
-        stepCF_DataFlow_to_dot(stepCF_name, CFseq_list)
-        stepCF_ControlFlow_to_dot(stepCF)
-
-       
-        print "Added stepCF %s to the root"%stepCF_name     
-        count_steps+=1
-        print "************* End of step %s"%stepCF_name
-        # end of steps
-
-    #stepCF_ControlFlow_to_dot(HLTAllStepsSeq)
-    dumpSequence (HLTAllStepsSeq, indent=0)
-    return
-#####
-
+        stepFilter = create_step_filter_node(stepCF_name, CFseq_list, dump=False)
+        HLTNode += stepFilter
+        allSeq_list.append(CFseq_list)
 
+        # then the reco step
+        stepCF = create_step_reco_node("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list, dump=False)
+        HLTNode += stepCF
 
 
-###### Here some graphical methods
+        # then the monitor summary
+        summary=makeSummary("TriggerSummary"+ stepCF_name, step_decisions)
+        HLTNode += summary
 
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("Now Draw...")
+        stepCF_DataFlow_to_dot("%s_%s"%(HLTNodeName,stepCF_name), CFseq_list)
+        stepCF_ControlFlow_to_dot(stepCF)
 
-from ViewAlgsTest.connectAlgorithmsIO import connectAlgorithmsIO, graph_generator
-from AthenaCommon.AlgSequence import AthSequencer
+        if log.isEnabledFor(logging.DEBUG):
+            log.info("************* End of step %d, %s", nstep+1, stepCF_name)
+        # end of steps
 
 
-def algColor(alg):
-    if "Hypo" in alg: return "darkorchid1"
-    if "Filter" in alg: return "chartreuse3"
-    if "InputMaker" in alg: return "cyan3"
-    return "cadetblue1"
-    
-def stepCF_ControlFlow_to_dot(stepCF):
-    def _dump (seq, indent):
-        o = list()
-        for c in seq.getChildren():
-            if "AthSequencer" in c.getFullName():
-                o.append( ("%s[color=%s, shape=circle, width=.5, fixedsize=true ,style=filled]\n"%(c.name(),_seqColor(c)), indent) )
-            else:
-                o.append( ("%s[fillcolor=%s,style=filled]\n"%(c.name(),algColor(c.name())), indent) )
-            o.append( ("%s -> %s\n"%(seq.name(), c.name()), indent))
-            o.extend( _dump (c, indent+1) )
-        return o
-
-    def _parOR (seq):
-        if seq.ModeOR is True:
-            if seq.Sequential is False:
-                if seq.StopOverride is True:
-                    return True
-        return False
-
-    def _seqAND(seq):
-        if seq.ModeOR is False:
-            if seq.Sequential is True:
-                if seq.StopOverride is False:
-                    return True
-        return False
-
-    def _seqColor(seq):
-        if _parOR(seq): return "red"
-        if _seqAND(seq): return "blue"
-        return "black"
+    if log.isEnabledFor(logging.DEBUG):
+        log.debug("finalDecisions: %s" %str( finalDecisions) )
+    all_DataFlow_to_dot(HLTNodeName, allSeq_list)
+    return finalDecisions
+
+
+
+## This can be simplified!
+def buildFilter(stepCF_name,previous_sequence, CFseq_list, chain, filter_input, previous_seeds):
+        from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import  RoRSequenceFilterNode
+#### Build the FILTER
+# one filter per previous sequence at the start of the sequence: check if it exists or create a new one        
+# if the previous hypo has more than one output, try to get all of them
+# one filter per previous sequence: 1 input/previous seq, 1 output/next seq 
+        filter_name="Filter%s_on_%s"%(stepCF_name,previous_sequence)
+        findFilter= [cfseq.filter for cfseq in CFseq_list if filter_name in cfseq.filter.algname]
+        n_filters = len(findFilter)
+        if n_filters == 1:
+            sfilter=findFilter[0]
+            sfilter.setChains(chain.name)
+            if log.isEnabledFor(logging.DEBUG):
+                log.debug("Filter %s already exists", filter_name)
+                log.debug("Adding chain %s to %s", chain.name,sfilter.algname)
+                log.debug(sfilter.getChains())
+
+
+        elif n_filters == 0:
+            sfilter = RoRSequenceFilterNode(name=filter_name)
+            for i in previous_seeds: sfilter.addSeed(i)
+            for i in filter_input: sfilter.addInput(i)                        
+            filter_out=["%s_from_%s"%(filter_name,i) for i in filter_input]
+            for o in filter_out: sfilter.addOutput(o)            
+            sfilter.setChains(chain.name)
+            if log.isEnabledFor(logging.DEBUG):
+                log.debug("Adding these seeds to filter: %s", previous_seeds)
+                log.debug("Filter Done: %s", sfilter.name)
+        else:
+            log.error("found %d filters  with name %s", n_filters, filter_name)
+            sys.exit("ERROR, in filter configuration")
 
-   
+        return (sfilter,n_filters)
 
-    # to visualize: dot -T pdf Step1.dot > Step1.pdf
-    file = open( '%s.CF.dot'%stepCF.name(), mode="wt" )
-    #strict
-    file.write( 'digraph step  {\n'\
-                +'\n'\
-                +'  node [ shape=polygon, fontname=Helvetica ]\n'\
-                +'  edge [ fontname=Helvetica ]\n'
-                +'  %s   [shape=Mdiamond]\n'%stepCF.name())
-
-    indent=0
-    out = [("%s[color=%s shape=circle]\n"%(stepCF.name(),_seqColor(stepCF)), indent)]
-  
-    out.extend( _dump( stepCF, indent=indent+1 ) )
-    for n,i in out:
-        line= "  "*i+ n
-        file.write(line)
 
-    file.write( '}\n')
 
 
 
     
-
-def stepCF_DataFlow_to_dot(name, cfseq_list):
-    # to visualize: dot -T pdf Step1.dot > Step1.pdf
-    file = open( '%s.DF.dot'%name, mode="wt" )
-    #strict
-    file.write( 'digraph step  {\n'\
-                +'\n'\
-                +'  node [ shape=polygon, fontname=Helvetica ]\n'\
-                +'  edge [ fontname=Helvetica ]\n'
-                +'  %s   [shape=Mdiamond]\n'%name)
-
-
-    for cfseq in cfseq_list:
-        print cfseq.name
-        file.write("  %s[fillcolor=%s style=filled]\n"%(cfseq.filter.algname,algColor(cfseq.filter.algname)))
-        for inp in cfseq.filter.getInputList():
-            file.write(addConnection(name, cfseq.filter.algname, inp))
-           
-        file.write(  '\n  subgraph cluster_%s {\n'%(cfseq.name)\
-                    +'     node [color=white style=filled]\n'\
-                    +'     style=filled\n'\
-                    +'     color=lightgrey\n'\
-                    +'     fontname=Helvetica\n'\
-                    +'     label = %s\n'%(cfseq.name))
-
-        cfseq_algs = []
-        cfseq_algs.append(cfseq.filter)       
-
-        for seq in cfseq.menuSeq.nodeSeqList:
-            #            cfseq_algs.append(seq.inputMaker)
-            cfseq_algs.extend(seq.algs )
-            if seq.reuse==False:
-                #                file.write("    %s[fillcolor=%s]\n"%(seq.inputMaker.algname, algColor(seq.inputMaker.algname)))
-                for alg in seq.algs: file.write("    %s[fillcolor=%s]\n"%(alg.algname, algColor(alg.algname)))
-                seq.reuse=True
-            cfseq_algs.append(seq.hypo)
- 
-            file.write("    %s[color=%s]\n"%(seq.hypo.algname, algColor(seq.hypo.algname)))
-        file.write('  }\n')              
-        file.write(findConnections(cfseq_algs))
-        file.write('\n')    
-  
-    file.write( '}')
-    file.close()
-
-
-def findConnections(alg_list):
-    lineconnect=''
-    for nodeA in alg_list:
-        for nodeB in alg_list:
-            if nodeA is nodeB:
-                continue
-            dataIntersection = list(set(nodeA.getOutputList()) & set(nodeB.getInputList()))
-            if len(dataIntersection) > 0:
-                for line in dataIntersection:
-                    lineconnect+=addConnection(nodeA.algname,nodeB.algname, line)
-                    print 'Data connections between %s and %s: %s'%(nodeA.algname, nodeB.algname, line)
-    return lineconnect
-
-def addConnection(nodeA, nodeB, label):
-    line = "    %s -> %s [label=%s]\n"%(nodeA,nodeB,label)
-    # print line
-    return line
-
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFDot.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py
similarity index 98%
rename from Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFDot.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py
index 8b6ec2ac4a6b8da5ace171c68d98219fff50d9e3..4ac66ce7c3f46c14e2a80316003efc594e62101a 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/HLTCFDot.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFDot.py
@@ -3,7 +3,7 @@
  
 from ViewAlgsTest.connectAlgorithmsIO import connectAlgorithmsIO, graph_generator
 from AthenaCommon.AlgSequence import AthSequencer
-from TrigUpgradeTest.MenuComponents import isHypoBase, isInputMakerBase, isFilterAlg
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import isHypoBase, isInputMakerBase, isFilterAlg
 import itertools
 
 def algColor(alg):
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/MenuChains.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuChains.py
similarity index 100%
rename from Trigger/TrigValidation/TrigUpgradeTest/python/MenuChains.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuChains.py
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
index 9b722ff51b14204f74f52d1aee9ce54d5ab4d421..2c61801bbc50ecaed9ee664ff85286ae10bf46cb 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
@@ -1,96 +1,607 @@
+import sys, re, copy
+from AthenaCommon.Logging import logging
+from AthenaCommon.Constants import VERBOSE,INFO,DEBUG
+log = logging.getLogger('MenuComponents')
+log.setLevel( VERBOSE )
+logLevel=DEBUG
 
+from DecisionHandling.DecisionHandlingConf import RoRSeqFilter
 
+class Node():
+    """ base class representing one Alg + inputs + outputs, to be used to Draw dot diagrams and connect objects"""
+    def __init__(self, Alg):
+        self.name = ("%sNode")%( Alg.name())
+        self.Alg=Alg
+        self.algname = Alg.name()
+        self.inputs=[]
+        self.outputs=[]
+        
+    def addOutput(self, name):
+        self.outputs.append(name)
 
+    def addInput(self, name):
+        self.inputs.append(name)
 
-##########################################################
+    def getOutputList(self):        
+        return self.outputs
 
+    def getInputList(self):        
+        return self.inputs
 
-class NodeSequence():
-    def __init__(self, name, Algs, Hypo, Seed):
-        self.name = name
-        self.algs = Algs
-        self.hypo = Hypo
-        self.seed = Seed
-        self.output = Hypo.getOutput()
-        self.reuse = 0
-        self.connect()
+    def __str__(self):
+        return "Node::%s  [%s] -> [%s]"%(self.algname, ' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
 
- 
-    def connect(self):
-        alg_input = ""
-        #alg_input = self.inputMaker.getOutput()
-        for Alg in self.algs:
-            Alg.setInput(alg_input) 
-            alg_input = Alg.getOutput()
-        self.hypo.setInput(Alg.getOutput())
-        print "connect NodeSequence %s"%self.name
-
-    def setInput(self,input):
-        self.algs[0].setInput(input)
-
-    def addInput(self,input):
-        self.algs[0].addInput(input)
+
+    
+class AlgNode(Node):
+    """Node class that connects inputs and outputs to basic alg. properties """
+    def __init__(self, Alg, inputProp, outputProp):
+        Node.__init__(self, Alg)
+        self.outputProp=outputProp
+        self.inputProp=inputProp
+
+    def addDefaultOutput(self):
+        if self.outputProp is not '':
+            self.addOutput(("%s_%s"%(self.algname,self.outputProp)))
+        
+    def setPar(self, prop, name):
+        cval = self.Alg.getProperties()[prop]
+        try:
+            if type(cval) == type(list()):                
+                cval.append(name)
+                return setattr(self.Alg, prop, cval)
+            else:
+                return setattr(self.Alg, prop, name)
+        except:
+            pass
+
+    def getPar(self, prop):
+        try:
+            return getattr(self.Alg, prop)
+        except:
+            return self.Alg.getDefaultProperty(prop)
+        raise "Error in reading property " + prop + " from " + self.Alg
+
+    def addOutput(self, name):
+        if self.outputProp is not '':
+            return self.setPar(self.outputProp,name) 
+    
+    def getOutputList(self):
+        outputs = []
+        cval = self.getPar(self.outputProp)
+        if cval == '':
+            return outputs
+        if type(cval) == type(list()):  
+            outputs.extend(cval)
+        else:
+            outputs.append(cval)
+        return outputs
+  
+    def addInput(self, name):
+        if self.inputProp is not '':
+            return self.setPar(self.inputProp,name)
+    
+    def getInputList(self):
+        inputs = []
+        cval = self.getPar(self.inputProp)
+        if cval =='':
+            return inputs
+        if type(cval) == type(list()):  
+            inputs.extend(cval)
+        else:
+            inputs.append(cval)
+        return inputs
+
+    def __str__(self):
+        return "Alg::%s  [%s] -> [%s]"%(self.algname, ' '.join(map(str, self.getInputList())), ' '.join(map(str, self.getOutputList())))
+    
+
+class HypoToolConf():
+    """ Class to group info on hypotools"""
+    def __init__(self, hypoToolGen):
+        self.hypoToolGen = hypoToolGen
+        self.name=''
+        self.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 )
+
+        
+class HypoAlgNode(AlgNode):
+    """Node for HypoAlgs"""
+    def __init__(self, Alg):
+        assert isHypoBase(Alg), "Error in creating HypoAlgNode from Alg "  + Alg.name()
+        AlgNode.__init__(self, Alg, 'HypoInputDecisions', 'HypoOutputDecisions')
+        self.addDefaultOutput()
+        self.tools = []
+        self.previous=[]
+
+    def addHypoTool (self, hypoToolConf):
         
+        if hypoToolConf.name 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 )
+        else:
+            raise RuntimeError("The hypo tool of name "+ hypoToolConf.name +" already present")
+           
+
+    def setPreviousDecision(self,prev):        
+        self.previous.append(prev)
+        return self.addInput(prev)
+
+    def __str__(self):
+        return "HypoAlg::%s  [%s] -> [%s], previous = [%s], HypoTools=[%s]"%(self.Alg.name(),' '.join(map(str, self.getInputList())),
+                                                                                 ' '.join(map(str, self.getOutputList())),
+                                                                                 ' '.join(map(str, self.previous)),
+                                                                                 ' '.join(map(str, self.tools)))
+
+
+
+
+class SequenceFilterNode(AlgNode):
+    """Node for any kind of sequence filter"""
+    def __init__(self, Alg, inputProp, outputProp):
+        AlgNode.__init__(self,  Alg, inputProp, outputProp)
+        self.seeds = []
+              
+    def setChains(self, name):
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("Adding Chain %s to filter %s"%(name, self.name))
+        return self.setPar("Chains", name)
+    
+    def getChains(self):
+        return self.getPar("Chains")
+
+    def addSeed(self, seed):
+        self.seeds.append(seed)
+
     def __str__(self):
-        return "NodeSequence::%s with \n Seed::%s \n %s \n Hypo::%s"%(self.name, self.seed, ',\n '.join(map(str, self.algs)), self.hypo)
+        return "SequenceFilter::%s  [%s] -> [%s], seeds=[%s], chains=%s"%(self.Alg.name(),' '.join(map(str, self.getInputList())),' '.join(map(str, self.getOutputList())), ' '.join(map(str, self.seeds)), self.getChains()) 
+
+
+
+
+class RoRSequenceFilterNode(SequenceFilterNode):
+    def __init__(self, name):
+        Alg= RoRSeqFilter(name, OutputLevel = logLevel)
+        SequenceFilterNode.__init__(self,  Alg, 'Input', 'Output')
+
+
+
+class InputMakerNode(AlgNode):
+    def __init__(self, Alg):
+        assert isInputMakerBase(Alg), "Error in creating InputMakerNode from Alg "  + Alg.name()
+        AlgNode.__init__(self,  Alg, 'InputMakerInputDecisions', 'InputMakerOutputDecisions')
+        Alg.OutputLevel = logLevel
+
 
+from DecisionHandling.DecisionHandlingConf import ComboHypo
+class ComboMaker(AlgNode):
+    def __init__(self, name):
+        Alg = ComboHypo(name)
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("Making combo Alg %s"%name)
+        AlgNode.__init__(self,  Alg, 'HypoInputDecisions', 'HypoOutputDecisions')
+        Alg.OutputLevel = logLevel
+        self.prop="MultiplicitiesMap"
+
+
+    def addChain(self, chain):
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("ComboMaker %s adding chain %s"%(self.algname,chain))
+        from MenuChains import getConfFromChainName
+        confs=getConfFromChainName(chain)
+        for conf in confs:
+            seed=conf.replace("HLT_", "")
+            integers = map(int, re.findall(r'^\d+', seed))
+            multi=0
+            if len(integers)== 0:
+                multi=1
+            elif len(integers)==1:
+                multi=integers[0]
+                re.sub('^\d+',"",seed) #remove the multiplicity form the string
+            else:
+                sys.exit("ERROR in decoding combined chain %s"%(chain))
+
+            newdict={chain:[multi]}
+            cval = self.Alg.getProperties()[self.prop]            
+            if type(cval) == type(dict()):
+                if chain in cval.keys():
+                    cval[chain].append(multi)
+                else:
+                    cval[chain]=[multi]
+            else:
+                cval=newdict
+            setattr(self.Alg, self.prop, cval)
+            
+
+
+#########################################################
+# USEFULL TOOLS
+#########################################################
+
+def isHypoBase(alg):
+    if  'HypoInputDecisions'  in alg.__class__.__dict__:
+        return True
+    prop = alg.__class__.__dict__.get('_properties')
+    return  ('HypoInputDecisions'  in prop)
+
+def isInputMakerBase(alg):
+    return  ('InputMakerInputDecisions'  in alg.__class__.__dict__)
+
+def isFilterAlg(alg):
+    return isinstance(alg, RoRSeqFilter)
+        
+##########################################################
+# NOW sequences and chains
+##########################################################
+
+        
 class MenuSequence():
-    def __init__(self, name, nodeSeqList):
-        self.name = name
-        self.nodeSeqList=nodeSeqList
-        self.outputs=[seq.output for seq in nodeSeqList]
+    """ Class to group reco sequences with the Hypo"""
+    def __init__(self, Sequence, Maker,  Hypo, HypoToolGen ):
+        from AthenaCommon.AlgSequence import AthSequencer
+        self.name = "S_%s"%(Hypo.name()) # sequence name is based on hypo name
+        self.sequence     = Node( Alg=Sequence)
+        self.maker        = InputMakerNode( Alg = Maker )
+        self.hypoToolConf = HypoToolConf( HypoToolGen )
+        self.hypo         = HypoAlgNode( Alg = Hypo )
+        self.inputs=[]
+        self.outputs=[]
+        self.seed=''
+        self.reuse = False # flag to draw dot diagrmas
+
+    def replaceHypoForCombo(self, HypoAlg):
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("set new Hypo %s for combo sequence %s "%(HypoAlg.name(), self.name))
+        self.hypo= HypoAlgNode( Alg=HypoAlg)
+
+    def connectToFilter(self,sfilter):
+        filter_output = sfilter.getOutputList()
+        inputs=[filter_output[i] for i,fseed in enumerate (sfilter.seeds) if self.seed in fseed  ]
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("connectToFilter: found %d inputs to sequence::%s from Filter::%s (from seed %s)",
+                          len(inputs), self.name, sfilter.algname, self.seed)
+            for i in inputs: log.debug("- "+i)
+        if len(inputs) == 0:
+                sys.exit("ERROR, no inputs to sequence are set!")
+        for inp in inputs:
+            new_output = "%s_from_%s"%(self.hypo.algname, inp)
+            self.hypo.addOutput(new_output)
+            self.outputs.append( new_output)
+        
+        #### Connect the InputMaker
+        for i in inputs:
+            self.maker.addInput(i)
+            self.inputs.append(i)
+        input_maker_output=["%s_from_%s"%(self.maker.algname,i)  for i in inputs  ]
+        if len(input_maker_output) == 0:
+            sys.exit("ERROR, no outputs to sequence are set!")
+        for out in input_maker_output:
+            self.maker.addOutput(out) 
+            self.hypo.setPreviousDecision(out)
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("connectToFilter: connecting InputMaker to HypoAlg: adding %d output to InputMaker::%s and sending to HypoAlg::%s",
+                          len(inputs), self.maker.algname, self.hypo.algname)
+        for i in inputs: log.debug(i)
 
     def __str__(self):
-        return "MenuSequence::%s \n %s"%(self.name,',\n '.join(map(str, self.nodeSeqList)))
+        return "MenuSequence::%s \n Hypo::%s \n Maker::%s \n Sequence::%s"%(self.name, self.hypo, self.maker, self.sequence)
+
+    
+class Chain:
+    """Basic class to define the trigger menu """
+    def __init__(self, name, Seed, ChainSteps=[]):
+        self.name = name
+        self.seed=Seed
+        self.steps=ChainSteps         
+        self.vseeds = Seed.strip().split("_")        
+        self.vseeds.pop(0) #remove first L1 string
+        # group_seed is used to se tthe seed type (EM, MU,JET), removing the actual threshold
+        self.group_seed  = ["L1"+filter(lambda x: x.isalpha(), stri) for stri in self.vseeds]
+        self.setSeedsToSequences() # save seed of each menuseq
+        if log.isEnabledFor(logging.DEBUG):
+            log.debug("Chain " + name + " with seeds: %s "%str( self.vseeds))
+
+        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
+        tot_seq=len(sequences1)
+        tot_seed=len(self.vseeds)
+        if tot_seq==tot_seed:
+            nseq=0
+            for seed in self.vseeds:
+                for step in self.steps:
+                    seq=step.sequences[nseq]
+                    seq.seed ="L1"+filter(lambda x: x.isalpha(), seed)
+                    if log.isEnabledFor(logging.DEBUG):
+                        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") 
+        
+    def decodeHypoToolConfs(self):
+        """ This is extrapolating the hypotool configuration from the (combined) chain name"""
+        from TriggerMenuMT.HLTMenuConfig.Menu.MenuChains import getConfFromChainName
+        signatures = getConfFromChainName(self.name)
+        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)))
+                sys.exit("ERROR, in chain configuration")
+            nseq=0
+            for seq in step.sequences:
+                seq.hypoToolConf.setConf(signatures[nseq])
+                seq.hypoToolConf.setName(self.name)
+                seq.hypo.addHypoTool(seq.hypoToolConf)
+                nseq +=1
+                
 
 class CFSequence():
-    def __init__(self, name, FilterAlg, MenuSequence):
-        self.name = name        
+    """Class to describe the ChainStep + filter"""
+    def __init__(self, ChainStep, FilterAlg):
+        self.name = ChainStep.name   # not needed?     
         self.filter = FilterAlg
-        self.menuSeq = MenuSequence
-        self.otherNodes = []
+        self.step=ChainStep
+        self.connect()
 
-    def addNode(self, node):
-        self.otherNodes.append(node)
+    def connect(self):
+        """Connect filter to ChainStep (all its sequences)"""
+        for seq in self.step.sequences:
+            seq.connectToFilter(self.filter)
+
+        if self.step.isCombo: self.connectCombo()
+
+    def connectCombo(self):
+        # 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)
+            log.debug("Adding inputs %s to combo %s"%(combo_input, self.step.combo.algname))
+            # inputs are the output decisions of the hypos of the sequences
+            # outputs are the modified name of input deciions that need to be connected to the next filter
+            combo_output="combo_%s"%combo_input
+            self.step.combo.addOutput(combo_output)
+            seq.outputs.append(combo_output)
+            log.debug("Adding outputs %s to combo %s"%(combo_output, self.step.combo.algname))
+        
     
     def __str__(self):
         return "--- CFSequence %s ---\n + Filter: %s \n +  %s \n "%(self.name,\
-            self.filter, \
-            self.menuSeq)
-
-    def getAllNodes(self):
-        nodes = []
-        for seq in self.menuSeq.nodeSeqList:
-            nodes.extend(seq.algs)
-            nodes.append(seq.hypo)
-        for node in self.otherNodes:
-            nodes.append(node)            
-
-        return nodes
+            self.filter, self.step )
+          
+
+
+
+
+class ChainStep:
+    """Class to describe one step of a chain; if more than one menuSequence, then the step is combo"""
+    def __init__(self, name,  Sequences=[]):
+        self.name = name
+        self.sequences=[]
+        self.isCombo=len(Sequences)>1
+        self.combo=None
+        if self.isCombo:            
+            self.makeCombo(Sequences)
+        else:
+            self.sequences = Sequences
+
+
+    def replaceSequence(self, old, new):
+        # maybe obsolete?
+        idx=self.sequences.index(old) # this raise exception
+        self.sequences.pop(idx)
+        self.sequences.insert(idx, new)
+
+    def makeCombo(self, Sequences):        
+        # For combo sequences, duplicate the Hypo with a Combo_name and create the comboHypoAlg
+        self.combo = ComboMaker("ComboHypo_%s"%self.name)
+        for sequence in Sequences:
+            new_sequence=copy.deepcopy(sequence)
+            new_sequence.name=("%s_Combo"%sequence.name)
+            oldhypo=sequence.hypo.Alg
+            new_hypoAlg=oldhypo.clone("%s_Combo"%oldhypo.name())
+            new_sequence.replaceHypoForCombo(new_hypoAlg)
+            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) ))
+
+
+
+# this is fragment for New JO
+
+    
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+class InEventReco( ComponentAccumulator ):
+    """ Class to handle in-event reco """
+    pass
+
+
+class InViewReco( ComponentAccumulator ):
+    """ Class to handle in-view reco, sets up the View maker if not provided and exposes InputMaker so that more inputs to it can be added in the process of assembling the menu """
+    def __init__(self, name, viewMaker=None):
+        super( InViewReco, self ).__init__()
+        self.name = name
+        from AthenaCommon.CFElements import parOR, seqAND
+        self.mainSeq = seqAND( name )
+        self.addSequence( self.mainSeq )
+
+        from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
+        if viewMaker:
+            self.viewMakerAlg = viewMaker 
+        else:
+            from AthenaCommon.Constants import DEBUG
+            self.viewMakerAlg = EventViewCreatorAlgorithm(name+'ViewsMaker',
+                                                          ViewFallThrough = True,
+                                                          RoIsLink        = 'initialRoI', # -||-
+                                                          InViewRoIs      = name+'RoIs',
+                                                          Views           = name+'Views',
+                                                          ViewNodeName    = name+"InView",
+                                                          OutputLevel=DEBUG)
+
+        self.addEventAlgo( self.viewMakerAlg, self.mainSeq.name() )
+        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_", "") ) )
 
-class SequenceHypoTool:
-    def __init__(self, MenuSequence, HypoTool):
-        self.sequence = MenuSequence
-        self.hypotool = HypoTool
+    def addInput(self, inKey, outKey ):
+        """Adds input (DecisionsContainer) from which the views should be created """
+        self.viewMakerAlg.InputMakerInputDecisions += [ inKey ]
+        self.viewMakerAlg.InputMakerOutputDecisions += [ outKey ]
+
+    def addRecoAlg( self, alg ):
+        """Reconstruction alg to be run per view"""
+        self.addEventAlgo( alg, self.viewsSeq.name() )
+
+    def sequence( self ):
+        return self.mainSeq
+
+    def inputMaker( self ):
+        return self.viewMakerAlg 
+
+
+class RecoFragmentsPool:
+    """ Class to host all the reco fragments that need to be reused """
+    fragments = {}
+    @classmethod
+    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. 
+        The flags are not part of unique identifier as creation of new reco fragments should not be caused by difference in the unrelated flags.
+        """
         
+        from AthenaCommon.Logging import logging
+        requestHash = hash( ( creator, tuple(kwargs.keys()), tuple(kwargs.values()) ) ) 
+        if requestHash not in cls.fragments:
+            recoFragment = creator( flags, **kwargs )
+            cls.fragments[requestHash] = recoFragment
+            log.debug( "created reconstruction fragment" )
+            return recoFragment
+        else:
+            log.debug( "reconstruction fragment from the cache" )
+            return cls.fragments[requestHash]
 
-class ChainStep:
-     def __init__(self, name,  SequenceHypoTools=[]):
-        self.name = name        
-        self.sequenceHypoTools = SequenceHypoTools
-        self.sequences = [sh.sequence for sh in SequenceHypoTools ] 
+           
+class NJMenuSequence( ComponentAccumulator ):
+    def __init__( self, name ):
+        super( NJMenuSequence, self ).__init__()
+        from AthenaCommon.CFElements import seqAND
+        self.name = name
+        self.mainSeq = seqAND( name )
+        self.addSequence( self.mainSeq )
+        self.filterAlg =  None
+        self.reco = None
+        self.hypoAlg = None
+
+    def addReco( self, reco ):
+        """ Adds reconstruction sequence, has to be one of InViewReco or InEventReco objects """
+        assert self.filterAlg, "The filter alg has to be setup first"
+        self.reco = reco
+        reco.addInputFromFilter( self.filterAlg )
+        self.addSequence( reco.sequence(), self.mainSeq.name() )
+        self.merge( reco )
+
+    def addFilter( self, chains, inKey ):
+        """ adds filter alg of type RoRSeqFilter, output key is predefined by the sequence name as: Filtered + the name"""
+        from DecisionHandling.DecisionHandlingConf import RoRSeqFilter
+        self.filterAlg = RoRSeqFilter( self.name+'Filter' )
+        self.filterAlg.Input       = [ inKey ]
+        self.filterAlg.Output      = [ 'Filtered_'+self.name ]
+        self.filterAlg.Chains      = chains
+        from AthenaCommon.Constants import DEBUG
+        self.filterAlg.OutputLevel = DEBUG
+        self.addEventAlgo( self.filterAlg, self.mainSeq.name() )
+
+    def hypoDecisions( self ):
+        return "Decisions_"+self.name
+
+    def addHypo( self, hypo ):
+        self.hypoAlg = hypo
+        self.hypoAlg.HypoInputDecisions = self.reco.inputMaker().InputMakerOutputDecisions[-1]
+        self.hypoAlg.HypoOutputDecisions = self.hypoDecisions()
+        self.addEventAlgo( hypo, self.mainSeq.name() )
+
+    def sequence( self ):
+        return self.mainSeq
+
+    def filter( self ):
+        return self.filterAlg
 
+    def check( self ):
+        assert self.filterAlg, "Filter not configured"
+        assert self.hypoAlg, "Hypo alg is not configured"
 
-class Chain: # going to be my HLTChainDef
-     def __init__(self, name, Seed, ChainSteps=[]):
-         self.name = name
-         self.seed=Seed
-         self.steps=ChainSteps
-         
-         seeds = Seed.strip().split("_")
-         seeds.pop(0) 
-         self.group_seed  = ["L1"+filter(lambda x: x.isalpha(), stri) for stri in seeds]
 
+class HLTMenuAccumulator( ComponentAccumulator ):
+    def __init__( self ):
+        super( HLTMenuAccumulator, self ).__init__()
+        from AthenaCommon.CFElements import seqAND
+        HLTSteps =  seqAND( "HLTSteps" )
+        self.addSequence( HLTSteps )
 
+    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
+       # make sure that sequences for previous steps are in place
+       for p in range( 1, step ):
+           self.__getOrMakeStepSequence( p, isFilter = True )
+           self.__getOrMakeStepSequence( p, isFilter = False )
+       # make sure that filtering steps is placed before reco steps
+       if not isFilter:
+           self.__getOrMakeStepSequence( step, isFilter = True )
+       s = parOR( name )
+       self.addSequence( s, parentName="HLTSteps")
+       return s
+
+
+    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)
+        """
+        for stepNo, fhSeq in enumerate( steps, 1 ):
+            filterStep = self.__getOrMakeStepSequence( stepNo, isFilter = True )
+            filterStep += fhSeq.filter() # FilterHypoSequence API
+
+            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/graphics/VP1/VP1Base/src/VP1CustomTourEditor.cxx b/graphics/VP1/VP1Base/src/VP1CustomTourEditor.cxx
index 2524c4e0bde32f50a49162da453e83d6b2b73e9e..49bf26ea9f97c6d072147b30ba8c5cbd96f78ae0 100644
--- a/graphics/VP1/VP1Base/src/VP1CustomTourEditor.cxx
+++ b/graphics/VP1/VP1Base/src/VP1CustomTourEditor.cxx
@@ -30,6 +30,7 @@
 #include <QShortcut>
 #include <QCloseEvent>
 #include <QScrollBar>
+#include <QAction>
 
 #include <iostream>