diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_LocalOccupancy.h b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_LocalOccupancy.h
index b4cbbe6eb45c0d81f19b6e040d4a0b8ef74491c0..f96a1abc7dfa120d08162bdef13aa2bdedc58ef7 100644
--- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_LocalOccupancy.h
+++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/TRT_ElectronPidTools/TRT_LocalOccupancy.h
@@ -126,6 +126,8 @@ namespace InDet
    SG::ReadHandleKey<TRT_DriftCircleContainer> m_trt_driftcircles{ this, "TRT_DriftCircleCollection", "TRT_DriftCircles", "m_trt_driftcircles" };
    SG::ReadCondHandleKey<TRTCond::AliveStraws> m_strawReadKey{this,"AliveStraws","AliveStraws","AliveStraws in-key"};
 
+   SG::ReadHandleKey<OccupancyData> m_occupancyCacheRead{"OccupancyData"};
+   SG::WriteHandleKey<OccupancyData> m_occupancyCacheWrite{"OccupancyData"};
    bool m_isTrigger;
    bool m_T0Shift; // choice to use T0shift or not
    float m_lowGate;
diff --git a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_LocalOccupancy.cxx b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_LocalOccupancy.cxx
index 2ad75ecc6eb357c2424604b8b98d17760a6d6055..05d58a1939d8890f2153bb4f358449358d1e3963 100644
--- a/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_LocalOccupancy.cxx
+++ b/InnerDetector/InDetRecTools/TRT_ElectronPidTools/src/TRT_LocalOccupancy.cxx
@@ -86,6 +86,12 @@ StatusCode TRT_LocalOccupancy::initialize()
   ATH_CHECK( m_trt_driftcircles.initialize(!m_trt_driftcircles.empty()) );
   ATH_CHECK( m_strawReadKey.initialize() );
 
+  std::string OccupancyCacheName = name() + "OccupancyData";
+  m_occupancyCacheRead = OccupancyCacheName;
+  m_occupancyCacheWrite = OccupancyCacheName;
+  ATH_CHECK(m_occupancyCacheRead.initialize());
+  ATH_CHECK(m_occupancyCacheWrite.initialize());
+
   return StatusCode::SUCCESS;
 }
 
@@ -492,11 +498,12 @@ int TRT_LocalOccupancy::mapEtaToPartition(const double t_eta) const {
 
 const TRT_LocalOccupancy::OccupancyData* TRT_LocalOccupancy::getData(const EventContext& ctx) const
 {
-  SG::ReadHandle<OccupancyData> rh (name() + "OccupancyData");
-  if (rh.isValid())
+  SG::ReadHandle<OccupancyData> rh (m_occupancyCacheRead,ctx);
+  if (rh.isValid()){
     return rh.cptr();
+  }
 
-  SG::WriteHandle<OccupancyData> wh (name() + "OccupancyData");
+  SG::WriteHandle<OccupancyData> wh (m_occupancyCacheWrite,ctx);
   return wh.put (makeData(ctx), true);
 }