diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/IDCInDetBSErrContainerCnv_p1.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/IDCInDetBSErrContainerCnv_p1.cxx
index 77b8764023db120e80d06c66396157f5afa9f31e..95e022574e58cf5642351f19c4c86658452c3856 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/IDCInDetBSErrContainerCnv_p1.cxx
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/IDCInDetBSErrContainerCnv_p1.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "IDCInDetBSErrContainerCnv_p1.h"
@@ -23,9 +23,12 @@ void  IDCInDetBSErrContainerCnv_p1::persToTrans(const InDetBSErrContainer64_p1*
 
 //================================================================
 IDCInDetBSErrContainer* IDCInDetBSErrContainerCnv_p1::createTransient(const InDetBSErrContainer64_p1* persObj, MsgStream& log) {
-  auto maxhash = std::max_element(persObj->m_bsErrs.begin(), persObj->m_bsErrs.end());
-  size_t g = maxhash->first;
-  std::unique_ptr<IDCInDetBSErrContainer> trans = std::make_unique<IDCInDetBSErrContainer>(g + 1, std::numeric_limits<uint64_t>::min());
+  size_t g = 0;
+  if (persObj->m_bsErrs.begin()!=persObj->m_bsErrs.end()) {
+    auto maxhash = std::max_element(persObj->m_bsErrs.begin(), persObj->m_bsErrs.end());
+    g = maxhash->first + 1;
+  }
+  std::unique_ptr<IDCInDetBSErrContainer> trans = std::make_unique<IDCInDetBSErrContainer>(g, std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min());
   persToTrans(persObj, trans.get(), log);
   return trans.release();
 }
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.cxx b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.cxx
index e84e9551a182ca599eed77e2a4a8743e2fc04b00..15afb8ec7fd682a602ab813f1630ac037e8292af 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.cxx
@@ -32,9 +32,9 @@ StatusCode SCT_FlaggedConditionTestAlg::execute(const EventContext& ctx) const {
 
   ATH_MSG_ALWAYS("------------------------------------------------------------");
   ATH_MSG_ALWAYS(" numBadIds " << m_flaggedTool->numBadIds(ctx));
-  const SCT_FlaggedCondData* badIds{m_flaggedTool->getBadIds(ctx)};
-  for (const std::pair<const IdentifierHash, std::string>& badId : *badIds) {
-    ATH_MSG_ALWAYS("  Wafer hash " << badId.first << " reason " << badId.second);
+  const IDCInDetBSErrContainer* badIds{m_flaggedTool->getBadIds(ctx)};
+  for (const std::pair<const size_t, const IDCInDetBSErrContainer::ErrorCode> badId : badIds->getAll()) {
+    ATH_MSG_ALWAYS("  Wafer hash " << badId.first << " reason " << m_flaggedTool->details(badId.first));
   }
 
   return StatusCode::SUCCESS;
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.h b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.h
index 9e7df0ba4f594b320dea1b935090ceb955e2d307..c35af6b2de6bf5ac3f7f4ebc1eee69d8e2a1d1a4 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/src/SCT_FlaggedConditionTestAlg.h
@@ -18,7 +18,7 @@
 //Athena
 #include "AthenaBaseComps/AthReentrantAlgorithm.h"
 
-#include "SCT_ConditionsTools//ISCT_FlaggedConditionTool.h"
+#include "SCT_ConditionsTools/ISCT_FlaggedConditionTool.h"
 
 //Gaudi
 #include "GaudiKernel/ToolHandle.h"
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsData/SCT_ConditionsData/SCT_FlaggedCondEnum.h b/InnerDetector/InDetConditions/SCT_ConditionsData/SCT_ConditionsData/SCT_FlaggedCondEnum.h
new file mode 100644
index 0000000000000000000000000000000000000000..6bc7d806dbde2e320294e1baedb7621bc9b9229f
--- /dev/null
+++ b/InnerDetector/InDetConditions/SCT_ConditionsData/SCT_ConditionsData/SCT_FlaggedCondEnum.h
@@ -0,0 +1,36 @@
+// -*- C++ -*-
+
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file SCT_FlaggedCondEnum.h
+ * @brief header file for enum for SCT_Clusterization and SCT_FlaggedConditionTool.
+ * @author Susumu Oda
+ * @date 20/08/2020
+ **/
+
+#ifndef SCT_FLAGGEDCONDENUM_H
+#define SCT_FLAGGEDCONDENUM_H
+
+#include <vector>
+
+namespace SCT_FlaggedCondEnum {
+  /**
+   * @enum ErrorType
+   * @brief SCT flagged condition error type enums used in SCT_Clusterization,
+   * SCT_FlaggedConditionTool.
+   +*/
+  enum ErrorType {
+    ExceedMaxFiredStrips, // SCT_Clusterization: Exceeds max fired strips
+    ExceedMaxRDOs, // SCT_TrgClusterization: Exceeds max RDOs
+    NUM_ERROR_TYPES
+  };
+  static const std::vector<std::string> ErrorTypeDescription = {
+    "SCT_Clusterization: Exceeds max fired strips", // ExceedMaxFiredStrips
+    "SCT_TrgClusterization: Exceeds max RDOs" // ExceedMaxRDOs
+  };
+}
+
+#endif // SCT_FLAGGEDCONDENUM_H
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/SCT_ConditionsTools/ISCT_FlaggedConditionTool.h b/InnerDetector/InDetConditions/SCT_ConditionsTools/SCT_ConditionsTools/ISCT_FlaggedConditionTool.h
index 102d84e7b60c85da1eed2557150991c9e865d74b..9ce05a00f8d07443dd7842764ffa21be23a3698f 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/SCT_ConditionsTools/ISCT_FlaggedConditionTool.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/SCT_ConditionsTools/ISCT_FlaggedConditionTool.h
@@ -1,10 +1,10 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /*
  * @file ISCT_FlaggedConditionTool.h
- * interface file for service allowing one to flag modules as 'bad' with a reason
+ * interface file for tool allowing one to flag modules as 'bad' with a reason
  * @author gwilliam@mail.cern.ch
  */
 
@@ -16,9 +16,10 @@
 #include "Identifier/IdentifierHash.h"
  
 // Local 
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "InDetConditionsSummaryService/InDetHierarchy.h"
+#include "SCT_ConditionsData/SCT_FlaggedCondEnum.h"
 #include "SCT_ConditionsTools/ISCT_ConditionsTool.h"
-#include "SCT_ConditionsData/SCT_FlaggedCondData.h"
 
 // Forward declarations
 class Identifier;
@@ -51,8 +52,8 @@ class ISCT_FlaggedConditionTool: virtual public ISCT_ConditionsTool {
   virtual int numBadIds(const EventContext& ctx) const =0;
 
   /**Get IdentifierHashs ofwafers flagged as bad + reason (per event)*/
-  virtual const SCT_FlaggedCondData* getBadIds() const =0;
-  virtual const SCT_FlaggedCondData* getBadIds(const EventContext& ctx) const =0;
+  virtual const IDCInDetBSErrContainer* getBadIds() const =0;
+  virtual const IDCInDetBSErrContainer* getBadIds(const EventContext& ctx) const =0;
 
  private:
 };
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.cxx b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.cxx
index 594999b14fc335de4d43d10364829bde88a073bb..dc89c2afa081307d8c5fac3c0a66ee1606e43c64 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "SCT_FlaggedConditionTool.h"
@@ -54,10 +54,10 @@ bool SCT_FlaggedConditionTool::isGood(const Identifier& elementId, InDetConditio
 
 // Is this element good (by IdentifierHash)?
 bool SCT_FlaggedConditionTool::isGood(const IdentifierHash& hashId, const EventContext& ctx) const {
-  const SCT_FlaggedCondData* badIds{getCondData(ctx)};
+  const IDCInDetBSErrContainer* badIds{getCondData(ctx)};
   if (badIds==nullptr) {
     if (m_numWarnForFailures<m_maxNumWarnForFailures) {
-      ATH_MSG_WARNING("SCT_FlaggedCondData cannot be retrieved. (isGood)");
+      ATH_MSG_WARNING(m_badIds.key() << " cannot be retrieved. (isGood)");
       m_numWarnForFailures++;
       if (m_numWarnForFailures==m_maxNumWarnForFailures) {
         ATH_MSG_WARNING("Disabling this type of messages from " << name());
@@ -66,7 +66,7 @@ bool SCT_FlaggedConditionTool::isGood(const IdentifierHash& hashId, const EventC
     return false;
   }
 
-  return (badIds->find(hashId) == badIds->end());
+  return (not badIds->present(hashId));
 }
 
 bool SCT_FlaggedConditionTool::isGood(const IdentifierHash& hashId) const {
@@ -80,10 +80,10 @@ bool SCT_FlaggedConditionTool::isGood(const IdentifierHash& hashId) const {
 const std::string& SCT_FlaggedConditionTool::details(const IdentifierHash& hashId, const EventContext& ctx) const {
   static const std::string nullString;
 
-  const SCT_FlaggedCondData* badIds{getCondData(ctx)};
+  const IDCInDetBSErrContainer* badIds{getCondData(ctx)};
   if (badIds==nullptr) {
     if (m_numWarnForFailures<m_maxNumWarnForFailures) {
-      ATH_MSG_WARNING("SCT_FlaggedCondData cannot be retrieved. (details)");
+      ATH_MSG_WARNING(m_badIds.key() << " cannot be retrieved. (details)");
       m_numWarnForFailures++;
       if (m_numWarnForFailures==m_maxNumWarnForFailures) {
         ATH_MSG_WARNING("Disabling this type of messages from " << name());
@@ -92,8 +92,15 @@ const std::string& SCT_FlaggedConditionTool::details(const IdentifierHash& hashI
     return nullString;
   }
 
-  std::map<IdentifierHash, std::string>::const_iterator itr(badIds->find(hashId));
-  return ((itr != badIds->end()) ? (*itr).second : nullString);
+  if (badIds->present(hashId)) {
+    const IDCInDetBSErrContainer::ErrorCode value{badIds->retrieve(hashId)};
+    if (value>0) {
+      for (size_t error{0}; error<SCT_FlaggedCondEnum::NUM_ERROR_TYPES; error++) {
+        if (value & (1 << error)) return SCT_FlaggedCondEnum::ErrorTypeDescription[error];
+      }
+    }
+  }
+  return nullString;
 }
 
 const std::string& SCT_FlaggedConditionTool::details(const IdentifierHash& hashId) const {
@@ -114,10 +121,10 @@ const std::string& SCT_FlaggedConditionTool::details(const Identifier& Id) const
 }
 
 int SCT_FlaggedConditionTool::numBadIds(const EventContext& ctx) const {
-  const SCT_FlaggedCondData* badIds{getCondData(ctx)};
+  const IDCInDetBSErrContainer* badIds{getCondData(ctx)};
   if (badIds==nullptr) {
     if (m_numWarnForFailures<m_maxNumWarnForFailures) {
-      ATH_MSG_WARNING("SCT_FlaggedCondData cannot be retrieved. (numBadIds)");
+      ATH_MSG_WARNING(m_badIds.key() << " cannot be retrieved. (numBadIds)");
       m_numWarnForFailures++;
       if (m_numWarnForFailures==m_maxNumWarnForFailures) {
         ATH_MSG_WARNING("Disabling this type of messages from " << name());
@@ -126,7 +133,7 @@ int SCT_FlaggedConditionTool::numBadIds(const EventContext& ctx) const {
     return -1;
   }
 
-  return badIds->size();
+  return static_cast<int>(badIds->numberSet());
 }
 
 int SCT_FlaggedConditionTool::numBadIds() const {
@@ -134,17 +141,17 @@ int SCT_FlaggedConditionTool::numBadIds() const {
   return numBadIds(ctx);
 }
 
-const SCT_FlaggedCondData* SCT_FlaggedConditionTool::getBadIds(const EventContext& ctx) const {
+const IDCInDetBSErrContainer* SCT_FlaggedConditionTool::getBadIds(const EventContext& ctx) const {
   return getCondData(ctx);
 }
 
-const SCT_FlaggedCondData* SCT_FlaggedConditionTool::getBadIds() const {
+const IDCInDetBSErrContainer* SCT_FlaggedConditionTool::getBadIds() const {
   const EventContext& ctx{Gaudi::Hive::currentContext()};
   return getBadIds(ctx);
 }
 
-const SCT_FlaggedCondData* SCT_FlaggedConditionTool::getCondData(const EventContext& ctx) const {
-  SG::ReadHandle<SCT_FlaggedCondData> condData{m_badIds, ctx};
+const IDCInDetBSErrContainer* SCT_FlaggedConditionTool::getCondData(const EventContext& ctx) const {
+  SG::ReadHandle<IDCInDetBSErrContainer> condData{m_badIds, ctx};
   if (not condData.isValid()) {
     if (m_numWarnForFailures<m_maxNumWarnForFailures) {
       ATH_MSG_WARNING("Failed to get " << m_badIds.key());
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.h b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.h
index 60c54b3686e514ccde9d3b1821407a5ab641699a..3d0f673547186ec2d43ec388a0695d602adfe966 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_FlaggedConditionTool.h
@@ -1,12 +1,12 @@
 // -*- C++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /*
  * @file SCT_FlaggedConditionTool.h
- * header file for service allowing one to flag modules as 'bad' with a reason
+ * header file for tool allowing one to flag modules as 'bad' with a reason
  * @author gwilliam@mail.cern.ch
  */
 
@@ -62,20 +62,20 @@ public:
   virtual int numBadIds(const EventContext& ctx) const override;
 
   /**Get IdentifierHashs ofwafers flagged as bad + reason (per event)*/
-  virtual const SCT_FlaggedCondData* getBadIds() const override;
-  virtual const SCT_FlaggedCondData* getBadIds(const EventContext& ctx) const override;
+  virtual const IDCInDetBSErrContainer* getBadIds() const override;
+  virtual const IDCInDetBSErrContainer* getBadIds(const EventContext& ctx) const override;
 
  private:
   // SCT_FlaggedCondData created by SCT_Clusterization
   // SCT_FlaggedCondData_TRIG created by SCT_TrgClusterization for InDetTrigInDetSCT_FlaggedConditionTool
-  SG::ReadHandleKey<SCT_FlaggedCondData> m_badIds{this, "SCT_FlaggedCondData", "SCT_FlaggedCondData", "SCT flagged conditions data"};
+  SG::ReadHandleKey<IDCInDetBSErrContainer> m_badIds{this, "SCT_FlaggedCondData", "SCT_FlaggedCondData", "SCT flagged conditions data"};
 
   UnsignedIntegerProperty m_maxNumWarnForFailures{this, "MaxNumWarnForFailures", 5};
   mutable std::atomic_uint m_numWarnForFailures{0};
 
   const SCT_ID* m_sctID{nullptr}; //!< ID helper for SCT
 
-  const SCT_FlaggedCondData* getCondData(const EventContext& ctx) const;
+  const IDCInDetBSErrContainer* getCondData(const EventContext& ctx) const;
 };
 
 #endif // SCT_FlaggedConditionTool_h
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
index c27779a91dac0da71ba38d5c9ff3dc9de99a4a5a..e8d3d7414d984991d3aee66958fb5e00a2454072 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
@@ -140,7 +140,7 @@ StatusCode PixelRawDataProvider::execute(const EventContext& ctx) const {
     SG::UpdateHandle<IDCInDetBSErrContainer_Cache> bsErrorsCacheHandle( m_bsErrorsCacheKey, ctx);
     decodingErrors = std::make_unique<IDCInDetBSErrContainer>( bsErrorsCacheHandle.ptr() );
   } else {
-    decodingErrors = std::make_unique<IDCInDetBSErrContainer>( m_pixel_id->wafer_hash_max(), std::numeric_limits<int>::min() );
+    decodingErrors = std::make_unique<IDCInDetBSErrContainer>( m_pixel_id->wafer_hash_max(), std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min() );
   }
 
 
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/share/testSCTDecode.py b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/share/testSCTDecode.py
index cd5a176d56a08beca4d1ea1c0c5a4d5d3ff11c30..ecbbd1c36b37e01d554c463a276c14efcb9bb14b 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/share/testSCTDecode.py
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/share/testSCTDecode.py
@@ -246,9 +246,9 @@ if doDump:
     outStream = AthenaPoolOutputStream("OutStream", "testSCTDecode.pool.root")
     outStream.ItemList  = ["xAOD::EventInfo#EventInfo", "xAOD::EventAuxInfo#EventInfoAux."]
     outStream.ItemList += ["SCT_RDO_Container#SCT_RDOs"]
-    outStream.ItemList += ["InDetBSErrContainer#SCT_ByteStreamErrs"]
+    outStream.ItemList += ["IDCInDetBSErrContainer#SCT_ByteStreamErrs"]
     outStream.ItemList += ["InDet::SCT_ClusterContainer#SCT_Clusters"]
-    outStream.ItemList += ["SCT_FlaggedCondData#SCT_FlaggedCondData"]
+    outStream.ItemList += ["IDCInDetBSErrContainer#SCT_FlaggedCondData"]
     # outStream.ItemList += ["SpacePointContainer#SCT_SpacePoints"]
     outStream.ItemList += ["xAOD::SCTRawHitValidationContainer#*", "xAOD::SCTRawHitValidationAuxContainer#*"]
     outStream.ItemList += ["xAOD::TrackMeasurementValidationContainer#*", "xAOD::TrackMeasurementValidationAuxContainer#*"]
diff --git a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
index eafdb926726a9a57213312a0f0929f0da6e3c382..a27436fee3f8110cb4904ea9e7a0b7c8398cdb69 100644
--- a/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv/src/SCTRawDataProvider.cxx
@@ -76,7 +76,7 @@ StatusCode SCTRawDataProvider::execute(const EventContext& ctx) const
 
   SG::WriteHandle<IDCInDetBSErrContainer> bsIDCErrContainer(m_bsIDCErrContainerKey, ctx);
   if ( m_bsErrContainerCacheKey.key().empty() ) {
-    ATH_CHECK(bsIDCErrContainer.record( std::make_unique<IDCInDetBSErrContainer>(m_sctID->wafer_hash_max(), std::numeric_limits<int>::min() )));
+    ATH_CHECK(bsIDCErrContainer.record( std::make_unique<IDCInDetBSErrContainer>(m_sctID->wafer_hash_max(), std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min() )));
     ATH_MSG_DEBUG("Created IDCInDetBSErrContainer w/o using external cache");
   } else { // use cache
     SG::UpdateHandle<IDCInDetBSErrContainer_Cache> cacheHandle( m_bsErrContainerCacheKey, ctx );
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/WriteInDetESD.py b/InnerDetector/InDetExample/InDetRecExample/share/WriteInDetESD.py
index 5ad573951429de6859173516094790b2116bdb92..4a5db3a4d8d666bfaab0f4e62fd6fbff53a3ea4a 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/WriteInDetESD.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/WriteInDetESD.py
@@ -34,7 +34,7 @@ elif InDetFlags.writePRDs():
    if InDetFlags.doPixelClusterSplitting():
       InDetESDList+=["InDet::PixelGangedClusterAmbiguities#"+InDetKeys.SplitClusterAmbiguityMap()]
    # Save SCT_FlaggedCondData for SCT_FlaggedConditionTool
-   InDetESDList+=['SCT_FlaggedCondData#'+'SCT_FlaggedCondData']
+   InDetESDList+=['IDCInDetBSErrContainer#'+'SCT_FlaggedCondData']
 
 # add tracks
 # ----------
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/InDetPrepRawDataFormation/SCT_Clusterization.h b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/InDetPrepRawDataFormation/SCT_Clusterization.h
index 6f7ae71459124e78355fbfaa1367584af725b45f..33bdcaca8154620f05d9460d25c9d7434ffd8578 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/InDetPrepRawDataFormation/SCT_Clusterization.h
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/InDetPrepRawDataFormation/SCT_Clusterization.h
@@ -19,7 +19,7 @@
 #include "InDetPrepRawData/SCT_ClusterContainer.h"
 #include "InDetPrepRawData/SiClusterContainer.h"
 #include "InDetRawData/SCT_RDO_Container.h"
-#include "SCT_ConditionsData/SCT_FlaggedCondData.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 
 /// Tool handle template parameters
 #include "IRegionSelector/IRegSelTool.h"
@@ -95,8 +95,9 @@ private:
   SG::ReadHandleKey<SCT_RDO_Container> m_rdoContainerKey{this, "DataObjectName", "SCT_RDOs", "SCT RDOs"};
   SG::WriteHandleKey<SCT_ClusterContainer> m_clusterContainerKey{this, "ClustersName", "SCT_Clusters", "SCT cluster container"};
   SG::WriteHandleKey<SiClusterContainer> m_clusterContainerLinkKey{this, "ClustersLinkName_", "SCT_Clusters", "SCT cluster container link name (don't set this)"};
-  SG::WriteHandleKey<SCT_FlaggedCondData> m_flaggedCondDataKey{this, "SCT_FlaggedCondData", "SCT_FlaggedCondData", "SCT flagged conditions data"};
+  SG::WriteHandleKey<IDCInDetBSErrContainer> m_flaggedCondDataKey{this, "SCT_FlaggedCondData", "SCT_FlaggedCondData", "SCT flagged conditions data"};
   SG::UpdateHandleKey<SCT_ClusterContainerCache> m_clusterContainerCacheKey; //!< For HLT cache
+  SG::UpdateHandleKey<IDCInDetBSErrContainer_Cache> m_flaggedCondCacheKey; //!< For HLT cache
   //@}
 
   /**
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
index c1b898082ee941c13083041f097bf7cb1ba490fc..70d9844db63cf7dc83c438c5a7fcabf16666dcf1 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -30,6 +30,7 @@ namespace InDet{
         ATH_CHECK( m_SCTSpacePointCacheKey.initialize(SG::AllowEmpty) );
         ATH_CHECK( m_SCTRDOCacheKey.initialize(SG::AllowEmpty) );
         ATH_CHECK( m_SCTBSErrCacheKey.initialize(SG::AllowEmpty) );
+        ATH_CHECK( m_SCTFlaggedCondCacheKey.initialize(SG::AllowEmpty) );
         ATH_CHECK( m_PixRDOCacheKey.initialize(SG::AllowEmpty) );
         ATH_CHECK( m_PixBSErrCacheKey.initialize(SG::AllowEmpty) );
         if (!m_disableTRT.value()) ATH_CHECK(detStore()->retrieve(m_pTRTHelper  , "TRT_ID"));
@@ -62,6 +63,8 @@ namespace InDet{
 
         ATH_CHECK(createValueContainer(m_SCTBSErrCacheKey, m_sct_idHelper->wafer_hash_max(), ctx, std::numeric_limits<uint64_t>::min()));
 
+        ATH_CHECK(createValueContainer(m_SCTFlaggedCondCacheKey, m_sct_idHelper->wafer_hash_max(), ctx, std::numeric_limits<uint64_t>::min()));
+
         ATH_CHECK(createContainer(m_PixRDOCacheKey, m_pix_idHelper->wafer_hash_max(), ctx));
 
         ATH_CHECK(createValueContainer(m_PixBSErrCacheKey,  m_pix_idHelper->wafer_hash_max(), ctx, std::numeric_limits<uint64_t>::min()));
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
index e666b0e246dfc2534dafdfa7f4eb531949c0f932..b83bdd3297d9bbdfda71c0146adcc593049c1c1c 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -53,6 +53,8 @@ namespace InDet{
           {this, "SCTRDOCacheKey", ""};
 	SG::WriteHandleKey<IDCInDetBSErrContainer_Cache> m_SCTBSErrCacheKey
 	  {this, "SCTBSErrCacheKey", ""};
+	SG::WriteHandleKey<IDCInDetBSErrContainer_Cache> m_SCTFlaggedCondCacheKey
+	  {this, "SCTFlaggedCondCacheKey", ""};
         SG::WriteHandleKey<PixelRDO_Cache>     m_PixRDOCacheKey
           {this, "PixRDOCacheKey", ""};
 	SG::WriteHandleKey<IDCInDetBSErrContainer_Cache>  m_PixBSErrCacheKey
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/SCT_Clusterization.cxx b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/SCT_Clusterization.cxx
index 1e1875b42b344217738808e8b02dff9419393893..75d96f777e81272e9a5631e0e939d627c2da26a8 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/SCT_Clusterization.cxx
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/SCT_Clusterization.cxx
@@ -15,12 +15,15 @@
 #include "InDetIdentifier/SCT_ID.h"
 #include "InDetPrepRawData/SiClusterContainer.h"
 #include "InDetRawData/SCT_RDORawData.h"
+#include "SCT_ConditionsData/SCT_FlaggedCondEnum.h"
 #include "StoreGate/WriteHandle.h"
 #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h"
 
+#include <limits>
+#include <unordered_map>
+
 namespace InDet {
   using namespace InDet;
-  static const std::string moduleFailureReason{"SCT_Clusterization: Exceeds max fired strips"};
 
   // Constructor with parameters:
   SCT_Clusterization::SCT_Clusterization(const std::string& name, ISvcLocator* pSvcLocator) :
@@ -28,6 +31,7 @@ namespace InDet {
   {
     // Get parameter values from jobOptions file
     declareProperty("ClusterContainerCacheKey", m_clusterContainerCacheKey="");
+    declareProperty("FlaggedCondCacheKey", m_flaggedCondCacheKey="");
   }
 
   // Initialize method:
@@ -50,6 +54,7 @@ namespace InDet {
     ATH_CHECK(m_clusterContainerLinkKey.initialize());
     ATH_CHECK(m_clusterContainerCacheKey.initialize(not m_clusterContainerCacheKey.key().empty()));
     ATH_CHECK(m_flaggedCondDataKey.initialize());
+    ATH_CHECK(m_flaggedCondCacheKey.initialize(not m_flaggedCondCacheKey.key().empty()));
 
     // Get the clustering tool
     ATH_CHECK(m_clusteringTool.retrieve());
@@ -83,8 +88,17 @@ namespace InDet {
     ATH_CHECK(clusterContainer.isValid());
     ATH_MSG_DEBUG("SCT clusters '" << clusterContainer.name() << "' symlinked in StoreGate");
 
-    SG::WriteHandle<SCT_FlaggedCondData> flaggedCondData{m_flaggedCondDataKey, ctx};
-    ATH_CHECK(flaggedCondData.record(std::make_unique<SCT_FlaggedCondData>()));
+    SG::WriteHandle<IDCInDetBSErrContainer> flaggedCondData{m_flaggedCondDataKey, ctx};
+    if (m_flaggedCondCacheKey.key().empty()) {
+      ATH_CHECK(flaggedCondData.record( std::make_unique<IDCInDetBSErrContainer>(m_idHelper->wafer_hash_max(), std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min())));
+      ATH_MSG_DEBUG("Created IDCInDetBSErrContainer w/o using external cache");
+    } else {
+      SG::UpdateHandle<IDCInDetBSErrContainer_Cache> flaggedCondCacheHandle(m_flaggedCondCacheKey, ctx);
+      ATH_CHECK(flaggedCondCacheHandle.isValid() );
+      ATH_CHECK(flaggedCondData.record( std::make_unique<IDCInDetBSErrContainer>(flaggedCondCacheHandle.ptr())) );
+      ATH_MSG_DEBUG("Created SCT IDCInDetBSErrContainer using external cache");
+    }
+    std::unordered_map<IdentifierHash, IDCInDetBSErrContainer::ErrorCode> flaggedCondMap; // temporary store of flagged condition error
 
     // First, we have to retrieve and access the container, not because we want to 
     // use it, but in order to generate the proxies for the collections, if they 
@@ -133,7 +147,11 @@ namespace InDet {
               unsigned int nFiredStrips{0};
               for (const SCT_RDORawData* rdo: *rd) nFiredStrips += rdo->getGroupSize();
               if (nFiredStrips > m_maxFiredStrips.value()) {
-                flaggedCondData->insert(std::make_pair(rd->identifyHash(), moduleFailureReason));
+                if (flaggedCondMap.count(rd->identifyHash())==0) {
+                  flaggedCondMap[rd->identifyHash()]  = (1 << SCT_FlaggedCondEnum::ExceedMaxFiredStrips);
+                } else {
+                  flaggedCondMap[rd->identifyHash()] |= (1 << SCT_FlaggedCondEnum::ExceedMaxFiredStrips);
+                }
                 continue;
               }
             }
@@ -179,8 +197,12 @@ namespace InDet {
 		unsigned int nFiredStrips{0};
 		for (const SCT_RDORawData* rdo: *RDO_Collection) nFiredStrips += rdo->getGroupSize();
 		if (nFiredStrips > m_maxFiredStrips.value()) {
-		  flaggedCondData->insert(std::make_pair(id, moduleFailureReason));
-                continue;
+                  if (flaggedCondMap.count(id)==0) {
+                    flaggedCondMap[id]  = (1 << SCT_FlaggedCondEnum::ExceedMaxFiredStrips);
+                  } else {
+                    flaggedCondMap[id] |= (1 << SCT_FlaggedCondEnum::ExceedMaxFiredStrips);
+                  }
+                  continue;
 		}
 	      }
 	    }
@@ -208,6 +230,12 @@ namespace InDet {
     }
     // Set container to const
     ATH_CHECK(clusterContainer.setConst());
+
+    // Fill flaggedCondData
+    for (auto [hash, error] : flaggedCondMap) {
+      flaggedCondData->setOrDrop(hash, error);
+    }
+
     return StatusCode::SUCCESS;
   }
 
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/InDetTrigPrepRawDataFormat/SCT_TrgClusterization.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/InDetTrigPrepRawDataFormat/SCT_TrgClusterization.h
index 7d2bb47cc1d342d68aa03dd224fe3311328084f8..72e2844ccfc40925e094d1f392a646938072a7e4 100755
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/InDetTrigPrepRawDataFormat/SCT_TrgClusterization.h
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/InDetTrigPrepRawDataFormat/SCT_TrgClusterization.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////////////////
@@ -43,9 +43,9 @@
 #include "InDetTrigToolInterfaces/ITrigRawDataProviderTool.h"
 
 //typedefs - cannot be declared forward
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "InDetPrepRawData/SCT_ClusterContainer.h"
 #include "InDetPrepRawData/SCT_ClusterCollection.h"
-#include "SCT_ConditionsData/SCT_FlaggedCondData.h"
 
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 #include "StoreGate/ReadCondHandleKey.h"
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/src/SCT_TrgClusterization.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/src/SCT_TrgClusterization.cxx
index 2a7d5c8726378c536976a9e41a8eedcb20eca3d1..dd13ab00bd9248fb3d72a1302289a9c4e1ca6b2d 100755
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/src/SCT_TrgClusterization.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPrepRawDataFormat/src/SCT_TrgClusterization.cxx
@@ -24,6 +24,7 @@
 #include "Identifier/Identifier.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"    
 
+#include "SCT_ConditionsData/SCT_FlaggedCondEnum.h"
 
 //Gaudi includes
 #include "AthenaKernel/Timeout.h"
@@ -37,11 +38,12 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
 
 #include <cmath>
+#include <limits>
+#include <unordered_map>
 
 namespace InDet{
 
   using namespace InDet;
-  static const std::string maxRDOsReached("SCT_TrgClusterization: Exceeds max RDOs");
 
   //----------------------------------  
   //           Constructor:
@@ -268,9 +270,10 @@ namespace InDet{
     }
     
     // Prepare SCT_FlaggedCondData
-    SCT_FlaggedCondData* flaggedCondData{nullptr};
-    if (!store()->transientContains<SCT_FlaggedCondData>(m_flaggedCondDataName)) {
-      flaggedCondData = new SCT_FlaggedCondData{};
+    IDCInDetBSErrContainer* flaggedCondData{nullptr};
+    std::unordered_map<IdentifierHash, IDCInDetBSErrContainer::ErrorCode> flaggedCondMap;
+    if (!store()->transientContains<IDCInDetBSErrContainer>(m_flaggedCondDataName)) {
+      flaggedCondData = new IDCInDetBSErrContainer {m_idHelper->wafer_hash_max(), std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min()};
 
       if (store()->record(flaggedCondData, m_flaggedCondDataName, true, true).isFailure()) {
         ATH_MSG_WARNING(" Container " << m_flaggedCondDataName << " could not be recorded in StoreGate !");
@@ -425,7 +428,12 @@ namespace InDet{
 	const size_t rdosize = RDO_Collection->size();
 	if (m_maxRDOs >0 && rdosize>m_maxRDOs){
           const int hid = RDO_Collection->identifyHash();
-          flaggedCondData->insert(std::make_pair(hid, maxRDOsReached));
+          if (flaggedCondMap.count(hid)==0) {
+            flaggedCondMap[hid]  = (1 << SCT_FlaggedCondEnum::ExceedMaxRDOs);
+          } else {
+            flaggedCondMap[hid] |= (1 << SCT_FlaggedCondEnum::ExceedMaxRDOs);
+          }
+
           m_flaggedModules.insert(hid);
           m_occupancyHashId.push_back(hid);
 	  continue;
@@ -500,7 +508,12 @@ namespace InDet{
 	
 	if (m_maxRDOs >0 && rdosize>m_maxRDOs){
           const int hid = rd->identifyHash();
-          flaggedCondData->insert(std::make_pair(hid, maxRDOsReached));
+          if (flaggedCondMap.count(hid)==0) {
+            flaggedCondMap[hid]  = (1 << SCT_FlaggedCondEnum::ExceedMaxRDOs);
+          } else {
+            flaggedCondMap[hid] |= (1 << SCT_FlaggedCondEnum::ExceedMaxRDOs);
+          }
+
           m_flaggedModules.insert(hid);
           m_occupancyHashId.push_back(hid);
 	  continue;
@@ -549,6 +562,11 @@ namespace InDet{
       m_timerCluster->stop();
     }
 
+    // Fill flaggedCondData
+    for (auto [hash, error] : flaggedCondMap) {
+      flaggedCondData->setOrDrop(hash, error);
+    }
+    
     ATH_MSG_DEBUG( "REGTEST: Number of reconstructed clusters = " << m_numSctClusters );
 
     return HLT::OK;
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
index f7e531d826b57bd3205d4f387268d6a919aaf261..a59f437c93f419e2abebf87c637d4998486422ab 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "InDetTrigRawDataProvider/TrigPixRawDataProvider.h"
@@ -112,7 +112,7 @@ namespace InDet {
     }
 
     if( !evtStore()->transientContains<IDCInDetBSErrContainer>(m_decodingErrorsKey) ) {
-      m_decodingErrors = new IDCInDetBSErrContainer(m_id->wafer_hash_max(),  std::numeric_limits<int>::min());
+      m_decodingErrors = new IDCInDetBSErrContainer(m_id->wafer_hash_max(),  std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min());
       ATH_CHECK(evtStore()->record(m_decodingErrors, m_decodingErrorsKey));
     } else {
       ATH_CHECK(evtStore()->retrieve(m_decodingErrors, m_decodingErrorsKey));
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
index e919472bbc15b9f29dc755099f5ced1cca4b79a1..40d1eda7c57cca80807dbcbece29df37ba4a5052 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigSCTRawDataProvider.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "InDetTrigRawDataProvider/TrigSCTRawDataProvider.h"
@@ -129,7 +129,7 @@ namespace InDet {
 
     m_bsErrCont = nullptr;
     if (!evtStore()->transientContains<IDCInDetBSErrContainer>(m_bsErrCont_Key)) {
-      m_bsErrCont = new IDCInDetBSErrContainer(m_id->wafer_hash_max(), std::numeric_limits<int>::min());
+      m_bsErrCont = new IDCInDetBSErrContainer(m_id->wafer_hash_max(), std::numeric_limits<IDCInDetBSErrContainer::ErrorCode>::min());
       if (evtStore()->record(m_bsErrCont, m_bsErrCont_Key, true, true).isFailure()) {
         ATH_MSG_FATAL("Unable to record " << m_bsErrCont_Key);
         return StatusCode::FAILURE;
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py b/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
index 59ca78ff70efa492beedb0d068ca77f1018fd444..166e52f79923f7bd863df7dca8449c3c7ef0b98a 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
@@ -56,6 +56,7 @@ def makeInDetAlgs( whichSignature='', separateTrackParticleCreator='', rois = 'E
                                     ( 'SpacePointCache' , InDetCacheNames.SpacePointCachePix ),
                                     ( 'SpacePointCache' , InDetCacheNames.SpacePointCacheSCT ),
                                     ( 'IDCInDetBSErrContainer_Cache' , InDetCacheNames.SCTBSErrCacheKey ),
+                                    ( 'IDCInDetBSErrContainer_Cache' , InDetCacheNames.SCTFlaggedCondCacheKey ),
                                     ( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ),
                                     ( 'TagInfo' , 'DetectorStore+ProcessingTags' )]
     
@@ -260,6 +261,7 @@ def makeInDetAlgs( whichSignature='', separateTrackParticleCreator='', rois = 'E
   InDetSCT_Clusterization.isRoI_Seeded = True
   InDetSCT_Clusterization.RoIs = rois
   InDetSCT_Clusterization.ClusterContainerCacheKey = InDetCacheNames.SCT_ClusterKey
+  InDetSCT_Clusterization.FlaggedCondCacheKey = InDetCacheNames.SCTFlaggedCondCacheKey
 
   from RegionSelector.RegSelToolConfig import makeRegSelTool_SCT
   InDetSCT_Clusterization.RegSelTool = makeRegSelTool_SCT()
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
index 4e68aecdec7afffe5f372385d05c1bfecca616e4..8297c29179dd4d4d065b63d98dccd9557951e8aa 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
@@ -11,6 +11,7 @@ class InDetCacheNames(object):
   SpacePointCachePix = "PixelSpacePointCache"
   SpacePointCacheSCT = "SctSpacePointCache"
   SCTBSErrCacheKey   = "SctBSErrCache"
+  SCTFlaggedCondCacheKey = "SctFlaggedCondCache"
   SCTRDOCacheKey     = "SctRDOCache"
   PixRDOCacheKey     = "PixRDOCache"
   PixBSErrCacheKey   = "PixBSErrCache"
@@ -26,6 +27,7 @@ def InDetIDCCacheCreatorCfg():
                                               SpacePointCacheSCT = InDetCacheNames.SpacePointCacheSCT,
                                               SCTRDOCacheKey     = InDetCacheNames.SCTRDOCacheKey,
                                               SCTBSErrCacheKey   = InDetCacheNames.SCTBSErrCacheKey,
+                                              SCTFlaggedCondCacheKey = InDetCacheNames.SCTFlaggedCondCacheKey,
                                               PixRDOCacheKey     = InDetCacheNames.PixRDOCacheKey,
                                               PixBSErrCacheKey   = InDetCacheNames.PixBSErrCacheKey)
 
@@ -198,6 +200,7 @@ def TrigInDetConfig( flags, roisKey="EMRoIs", signatureName='' ):
                                                                   ('SpacePointCache', 'PixelSpacePointCache'),
                                                                   ('SpacePointCache', 'SctSpacePointCache'),
                                                                   ('IDCInDetBSErrContainer_Cache', 'SctBSErrCache'),
+                                                                  ('IDCInDetBSErrContainer_Cache', 'SctFlaggedCondCache'),
                                                                   ('xAOD::EventInfo', 'StoreGateSvc+EventInfo'),
                                                                       # ('xAOD::TrigEMClusterContainer', 'StoreGateSvc+HLT_L2CaloEMClusters'),
                                                                   ('TrigRoiDescriptorCollection', 'StoreGateSvc+'+roisKey),
@@ -353,6 +356,7 @@ def TrigInDetConfig( flags, roisKey="EMRoIs", signatureName='' ):
   InDetSCT_Clusterization.isRoI_Seeded = True
   InDetSCT_Clusterization.RoIs = roisKey
   InDetSCT_Clusterization.ClusterContainerCacheKey = InDetCacheNames.SCT_ClusterKey
+  InDetSCT_Clusterization.FlaggedCondCacheKey = InDetCacheNames.SCTFlaggedCondCacheKey
 
   InDetSCT_Clusterization.RegSelTool = RegSelTool_SCT
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
index 3c857bfff299bef5555a6cd15c9ebc7f004721e7..9c47c2e82a5acfa94858abb7a266e7ee88cf75c2 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
@@ -35,7 +35,7 @@ def precisionElectronRecoSequence(RoIs):
                                  ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+' + precisionCaloMenuDefs.precisionCaloClusters ),
                                  ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ),
                                  ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.AveIntPerXDecor' ),
-                                 ( 'SCT_FlaggedCondData' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
+                                 ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
                                  ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+precisionElectron' ),
                                  ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] # the load below doesn't always work
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py
index 3af50555d5633b5d9f3b00f9f04169a819193611..b628b92e81c692408de90fb6ba60b76cc8d2a9b5 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/MinBias/MinBiasChainConfiguration.py
@@ -121,7 +121,7 @@ class MinBiasChainConfig(ChainConfigurationBase):
         # prepare algorithms to run in views, first, inform scheduler that input data is available in parent view (has to be done by hand)
         idAlgs, verifier = makeInDetAlgs(whichSignature='MinBias', separateTrackParticleCreator='', rois=TrkInputMakerAlg.InViewRoIs, viewVerifier='TrkrecoSeqDataVerifier')
         verifier.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+InputRoI' ),
-                                 ( 'SCT_FlaggedCondData' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
+                                 ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
                                  ( 'InDet::SCT_ClusterContainer' , 'StoreGateSvc+SCT_TrigClusters' ),
                                  ( 'SpacePointContainer' , 'StoreGateSvc+SCT_TrigSpacePoints' ),
                                  ( 'InDet::PixelClusterContainer' , 'StoreGateSvc+PixelTrigClusters' ),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
index 18459b37953b4e59b1bb901fd87187f213fd2d27..a5b96e5471e383dab44e334467092be4613a81f1 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
@@ -642,7 +642,7 @@ def muEFCBRecoSequence( RoIs, name ):
                               ( 'Muon::RpcPrepDataContainer' , 'StoreGateSvc+RPC_Measurements' ),
                               ( 'MuonCandidateCollection' , 'StoreGateSvc+MuonCandidates'),
                               ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+'+RoIs ),
-                              ( 'SCT_FlaggedCondData' , 'StoreGateSvc+SCT_FlaggedCondData' ),
+                              ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData' ),
                               ( 'MuonCandidateCollection' , 'StoreGateSvc+MuonCandidates_FS' ),
                               ( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ),
                               ( 'TrackCollection' , 'StoreGateSvc+Tracks' ),
@@ -688,7 +688,7 @@ def muEFCBRecoSequence( RoIs, name ):
     ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("muonCBIDViewDataVerifier")
     ViewVerifyTrk.DataObjects = [( 'xAOD::TrackParticleContainer' , 'StoreGateSvc+'+TrackParticlesName ),
                                  ( 'TrackCollection' , 'StoreGateSvc+'+TrackCollection ),
-                                 ( 'SCT_FlaggedCondData' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
+                                 ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
                                  ( 'xAOD::IParticleContainer' , 'StoreGateSvc+'+TrackParticlesName ),
                                  ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )] #seems to be necessary, despite the load below