diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
index d6df64553ea0f005820fea92991eda3c6578b833..42cbe06792de5f1a18996d53abf6148ab14eba0d 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCTRawDataProviderTool.h
@@ -14,7 +14,7 @@
 #define SCT_RAWDATABYTESTREAMCNV_ISCTRAWDATAPROVIDERTOOL_H
 
 #include "ByteStreamData/RawEvent.h"
-#include "InDetByteStreamErrors/InDetBSErrContainer.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "InDetRawData/SCT_RDO_Container.h"
 
 #include "GaudiKernel/IAlgTool.h"
@@ -39,7 +39,7 @@ class ISCTRawDataProviderTool : virtual public IAlgTool
   /** Main decoding methods */
   virtual StatusCode convert(std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>&,
                              ISCT_RDO_Container&,
-                             InDetBSErrContainer* errs) const = 0;
+                             IDCInDetBSErrContainer& errs) const = 0;
 
 };
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
index 7c2c89d73ec09893d1b52e54966152a732381115..442c07060ddaa7d2ade164447da08f38f13eea63 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h
@@ -16,7 +16,7 @@
 
 #include "InDetRawData/SCT_RDO_Container.h"
 #include "ByteStreamData/RawEvent.h"
-#include "InDetByteStreamErrors/InDetBSErrContainer.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 
 #include <vector>
 
@@ -36,7 +36,7 @@ class ISCT_RodDecoder : virtual public IAlgTool
   /** Fill Collection method */
   virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment&,
                                     ISCT_RDO_Container&,
-                                    InDetBSErrContainer* errs,
+                                    IDCInDetBSErrContainer& errs,
                                     const std::vector<IdentifierHash>* vecHash = nullptr) const = 0;
 };
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
index 071a7d6cd0d06bf800d388e6a22c1f5a95a969f6..6bded2e91d5c286defd6e340ee64e5a1146c16cb 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
@@ -46,7 +46,6 @@ StatusCode SCTRawDataProvider::initialize()
   ATH_CHECK(m_rdoContainerKey.initialize());
   ATH_CHECK(m_lvl1CollectionKey.initialize());
   ATH_CHECK(m_bcIDCollectionKey.initialize());
-  ATH_CHECK(m_bsErrContainerKey.initialize());
   ATH_CHECK(m_bsIDCErrContainerKey.initialize());
   ATH_CHECK(m_rdoContainerCacheKey.initialize(!m_rdoContainerCacheKey.key().empty()));
   ATH_CHECK(m_bsErrContainerCacheKey.initialize(!m_bsErrContainerCacheKey.key().empty()));
@@ -83,12 +82,9 @@ StatusCode SCTRawDataProvider::execute(const EventContext& ctx) const
     SG::UpdateHandle<IDCInDetBSErrContainer_Cache> cacheHandle( m_bsErrContainerCacheKey, ctx );
     ATH_CHECK( cacheHandle.isValid() );
     ATH_CHECK(bsIDCErrContainer.record( std::make_unique<IDCInDetBSErrContainer>(cacheHandle.ptr())) );
+    ATH_MSG_DEBUG("Created SCT IDCInDetBSErrContainer using external cache");
   }
 
-  SG::WriteHandle<InDetBSErrContainer> bsErrContainer(m_bsErrContainerKey, ctx);
-  ATH_CHECK(bsErrContainer.record(std::make_unique<InDetBSErrContainer>()));
-
-
   // Ask ROBDataProviderSvc for the vector of ROBFragment for all SCT ROBIDs
   std::vector<const ROBFragment*> vecROBFrags;
   if (not m_roiSeeded.value()) {
@@ -152,17 +148,10 @@ StatusCode SCTRawDataProvider::execute(const EventContext& ctx) const
   // Ask SCTRawDataProviderTool to decode it and to fill the IDC
   if (m_rawDataTool->convert(vecROBFrags,
                              *rdoInterface,
-                             bsErrContainer.ptr()).isFailure()) {
+			     *bsIDCErrContainer).isFailure()) {
     ATH_MSG_WARNING("BS conversion into RDOs failed");
   }
 
   if (dummyRDO) ATH_CHECK(dummyRDO->MergeToRealContainer(rdoContainer.ptr()));
-
-  // copy decoding errorrs to the IDC container, TODO, move this code to converter
-  for ( const std::pair<IdentifierHash, int>* hashErrorPair : *bsErrContainer ) {
-    bsIDCErrContainer->setOrDrop(  hashErrorPair->first , hashErrorPair->second);
-  }
-
-
   return StatusCode::SUCCESS;
 }
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.h
index 651870df07243996436aa2a8e05c788d434f9432..737c7a71f74d5ff794cd83694c47a60e9978a0b7 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.h
@@ -115,16 +115,11 @@ class SCTRawDataProvider : public AthReentrantAlgorithm
                                                               "SCT_BCID",
                                                               "SCT BCID key"};
 
-  /** Write handle for Inner Detector ByteStream error container. */
-  SG::WriteHandleKey<InDetBSErrContainer> m_bsErrContainerKey{this,
-                                                              "ByteStreamErrContainer",
-                                                              "SCT_ByteStreamErrs",
-                                                              "SCT BS error key"};
-
+  /** Write handle for Inner Detector ByteStream error container. */  
   SG::WriteHandleKey<IDCInDetBSErrContainer> m_bsIDCErrContainerKey{this,
-                                                                 "IDCByteStreamErrContainer",
-                                                                 "SCT_ByteStreamErrs",
-                                                                 "SCT BS error key for IDC variant"};
+                                                                    "IDCByteStreamErrContainer",
+                                                                    "SCT_ByteStreamErrs",
+                                                                    "SCT BS error key for IDC variant"};
 
 
   /** Update handle for SCT RDO and Erorrs Cache. */
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.cxx
index 867d7e0f172ba7eb2673a11430eec0703b712f37..43228e7102ae6739bb1438b9b2841d5cebbefb84 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.cxx
@@ -28,7 +28,7 @@ StatusCode SCTRawDataProviderTool::initialize()
 // Convert method
 StatusCode SCTRawDataProviderTool::convert(std::vector<const ROBFragment*>& vecROBFrags,
                                            ISCT_RDO_Container& rdoIDCont,
-                                           InDetBSErrContainer* errs) const
+                                           IDCInDetBSErrContainer& errs) const
 {
   if (vecROBFrags.empty()) return StatusCode::SUCCESS;
   ATH_MSG_DEBUG("SCTRawDataProviderTool::convert()");
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.h
index f605133876126dbca7ccdd4b8611cb432c0fcac7..d52f6ed9cb452a879e5acec6211f60c4283bf498 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProviderTool.h
@@ -51,7 +51,7 @@ class SCTRawDataProviderTool : public extends<AthAlgTool, ISCTRawDataProviderToo
    *  */
   virtual StatusCode convert(std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecROBFrags,
                              ISCT_RDO_Container& rdoIDCont,
-                             InDetBSErrContainer* errs) const override;
+                             IDCInDetBSErrContainer& errs) const override;
 
  private: 
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
index 37769d4ce788dc913c17e2029b74e611472a2f43..a92e527f09b0145f14d16dafb18180e4f2f8a9fb 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.cxx
@@ -173,14 +173,14 @@ StatusCode SCT_RodDecoder::finalize()
 
 StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
                                           ISCT_RDO_Container& rdoIDCont,
-                                          InDetBSErrContainer* errs,
+                                          IDCInDetBSErrContainer& errs,
                                           const std::vector<IdentifierHash>* vecHash) const
 {
   const uint32_t robID{robFrag.rod_source_id()};
   // Determine whether this data was generated using the ROD simulator
   const uint32_t rodDataType{robFrag.rod_detev_type()};
   const bool rodSimulatedData{static_cast<bool>((rodDataType >> 20) & 1)};
-  if (rodSimulatedData) addRODError(robID, SCT_ByteStreamErrors::RODSimulatedData, errs);
+  if (rodSimulatedData) ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::RODSimulatedData, errs));
 
   // Look for the bit that denotes "Super-condensed" mode
   const bool superCondensedMode{static_cast<bool>((rodDataType >> 21) & 1)};
@@ -224,20 +224,20 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
       ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
                     << " is non-zero " << (*robStatus) << std::dec);
       // First store generic "ROBFragmentError" error type.
-      addRODError(robID, SCT_ByteStreamErrors::ROBFragmentError, errs);
+      ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::ROBFragmentError, errs));
       sc = StatusCode::RECOVERABLE;
       // Now look for specific problems, e.g. truncated or masked-off RODs
       if (((*robStatus) >> 27) & 0x1) {
         ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
                       << std::dec << " indicates data truncation.");
-        addRODError(robID, SCT_ByteStreamErrors::TruncatedROD, errs);
+        ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::TruncatedROD, errs));
         m_truncatedRODNumber++;
         return sc;
       }
       if ((((*robStatus) >> 29) & 0x1) or (((*robStatus) >> 31) & 0x1)) {
         ATH_MSG_DEBUG("ROB status word for robID " << std::hex << robID 
                       << std::dec << " indicates resource was masked off.");
-        addRODError(robID, SCT_ByteStreamErrors::MaskedROD, errs);
+        ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::MaskedROD, errs));
         m_maskedRODNumber++;
         return sc;
       }
@@ -257,7 +257,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
       const int bocClockError{static_cast<int>((statusWord >> 17) & 0x1)};
       if (timClockError or bocClockError) {
         ATH_MSG_DEBUG(" Clock error in ROD status word: " << timClockError << " " << bocClockError);
-        addRODError(robID, SCT_ByteStreamErrors::RODClockError, errs);
+        ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::RODClockError, errs));
         m_rodClockErrorNumber++;
         sc=StatusCode::RECOVERABLE;
       }
@@ -287,7 +287,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
       if (data16[n]&0x8000) {
         if (not foundHeader) {
           ATH_MSG_INFO(" Missing link header in ROD " << std::hex << robID << std::dec);
-          addRODError(robID, SCT_ByteStreamErrors::MissingLinkHeaderError, errs);
+          ATH_CHECK(addRODError(robID, SCT_ByteStreamErrors::MissingLinkHeaderError, errs));
           m_numMissingLinkHeader++;
           sc = StatusCode::RECOVERABLE;
           continue;
@@ -309,7 +309,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             ATH_MSG_DEBUG("    Hit super-condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
                           << std::hex << data16[n]);
             m_chipNumberError++;
-            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            ATH_CHECK( addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs) );
             sc=StatusCode::RECOVERABLE;
             continue;
           }
@@ -321,7 +321,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -338,7 +338,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -361,7 +361,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
-              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
             } 
             else {
               saved[oldSide*768+oldStrip] = rdoMade;
@@ -387,7 +387,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             ATH_MSG_DEBUG("    Hit condensed : xxx Chip number = " << chip << " > 5 " << " for hit " 
                           << std::hex << data16[n]);
             m_chipNumberError++;
-            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
             sc=StatusCode::RECOVERABLE;
             continue;
           }
@@ -399,7 +399,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -416,7 +416,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -439,7 +439,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -460,7 +460,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           } 
           else { // 2-hits
             if (strip > 767) {
-              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               sc=StatusCode::RECOVERABLE;
 
               ATH_MSG_DEBUG("Condensed mode - strip number out of range");
@@ -473,7 +473,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(oldStrip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[oldSide*768+oldStrip] = rdoMade;
@@ -515,7 +515,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             if (chip>5) {
               ATH_MSG_DEBUG("Expanded hit: First hit xxx ERROR chip Nb = " << chip << " > 5");
               m_chipNumberError++;
-              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               continue;
             }
       
@@ -532,7 +532,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
             if (rdoMade == -1) {
               sc=StatusCode::RECOVERABLE;
-              addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+              ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
             } 
             else {
               saved[side*768+strip] = rdoMade;
@@ -542,7 +542,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           else { // Next hits cluster expanded
             if (data16[n]&0x80) { // Paired hits
               if (strip > 767) {
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
                 sc=StatusCode::RECOVERABLE;
                 ATH_MSG_DEBUG("Expanded mode - strip number out of range");
                 continue;
@@ -551,7 +551,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: paired hits xxx ERROR chip Nb = " << chip << " > 5");
                 m_chipNumberError++;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
                 continue;
               }
               // First hit from the pair
@@ -561,7 +561,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade1{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade1 == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[side*768+strip] = rdoMade1;
@@ -572,7 +572,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade2{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade2 == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[side*768+strip] = rdoMade2;
@@ -584,7 +584,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               if (chip>5) {
                 ATH_MSG_DEBUG("Expanded Hit: last hit xxx ERROR chip Nb = " << chip << " > 5");
                 m_chipNumberError++;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
                 continue;
               }     
               strip++;
@@ -593,7 +593,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
               const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
               if (rdoMade == -1) {
                 sc=StatusCode::RECOVERABLE;
-                addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+                ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
               } 
               else {
                 saved[side*768+strip] = rdoMade;
@@ -614,7 +614,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
           if (rdoMade == -1) {
             sc=StatusCode::RECOVERABLE;
-            addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+            ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
           } 
           else {
             saved[side*768+strip] = rdoMade;
@@ -637,7 +637,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         linkNumber = (((rodlinkNumber >>4)&0x7)*12+(rodlinkNumber &0xF));
         onlineID = ((robID & 0xFFFFFF)|(linkNumber << 24));
         if ((onlineID ==0) or (linkNumber > 95)) {
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
           sc=StatusCode::RECOVERABLE;
           ATH_MSG_DEBUG("Header: xxx Link number out of range (skipping following data)" 
                         << std::dec << linkNumber);
@@ -649,41 +649,41 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         // Look for masked off links - bit 7
         if (data16[n] >> 7 & 0x1) {
           ATH_MSG_DEBUG("Masked link " << onlineID << " " << currentLinkIDHash);
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::MaskedLink, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::MaskedLink, errs));
           sc=StatusCode::RECOVERABLE;
         }
         if (data16[n]&0x800) {
           ATH_MSG_DEBUG("    Header: xxx TimeOut Error " << currentLinkIDHash);
           m_headErrorTimeout++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TimeOutError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TimeOutError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
         if (data16[n]&0x1000) {
           ATH_MSG_DEBUG("    Header: xxx Preamble Error " << currentLinkIDHash);
           m_headErrorPreamble++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::PreambleError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::PreambleError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
         if (data16[n]&0x400) {
           ATH_MSG_DEBUG("    Header: xxx LVL1 ID Error " << currentLinkIDHash);
           m_headErrorLvl1ID++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::LVL1IDError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::LVL1IDError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
         if (data16[n]&0x200) {
           ATH_MSG_DEBUG("    Header: xxx BCID Error " << currentLinkIDHash);
           m_headErrorBCID++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::BCIDError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::BCIDError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
         if ((data16[n]&0xF) > 11) {
           ATH_MSG_DEBUG("    Header: xxx Error in formatter " << currentLinkIDHash);
           m_headErrorFormatter++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::FormatterError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::FormatterError, errs));
           sc=StatusCode::RECOVERABLE;
         }
 
@@ -702,7 +702,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         if (data16[n]&0x1000) {
           ATH_MSG_DEBUG("    Trailer: xxx Trailer ERROR " << std::hex << data16[n]);
           m_trailerErrorBit++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
@@ -712,7 +712,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           // http://www-eng.lbl.gov/~jmjoseph/Atlas-SiROD/Manuals/usersManual-v164.pdf
           ATH_MSG_DEBUG("    Trailer: xxx Header-Trailer limit ERROR " << std::hex << data16[n]);
           m_trailerErrorLimit++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::HeaderTrailerLimitError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::HeaderTrailerLimitError, errs));
           sc=StatusCode::RECOVERABLE;
         }
   
@@ -720,7 +720,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           // Not sure if there are hit elements before (probably yes but in principle they are fine)
           ATH_MSG_DEBUG("    Trailer: xxx Data Overflow ERROR " << std::hex << data16[n]);
           m_trailerErrorOverflow++;
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerOverflowError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::TrailerOverflowError, errs));
           sc=StatusCode::RECOVERABLE;
         }
         if (data16[n] & 0xF) {
@@ -758,7 +758,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         // No data should appear for that chip but how do we want to transmit this information?
         IdentifierHash flagIDHash{0};
         if (onlineID == 0) {
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
           continue;
         } 
         else {
@@ -772,7 +772,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
           ATH_MSG_DEBUG("ABCD error has an invalid error code " << abcError 
                         << " the 16-bit word is 0x" << std::hex << data16[n] << std::dec 
                         << " for hash " << flagIDHash);
-          addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
+          ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs));
         } 
         else {
           // Chip is 4 bits. The highest bit 3 represents side. Chip 0-5 on side 0 and chip 8-13 on side 1.
@@ -790,22 +790,22 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
             ATH_MSG_DEBUG("ABCD error has an invalid chip 0x" << std::hex << chip << std::dec
                           << " the 16-bit word is 0x" << std::hex << data16[n] << std::dec
                           << " for hash " << flagIDHash.value());
-            addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs);
+            ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Invalid, errs));
           } 
           else {
-            if (     abcError==0x1) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error1, errs);
-            else if (abcError==0x2) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error2, errs);
-            else if (abcError==0x4) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error4, errs);
-            else if (abcError==0x7) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error7, errs);
-            if (     chip%8==0) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip0, errs);
-            else if (chip%8==1) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip1, errs);
-            else if (chip%8==2) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip2, errs);
-            else if (chip%8==3) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip3, errs);
-            else if (chip%8==4) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip4, errs);
-            else if (chip%8==5) addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip5, errs);
+            if (     abcError==0x1) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error1, errs));
+            else if (abcError==0x2) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error2, errs));
+            else if (abcError==0x4) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error4, errs));
+            else if (abcError==0x7) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Error7, errs));
+            if (     chip%8==0) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip0, errs));
+            else if (chip%8==1) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip1, errs));
+            else if (chip%8==2) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip2, errs));
+            else if (chip%8==3) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip3, errs));
+            else if (chip%8==4) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip4, errs));
+            else if (chip%8==5) ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError_Chip5, errs));
           }
         }
-        addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError, errs);
+        ATH_CHECK(addSingleError(flagIDHash, SCT_ByteStreamErrors::ABCDError, errs));
         sc=StatusCode::RECOVERABLE;
         continue;
       } 
@@ -813,7 +813,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         // Raw Data
         IdentifierHash rawIDHash{0};
         if (onlineID == 0) {
-          addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+          ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
           continue;
         } 
         else {
@@ -823,14 +823,14 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
         ATH_MSG_DEBUG(" xxx Raw Data Mode " << std::hex << data16[n] << std::dec << ": Config Data Mode ");
         // Too many errors in the BS for the ROD to decode the data
         m_configDataBit++;
-        addSingleError(rawIDHash, SCT_ByteStreamErrors::RawError, errs);
+        ATH_CHECK(addSingleError(rawIDHash, SCT_ByteStreamErrors::RawError, errs));
         sc=StatusCode::RECOVERABLE;
         continue;
       } 
       else {
         ATH_MSG_DEBUG("Data word format unknown ");
         m_unknownDataFormat++;
-        addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+        ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
         sc=StatusCode::RECOVERABLE;
       }
     } // End of 16-bit word loop
@@ -841,7 +841,7 @@ StatusCode SCT_RodDecoder::fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROB
     const int rdoMade{makeRDO(strip, groupSize, timeBin, onlineID, errors, rdoIDCont, cache, errorHit)};
     if (rdoMade == -1) {
       sc=StatusCode::RECOVERABLE;
-      addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs);
+      ATH_CHECK(addSingleError(currentLinkIDHash, SCT_ByteStreamErrors::ByteStreamParseError, errs));
     } 
     else {
       saved[side*768+strip] = rdoMade;
@@ -949,44 +949,45 @@ int SCT_RodDecoder::makeRDO(int strip, int groupSize, int timeBin, uint32_t onli
 
 // addRODError method
 
-void SCT_RodDecoder::addRODError(uint32_t rodID, int errorType,
-                                 InDetBSErrContainer* errs) const
+StatusCode SCT_RodDecoder::addRODError(uint32_t rodID, int errorType,
+				       IDCInDetBSErrContainer& errs) const
 {
   std::vector<IdentifierHash> hashIDs;
   m_cabling->getHashesForRod(hashIDs, rodID);
   for (const IdentifierHash& hash: hashIDs) {
-    addSingleError(hash, errorType, errs);
+    ATH_CHECK( addSingleError(hash, errorType, errs) );
   }
-  return;
+  return StatusCode::SUCCESS;
 }
 
 // addSingleError method
 
-bool SCT_RodDecoder::addSingleError(const IdentifierHash& hashID,
-                                    int bsErrorType,
-                                    InDetBSErrContainer* errs) const
+StatusCode SCT_RodDecoder::addSingleError(const IdentifierHash& hashID,
+					  int bsErrorType,
+					  IDCInDetBSErrContainer& errs) const
 {
-  const bool ok{hashID.is_valid() and errs!=nullptr};
-  if (ok) {
-    errs->push_back(std::make_unique<std::pair<IdentifierHash, int> >(hashID, bsErrorType));
+  if ( not hashID.is_valid() ) {
+    ATH_MSG_INFO("addSingleError hashID " << hashID << " is invalid.");
+    return StatusCode::RECOVERABLE;
   }
-  return ok;
+  errs.setOrDrop(hashID, bsErrorType);
+  return StatusCode::SUCCESS;
 }
 
 // setFirstTempMaskedChip method
 
-void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, 
-                                            unsigned int firstTempMaskedChip, 
-                                            InDetBSErrContainer* errs) const 
+StatusCode SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID, 
+						  unsigned int firstTempMaskedChip, 
+						  IDCInDetBSErrContainer& errs) const 
 {
   if (not hashID.is_valid()) {
     ATH_MSG_INFO("setFirstTempMaskedChip hashID " << hashID << " is invalid.");
-    return;
+    return StatusCode::RECOVERABLE;
   }
   if (firstTempMaskedChip==0) {
     ATH_MSG_WARNING("setFirstTempMaskedChip: firstTempMaskedChip should be greater than 0. firstTempMaskedChip is " 
                     << firstTempMaskedChip);
-    return;
+    return StatusCode::RECOVERABLE;
   }
 
   // wafer hash -> wafer id -> module id -> wafer hash on side-0, wafer hash on side-1
@@ -1021,12 +1022,12 @@ void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
     else if (badLinks.first and badLinks.second) {
       // Both link-0 and link-1 are working
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are working. But Rx redundancy is used... Why?");
-      return;
+      return StatusCode::RECOVERABLE;
     } 
     else {
       // Both link-0 and link-1 are broken
       ATH_MSG_WARNING("setFirstTempMaskedChip: Both link-0 and link-1 are broken. But data are coming... Why?");
-      return;
+      return StatusCode::RECOVERABLE;
     }
   }
 
@@ -1101,12 +1102,12 @@ void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
 
     if (firstTempMaskedChipSide0>0) {
       for (unsigned int iChip{firstTempMaskedChipSide0-1}; iChip<6; iChip++) {
-        addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+iChip, errs);
+        ATH_CHECK( addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+iChip, errs) );
       }
     }
     if (firstTempMaskedChipSide1>6) {
       for (unsigned int iChip{firstTempMaskedChipSide1-1}; iChip<12; iChip++) {
-        addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+iChip-6, errs);
+        ATH_CHECK( addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+iChip-6, errs) );
       }
     }
   } 
@@ -1117,8 +1118,8 @@ void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
       int jChip{chipOrder[type][iChip]};
       if (jChip==static_cast<int>(firstTempMaskedChip-1)) toBeMasked = true;
       if (toBeMasked) {
-        if (jChip<6) addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+jChip, errs);
-        else         addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+jChip-6, errs);
+        if (jChip<6) ATH_CHECK( addSingleError(hashSide0, SCT_ByteStreamErrors::TempMaskedChip0+jChip, errs));
+        else         ATH_CHECK( addSingleError(hashSide1, SCT_ByteStreamErrors::TempMaskedChip0+jChip-6, errs));
       }
     }
   }
@@ -1132,4 +1133,5 @@ void SCT_RodDecoder::setFirstTempMaskedChip(const IdentifierHash& hashID,
                   << " phi_module " << m_sctID->phi_module(waferID)
                   << " side " << m_sctID->side(waferID)
                   << " firstTempMaskedChip " << firstTempMaskedChip);
+  return StatusCode::SUCCESS;
 }
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
index b22019023ec52beaa243dda7e66689572d28d03c..4d6dcd95bc94c9e598d0fb98842661e6ef225f52 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCT_RodDecoder.h
@@ -10,7 +10,7 @@
 #include "SCT_RawDataByteStreamCnv/ISCT_RodDecoder.h"
 #include "AthenaBaseComps/AthAlgTool.h"
 
-#include "InDetByteStreamErrors/InDetBSErrContainer.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "SCT_ConditionsData/SCT_ByteStreamErrors.h"
 #include "SCT_Cabling/ISCT_CablingTool.h"
 #include "SCT_ConditionsTools/ISCT_ConfigurationConditionsTool.h"
@@ -68,7 +68,7 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
    */
   virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment& robFrag,
                                     ISCT_RDO_Container& rdoIDCont,
-                                    InDetBSErrContainer* errs,
+                                    IDCInDetBSErrContainer& errs,
                                     const std::vector<IdentifierHash>* vecHash = nullptr) const override;
 
  private:
@@ -105,8 +105,8 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
    * @param errorType Error type info.
    * @param errs Byte stream error container.
    */
-  void addRODError(uint32_t rodID, int errorType,
-                   InDetBSErrContainer* errs) const;
+  StatusCode addRODError(uint32_t rodID, int errorType,
+			 IDCInDetBSErrContainer& errs) const;
   /**
    * @brief Add single eror
    *
@@ -114,9 +114,9 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
    * @param bsErrorType Byte Stream error type info.
    * @param errs Byte stream error container.
    */
-  bool addSingleError(const IdentifierHash& hashID,
-                      int bsErrorType,
-                      InDetBSErrContainer* errs) const;
+  StatusCode addSingleError(const IdentifierHash& hashID,
+			    int bsErrorType,
+			    IDCInDetBSErrContainer& errs) const;
 
   /**
    * @brief Set first temporarily masked chip information from byte stream trailer
@@ -125,9 +125,9 @@ class SCT_RodDecoder : public extends<AthAlgTool, ISCT_RodDecoder>
    * @param firstTempMaskedChip  Firt temporarily masked chip info.
    * @param errs Byte stream error container.
    */
-  void setFirstTempMaskedChip(const IdentifierHash& hashID, 
-                              unsigned int firstTempMaskedChip, 
-                              InDetBSErrContainer* errs) const;
+  StatusCode setFirstTempMaskedChip(const IdentifierHash& hashID, 
+				    unsigned int firstTempMaskedChip, 
+				    IDCInDetBSErrContainer& errs) const;
 
   /** Identifier helper class for the SCT subdetector that creates compact Identifier objects and 
       IdentifierHash or hash IDs. Also allows decoding of these IDs. */
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigSCTRawDataProvider.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigSCTRawDataProvider.h
index 7c13ed5d1239964365a8228e35e40e450da15517..6b9091979554117c971a67a0e68881ab6e55c466 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigSCTRawDataProvider.h
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigSCTRawDataProvider.h
@@ -69,7 +69,7 @@ namespace InDet {
     const SCT_ID*                       m_id; 
     //! the RDO container
     SCT_RDO_Container*                  m_container;
-    InDetBSErrContainer*                m_bsErrCont;
+    IDCInDetBSErrContainer*             m_bsErrCont;
     std::string                         m_RDO_Key;
     std::string                         m_bsErrCont_Key;
 
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
index 451d844bb7af361c8414a60829fb0f6e9ce7efac..f700a0d7d786c2588a790b92a3d5f104e706e84b 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
@@ -128,8 +128,8 @@ namespace InDet {
     }
 
     m_bsErrCont = nullptr;
-    if (!evtStore()->transientContains<InDetBSErrContainer>(m_bsErrCont_Key)) {
-      m_bsErrCont = new InDetBSErrContainer();
+    if (!evtStore()->transientContains<IDCInDetBSErrContainer>(m_bsErrCont_Key)) {
+      m_bsErrCont = new IDCInDetBSErrContainer(m_id->wafer_hash_max(), std::numeric_limits<int>::min());
       if (evtStore()->record(m_bsErrCont, m_bsErrCont_Key, true, true).isFailure()) {
         ATH_MSG_FATAL("Unable to record " << m_bsErrCont_Key);
         return StatusCode::FAILURE;
@@ -181,7 +181,7 @@ namespace InDet {
     // ask SCTRawDataProviderTool to decode it and to fill the IDC
     StatusCode scon = StatusCode::FAILURE;
     if (m_container){
-      scon =  m_rawDataTool->convert(listOfRobf,*m_container,m_bsErrCont);
+      scon =  m_rawDataTool->convert(listOfRobf,*m_container,*m_bsErrCont);
       if (scon==StatusCode::FAILURE)
 	msg(MSG::ERROR) << "BS conversion into RDOs failed" << endmsg;
     }
diff --git a/Trigger/TrigTools/TrigOnlineSpacePointTool/src/SCT_ClusterCacheTool.cxx b/Trigger/TrigTools/TrigOnlineSpacePointTool/src/SCT_ClusterCacheTool.cxx
index a4e15504abe1cb5a9ec15cf79d7367b5c8c1e200..515b7779bbcbd2c8e60b5de16483f100a3d24b9c 100644
--- a/Trigger/TrigTools/TrigOnlineSpacePointTool/src/SCT_ClusterCacheTool.cxx
+++ b/Trigger/TrigTools/TrigOnlineSpacePointTool/src/SCT_ClusterCacheTool.cxx
@@ -221,10 +221,10 @@ StatusCode SCT_ClusterCacheTool::convertBStoClusters(std::vector<const ROBF*>& r
 	    << " is found in StoreGate");
     }
 
-  InDetBSErrContainer* bsErrCont{nullptr};
+  IDCInDetBSErrContainer* bsErrCont{nullptr};
   if (m_useOfflineDecoder) {
     if (!evtStore()->transientContains<InDetBSErrContainer>(m_bsErrContainerName)) {
-      bsErrCont = new InDetBSErrContainer();
+      bsErrCont = new IDCInDetBSErrContainer(m_sct_id->wafer_hash_max(), std::numeric_limits<int>::min());
       if (evtStore()->record(bsErrCont, m_bsErrContainerName, true, true).isFailure()) {
         ATH_MSG_FATAL("Unable to record " << m_bsErrContainerName);
         return StatusCode::FAILURE;
@@ -341,10 +341,10 @@ StatusCode SCT_ClusterCacheTool::convertBStoClusters(std::vector<const ROBF*>& r
 
 	      StatusCode scRod = StatusCode::SUCCESS;
 	      if(!isFullScan) {
-		scRod=m_offlineDecoder->fillCollection(*robFrag,*m_rdoContainer,bsErrCont,&reducedList);
+		scRod=m_offlineDecoder->fillCollection(*robFrag,*m_rdoContainer,*bsErrCont,&reducedList);
 	      }
 	      else {
-		scRod=m_offlineDecoder->fillCollection(*robFrag,*m_rdoContainer,bsErrCont,NULL);
+		scRod=m_offlineDecoder->fillCollection(*robFrag,*m_rdoContainer,*bsErrCont,NULL);
 	      }
 	      if(scRod.isRecoverable())
 		{
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
index d6363a6b1d2c81b398cd82ddcad4b88d613324b2..b4f16674155848dd0a5b66c309e6f9d5bac0b99b 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
@@ -41,8 +41,7 @@ def precisionElectronRecoSequence(RoIs):
                                  ('SCT_FlaggedCondData','StoreGateSvc+SCT_FlaggedCondData_TRIG')]
     
     if globalflags.InputFormat.is_bytestream():
-       ViewVerifyTrk.DataObjects += [( 'InDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' ) ,
-                                    ( 'InDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
+       ViewVerifyTrk.DataObjects += [( 'InDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
                                     ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' ) ]
 
     # AlgSequence.SGInputLoader.Load.append([ ('InDetBSErrContainer','StoreGateSvc+PixelByteStreamErrs') ])
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
index 290626a42f0b9cd61afe0ea0b25c3eb3e7239dee..8d07776441d9c6a51975031002584a770690d80b 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
@@ -507,8 +507,7 @@ def muEFCBRecoSequence( RoIs, name ):
                                  ( 'xAOD::IParticleContainer' , 'StoreGateSvc+'+TrackParticlesName )]
 
     if globalflags.InputFormat.is_bytestream():
-      ViewVerifyTrk.DataObjects += [( 'InDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' ) ,
-                                    ( 'InDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
+      ViewVerifyTrk.DataObjects += [( 'InDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
                                     ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' ) ]
     muEFCBRecoSequence += ViewVerifyTrk