diff --git a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelByteStreamErrors.h b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelByteStreamErrors.h
new file mode 100644
index 0000000000000000000000000000000000000000..6cc69039f86e8eacfd2380cb8d8cb1ff71509d6a
--- /dev/null
+++ b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelByteStreamErrors.h
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef PixelConditionsData_PixelByteStreamErrors_h
+#define PixelConditionsData_PixelByteStreamErrors_h
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
+
+// errors can coexist per hashID so we need to reserve separate bit for them
+namespace PixelByteStreamErrors {
+
+  //!< Possible errors in pixel data decoding, exactl clone of definition in: PixelConditionsTools/IPixelByteStreamErrorsTool.h, the later will be removed
+  enum ErrorType {TimeOut=0, firstErrType=TimeOut, BCID=1, LVL1ID=2, Preamble=3, Trailer=4,
+		  Flagged=5, DisableFE=6, ROD=7, Decoding=8, Invalid=9, LinkMaskedByPPC=10, Limit=11, lastErrType=Limit, ErrorsNumber=lastErrType+1 };
+
+  //!< @brief helper to be used in clients to fetch error information
+  inline bool hasError(IDCInDetBSErrContainer::ErrorCode errWord,  PixelErrorsEnum errType ) { return errWord & (1<<errType); }
+
+  //!< @brief helper to set the error: @example errors[hashId] = addError( errors[hashId], PixelByteStreamErrors::Invalid ) 
+  inline IDCInDetBSErrContainer::ErrorCode addError(IDCInDetBSErrContainer::ErrorCode errWord,  PixelErrorsEnum errType ) { return errWord | (1<<errType); }
+}
+
+
+#endif //PixelConditionsData_PixelByteStreamErrors_h
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h
index 2b618dc8feac35f3710360121766600cbd9b5b6b..9b47e86b95b2bc391ab5586d457ac8e78f6f77a0 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h
@@ -8,7 +8,7 @@
 #include "GaudiKernel/IAlgTool.h"
 #include "ByteStreamData/RawEvent.h" 
 #include "InDetRawData/PixelRDO_Container.h"
-
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 // the tool to decode a ROB frament
 class IPixelRawDataProviderTool : virtual public IAlgTool
 {
@@ -23,7 +23,9 @@ class IPixelRawDataProviderTool : virtual public IAlgTool
 
   //! this is the main decoding method
   virtual StatusCode convert( std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs,
-		      IPixelRDO_Container*               rdoIdc ) const = 0;
+			      IPixelRDO_Container* rdoIdc,
+			      IDCInDetBSErrContainer& decodingErrors
+			      ) const = 0;
 
 };
 
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRodDecoder.h b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRodDecoder.h
index 8da9b48d86e190768ed720b4064c1e3fb398ca6a..6589e59b9663814f8e48bada73680ba1f2df4ad0 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRodDecoder.h
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/PixelRawDataByteStreamCnv/IPixelRodDecoder.h
@@ -8,6 +8,7 @@
 #include "GaudiKernel/IAlgTool.h"
 
 #include "InDetRawData/PixelRDO_Container.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "ByteStreamData/RawEvent.h" 
 
 class IPixelRodDecoder : virtual public IAlgTool{
@@ -18,7 +19,10 @@ class IPixelRodDecoder : virtual public IAlgTool{
     // destructor 
     virtual ~IPixelRodDecoder(){}; 
 
-    virtual StatusCode fillCollection  (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment *robFrag, IPixelRDO_Container* rdoIdc, std::vector<IdentifierHash>* vecHash = NULL) const = 0;
+    virtual StatusCode fillCollection  (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment *robFrag,
+					IPixelRDO_Container* rdoIdc,
+					IDCInDetBSErrContainer& decodingErrors,
+					std::vector<IdentifierHash>* vecHash = NULL) const = 0;
 
     virtual StatusCode StoreBSError() const =0;
 };
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
index cafbe73e56216be563123ae340afa46b78f4faf9..cd1b22de22b41f949bb10eea24848e575dd3fdf1 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.cxx
@@ -5,10 +5,7 @@
 #include "PixelRawDataProvider.h"
 #include <memory>
 
-#include "PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h"
 #include "InDetIdentifier/PixelID.h"
-#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
-#include "IRegionSelector/IRegSelSvc.h" 
 #include "EventContainers/IdentifiableContTemp.h"
 
 using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
@@ -18,27 +15,14 @@ using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
 
 PixelRawDataProvider::PixelRawDataProvider(const std::string& name,
 				       ISvcLocator* pSvcLocator) :
-  AthAlgorithm(name, pSvcLocator),
-  m_regionSelector  ("RegSelSvc", name), 
-  m_robDataProvider ("ROBDataProviderSvc",name),
-  m_rawDataTool     ("PixelRawDataProviderTool", this), //make private
-  m_pixel_id        (nullptr),
-  m_roiSeeded(false),
-  m_roiCollectionKey(""),
-  m_rdoContainerKey(""),
-  m_rdoCacheKey("")
-{
-  declareProperty("RoIs", m_roiCollectionKey = std::string(""), "RoIs to read in");
-  declareProperty("isRoI_Seeded", m_roiSeeded = false, "Use RoI");
-  declareProperty("RDOKey", m_rdoContainerKey = std::string("PixelRDOs"));
-  declareProperty ("ROBDataProvider", m_robDataProvider);
-  declareProperty ("ProviderTool", m_rawDataTool);
-  declareProperty ("RDOCacheKey", m_rdoCacheKey);
+  AthAlgorithm(name, pSvcLocator) {
+  declareProperty("RDOCacheKey", m_rdoCacheKey);
+  declareProperty("BSErrorsCacheKey", m_bsErrorsCacheKey);
 }
 
 // Destructor
 
-PixelRawDataProvider::~PixelRawDataProvider(){
+PixelRawDataProvider::~PixelRawDataProvider() {
 }
 
 // --------------------------------------------------------------------
@@ -147,7 +131,9 @@ StatusCode PixelRawDataProvider::execute() {
   IPixelRDO_Container *containerInterface = tempcont ? static_cast< IPixelRDO_Container* >(tempcont.get()) :
          static_cast< IPixelRDO_Container* >(rdoContainer.ptr());
   // ask PixelRawDataProviderTool to decode it and to fill the IDC
-  if (m_rawDataTool->convert(listOfRobf,  containerInterface).isFailure())
+  // TODO: temporarily unused errors container
+  IDCInDetBSErrContainer decodingErrors(0, std::numeric_limits<int>::min()); // we will use IDC Errors from elswhere
+  if (m_rawDataTool->convert(listOfRobf,  containerInterface, decodingErrors).isFailure())
     ATH_MSG_ERROR("BS conversion into RDOs failed");
 
   if(tempcont) ATH_CHECK(tempcont->MergeToRealContainer(rdoContainer.ptr()));
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.h b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.h
index 491ef89447c218ccc6b58e8bdb2d13cd7921861d..94caa17924045e0a44f623fbbb8b95f29ab503d9 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.h
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProvider.h
@@ -16,17 +16,18 @@
 #include "StoreGate/ReadHandleKey.h"
 #include "StoreGate/WriteHandleKey.h"
 #include "InDetRawData/PixelRDO_Container.h"
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h"
 #include <string>
 
 #include "PixelConditionsData/PixelCablingCondData.h"
 #include "StoreGate/ReadCondHandleKey.h"
+#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
+#include "PixelRawDataByteStreamCnv/IPixelRawDataProviderTool.h"
+#include "IRegionSelector/IRegSelSvc.h"
 
 // Forward declarations
-class IPixelRawDataProviderTool;
 class PixelID;
-class IROBDataProviderSvc;
-class IRegSelSvc;
 
 class PixelRawDataProvider : public AthAlgorithm {
 
@@ -46,19 +47,17 @@ class PixelRawDataProvider : public AthAlgorithm {
   ~PixelRawDataProvider();
 
 private:
-
-  ServiceHandle<IRegSelSvc>             m_regionSelector;     
-  ServiceHandle<IROBDataProviderSvc>   m_robDataProvider;
-  ToolHandle<IPixelRawDataProviderTool> m_rawDataTool;
-  const PixelID*                       m_pixel_id; 
-  bool m_roiSeeded;
-  SG::ReadHandleKey<TrigRoiDescriptorCollection> m_roiCollectionKey;
-  SG::WriteHandleKey<PixelRDO_Container> m_rdoContainerKey;
+  const PixelID* m_pixel_id { nullptr };
+
+  ServiceHandle<IRegSelSvc> m_regionSelector                            { this, "RegSelSvc",  "RegSelSvc", "Region selector" };
+  ServiceHandle<IROBDataProviderSvc>   m_robDataProvider                { this, "ROBDataProvider", "ROBDataProviderSvc" };
+  ToolHandle<IPixelRawDataProviderTool> m_rawDataTool                   { this, "ProviderTool", "PixelRawDataProviderTool"};
+  Gaudi::Property<bool> m_roiSeeded                                     { this, "isRoI_Seeded", false, "Use RoI" }; // TODO, doubled information, empty RoIs collection name would be sufficent
+  SG::ReadHandleKey<TrigRoiDescriptorCollection> m_roiCollectionKey     { this, "RoIs", "", "If RoI driven unpacking to be used, this is the key"};
+  SG::WriteHandleKey<PixelRDO_Container> m_rdoContainerKey              { this, "RDOKey", "PixelRDOs"};
   SG::UpdateHandleKey<PixelRDO_Cache> m_rdoCacheKey;
-
-  SG::ReadCondHandleKey<PixelCablingCondData> m_condCablingKey
-    {this, "PixelCablingCondData", "PixelCablingCondData", "Pixel cabling key"};
-
+  SG::UpdateHandleKey<IDCInDetBSErrContainer_Cache> m_bsErrorsCacheKey;
+  SG::ReadCondHandleKey<PixelCablingCondData> m_condCablingKey          { this, "PixelCablingCondData", "PixelCablingCondData", "Pixel cabling key"};
 };
 
 #endif
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.cxx
index c0f6bae77a3b8c17e9d1b0dd838fd23bbea09a05..a49c6afa43d1a4af751a6d69e695b18fed06ee50 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.cxx
@@ -40,7 +40,8 @@ StatusCode PixelRawDataProviderTool::finalize() {
   return StatusCode::SUCCESS;
 }
 
-StatusCode PixelRawDataProviderTool::convert(std::vector<const ROBFragment*>& vecRobs, IPixelRDO_Container* rdoIdc) const {
+StatusCode PixelRawDataProviderTool::convert(std::vector<const ROBFragment*>& vecRobs, IPixelRDO_Container* rdoIdc,
+					     IDCInDetBSErrContainer& decodingErrors ) const {
   if (vecRobs.size()==0) { return StatusCode::SUCCESS; }
 
 
@@ -108,7 +109,7 @@ StatusCode PixelRawDataProviderTool::convert(std::vector<const ROBFragment*>& ve
 
     // here the code for the timing monitoring should be reinserted
     // using 1 container per event and subdetector
-    StatusCode sc = m_decoder->fillCollection(&**rob_it, rdoIdc);
+    StatusCode sc = m_decoder->fillCollection(&**rob_it, rdoIdc, decodingErrors);
 
 
 
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.h b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.h
index 957ebe68b7753550519b047cde28b02ccc9c4722..8fa60a092dd7863cf51aaf29e58a56e78f28eccc 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRawDataProviderTool.h
@@ -38,7 +38,8 @@ class PixelRawDataProviderTool : virtual public IPixelRawDataProviderTool, publi
   
   //! this is the main decoding method
   StatusCode convert( std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs,
-		      IPixelRDO_Container*               rdoIdc ) const final;
+		      IPixelRDO_Container* rdoIdc,
+		      IDCInDetBSErrContainer& decodingErrors) const final;
 
 
 private: 
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
index 0d954116aed5feada4e270d62d2dc45f1bf11293..9eaa339c84cd8b0088ab60c0c4a24fd307675005 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
@@ -98,8 +98,9 @@ StatusCode PixelRodDecoder::finalize() {
 }
 
 
-//---------------------------------------------------------------------------------------------------- fillCollection
+//---------------------------------------------------------------------------------------------------- fillCixollection
 StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRDO_Container* rdoIdc,
+					    IDCInDetBSErrContainer& /*decodingErrors*/,
                                             std::vector<IdentifierHash>* vecHash) const
 {
 #ifdef PIXEL_DEBUG
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.h b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.h
index cb39c47853a40f0ba7dd49359cbe5058f5602b67..42181c88ab20e154ca3381aa9228a683cd459db8 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.h
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.h
@@ -40,7 +40,9 @@ class PixelRodDecoder : virtual public IPixelRodDecoder, public AthAlgTool {
     StatusCode initialize() override;
     StatusCode finalize() override;
 
-    StatusCode fillCollection  (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment *robFrag, IPixelRDO_Container* rdoIdc,
+    StatusCode fillCollection  (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment *robFrag,
+				IPixelRDO_Container* rdoIdc,
+				IDCInDetBSErrContainer& decodingErrors,
 				std::vector<IdentifierHash>* vecHash = NULL) const override;
 
     StatusCode StoreBSError() const override;
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
index ca2c267b5c30f90a16525adf4d7e1d4777f61468..17d6f70d4fcfe3011668888db988a7339a5e9ad4 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.cxx
@@ -32,6 +32,7 @@ namespace InDet{
         ATH_CHECK( m_SCTRDOCacheKey.initialize(!m_SCTRDOCacheKey.key().empty()) );
         ATH_CHECK( m_SCTBSErrCacheKey.initialize(!m_SCTBSErrCacheKey.key().empty()) );
         ATH_CHECK( m_PixRDOCacheKey.initialize(!m_PixRDOCacheKey.key().empty()) );
+	ATH_CHECK( m_PixBSErrCacheKey.initialize(!m_PixBSErrCacheKey.key().empty()) );
         if (!m_disableTRT.value()) ATH_CHECK(detStore()->retrieve(m_pTRTHelper  , "TRT_ID"));
         ATH_CHECK(detStore()->retrieve(m_sct_idHelper, "SCT_ID"));
         ATH_CHECK(detStore()->retrieve(m_pix_idHelper, "PixelID"));
@@ -74,6 +75,8 @@ namespace InDet{
 
         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<int>::min()));
+
         return StatusCode::SUCCESS;
     }
 }
diff --git a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
index 276b2978592883f3874ce6c24c0ada8c00a99e1f..b21bc974c6181d8db63afb0d000bfd6cd007a429 100644
--- a/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
+++ b/InnerDetector/InDetRecAlgs/InDetPrepRawDataFormation/src/CacheCreator.h
@@ -60,6 +60,9 @@ namespace InDet{
 	  {this, "SCTBSErrCacheKey", ""};
         SG::WriteHandleKey<PixelRDO_Cache>     m_PixRDOCacheKey
           {this, "PixRDOCacheKey", ""};
+	SG::WriteHandleKey<IDCInDetBSErrContainer_Cache>  m_PixBSErrCacheKey
+	  {this, "PixBSErrCacheKey", ""};
+
         BooleanProperty m_disableTRT{this, "disableTRT", false};
         BooleanProperty m_disableWarning{this, "DisableViewWarning", false};
         mutable std::atomic_bool m_disableWarningCheck;
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigPixRawDataProvider.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigPixRawDataProvider.h
index 80c363d8600b35ea5d0078c64e6671584a953ea9..0c6feddca7897b7275f1f66bb4f5b6e30dc63285 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigPixRawDataProvider.h
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigPixRawDataProvider.h
@@ -24,7 +24,7 @@
 
 //typedef
 #include "InDetRawData/PixelRDO_Container.h"
-
+#include "InDetByteStreamErrors/IDCInDetBSErrContainer.h"
 
 #include <string>
 
@@ -61,8 +61,11 @@ namespace InDet {
     const PixelID*                        m_id; 
 
     PixelRDO_Container*                   m_container;
+
     std::string                           m_RDO_Key;
 
+    IDCInDetBSErrContainer*               m_decodingErrors;
+    std::string                           m_decodingErrorsKey;
     //
   };
 
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
index 9e0cf3537ab4bba2402a764d563e15808b24d306..09e026709559a19b013b16165a1c217fe351dee1 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigPixRawDataProvider.cxx
@@ -30,11 +30,13 @@ namespace InDet {
     m_robDataProvider ("ROBDataProviderSvc", name),
     m_rawDataTool     ("PixelRawDataProviderTool"),
     m_id(0),
-    m_container(0)
+    m_container(0),
+    m_decodingErrors(0)
   {
     declareInterface<InDet::ITrigRawDataProviderTool>(this);
     declareProperty("RDOKey", m_RDO_Key = "PixelRDOs_EFID");
     declareProperty("RawDataProviderTool", m_rawDataTool);
+    declareProperty("DecodingErrorsKey", m_decodingErrorsKey="PixBSErr");
   }
 
   TrigPixRawDataProvider::~TrigPixRawDataProvider(){
@@ -108,6 +110,14 @@ namespace InDet {
 	       << m_RDO_Key << endmsg;
       }
     }
+
+    if( !evtStore()->transientContains<IDCInDetBSErrContainer>(m_decodingErrorsKey) ) {
+      m_decodingErrors = new IDCInDetBSErrContainer(m_id->wafer_hash_max(),  std::numeric_limits<int>::min());
+      ATH_CHECK(evtStore()->record(m_decodingErrors, m_decodingErrorsKey));
+    } else {
+      ATH_CHECK(evtStore()->retrieve(m_decodingErrors, m_decodingErrorsKey));
+    }
+
     return sc;
   }
 
@@ -144,7 +154,7 @@ namespace InDet {
 
     StatusCode scon = StatusCode::FAILURE;
     if (m_container){
-      scon = m_rawDataTool->convert(listOfRobf,m_container);
+      scon = m_rawDataTool->convert(listOfRobf,m_container, *m_decodingErrors);
       if (scon==StatusCode::FAILURE)
 	msg(MSG::ERROR) << "BS conversion into RDOs failed" << endmsg;
     }
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/InDetConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/InDetConfig.py
index c25b7238f721f21de1c0923530a6338c29b0925e..c25b9815b2bfc75401813b065f104777e68a01d5 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/InDetConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/InDetConfig.py
@@ -13,6 +13,7 @@ class InDetCacheNames(object):
   SCTBSErrCacheKey   = "SctBSErrCache"
   SCTRDOCacheKey     = "SctRDOCache"
   PixRDOCacheKey     = "PixRDOCache"
+  PixBSErrCacheKey   = "PixBSErrCache"
 
 def InDetIDCCacheCreatorCfg():
   #Create IdentifiableCaches
@@ -25,7 +26,8 @@ def InDetIDCCacheCreatorCfg():
                                               SpacePointCacheSCT = InDetCacheNames.SpacePointCacheSCT,
                                               SCTRDOCacheKey     = InDetCacheNames.SCTRDOCacheKey,
                                               SCTBSErrCacheKey   = InDetCacheNames.SCTBSErrCacheKey,
-                                              PixRDOCacheKey     = InDetCacheNames.PixRDOCacheKey)
+                                              PixRDOCacheKey     = InDetCacheNames.PixRDOCacheKey,
+                                              PixBSErrCacheKey   = InDetCacheNames.PixBSErrCacheKey)
 
   acc.addEventAlgo( InDetCacheCreatorTrig )
   return acc