diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h b/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h
index 74b33959965484113667d7b241eccf600b8b78eb..b8f3b8b827dae58d4efaf152432a700f544983a7 100644
--- a/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h
+++ b/InnerDetector/InDetRawAlgs/InDetOverlay/InDetOverlay/TRTOverlay.h
@@ -51,6 +51,8 @@ private:
 
   const TRT_ID *m_trtId{};
 
+  Gaudi::Property<bool> m_sortBkgInput{this, "SortBkgInput", false, "Sort background input RDOs"};
+
   SG::ReadHandleKey<TRT_RDO_Container> m_bkgInputKey{this, "BkgInputKey", "Bkg_TRT_RDOs"," ReadHandleKey for Background Input TRT_RDO_Container"};
   SG::ReadHandleKey<TRT_RDO_Container> m_signalInputKey{this, "SignalInputKey", "Sig_TRT_RDOs", "ReadHandleKey for Signal Input TRT_RDO_Container"};
   SG::WriteHandleKey<TRT_RDO_Container> m_outputKey{this, "OutputKey", "TRT_RDOs", "WriteHandleKey for Output TRT_RDO_Container"};
diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py b/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py
index b2ed2de326c5cb86d82c06537934f03e11459a8b..7b84a98bede5a32912dcc613594d583bd80bbf0f 100644
--- a/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py
+++ b/InnerDetector/InDetRawAlgs/InDetOverlay/python/InDetOverlayConfig.py
@@ -70,11 +70,13 @@ def getTRTOverlay(name="TRTOverlay", **kwargs):
     from Digitization.DigitizationFlags import digitizationFlags
 
     if overlayFlags.isOverlayMT():
+        kwargs.setdefault("SortBkgInput", overlayFlags.isDataOverlay())
         kwargs.setdefault("BkgInputKey", overlayFlags.bkgPrefix() + "TRT_RDOs");
         kwargs.setdefault("SignalInputKey", overlayFlags.sigPrefix() + "TRT_RDOs");
         kwargs.setdefault("OutputKey", "TRT_RDOs");
         kwargs.setdefault("SignalInputSDOKey", overlayFlags.sigPrefix() + "TRT_SDO_Map");
     else:
+        kwargs.setdefault("SortBkgInput", overlayFlags.isDataOverlay())
         kwargs.setdefault("BkgInputKey", overlayFlags.dataStore() + "+TRT_RDOs");
         kwargs.setdefault("SignalInputKey", overlayFlags.evtStore() + "+TRT_RDOs");
         kwargs.setdefault("OutputKey", overlayFlags.outputStore() + "+TRT_RDOs");
diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py b/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
index fffe234ed0e4cfdff96a91a23ee46ddc396846f6..dbeb29096350c1c32851e463fc18ecb5b314d43c 100644
--- a/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
+++ b/InnerDetector/InDetRawAlgs/InDetOverlay/python/TRTOverlayConfig.py
@@ -50,6 +50,7 @@ def TRTOverlayAlgCfg(flags, name="TRTOverlay", **kwargs):
     from InDetOverlay.TRT_ConditionsConfig import TRTStrawCondAlgCfg
     acc.merge(TRTStrawCondAlgCfg(flags))
 
+    kwargs.setdefault("SortBkgInput", flags.Overlay.DataOverlay)
     kwargs.setdefault("BkgInputKey", flags.Overlay.BkgPrefix + "TRT_RDOs")
     kwargs.setdefault("SignalInputKey", flags.Overlay.SigPrefix + "TRT_RDOs")
     kwargs.setdefault("SignalInputSDOKey", flags.Overlay.SigPrefix + "TRT_SDO_Map")
diff --git a/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx b/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx
index a0a565fe4bfac8a1492adf02779345960ffe70cf..9fdc3b7bb8d38d1c468b0a99de98fd7a46932be0 100644
--- a/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx
+++ b/InnerDetector/InDetRawAlgs/InDetOverlay/src/TRTOverlay.cxx
@@ -23,6 +23,13 @@
 
 namespace Overlay
 {
+  struct TRTRDOSorter {
+    bool operator() (TRT_RDORawData *digit1, TRT_RDORawData *digit2)
+    {
+      return digit1->identify() < digit2->identify();
+    }
+  } TRTRDOSorterObject;
+
   // Specialize copyCollection() for the TRT
   template<>
   std::unique_ptr<TRT_RDO_Collection> copyCollection(const IdentifierHash &hashId,
@@ -39,6 +46,14 @@ namespace Overlay
 
     return outputCollection;
   }
+
+  std::unique_ptr<TRT_RDO_Collection> copyCollectionAndSort(const IdentifierHash &hashId,
+                                                            const TRT_RDO_Collection *collection)
+  {
+    std::unique_ptr<TRT_RDO_Collection> outputCollection = copyCollection(hashId, collection);
+    std::stable_sort(outputCollection->begin(), outputCollection->end(), TRTRDOSorterObject);
+    return outputCollection;
+  }
 } // namespace Overlay
 
 
@@ -186,7 +201,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer,
      [](const std::pair<IdentifierHash, bool> &lhs,  IdentifierHash rhs) -> bool { return lhs.first < rhs; } );
     if (search == overlapMap.end() || search->first != hashId) {
       // Copy the background collection
-      std::unique_ptr<TRT_RDO_Collection> bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
+      std::unique_ptr<TRT_RDO_Collection> bkgCollection{};
+      if (m_sortBkgInput) {
+        bkgCollection = Overlay::copyCollectionAndSort(hashId, bkgContainer->indexFindPtr(hashId));
+      } else {
+        bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
+      }
 
       if (outputContainer->addCollection(bkgCollection.get(), hashId).isFailure()) {
         ATH_MSG_ERROR("Adding background Collection with hashId " << hashId << " failed");
@@ -211,7 +231,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer,
       auto outputCollection = std::make_unique<TRT_RDO_Collection>(hashId);
       outputCollection->setIdentifier(signalCollection->identify());
       // Copy the background collection
-      std::unique_ptr<TRT_RDO_Collection> bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
+      std::unique_ptr<TRT_RDO_Collection> bkgCollection{};
+      if (m_sortBkgInput) {
+        bkgCollection = Overlay::copyCollectionAndSort(hashId, bkgContainer->indexFindPtr(hashId));
+      } else {
+        bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
+      }
 
       // Merge collections
       int det = m_trtId->barrel_ec(signalCollection->identify());