diff --git a/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKDetectorTool.h b/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKDetectorTool.h
index 0a0f8a0b9d2378aece70c9ef95d9a2020cb2f9b3..cd43c97ae0812bfa8d6b9c0899a822748bae339d 100644
--- a/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKDetectorTool.h
+++ b/Trigger/TrigFTK/TrigFTKSim/TrigFTKSim/FTKDetectorTool.h
@@ -32,21 +32,15 @@
 #include "TrkTrackSummaryTool/TrackSummaryTool.h"
 #include "TrkToolInterfaces/ITrackHoleSearchTool.h"
 #include "InDetBeamSpotService/IBeamCondSvc.h"
+#include "StoreGate/ReadCondHandleKey.h"
 #include "StoreGate/StoreGateSvc.h"
 #include "StoreGate/DataHandle.h"
 #include "HepPDT/ParticleDataTable.hh"
 #include "HepPDT/ParticleData.hh"
 
-#include "InDetIdentifier/PixelID.h"
-#include "InDetIdentifier/SCT_ID.h"
-#include "InDetIdentifier/TRT_ID.h"
-#include "InDetPrepRawData/SiClusterContainer.h"
-#include "InDetReadoutGeometry/SiDetectorManager.h"
-#include "InDetReadoutGeometry/PixelDetectorManager.h"
-#include "InDetReadoutGeometry/SCT_DetectorManager.h"
-#include "InDetReadoutGeometry/TRT_DetectorManager.h"
-
 #include "InDetConditionsSummaryService/IInDetConditionsTool.h"
+#include "InDetPrepRawData/SiClusterContainer.h"
+#include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 
 class AtlasDetectorID;
 class StoreGateSvc;
@@ -58,7 +52,7 @@ class IBeamCondSvc;
 class EventID;
 
 namespace InDetDD {
-  class SiDetectorManager;
+  class PixelDetectorManager;
 }
 namespace HepPDT {
   class ParticleDataTable;
@@ -80,8 +74,7 @@ class FTKDetectorTool :  virtual public FTKDetectorToolI,
   StoreGateSvc*  m_detStore;
   StoreGateSvc*  m_evtStore;
      
-  const  InDetDD::SiDetectorManager*     m_PIX_mgr;
-  const  InDetDD::SiDetectorManager*     m_SCT_mgr;
+  const  InDetDD::PixelDetectorManager*     m_PIX_mgr;
   
   const InDet::SiClusterContainer*  m_pixelContainer;
   const InDet::SiClusterContainer*  m_sctContainer;
@@ -89,6 +82,8 @@ class FTKDetectorTool :  virtual public FTKDetectorToolI,
   ToolHandle<IInDetConditionsTool>        m_pixelCondSummaryTool; // tool to retrieve pixel conditions db 
   ToolHandle<IInDetConditionsTool>        m_sctCondSummaryTool{this, "SctSummaryTool",
       "SCT_ConditionsSummaryTool/InDetSCT_ConditionsSummaryTool", "Tool to retrieve SCT Conditions Summary"}; // tool to retrieve SCT conditions db
+
+  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
   
   const PixelID*   m_pixelId;
   const SCT_ID*    m_sctId;
diff --git a/Trigger/TrigFTK/TrigFTKSim/src/FTKDetectorTool.cxx b/Trigger/TrigFTK/TrigFTKSim/src/FTKDetectorTool.cxx
index 3871dc760dc5f5b4519d30c4da2ede16663ec126..dfdce58a583411f8e21f477c585ca906d89475d5 100644
--- a/Trigger/TrigFTK/TrigFTKSim/src/FTKDetectorTool.cxx
+++ b/Trigger/TrigFTK/TrigFTKSim/src/FTKDetectorTool.cxx
@@ -8,6 +8,12 @@
 #include "EventInfo/EventInfo.h"
 #include "EventInfo/EventID.h"
 
+#include "InDetIdentifier/PixelID.h"
+#include "InDetIdentifier/SCT_ID.h"
+#include "InDetReadoutGeometry/PixelDetectorManager.h"
+
+#include "StoreGate/ReadCondHandle.h"
+
 #include <fstream>
 #include <iostream>
 
@@ -25,7 +31,6 @@ FTKDetectorTool::FTKDetectorTool(const std::string &algname,const std::string &n
   , m_detStore( 0 )
   , m_evtStore( 0 )
   , m_PIX_mgr( 0 )
-  , m_SCT_mgr( 0 )
   , m_pixelContainer( 0 )
   , m_sctContainer( 0 )
   , m_pixelCondSummaryTool("PixelConditionsSummaryTool",this)
@@ -87,10 +92,6 @@ StatusCode FTKDetectorTool::initialize()
     m_log << MSG::ERROR << "Unable to retrieve Pixel helper from DetectorStore" << endmsg;
     return StatusCode::FAILURE;
   }
-  if( m_detStore->retrieve(m_SCT_mgr, "SCT").isFailure() ) {
-    m_log << MSG::ERROR << "Unable to retrieve SCT manager from DetectorStore" << endmsg;
-    return StatusCode::FAILURE;
-  }
   if( m_detStore->retrieve(m_sctId, "SCT_ID").isFailure() ) {
     m_log << MSG::ERROR << "Unable to retrieve SCT helper from DetectorStore" << endmsg;
     return StatusCode::FAILURE;
@@ -130,6 +131,10 @@ StatusCode FTKDetectorTool::initialize()
 		return StatusCode::FAILURE;
 	  }
   }
+
+  // ReadCondHandleKey
+  ATH_CHECK(m_SCTDetEleCollKey.initialize());
+
   return StatusCode::SUCCESS;
 }
 
@@ -170,10 +175,11 @@ void FTKDetectorTool::makeBadModuleMap(){
   }
 
   // take the list of the dead SCT modules
-  for( InDetDD::SiDetectorElementCollection::const_iterator i=m_SCT_mgr->getDetectorElementBegin(), f=m_SCT_mgr->getDetectorElementEnd() ; i!=f; ++i ) {
-    const InDetDD::SiDetectorElement* sielement( *i );
-    Identifier id = sielement->identify();
-    IdentifierHash idhash = sielement->identifyHash();
+  SCT_ID::const_id_iterator wafer_it = m_sctId->wafer_begin();
+  SCT_ID::const_id_iterator wafer_end = m_sctId->wafer_end();
+  for (; wafer_it!=wafer_end; wafer_it++) {
+    const Identifier id = *wafer_it;
+    const IdentifierHash idhash = m_sctId->wafer_hash(id);
     bool is_bad = !(m_sctCondSummaryTool->isGood( idhash ));
     if(m_dumpAllModules) is_bad =true;
     if(is_bad){
@@ -242,10 +248,11 @@ void FTKDetectorTool::dumpDeadModuleSummary()
 				 << std::endl;
     }
   }
-  for( InDetDD::SiDetectorElementCollection::const_iterator i=m_SCT_mgr->getDetectorElementBegin(), f=m_SCT_mgr->getDetectorElementEnd(); i!=f; ++i ) {
-    const InDetDD::SiDetectorElement* sielement( *i );
-    Identifier id = sielement->identify();
-    IdentifierHash idhash = sielement->identifyHash();
+  SCT_ID::const_id_iterator wafer_it = m_sctId->wafer_begin();
+  SCT_ID::const_id_iterator wafer_end = m_sctId->wafer_end();
+  for (; wafer_it!=wafer_end; wafer_it++) {
+    const Identifier id = *wafer_it;
+    const IdentifierHash idhash = m_sctId->wafer_hash(id);
     bool is_bad = !(m_sctCondSummaryTool->isGood( idhash ));
     if(m_dumpAllModules) is_bad =true;
     if(is_bad){
@@ -295,10 +302,11 @@ void FTKDetectorTool::dumpModuleIDMap()
     Identifier id = sielement->identify();
     IdentifierHash idhash = sielement->identifyHash();
   }
-  for( InDetDD::SiDetectorElementCollection::const_iterator i=m_SCT_mgr->getDetectorElementBegin(), f=m_SCT_mgr->getDetectorElementEnd(); i!=f; ++i ) {
-    const InDetDD::SiDetectorElement* sielement( *i );
-    Identifier id = sielement->identify();
-    IdentifierHash idhash = sielement->identifyHash();
+  SCT_ID::const_id_iterator wafer_it = m_sctId->wafer_begin();
+  SCT_ID::const_id_iterator wafer_end = m_sctId->wafer_end();
+  for (; wafer_it!=wafer_end; wafer_it++) {
+    const Identifier id = *wafer_it;
+    const IdentifierHash idhash = m_sctId->wafer_hash(id);
   }
 #endif
 }
@@ -347,10 +355,11 @@ void FTKDetectorTool::dumpGlobalToLocalModuleMap() {
 
   countForSRAM = 0;
 
-  for( InDetDD::SiDetectorElementCollection::const_iterator i=m_SCT_mgr->getDetectorElementBegin(), f=m_SCT_mgr->getDetectorElementEnd() ; i!=f; ++i ) {
-    const InDetDD::SiDetectorElement* sielement( *i );
-    Identifier id = sielement->identify();
-    IdentifierHash idhash = sielement->identifyHash();
+  SCT_ID::const_id_iterator wafer_it = m_sctId->wafer_begin();
+  SCT_ID::const_id_iterator wafer_end = m_sctId->wafer_end();
+  for (; wafer_it!=wafer_end; wafer_it++) {
+    const Identifier id = *wafer_it;
+    const IdentifierHash idhash = m_sctId->wafer_hash(id);
 
     FTKRawHit tmpmodraw;
 
@@ -456,8 +465,13 @@ void FTKDetectorTool::dumpIDMap()
   }
 
   // take the list of the dead SCT modules
-  for( InDetDD::SiDetectorElementCollection::const_iterator i=m_SCT_mgr->getDetectorElementBegin(), f=m_SCT_mgr->getDetectorElementEnd() ; i!=f; ++i ) {
-    const InDetDD::SiDetectorElement* sielement( *i );
+  SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> sctDetEle(m_SCTDetEleCollKey);
+  const InDetDD::SiDetectorElementCollection* sctElements(sctDetEle.retrieve());
+  if (sctElements==nullptr) {
+    ATH_MSG_FATAL(m_SCTDetEleCollKey.fullKey() << " could not be retrieved");
+    return;
+  }
+  for (const InDetDD::SiDetectorElement* sielement: *sctElements) {
     Identifier id = sielement->identify();
     IdentifierHash idhash = sielement->identifyHash();
     const bool is_bad = !(m_sctCondSummaryTool->isGood( idhash ));
@@ -483,6 +497,14 @@ void FTKDetectorTool::dumpIDMap()
 
 void FTKDetectorTool::dumpModulePositions() {
    m_log << MSG::INFO << "dumpModulePositions"<< endmsg; 
+
+   SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> sctDetEle(m_SCTDetEleCollKey);
+   const InDetDD::SiDetectorElementCollection* sctElements(sctDetEle.retrieve());
+   if (sctElements==nullptr) {
+     ATH_MSG_FATAL(m_SCTDetEleCollKey.fullKey() << " could not be retrieved");
+     return;
+   }
+
    TFile *output=new TFile("FTKmodulePositions.root","recreate");
    TTree *t=new TTree("modulePositions","modulePositions");
    Int_t idhash;
@@ -519,8 +541,8 @@ void FTKDetectorTool::dumpModulePositions() {
    t->Branch("isbad",&isbad,"isbad/I");
    t->Branch("hitSector",&hitSector,"hitSector/I");
    InDetDD::SiDetectorElementCollection::const_iterator iStart[2],iEnd[2];
-   iStart[0]=m_SCT_mgr->getDetectorElementBegin();
-   iEnd[0]=m_SCT_mgr->getDetectorElementEnd();
+   iStart[0]=sctElements->begin();
+   iEnd[0]=sctElements->end();
    iStart[1]=m_PIX_mgr->getDetectorElementBegin();
    iEnd[1]=m_PIX_mgr->getDetectorElementEnd();
    for(isPixel=0;isPixel<2;isPixel++) {