diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h
index d64fc47a60cea30525ddc454d2dd2cf137a9d920..5ab58981bb2f01e51c7f3a3bb4db1cfccacb0225 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h
@@ -1,5 +1,7 @@
+//Dear emacs, this is -*-c++-*-
+
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -11,12 +13,72 @@
 #ifndef TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H
 #define TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H
 
-#include <stdint.h>
-#include "AthContainers/DataVector.h"
 #include "AthenaKernel/CLASS_DEF.h"
 #include <stdint.h>
+#include <set> 
+
+class TRT_BSErrContainer {
+  
+ public: 
+
+  TRT_BSErrContainer() = default;
+
+  //Getters, for entire sets:
+  const std::set<std::pair<uint32_t,uint32_t> > &
+    getRobErrorSet( void ) const { return m_rob_status_errors;}
+  
+  const std::set<uint32_t> & getMissingErrorSet( void ) const {
+    return m_missing_errors;}
+  
+  const std::set<uint32_t> & getErrorErrorSet( void ) const {
+    return m_error_errors;}
+
+  const std::set<uint32_t> & getSidErrorSet( void ) const {
+    return m_sid_errors;}
+
+  const std::set<std::pair<uint32_t,uint32_t> >& getL1ErrorSet() const {
+    return m_l1id_pair_errors;}
+
+  const std::set<std::pair<uint32_t,uint32_t> >& getBCIDErrorSet() const {
+    return m_bcid_pair_errors;}
+
+  void add_missing_error(const uint32_t DTMROC_idx ) {
+    m_missing_errors.insert( DTMROC_idx );
+  }
+
+  void add_error_error(const uint32_t DTMROC_idx ) {
+    m_error_errors.insert( DTMROC_idx ); 
+  }
+  
+  void add_sid_error(const uint32_t DTMROC_idx ) {
+    m_sid_errors.insert( DTMROC_idx ); 
+  }
+  
+
+  void add_l1id_error( uint32_t DTMROC_idx, uint32_t l1id ) {
+    m_l1id_pair_errors.insert(std::make_pair( DTMROC_idx, l1id));
+  }
+
+  void add_bcid_error( uint32_t DTMROC_idx, uint32_t bcid ) {
+    m_bcid_pair_errors.insert(std::make_pair( DTMROC_idx, bcid )); 
+  }
+
+  void add_rob_error( uint32_t robSourceId, uint32_t robStatus ) {
+    m_rob_status_errors.insert(std::make_pair(robSourceId, robStatus));
+  }
+
+ private:
+  std::set<uint32_t> m_missing_errors;
+  std::set<uint32_t> m_error_errors;
+  std::set<uint32_t> m_sid_errors;
+
+  std::set<std::pair<uint32_t,uint32_t> > m_l1id_pair_errors;
+  std::set<std::pair<uint32_t,uint32_t> > m_bcid_pair_errors;
+  std::set<std::pair<uint32_t,uint32_t> > m_rob_status_errors;
+
+};
+
 
-typedef DataVector<std::pair<uint8_t, uint32_t> > TRT_BSErrContainer; // <type, index>
 
 CLASS_DEF(TRT_BSErrContainer,1324847776,1)
 
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h
new file mode 100644
index 0000000000000000000000000000000000000000..7419411281b4b04068d7f2bd03a7307e15b5ca88
--- /dev/null
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ InDetByteStreamErrors package
+ -----------------------------------------
+ ***************************************************************************/
+
+
+#ifndef TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_P1_H
+#define TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_P1_H
+
+#include <stdint.h>
+#include "AthContainers/DataVector.h"
+#include "AthenaKernel/CLASS_DEF.h"
+#include <stdint.h>
+
+typedef DataVector<std::pair<uint8_t, uint32_t> > TRT_BSErrContainer_p1; // <type, index>
+
+CLASS_DEF(TRT_BSErrContainer_p1,1114762661,1)
+
+
+#endif // TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt
index 08c1e9b97b016fca3672f1bb464020ac72c9d9bd..f117789cb97c64dbdbdeff6155c09d5999288f82 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt
@@ -43,10 +43,10 @@ atlas_add_test( IDCInDetBSErrContainerCnv_p1_test
    src/IDCInDetBSErrContainerCnv_p1.cxx
    LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators )
 
-atlas_add_test( TRT_BSErrContainerCnv_p1_test
-   SOURCES test/TRT_BSErrContainerCnv_p1_test.cxx
-   src/TRT_BSErrContainerCnv_p1.cxx
-   LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators )
+#atlas_add_test( TRT_BSErrContainerCnv_p1_test
+#   SOURCES test/TRT_BSErrContainerCnv_p1_test.cxx
+#   src/TRT_BSErrContainerCnv_p1.cxx
+#   LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators )
 
 atlas_add_test( TRT_BSIdErrContainerCnv_p1_test
    SOURCES test/TRT_BSIdErrContainerCnv_p1_test.cxx
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h
index 1beec4c2203e503f0894ba8e0915f33bd1e8fab4..74ac88f54ebc95e0ecd53f6adcc7321b3eae5900 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h
@@ -9,6 +9,7 @@
 #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer_p1.h"
 #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer_p2.h"
 #include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p1.h"
+#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h"
 #include "InDetByteStreamErrorsAthenaPool/TRT_BSIdErrContainer_p1.h"
 #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer64_p1.h"
 #endif
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h
new file mode 100644
index 0000000000000000000000000000000000000000..d9ce6a7e77049f1251c10d62d5797f7301eb205f
--- /dev/null
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h
@@ -0,0 +1,24 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P2_H
+#define INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P2_H
+
+
+#include <vector>
+#include <stdint.h>
+
+class TRT_BSErrContainer_p2
+{
+ public:
+/// Default constructor
+  TRT_BSErrContainer_p2 () = default;
+  std::vector<uint32_t> m_missingError;
+  std::vector<uint32_t> m_errorError;
+  std::vector<uint32_t> m_sidError;
+};
+
+
+#endif // Not INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P1_H
+
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml
index cd352e12a9f129829e97427ec7fd442a637c31a7..00ea52cb98dd7a67cd090ed89e2517bee0cfd066 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml
@@ -4,4 +4,7 @@
   <class name="TRT_BSErrContainer_p1" id="D461AC01-02CA-4A9E-886B-24EC14309121" />
   <class name="TRT_BSIdErrContainer_p1" id="26F44F1E-D1F5-43B3-93E9-09376AB37491" />
   <class name="InDetBSErrContainer64_p1" id="84056f02-9d9f-4d0c-8d5a-c6c686f5cf76" />
+ <class name="TRT_BSErrContainer_p2" id="A815E78C-BB68-4CA5-9B95-739E9B47043A" />
+
+
 </lcgdict>
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx
index 4d819af74b347593802c125a3ae80982df6e5ed2..b1ce3d1385327fb417b1fc4dbc5813c964d70172 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx
@@ -22,12 +22,20 @@ TRT_BSErrContainerCnv::createPersistent(TRT_BSErrContainer* transCont) {
 
 TRT_BSErrContainer* 
 TRT_BSErrContainerCnv::createTransient() {
-  MsgStream log(msgSvc(), "TRT_BSErrContainerCnv" );
+  MsgStream log(msgSvc(), "TRT_BSErrContainerCnv" ); 
   static const pool::Guid   p1_guid("D461AC01-02CA-4A9E-886B-24EC14309121");
-  if( compareClassGuid(p1_guid) ) {
+  static const pool::Guid   p2_guid("A815E78C-BB68-4CA5-9B95-739E9B47043A");
+  
+  if( compareClassGuid(p2_guid) ) {
     // using unique_ptr ensures deletion of the persistent object
-    std::unique_ptr< TRT_BSErrContainer_p1 > col_vect( poolReadObject< TRT_BSErrContainer_p1 >() );
+    std::unique_ptr< TRT_BSErrContainer_p2 > col_vect( poolReadObject< TRT_BSErrContainer_p2 >() );
     return m_TPConverter.createTransient( col_vect.get(), log );
   }
+
+  if( compareClassGuid(p1_guid) ) {
+    log << MSG::ERROR << "TRT_BSErrContainer_p1 not supported any more. Recording empty container." << endmsg;
+    return new TRT_BSErrContainer();
+  }
+  
   throw std::runtime_error("Unsupported persistent version of Data Collection");
 }
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h
index 465403492b2b3433b3bc18c44ea67f9c75a35f56..a88eb11acf544cf1d0a733425f58066d8e14dc21 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h
@@ -15,11 +15,11 @@
 #include "InDetByteStreamErrors/TRT_BSErrContainer.h"
 
 #include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h"
-#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p1.h"
-#include "TRT_BSErrContainerCnv_p1.h"
+#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h"
+#include "TRT_BSErrContainerCnv_p2.h"
 
 // the latest persistent representation type of DataCollection:
-typedef  TRT_BSErrContainer_p1  TRT_BSErrContainer_PERS;
+typedef  TRT_BSErrContainer_p2  TRT_BSErrContainer_PERS;
 typedef  T_AthenaPoolCustomCnv<TRT_BSErrContainer, TRT_BSErrContainer_PERS >   TRT_BSErrContainerCnvBase;
 
 class TRT_BSErrContainerCnv : public TRT_BSErrContainerCnvBase {
@@ -30,6 +30,6 @@ protected:
   virtual TRT_BSErrContainer_PERS*   createPersistent (TRT_BSErrContainer* transCont);
   virtual TRT_BSErrContainer*       createTransient ();
 
-  TRT_BSErrContainerCnv_p1  m_TPConverter;
+  TRT_BSErrContainerCnv_p2  m_TPConverter;
 };
 #endif
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx
index 3d8d7ff37879da00f1853bfee13ab6492fddf80d..b63baf918b8f6127fc34838e9751c2a40f3ca15a 100644
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx
@@ -11,31 +11,15 @@
 
 #include <iostream>
 
-void TRT_BSErrContainerCnv_p1::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer* transCont, TRT_BSErrContainer_p1* persCont, MsgStream & /* log */) 
+void TRT_BSErrContainerCnv_p1::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer*, TRT_BSErrContainer_p1* , MsgStream & /* log */) 
 {
-  TRT_BSErrContainer::const_iterator it = transCont->begin();
-  TRT_BSErrContainer::const_iterator itEnd = transCont->end();
-  (persCont->m_bsErrs).reserve(transCont->size());
-
-  for (; it != itEnd; ++it) {
-    // FIXME: Should change type of m_bsErrs, but don't want to cause possible
-    // back-compatibility problems.
-    std::pair<uint8_t, uint32_t>* ptr = const_cast<std::pair<uint8_t, uint32_t>*> (*it);
-    (persCont->m_bsErrs).push_back(ptr);
-  }
-  return;
+  throw std::runtime_error("Obsolete TRT_BSErrContainerCnv_p1::transToPers() not implemented");
+  return; 
 }
 
-void  TRT_BSErrContainerCnv_p1::persToTrans(const TRT_BSErrContainer_p1* persCont, TRT_BSErrContainer* transCont, MsgStream & /* log */) 
+void  TRT_BSErrContainerCnv_p1::persToTrans(const TRT_BSErrContainer_p1* , TRT_BSErrContainer* , MsgStream & /* log */) 
 {
-
-  std::vector<std::pair<uint8_t, uint32_t>* >::const_iterator it = (persCont->m_bsErrs).begin();
-  std::vector<std::pair<uint8_t, uint32_t>* >::const_iterator itEnd = (persCont->m_bsErrs).end();
-  transCont->reserve((persCont->m_bsErrs).size());
-
-  for (; it != itEnd; ++it) {
-    transCont->push_back(*it);
-  }
+  throw std::runtime_error("Obsolete TRT_BSErrContainerCnv_p1::persToTrans() not implemented");
   return;
 
 }
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..ec68463a7d75240dc52762d82fd63e418c9dee11
--- /dev/null
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx
@@ -0,0 +1,53 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h"
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+#include "TRT_BSErrContainerCnv_p2.h"
+
+#include "Identifier/IdentifierHash.h"
+#include "AthAllocators/DataPool.h"
+
+#include <iostream>
+
+void TRT_BSErrContainerCnv_p2::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer* transCont, TRT_BSErrContainer_p2* persCont, MsgStream & /* log */) 
+{
+   for (const uint32_t id: transCont->getMissingErrorSet()) {
+     persCont->m_missingError.push_back(id);
+  }
+  
+  for (const uint32_t id: transCont->getErrorErrorSet()) {
+    persCont->m_errorError.push_back(id);
+  }
+
+  for (const uint32_t id: transCont->getSidErrorSet()) {
+    persCont->m_sidError.push_back(id);
+  }
+  
+  return;
+}
+
+void  TRT_BSErrContainerCnv_p2::persToTrans(const TRT_BSErrContainer_p2* persCont, TRT_BSErrContainer* transCont, MsgStream & /* log */) 
+{
+
+  for (const uint32_t id : persCont->m_missingError) {
+    transCont->add_missing_error(id);
+  }
+
+  for (const uint32_t id : persCont->m_errorError) {
+    transCont->add_error_error(id);
+  }
+    
+  for (const uint32_t id : persCont->m_sidError) {
+    transCont->add_sid_error(id);
+  }
+  return;
+}
+
+//================================================================
+TRT_BSErrContainer* TRT_BSErrContainerCnv_p2::createTransient(const TRT_BSErrContainer_p2* persObj, MsgStream& log) {
+  std::unique_ptr<TRT_BSErrContainer> trans(std::make_unique<TRT_BSErrContainer>());
+  persToTrans(persObj, trans.get(), log);
+  return(trans.release());
+}
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h
new file mode 100644
index 0000000000000000000000000000000000000000..19af96f0683803096ed6d17d8c32dd040cca059b
--- /dev/null
+++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h
@@ -0,0 +1,28 @@
+/*
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINERCNV_P2_H
+#define INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINERCNV_P2_H
+
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h"
+
+
+class TRT_BSErrContainerCnv_p2 : public T_AthenaPoolTPCnvBase<TRT_BSErrContainer, TRT_BSErrContainer_p2>
+{
+ public:
+  TRT_BSErrContainerCnv_p2(){};
+
+  virtual void persToTrans(const TRT_BSErrContainer_p2* persCont,
+                            TRT_BSErrContainer* transCont,
+                            MsgStream &log) ;
+  virtual void transToPers(const TRT_BSErrContainer* transCont,
+                            TRT_BSErrContainer_p2* persCont,
+                            MsgStream &log) ;
+  virtual TRT_BSErrContainer* createTransient(const TRT_BSErrContainer_p2* persObj, MsgStream& log) ;
+
+};
+
+#endif
diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx
deleted file mode 100644
index 6db8fe96106bde1ee5119ac02a214a9cf8de0bd3..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// $Id$
-/**
- * @file InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx
- * @author scott snyder <snyder@bnl.gov>
- * @date Oct, 2015
- * @brief Unit test
- */
-
-#undef NDEBUG
-#include "../src/TRT_BSErrContainerCnv_p1.h"
-#include "GaudiKernel/MsgStream.h"
-#include <iostream>
-#include <cassert>
-
-
-typedef TRT_BSErrContainer::base_value_type Elt;
-
-
-void compare (const TRT_BSErrContainer& c1,
-              const TRT_BSErrContainer& c2)
-{
-  assert (c1.size() == c2.size());
-  for (size_t i = 0; i < c1.size(); i++) {
-    const Elt& p1 = *c1[i];
-    const Elt& p2 = *c2[i];
-    assert (p1.first == p2.first);
-    assert (p1.second == p2.second);
-  }
-}
-
-void testit (const TRT_BSErrContainer& trans1)
-{
-  TRT_BSErrContainerCnv_p1 cnv;
-  TRT_BSErrContainer_p1 pers;
-  MsgStream log (0, "test");
-  cnv.transToPers (&trans1, &pers, log);
-  TRT_BSErrContainer trans2 (SG::VIEW_ELEMENTS);
-  cnv.persToTrans (&pers, &trans2, log);
-  compare (trans1, trans2);
-}
-
-
-void test1()
-{
-  std::cout << "test1\n";
-  TRT_BSErrContainer c;
-
-  c.push_back (new Elt (1, 2));
-  c.push_back (new Elt (3, 4));
-  c.push_back (new Elt (5, 6));
-  testit (c);
-}
-
-
-int main()
-{
-  test1();
-  return 0;
-}
diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h b/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h
index f02fe030e808f2b268a7389c68a9aaf31c09bf1b..f12eb4979cbda0cfd862bfb9f0b923a43821bcad 100644
--- a/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h
+++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h
@@ -66,10 +66,6 @@ class ITRT_ByteStream_ConditionsSvc : virtual public IService {
 
    virtual void add_rob_error( uint32_t robSourceId, uint32_t robStatus ) = 0;
    
-   virtual StatusCode readData( void ) = 0;
-   virtual StatusCode recordData( void ) = 0;
-
-
 };
 
 inline const InterfaceID& ITRT_ByteStream_ConditionsSvc::interfaceID() {
diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx
index 8cc3ce7070bbca26f8b7ee9d8dc42acbfdf8d574..15435020e849be30bf0d8fa3bdb4b6ccbba19b2d 100644
--- a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx
+++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx
@@ -11,14 +11,11 @@
 
 #include "TRT_ByteStream_ConditionsSvc.h"
 
-#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+#include "InDetByteStreamErrors/TRT_BSErrContainer_p1.h"
 #include "InDetByteStreamErrors/TRT_BSIdErrContainer.h"
 
 #include "Identifier/Identifier.h"
 
-#include "StoreGate/ReadHandle.h"
-#include "StoreGate/WriteHandle.h"
-
 //////////
 /// Constructor
 /////
@@ -40,12 +37,6 @@ TRT_ByteStream_ConditionsSvc::TRT_ByteStream_ConditionsSvc( const std::string& n
   m_tot_num_robStatus_errors(0)
 
 {
-  declareProperty( "writeBcidError", m_writeBCIDError = true );
-  declareProperty( "writeL1idError", m_writeL1IDError = true );
-  declareProperty( "writeMissingError", m_writeMISSINGError = true );
-  declareProperty( "writeErrorError", m_writeERRORError = true );
-  declareProperty( "writeSidError", m_writeSIDError = true );
-  declareProperty( "readCondFromESD", m_readCondFromESD = false );
 }
 
 //////////
@@ -60,11 +51,6 @@ StatusCode TRT_ByteStream_ConditionsSvc::initialize()
 {
   if(msgLvl(MSG::DEBUG)) msg() << "TRT_ByteStream_ConditionsSvc: Initialize." << endmsg;
 
-  // Initialize keys
-  ATH_CHECK(m_keyerrContid.initialize());
-  ATH_CHECK(m_keyerrCont.initialize());
-  ATH_CHECK(m_writekeyErrContID.initialize());
-  ATH_CHECK(m_writekeyErrCont.initialize());
 
   /*
    * Ask to be informed at the beginning of each new event so that we
@@ -98,12 +84,6 @@ StatusCode TRT_ByteStream_ConditionsSvc::initialize()
   m_tot_num_sid_errors=0;
   m_tot_num_robStatus_errors=0;
 
-  ATH_MSG_INFO( "writeBcidError    =" << (m_writeBCIDError?"TRUE":"FALSE") );
-  ATH_MSG_INFO( "writeL1idError    =" << (m_writeL1IDError?"TRUE":"FALSE") );
-  ATH_MSG_INFO( "writeMissingError =" << (m_writeMISSINGError?"TRUE":"FALSE") );
-  ATH_MSG_INFO( "writeErrorError   =" << (m_writeERRORError?"TRUE":"FALSE") );
-  ATH_MSG_INFO( "writeSidError     =" << (m_writeSIDError?"TRUE":"FALSE") );
-
   return StatusCode::SUCCESS;
 }
 
@@ -151,9 +131,6 @@ TRT_ByteStream_ConditionsSvc::handle(const Incident&)
    this->resetSets();
    this->resetCounts();
 
-   if ( m_readCondFromESD )
-      this->readData().ignore();
-
    return;
 }
 
@@ -407,181 +384,4 @@ TRT_ByteStream_ConditionsSvc::getErrorSet( TRTByteStreamErrors::errorTypes ErrTy
 }
 
 
-StatusCode
-TRT_ByteStream_ConditionsSvc::readData() 
-{
-
-  StatusCode sc(StatusCode::SUCCESS);  
-
-  /*
-   * ByteStream ID (L1ID, BCID) errors
-   */
-  {
-     SG::ReadHandle<TRT_BSIdErrContainer> errCont(m_keyerrContid);
-     if (not errCont.isValid())
-     {
-	ATH_MSG_WARNING( "Failed to retrieve TRT BS Id error container from SG" );
-
-	return sc;
-     }
-
-
-     // = new TRT_BSIdErrContainer();
-
-
-     for (const auto* elt : *errCont)
-     {
-	int errorType = elt->first;
-
-	//	std::cout << "TRT BSerr: " << errorType << " " << ((*it)->second).first
-	//		  << " " << (uint32_t) ((*it)->second).second << std::endl;
-
-	switch(errorType) 
-	{
-	
-	case TRTByteStreamErrors::BCIDError:
-	   add_bcid_error( elt->second.first,  elt->second.second );
-	   break;
-
-	case TRTByteStreamErrors::L1IDError:
-	   add_l1id_error( elt->second.first,  elt->second.second );
-	   break;
-	}
-     }
-  }
-
-  /*
-   * ByteStream (Missing, Error, SID) errors
-   */
-  {
-     SG::ReadHandle<TRT_BSErrContainer> errCont(m_keyerrCont);
-     if (not errCont.isValid())
-     {
-	ATH_MSG_WARNING( "Failed to retrieve TRT BS error container from SG" );
-
-	return sc;
-     }
-
-
-     for (const auto* elt : *errCont)
-     {
-	int errorType = elt->first;
-
-	//	std::cout << "TRT BSerr: " << errorType << " " << (*it)->second << std::endl;
-
-	switch(errorType) 
-	{
-	
-	case TRTByteStreamErrors::MISSINGError:
-	   add_missing_error( elt->second );
-	   break;
-
-	case TRTByteStreamErrors::ERRORError:
-	   add_error_error( elt->second );
-	   break;
-
-	case TRTByteStreamErrors::SIDError:
-	   add_sid_error( elt->second );
-	   break;
-	}
-     }
-  }
-
-   return sc;
- }
-
-
-StatusCode 
-TRT_ByteStream_ConditionsSvc::recordData() 
-{
-
-  StatusCode sc(StatusCode::SUCCESS);
-
-  SG::WriteHandle<TRT_BSIdErrContainer> IdCont(m_writekeyErrContID);                                                    
-  sc = IdCont.record(std::make_unique<TRT_BSIdErrContainer>() );
-  if (sc.isFailure() )
-    msg(MSG::ERROR) <<"Failed to record BSIdErrors to SG"<<endmsg;
-
-  SG::WriteHandle<TRT_BSErrContainer> cont(m_writekeyErrCont);
-  sc = cont.record(std::make_unique<TRT_BSErrContainer>() );
-  if (sc.isFailure() )
-    msg(MSG::ERROR) <<"Failed to record BSErrors to SG"<<endmsg;
-
-  /*
-   * ByteStream ID (L1ID, BCID) errors
-   */
-  {
-     TRTByteStreamErrors::errorTypes IdPairErrorTypes[2] = { TRTByteStreamErrors::BCIDError,
-							     TRTByteStreamErrors::L1IDError };
-
-  for (int errIdx=0; errIdx<2; errIdx++)
-  {
-     TRTByteStreamErrors::errorTypes errType = IdPairErrorTypes[errIdx];
-
-     if ( ((errType == TRTByteStreamErrors::BCIDError) && m_writeBCIDError) ||
-	  ((errType == TRTByteStreamErrors::L1IDError) && m_writeL1IDError) )
-     {
-	std::set<std::pair<uint32_t,uint32_t> >* errors = getIdErrorSet(errType);
-	if ( ! errors )
-	{
-#ifdef TRT_BS_ERR_DEBUG
-	   msg(MSG::INFO) << "No TRT BS errors of type " << errType << " to record" << endmsg;
-#endif // TRT_BS_ERR_DEBUG
-	   continue;
-	}
-
-	std::set<std::pair<uint32_t,uint32_t> >::iterator it = errors->begin();
-	std::set<std::pair<uint32_t,uint32_t> >::iterator itEnd = errors->end();
-	for (; it != itEnd; ++it) 
-	{
-	   std::pair<uint8_t, std::pair<uint32_t,uint8_t> >* err = 
-	      new std::pair<uint8_t, std::pair<uint32_t,uint8_t> >
-	      (std::make_pair( errType, *it ));
-	   IdCont->push_back(err);
-	}
-     }
-  }
-
-  }
-
-  /*
-   * ByteStream (Missing, Error, SID) errors
-   */
-  {
-     TRTByteStreamErrors::errorTypes IdErrorTypes[3] = { TRTByteStreamErrors::MISSINGError,
-							 TRTByteStreamErrors:: ERRORError,
-							 TRTByteStreamErrors::SIDError };
-  for (int errIdx=0; errIdx<3; errIdx++)
-  {
-     TRTByteStreamErrors::errorTypes errType = IdErrorTypes[errIdx];
-
-     if ( ((errType == TRTByteStreamErrors::MISSINGError) && m_writeMISSINGError) ||
-	  ((errType == TRTByteStreamErrors::ERRORError) && m_writeERRORError) ||
-	  ((errType == TRTByteStreamErrors::SIDError) && m_writeSIDError) )
-     { 
-
-	std::set<uint32_t>* errors = getErrorSet(errType);
-	if ( ! errors )
-	{
-#ifdef TRT_BS_ERR_DEBUG
-	   msg(MSG::INFO) << "No TRT BS errors of type " << errType << " to record" << endmsg;
-#endif // TRT_BS_ERR_DEBUG
-	   continue;
-	}
-	std::set<uint32_t>::iterator it = errors->begin();
-	std::set<uint32_t>::iterator itEnd = errors->end();
-	for (; it != itEnd; ++it)
-	{
-	   std::pair<uint8_t, uint32_t>* err = 
-	      new std::pair<uint8_t, uint32_t> (std::make_pair( errType, *it ));
-	   cont->push_back(err);
-	}
-     }
-  }
-
-  }
-
-  return sc;
- }
-
 #endif //ifndef SIMULATIONBASE
diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h
index 0c7a932e06773419e776cc8db3e8ac2332bbf2d9..f2fea779d2fcdada6c43529498780ba8c160608d 100644
--- a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h
+++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h
@@ -11,6 +11,13 @@
  *  @author Paul Keener
  */
 
+
+//Update, June 2020, W.L: 
+//This service is replaced by the TRT_BSErrContainer object in SG
+//It's only remaining purpose is to carry information from the 
+//TRT_TRTRawDataProvider to the TRT_TrgRIO_Maker with are both thread-unsafe
+//legcay tools 
+
 #include "GaudiKernel/IIncidentListener.h"
 #include "GaudiKernel/IIncidentSvc.h"
 
@@ -20,11 +27,7 @@
 #include "GaudiKernel/ServiceHandle.h"
 #include "StoreGate/StoreGateSvc.h"
 
-#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
-#include "InDetByteStreamErrors/TRT_BSIdErrContainer.h"
 
-#include "StoreGate/ReadHandleKey.h"
-#include "StoreGate/WriteHandleKey.h"
 
 /// Service for retrieving ByteStream conditions information
 class TRT_ByteStream_ConditionsSvc : public AthService,
@@ -84,10 +87,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService,
 
   void add_rob_error( uint32_t robSourceId, uint32_t robStatus );
 
-  virtual StatusCode readData( void );
-  virtual StatusCode recordData( void );
-
-
  private:
 
   ServiceHandle<StoreGateSvc> m_evtStore;
@@ -103,14 +102,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService,
 
   std::set<std::pair<uint32_t,uint32_t> > m_rob_status_errors;
 
-  bool m_writeBCIDError;      // true if we should write BCID errors to SG
-  bool m_writeL1IDError;      // true if we should write L1ID errors to SG
-  bool m_writeMISSINGError;   // true if we should write MISSING errors to SG
-  bool m_writeERRORError;     // true if we should write ERROR errors to SG
-  bool m_writeSIDError;       // true if we should write SID errors to SG
-
-  bool m_readCondFromESD;     // true if we are reading ESD and we should
-                              //      read the conditions data
   int m_num_l1id_errors;
   int m_num_bcid_errors;
   int m_num_missing_errors;
@@ -128,11 +119,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService,
   //TRT_BSIdErrContainer* m_IdCont;
   //TRT_BSErrContainer* m_cont;
 
-  SG::ReadHandleKey<TRT_BSIdErrContainer> m_keyerrContid{this,"ByteStreamIdErrsKey","TRT_ByteStreamIdErrs","RHK to retrieve ByteStream Error ID"};
-  SG::ReadHandleKey<TRT_BSErrContainer> m_keyerrCont{this,"ByteStreamErrsKey","TRT_ByteStreamErrs","RHK to retrieve ByteStream Errrors"};
-  SG::WriteHandleKey<TRT_BSIdErrContainer> m_writekeyErrContID{this,"ByteStreamIdErrsKeyContainer","TRT_ByteStreamIdErrs","WHK to write the ByteStream Error id"};
-  SG::WriteHandleKey<TRT_BSErrContainer> m_writekeyErrCont{this,"ByteStreamErrsKeyContainer","TRT_ByteStreamErrs","WHK to write the ByteStream Errors"};
-
 };
 
 /// Query Interface
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt
index 8aefbd0a4cfff7558261ab05092ef3e9962678f4..e86580b4de7cbf8e5175d2d6b6b21185df2764ae 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt
@@ -22,6 +22,7 @@ atlas_depends_on_subdirs( PUBLIC
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
 			  InnerDetector/InDetDetDescr/TRT_ReadoutGeometry
                           InnerDetector/InDetDetDescr/TRT_Cabling
+			  InnerDetector/InDetConditions/InDetByteStreamErrors
                           Tools/PathResolver
                           Trigger/TrigEvent/TrigSteeringEvent )
 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h
index 72815781f00cdfe58c16d02b3963b1aa2527959c..012de8746a5657ba6bb13d374d944fa972737f16 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h
@@ -13,6 +13,8 @@
 
 #include <vector>
 
+class TRT_BSErrContainer;
+
 // the tool to decode a ROB frament
 
 class ITRTRawDataProviderTool : virtual public IAlgTool
@@ -26,7 +28,8 @@ class ITRTRawDataProviderTool : virtual public IAlgTool
   
   //! this is the main decoding method
   virtual StatusCode convert(const std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs,
-		      TRT_RDO_Container*               rdoIdc ) = 0;
+			     TRT_RDO_Container* rdoIdc,
+			     TRT_BSErrContainer* bserr) = 0;
 
 };
 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h
index 4ce632659eb3f190a2fe493d52a676bee794e068..d2b9610566bcae4d5dca922f5c87a33eef8ac0be 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h
@@ -17,6 +17,8 @@
 
 // the tool to decode a ROB frament
 
+class TRT_BSErrContainer;
+
 class ITRT_RodDecoder : virtual public IAlgTool
 {
 
@@ -28,6 +30,7 @@ public:
   //! the method to fill the IDC
   virtual StatusCode fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment* robFrag,
 				      TRT_RDO_Container* rdoIdc,
+				      TRT_BSErrContainer* bsErr,
 				      const std::vector<IdentifierHash>* vecHash = 0 ) = 0;
 
 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx
index e246c6d68548de8afe8cf0375c9129351b3d02a3..9c3b8cc1b79ee951777414543c416a564535902f 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx
@@ -24,7 +24,8 @@ TRTRawDataProvider::TRTRawDataProvider(const std::string& name,
   declareProperty("RoIs", m_roiCollectionKey = std::string(""), "RoIs to read in");
   declareProperty("isRoI_Seeded", m_roiSeeded = false, "Use RoI");
   declareProperty("RDOKey", m_rdoContainerKey = std::string("TRT_RDOs"));
-  declareProperty ( "ProviderTool", m_rawDataTool );
+  declareProperty("BSErrkey",m_bsErrContKey = "TRT_ByteStreamErrs");
+  declareProperty ("ProviderTool", m_rawDataTool );
 }
 
 // --------------------------------------------------------------------
@@ -84,7 +85,7 @@ StatusCode TRTRawDataProvider::initialize() {
 
   ATH_CHECK( m_rdoContainerKey.initialize() );
 
-  ATH_CHECK( m_rdoContainerKey.initialize() );
+  ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) );
 
   return StatusCode::SUCCESS;
 }
@@ -98,7 +99,8 @@ StatusCode TRTRawDataProvider::execute()
   rdoContainer = std::make_unique<TRT_RDO_Container>(m_trt_id->straw_hash_max(), EventContainers::Mode::OfflineFast); 
   ATH_CHECK(rdoContainer.isValid());
 
-  
+  std::unique_ptr<TRT_BSErrContainer> bsErrCont=std::make_unique<TRT_BSErrContainer>();
+
   std::vector<uint32_t> listOfRobs; 
   if (!m_roiSeeded) {
     listOfRobs = m_CablingSvc->getAllRods();
@@ -125,11 +127,19 @@ StatusCode TRTRawDataProvider::execute()
   ATH_MSG_DEBUG( "Number of ROB fragments " << listOfRobf.size() );
 
   // ask TRTRawDataProviderTool to decode it and to fill the IDC
-  if (m_rawDataTool->convert(listOfRobf,&(*rdoContainer)).isFailure())
+  if (m_rawDataTool->convert(listOfRobf,&(*rdoContainer),bsErrCont.get()).isFailure())
     ATH_MSG_WARNING( "BS conversion into RDOs failed" );
 
   ATH_MSG_DEBUG( "Number of Collections in IDC " << rdoContainer->numberOfCollections() );
 
+
+  if (!m_bsErrContKey.empty()) {
+    ATH_MSG_DEBUG("Recording BS error container");
+    SG::WriteHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey};
+    ATH_CHECK(bsErrContHdl.record(std::move(bsErrCont)));
+  }
+
+
   return StatusCode::SUCCESS;
 }
 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h
index f89d1e4059b93d864c6a8605e05586f61f6d86e9..8a4be6d46a7221f6f72b4c87572155ad40a6ee50 100755
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h
@@ -22,6 +22,8 @@
 
 #include "AthenaBaseComps/AthAlgorithm.h"
 
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+          
 #include <string>
 
 class TRTRawDataProviderTool;
@@ -61,6 +63,7 @@ private:
   bool m_roiSeeded;
   SG::ReadHandleKey<TrigRoiDescriptorCollection> m_roiCollectionKey;
   SG::WriteHandleKey<TRT_RDO_Container> m_rdoContainerKey;
+  SG::WriteHandleKey<TRT_BSErrContainer> m_bsErrContKey;
 
 };
 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx
index 84067eb87578ff60a430f9aebf6329143b1cb878..dbf8dcf4b69955de668aa857792d0f97d390d2b0 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx
@@ -1,10 +1,8 @@
 /*
-  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 "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
-
 #include "TRTRawDataProviderTool.h"
 #include "GaudiKernel/IToolSvc.h"
 #include "InDetRawData/TRT_RDORawData.h"
@@ -28,12 +26,10 @@ TRTRawDataProviderTool::TRTRawDataProviderTool
 ( const std::string& type, const std::string& name,const IInterface* parent )
   :  AthAlgTool( type, name, parent ),
      m_decoder   ("TRT_RodDecoder",this),
-     m_bsErrSvc ("TRT_ByteStream_ConditionsSvc", name),
      m_storeInDetTimeColls(true),
      m_doEventCheck(true)
 {
   declareProperty ("Decoder", m_decoder);
-  declareProperty ("BSCondSvc", m_bsErrSvc);
   declareProperty ("StoreInDetTimeCollections", m_storeInDetTimeColls);
   declareProperty ("checkLVL1ID", m_doEventCheck);
 
@@ -67,16 +63,6 @@ StatusCode TRTRawDataProviderTool::initialize()
       ATH_MSG_INFO( "Retrieved tool " << m_decoder );
 
 
-  /*
-   * Retrieve BS Error Service
-   */
-   if ( m_bsErrSvc.retrieve().isFailure() )
-   {
-     ATH_MSG_FATAL( "Failed to retrieve service " << m_bsErrSvc );
-     return StatusCode::FAILURE;
-   } else
-     ATH_MSG_INFO( "Retrieved service " << m_bsErrSvc );
-
 
   //initialize write handles
   ATH_CHECK(m_lvl1idkey.initialize());
@@ -98,7 +84,8 @@ StatusCode TRTRawDataProviderTool::finalize()
 // convert method
 
 StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*>& vecRobs,
-					    TRT_RDO_Container*               rdoIdc )
+					   TRT_RDO_Container* rdoIdc, 
+					   TRT_BSErrContainer* bserr)
 {
 
   static std::atomic_int DecodeErrCount = 0;
@@ -169,7 +156,7 @@ StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*>
 #endif
       }
 
-      StatusCode sc = m_decoder->fillCollection( &**rob_it, rdoIdc);
+      StatusCode sc = m_decoder->fillCollection( &**rob_it, rdoIdc, bserr);
       if ( sc == StatusCode::FAILURE )
       {
 	if ( DecodeErrCount < 100 )
@@ -213,13 +200,6 @@ StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*>
 	return sc;   
       }
     }
-
-     sc = m_bsErrSvc->recordData();
-     if (sc.isFailure() ) 
-     {
-	ATH_MSG_ERROR( "failed to record BS errors" );
-	return sc;   
-     }
   }
  
   return StatusCode::SUCCESS; 
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h
index 65be0ede4371a22baaafe6843b0c633cbe797eba..ff8fb2105241218700a684f1166eb054c0478c92 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.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
 */
 
 #ifndef TRT_RAWDATABYTESTREAMCNV_TRTRAWDATAPROVIDERTOOL_H
@@ -10,7 +10,6 @@
 #include "AthenaKernel/SlotSpecificObj.h"
 #include "ByteStreamData/RawEvent.h" 
 #include "InDetRawData/InDetTimeCollection.h"
-#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 #include "TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h"
 #include "StoreGate/WriteHandleKey.h"
 
@@ -23,6 +22,8 @@
 
 // the tool to decode a ROB frament
 
+class TRT_BSErrorContainer;
+
 class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool, 
                                 public AthAlgTool
 {
@@ -34,7 +35,7 @@ class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool,
   
   //! constructor
   TRTRawDataProviderTool( const std::string& type, const std::string& name,
-			    const IInterface* parent ) ;
+			  const IInterface* parent ) ;
 
   //! destructor 
   virtual ~TRTRawDataProviderTool() ;
@@ -47,15 +48,15 @@ class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool,
   
   //! this is the main decoding method
   virtual StatusCode convert(const std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs,
-		      TRT_RDO_Container*               rdoIdc ) override;
+			     TRT_RDO_Container* rdoIdc,
+			     TRT_BSErrContainer* bsErrCont
+			     ) override;
 
 private: 
   TRTRawDataProviderTool( ); //Not implemented
   
   ToolHandle<ITRT_RodDecoder>  m_decoder;   
 
-  ServiceHandle<ITRT_ByteStream_ConditionsSvc>   m_bsErrSvc;
-
   // bookkeeping if we have decoded a ROB already
   mutable std::mutex m_mutex;
   struct CacheEntry {
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx
index 58e2e2b1d49a0ed439d1ccd74216e8b481b86116..8d98a5277484c1aef45af2d0185b963f51b70794 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.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
 */
 
 
@@ -24,6 +24,8 @@
 #include "AthenaPoolUtilities/AthenaAttributeList.h"
 
 
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+
 /*
  * TRT Specific detector manager to get layout information
  */
@@ -43,7 +45,7 @@ TRT_RodDecoder::TRT_RodDecoder
 ( const std::string& type, const std::string& name,const IInterface* parent )
   :  AthAlgTool              ( type,name,parent ),
      m_CablingSvc            ( "TRT_CablingSvc", name ),
-     m_bsErrSvc              ( "TRT_ByteStream_ConditionsSvc", name ),
+     //     m_bsErrSvc              ( "TRT_ByteStream_ConditionsSvc", name ),
      m_recordBSErrors        ( true ),
      m_lookAtSidErrors       ( true ),
      m_lookAtErrorErrors     ( false ),
@@ -63,7 +65,6 @@ TRT_RodDecoder::TRT_RodDecoder
 
 {
   declareProperty ( "TRT_Cabling", m_CablingSvc );
-  declareProperty ( "BSCondSvc", m_bsErrSvc );
   declareProperty ( "RecordByteStreamErrors", m_recordBSErrors );
   declareProperty ( "LookAtSidErrors",        m_lookAtSidErrors );
   declareProperty ( "LookAtErrorErrors",      m_lookAtErrorErrors );
@@ -119,17 +120,6 @@ StatusCode TRT_RodDecoder::initialize()
     ATH_MSG_INFO( "Retrieved tool " << m_CablingSvc );
 
 
-  /*
-   * Retrieve conditions tool
-   */
-  if ( m_bsErrSvc.retrieve().isFailure() )
-  {
-    ATH_MSG_FATAL( "Failed to retrieve service " << m_bsErrSvc );
-    return StatusCode::FAILURE;
-  } else
-    ATH_MSG_INFO( "Retrieved service " << m_bsErrSvc );
-
-
   /*
    * get detector manager
    */
@@ -260,6 +250,7 @@ StatusCode TRT_RodDecoder::finalize() {
 StatusCode
 TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag,
 				 TRT_RDO_Container* rdoIdc,
+				 TRT_BSErrContainer* bsErr,
 				 const std::vector<IdentifierHash>* vecHash )
 {
 
@@ -293,7 +284,8 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag,
     if ( *rob_status )
     {
 
-      m_bsErrSvc->add_rob_error( robFrag->rob_source_id(), *rob_status ); 
+      bsErr->add_rob_error( robFrag->rob_source_id(), *rob_status ); 
+      
 
 
       /*
@@ -442,14 +434,14 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag,
 		if ( m_lookAtSidErrors && D_sid )
 		{
 		  //		    cout << "sid ";
-		  m_bsErrSvc->add_sid_error( Index );
+		  bsErr->add_sid_error( Index );
 		  sid_errors++;
 		}
 		      
 		if ( m_lookAtErrorErrors && D_error )
 		{
 		  //		    cout << "err ";
-		  m_bsErrSvc->add_error_error( Index );
+		  bsErr->add_error_error( Index );
 		  error_errors++;
 		}
 		      
@@ -457,7 +449,7 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag,
 		{
 		  //		    cout << "l1(" << hex << D_L1ID << "/" 
 		  //			 << (rod_L1ID & 0x7) << dec;
-		  m_bsErrSvc->add_l1id_error( Index, D_L1ID );
+		  bsErr->add_l1id_error( Index, D_L1ID );
 		  l1id_errors++;
 		}
 
@@ -476,14 +468,14 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag,
 		{
 		  //		    cout << "bc(" << hex << D_BCID << "/" 
 		  //			 << expected_BCID << dec;
-		  m_bsErrSvc->add_bcid_error( Index, D_BCID );
+		  bsErr->add_bcid_error( Index, D_BCID );
 		  bcid_errors++;
 		}
 	      } 
 	      else if ( m_lookAtMissingErrors )
 	      {
 		//		 cout << "mis ";
-		m_bsErrSvc->add_missing_error( Index );
+		bsErr->add_missing_error( Index );
 		missing_errors++;
 	      }
 		  
diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h
index 1d4ad8223326f4fae378325fef7c4d3cfba3ab08..9d7103b9527732130ed046b74fd677d6e7a89217 100644
--- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h
+++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h
@@ -19,7 +19,6 @@
 /*
  * TRT Tools we use
  */
-#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 #include "TRT_Cabling/ITRT_CablingSvc.h"
 
 /*
@@ -92,16 +91,15 @@ public:
 
   //! the method to fill the IDC
   virtual StatusCode fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment* robFrag,
-			      TRT_RDO_Container* rdoIdc,
-			      const std::vector<IdentifierHash>* vecHash = 0) override;
+				      TRT_RDO_Container* rdoIdc,
+				      TRT_BSErrContainer* bserr,
+				      const std::vector<IdentifierHash>* vecHash = 0) override;
 
 
  private:
 
    ServiceHandle<ITRT_CablingSvc>   m_CablingSvc;
 
-   ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_bsErrSvc;
-
    /*
     * Do we look for Front-End Errors at all?
     */
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py
index 18736a0d8bfa2327daea67e2ab3ede0425981c46..df52abe5e3902b23f4799c624db4042fdbf3994f 100644
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py
@@ -92,6 +92,10 @@ InDetTRT_Monitoring_Tool = TRT_Monitoring_Tool (name                         = "
                                                 TrigDecisionObjectName       = "xTrigDecision" if DQMonFlags.useTrigger else ""
                                                 )
 
+if globalflags.DataSource == 'geant4':
+  #No ByteStream error in MC case
+  InDetTRT_Monitoring_Tool.ByteStreamErrors=""
+
 if jobproperties.Beam.beamType()=='collisions':
   from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool
   InDetTRT_Monitoring_Tool.FilterTools += [GetFilledBunchFilterTool()]
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
index 108d7b855e18bf790e174462329993c717a5a779..d54e39e7da0126b8bb78d24ccbb9b07107fe04b1 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt
@@ -16,6 +16,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Control/AthenaBaseComps
                           InnerDetector/InDetConditions/InDetConditionsSummaryService
                           InnerDetector/InDetConditions/TRT_ConditionsServices
+			  InnerDetector/InDetConditions/InDetByteStreamErrors
                           Event/xAOD/xAODEventInfo
                           Commission/CommissionEvent
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h
index 75479033532b46249f48f799e4eaeaa25857535c..d4d63d3f8e8be5f015d7e6139c363288735ecead 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h
@@ -55,7 +55,6 @@ class ITRT_CalDbTool;
 class ITRT_StrawStatusSummaryTool;
 class ITRT_ConditionsSvc;
 class ITRT_DAQ_ConditionsSvc;
-class ITRT_ByteStream_ConditionsSvc;
 class ITRT_StrawNeighbourSvc;
 
 class TRTMonitoringRun3ESD_Alg : public AthMonitorAlgorithm {
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
index 022fe8908b4aa438063e7f8da063a15fbbec5774..5fa1277d71477372ce802e2f44cf80fcc9e7c367 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h
@@ -30,6 +30,8 @@
 
 #include "MagFieldInterfaces/IMagFieldSvc.h"
 
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
+
 // STDLIB
 #include <string>
 #include <vector>
@@ -43,7 +45,6 @@ class AtlasDetectorID;
 class TRT_ID;
 class Identifier;
 class ITRT_StrawStatusSummaryTool;
-class ITRT_ByteStream_ConditionsSvc;
 
 class TRTMonitoringRun3RAW_Alg : public AthMonitorAlgorithm {
 public:
@@ -111,9 +112,7 @@ private:
     float radToDegrees(float radValue) const;
 
     // Services
-    ServiceHandle<IToolSvc> p_toolSvc;
     ToolHandle<ITRT_StrawStatusSummaryTool> m_sumTool;
-    ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_BSSvc;
 
     // Data handles
     SG::ReadHandleKey<TRT_RDO_Container>   m_rdoContainerKey{this,       "TRTRawDataObjectName",   "TRT_RDOs",      "Name of TRT RDOs container"};
@@ -122,6 +121,8 @@ private:
     SG::ReadHandleKey<TrackCollection>     m_combTrackCollectionKey{this, "track_collection_hole_finder", "CombinedInDetTracks", "Name of tracks container used for hole finder"};
     SG::ReadHandleKey<TrackCollection> m_trackCollectionKey{this, "TRTTracksObjectName", "Tracks", "Name of tracks container"};
 
+    SG::ReadHandleKey<TRT_BSErrContainer> m_bsErrContKey{this,"ByteStreamErrors","TRT_ByteStreamErrs","SG key of TRT ByteStream Error container"};
+
     // Tools
     ToolHandle<Trk::ITrackHoleSearchTool>  m_trt_hole_finder{this, "trt_hole_search", "TRTTrackHoleSearchTool", "Track hole search tool name"};
     ToolHandle<Trk::ITrackSummaryTool>     m_TrackSummaryTool{this, "TrackSummaryTool", "InDetTrackSummaryTool", "Track summary tool name"};
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
index ea2ca6a9fa103199a7a4fe847e733bb906536c04..ceae33541b167555346b8c4f31ce3bbb82d53bb3 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
@@ -7,7 +7,9 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags):
 
     from AthenaConfiguration.ComponentFactory import CompFactory
     algTRTMonitoringRun3RAW = helper.addAlgorithm(CompFactory.TRTMonitoringRun3RAW_Alg,
-                                               'AlgTRTMonitoringRun3RAW')
+                                                  'AlgTRTMonitoringRun3RAW',
+                                                  ByteStreamErrors= "" if inputFlags.isMC else "TRT_ByteStreamErrs"
+                                              )
 
     from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx
index fa2b8a9121fe7f34005f38e1f3048b986f50329a..3a45c7ae8d3332f1b3076666aad178a6892a1bb8 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx
@@ -17,7 +17,6 @@
 #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h"
 #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h"
-#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h"
 #include "InDetConditionsSummaryService/IInDetConditionsSvc.h"
 
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
index 60cb72bf176ef8c1fbac08ef5941c6b7225fe095..c9f04e4dcb349175b3f68bfde68d686a82d3ef6c 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx
@@ -17,7 +17,6 @@
 #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h"
 #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h"
-#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h"
 #include "InDetConditionsSummaryService/IInDetConditionsSvc.h"
 
@@ -41,15 +40,11 @@ TRTMonitoringRun3RAW_Alg::TRTMonitoringRun3RAW_Alg( const std::string& name, ISv
 ,m_mgr(0)
 ,m_minTRThits(10)
 ,m_minP(0)
-,p_toolSvc("IToolSvc", name)
 ,m_sumTool("TRT_StrawStatusSummaryTool", this)
-,m_BSSvc("TRT_ByteStream_ConditionsSvc", name)
 ,m_isCosmics(false)
 ,m_EventBurstCut(-1)
 {
-    declareProperty("ToolSvc",                        p_toolSvc);
     declareProperty("InDetTRTStrawStatusSummaryTool", m_sumTool);
-    declareProperty("TRT_ByteStream_ConditionsSvc",   m_BSSvc);
     declareProperty("doStraws",                       m_doStraws         = true);
     declareProperty("doExpert",                       m_doExpert         = true);
     declareProperty("doChips",                        m_doChips          = true);
@@ -84,9 +79,6 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() {
     // initialize superclass
     ATH_CHECK( AthMonitorAlgorithm::initialize() );
     
-    IToolSvc *p_toolSvc; // NOTE: recreation of ToolSvc
-
-	ATH_CHECK( service("ToolSvc", p_toolSvc) );
     
     // Retrieve detector manager.
     ATH_CHECK( detStore()->retrieve(m_mgr, "TRT") );
@@ -102,13 +94,6 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() {
             ATH_CHECK( m_sumTool.retrieve() );
         }
 
-        // Retrieve the TRT_ByteStreamService.
-        if (m_BSSvc.name().empty()) {
-            ATH_MSG_WARNING("TRT_ByteStreamSvc not given.");
-        } else {
-            ATH_CHECK( m_BSSvc.retrieve() );
-        }
-
         Identifier ident;
 
         if (m_sumTool.name() != "") {
@@ -137,6 +122,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() {
     ATH_CHECK( m_TRT_BCIDCollectionKey.initialize() );
     ATH_CHECK( m_combTrackCollectionKey.initialize() );
     ATH_CHECK( m_trackCollectionKey.initialize() );
+    ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) );
 
     return StatusCode::SUCCESS;
 }
@@ -147,6 +133,18 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI
 //-------------------------------------------------------------------------------------------------//
     StatusCode sc = StatusCode::SUCCESS;
 
+    const TRT_BSErrContainer emptyErrCont;//Empty dummy instance for MC
+    const TRT_BSErrContainer* bsErrCont=&emptyErrCont;
+	
+    if (!m_bsErrContKey.empty()) { 
+      //Regular real-data case, get the byte-stream errors from SG
+      SG::ReadHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey};
+      bsErrCont=bsErrContHdl.cptr();
+    }
+    else {
+      ATH_MSG_DEBUG("MC case, using dummy TRT_BSErrContainer");
+    }
+
     const unsigned int lumiBlock = eventInfo.lumiBlock();
     ATH_MSG_VERBOSE("This is lumiblock : " << lumiBlock);
 
@@ -154,18 +152,18 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI
 //        m_lastLumiBlock = lumiBlock;
 //    }
 
-    //Get BSConversion Errors from BSConditionsServices:
-    std::set<std::pair<uint32_t, uint32_t> > *L1IDErrorSet      = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::L1IDError);
-    std::set<std::pair<uint32_t, uint32_t> > *BCIDErrorSet      = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::BCIDError);
-    std::set<uint32_t>                       *MissingErrorSet   = m_BSSvc->getErrorSet(TRTByteStreamErrors::MISSINGError);
-    std::set<uint32_t>                       *SidErrorSet       = m_BSSvc->getErrorSet(TRTByteStreamErrors::SIDError);
-    std::set<std::pair<uint32_t, uint32_t> > *RobStatusErrorSet = m_BSSvc->getRodRobErrorSet(TRTByteStreamErrors::RobStatusError);
+    //Get BSConversion errors
+    const std::set<std::pair<uint32_t, uint32_t> > &L1IDErrorSet      = bsErrCont->getL1ErrorSet();
+    const std::set<std::pair<uint32_t, uint32_t> > &BCIDErrorSet      = bsErrCont->getBCIDErrorSet();
+    const std::set<uint32_t>                       &MissingErrorSet   = bsErrCont->getMissingErrorSet();
+    const std::set<uint32_t>                       &SidErrorSet       = bsErrCont->getSidErrorSet();
+    const std::set<std::pair<uint32_t, uint32_t> > &RobStatusErrorSet = bsErrCont->getRobErrorSet();
     const unsigned int rod_id_base[2][2] = { { 0x310000, 0x320000 }, { 0x330000, 0x340000 } };
     const unsigned int nChipsTotal[2][2] = { {     3328,     3328 }, {     7680,     7680 } };
     const unsigned int nRobsTotal[2][2]  = { {       32,       32 }, {       64,       64 } };
     float nBSErrors[2][2]  = { { 0, 0 }, { 0, 0 } };
     float nRobErrors[2][2] = { { 0, 0 }, { 0, 0 } };
-    const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { BCIDErrorSet, L1IDErrorSet };
+    const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { &BCIDErrorSet, &L1IDErrorSet };
 
     for (int iset = 0; iset < 2; ++iset) {
         for (auto setIt = errorset1[iset]->begin(); setIt != errorset1[iset]->end(); ++setIt) {
@@ -179,7 +177,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI
         }
     }
 
-    const std::set<uint32_t> *errorset2[2] = { MissingErrorSet, SidErrorSet };
+    const std::set<uint32_t> *errorset2[2] = { &MissingErrorSet, &SidErrorSet };
 
     for (int iset = 0; iset < 2; ++iset) {
         for (auto setIt = errorset2[iset]->begin(); setIt != errorset2[iset]->end(); ++setIt) {
@@ -200,7 +198,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI
         }
     }
 
-    for (auto setIt = RobStatusErrorSet->begin(); setIt != RobStatusErrorSet->end(); ++setIt) {
+    for (auto setIt = RobStatusErrorSet.begin(); setIt != RobStatusErrorSet.end(); ++setIt) {
         for (int ibe = 0; ibe < 2; ++ibe) {
             for (int iside = 0; iside < 2; ++iside) {
                 if (setIt->first % rod_id_base[ibe][iside] < 0xffff) {
diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt b/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt
index 79c1646ba47332575d76195782a50dc92f64c95e..672ecd50c06901bb84d4c6a71d4f7e910cbe0d9c 100644
--- a/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt
+++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt
@@ -23,6 +23,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Event/xAOD/xAODTrigger
                           InnerDetector/InDetConditions/InDetConditionsSummaryService
                           InnerDetector/InDetConditions/TRT_ConditionsServices
+			  InnerDetector/InDetConditions/InDetByteStreamErrors
                           InnerDetector/InDetDetDescr/InDetIdentifier
                           InnerDetector/InDetDetDescr/InDetReadoutGeometry
 			  InnerDetector/InDetDetDescr/TRT_ReadoutGeometry
diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx
index 88680b033a191ec9eb3025dd5d0fc09a81acc00e..44ba700e1ff1a452ae5466c16112952e38eabd4c 100644
--- a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx
+++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx
@@ -18,7 +18,6 @@
 #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h"
 #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h"
-#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h"
 #include "InDetConditionsSummaryService/IInDetConditionsSvc.h"
 #include "xAODTrigger/TrigDecision.h"
@@ -64,7 +63,6 @@ TRT_Monitoring_Tool::TRT_Monitoring_Tool(const std::string &type, const std::str
 	p_toolSvc("IToolSvc", name),
 	m_sumTool("TRT_StrawStatusSummaryTool", this),
 	m_DAQSvc("TRT_DAQ_ConditionsSvc", name), // NOTE: not used anywhere?
-	m_BSSvc("TRT_ByteStream_ConditionsSvc", name),
 	m_condSvc_BS("TRT_ByteStream_ConditionsSvc", name), // NOTE: not used anywhere?
 	m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name),
 	m_TRTCalDbTool("TRT_CalDbTool", this),
@@ -136,7 +134,6 @@ TRT_Monitoring_Tool::TRT_Monitoring_Tool(const std::string &type, const std::str
 	declareProperty("ToolSvc",                  p_toolSvc);
 	declareProperty("InDetTRTStrawStatusSummaryTool", m_sumTool);
 	declareProperty("InDetTRT_DAQ_ConditionsSvc", m_DAQSvc);
-	declareProperty("TRT_ByteStream_ConditionsSvc", m_BSSvc);
 	declareProperty("TRT_StrawNeighbourSvc",   m_TRTStrawNeighbourSvc);
 	declareProperty("DriftFunctionTool",        m_drifttool);
 	declareProperty("DoTRT_DCS",                m_doDCS);
@@ -419,13 +416,6 @@ StatusCode TRT_Monitoring_Tool::initialize() {
 			ATH_CHECK( m_DAQSvc.retrieve() );
 		}
 
-		// Retrieve the TRT_ByteStreamService.
-		if (m_BSSvc.name().empty()) {
-			ATH_MSG_WARNING("TRT_ByteStreamSvc not given.");
-		} else {
-			ATH_CHECK( m_BSSvc.retrieve() );
-		}
-
 		// Test out the TRT_ConditionsSummaryTool.
 		//Identifier ident = m_trtid->straw_id(1,1,1,1,1);
 		Identifier ident;
@@ -589,6 +579,7 @@ StatusCode TRT_Monitoring_Tool::initialize() {
 	ATH_CHECK( m_xAODEventInfoKey.initialize() );
 	ATH_CHECK( m_TRT_BCIDCollectionKey.initialize() );
 	ATH_CHECK( m_comTimeObjectKey.initialize() );
+	ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) );
 	ATH_CHECK( m_trigDecisionKey.initialize(!m_trigDecisionKey.empty()) );
 
 	ATH_MSG_INFO("My TRT_DAQ_ConditionsSvc is " << m_DAQSvc);
@@ -4019,6 +4010,18 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo&
 //-------------------------------------------------------------------------------------------------//
 	StatusCode sc = StatusCode::SUCCESS;
 
+	const TRT_BSErrContainer emptyErrCont;//Empty dummy instance for MC
+	const TRT_BSErrContainer* bsErrCont=&emptyErrCont;
+	
+	if (!m_bsErrContKey.empty()) { 
+	  //Regular real-data case, get the byte-stream errors from SG
+	  SG::ReadHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey};
+	  bsErrCont=bsErrContHdl.cptr();
+	}
+	else {
+	  ATH_MSG_DEBUG("MC case, using dummy TRT_BSErrContainer");
+	}
+
 	const unsigned int lumiBlock = eventInfo.lumiBlock();
 	ATH_MSG_VERBOSE("This is lumiblock : " << lumiBlock);
 	m_good_bcid = eventInfo.bcid();
@@ -4026,19 +4029,20 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo&
 	if ((int)lumiBlock != m_lastLumiBlock) {
 		m_lastLumiBlock = lumiBlock;
 	}
+	////
+	//Get BSConversion errors
+	const std::set<std::pair<uint32_t, uint32_t> > &L1IDErrorSet      = bsErrCont->getL1ErrorSet();
+	const std::set<std::pair<uint32_t, uint32_t> > &BCIDErrorSet      = bsErrCont->getBCIDErrorSet();
+	const std::set<uint32_t>                       &MissingErrorSet   = bsErrCont->getMissingErrorSet();
+	const std::set<uint32_t>                       &SidErrorSet       = bsErrCont->getSidErrorSet();
+	const std::set<std::pair<uint32_t, uint32_t> > &RobStatusErrorSet = bsErrCont->getRobErrorSet();
 
-	//Get BSConversion Errors from BSConditionsServices:
-	std::set<std::pair<uint32_t, uint32_t> > *L1IDErrorSet      = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::L1IDError);
-	std::set<std::pair<uint32_t, uint32_t> > *BCIDErrorSet      = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::BCIDError);
-	std::set<uint32_t>                       *MissingErrorSet   = m_BSSvc->getErrorSet(TRTByteStreamErrors::MISSINGError);
-	std::set<uint32_t>                       *SidErrorSet       = m_BSSvc->getErrorSet(TRTByteStreamErrors::SIDError);
-	std::set<std::pair<uint32_t, uint32_t> > *RobStatusErrorSet = m_BSSvc->getRodRobErrorSet(TRTByteStreamErrors::RobStatusError);
 	const unsigned int rod_id_base[2][2] = { { 0x310000, 0x320000 }, { 0x330000, 0x340000 } };
 	const unsigned int nChipsTotal[2][2] = { {     3328,     3328 }, {     7680,     7680 } };
 	const unsigned int nRobsTotal[2][2]  = { {       32,       32 }, {       64,       64 } };
 	float nBSErrors[2][2]  = { { 0, 0 }, { 0, 0 } };
 	float nRobErrors[2][2] = { { 0, 0 }, { 0, 0 } };
-	const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { BCIDErrorSet, L1IDErrorSet };
+	const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { &BCIDErrorSet, &L1IDErrorSet };
 
 	for (int iset = 0; iset < 2; ++iset) {
 		for (auto setIt = errorset1[iset]->begin(); setIt != errorset1[iset]->end(); ++setIt) {
@@ -4052,7 +4056,7 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo&
 		}
 	}
 
-	const std::set<uint32_t> *errorset2[2] = { MissingErrorSet, SidErrorSet };
+	const std::set<uint32_t> *errorset2[2] = { &MissingErrorSet, &SidErrorSet };
 
 	for (int iset = 0; iset < 2; ++iset) {
 		for (auto setIt = errorset2[iset]->begin(); setIt != errorset2[iset]->end(); ++setIt) {
@@ -4073,7 +4077,7 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo&
 		}
 	}
 
-	for (auto setIt = RobStatusErrorSet->begin(); setIt != RobStatusErrorSet->end(); ++setIt) {
+	for (auto setIt = RobStatusErrorSet.begin(); setIt != RobStatusErrorSet.end(); ++setIt) {
 		for (int ibe = 0; ibe < 2; ++ibe) {
 			for (int iside = 0; iside < 2; ++iside) {
 				if (setIt->first % rod_id_base[ibe][iside] < 0xffff) {
diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h
index db18f6f250afb1dd925ff5f902027e1134330864..9a6fe96f17536a3814f0a5916e2ddc8f2525110b 100644
--- a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h
+++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h
@@ -17,6 +17,7 @@
 #include "xAODEventInfo/EventInfo.h"
 #include "InDetRawData/InDetTimeCollection.h"
 #include "InDetRawData/InDetRawDataCLASS_DEF.h"
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
 
 // Tool interfaces
 #include "TrkToolInterfaces/ITrackSummaryTool.h"
@@ -28,6 +29,8 @@
 #include <vector>
 #include <set>
 
+
+
 class TProfile;
 class TH1F_LW;
 class TH2F_LW;
@@ -55,7 +58,6 @@ class ITRT_CalDbTool;
 class ITRT_StrawStatusSummaryTool;
 class ITRT_ConditionsSvc;
 class ITRT_DAQ_ConditionsSvc;
-class ITRT_ByteStream_ConditionsSvc;
 class ITRT_StrawNeighbourSvc;
 //class ITRT_DriftFunctionTool;
 
@@ -144,7 +146,6 @@ private:
 	ServiceHandle<IToolSvc> p_toolSvc;
 	ToolHandle<ITRT_StrawStatusSummaryTool> m_sumTool;
 	ServiceHandle<ITRT_DAQ_ConditionsSvc> m_DAQSvc;
-	ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_BSSvc;
 	ServiceHandle<ITRT_ConditionsSvc> m_condSvc_BS;
 	ServiceHandle<ITRT_StrawNeighbourSvc> m_TRTStrawNeighbourSvc;
 	ToolHandle<ITRT_CalDbTool> m_TRTCalDbTool;
@@ -159,6 +160,9 @@ private:
 	SG::ReadHandleKey<ComTime> m_comTimeObjectKey{this, "ComTimeObjectName", "TRT_Phase", "Name of ComTime object"};
 	SG::ReadHandleKey<xAOD::TrigDecision> m_trigDecisionKey{this, "TrigDecisionObjectName", "xTrigDecision", "Name of trigger decision object"};
 
+        SG::ReadHandleKey<TRT_BSErrContainer> m_bsErrContKey{this,"ByteStreamErrors","TRT_ByteStreamErrs","SG key of TRT ByteStream Error container"};
+
+
 	// Tools
 	ToolHandle<Trk::ITrackSummaryTool> m_TrackSummaryTool{this, "TrkSummaryTool", "Trk::TrackSummaryTool/InDetTrackSummaryTool", "Track summary tool name"};
 	ToolHandle<Trk::ITrackHoleSearchTool>  m_trt_hole_finder{this, "trt_hole_search", "TRTTrackHoleSearchTool", "Track hole search tool name"};
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt
index 22290d0d118fa49e0c3219064b05d9646ee75d73..0f556b1f9aa111bd4852119fe187fff8e3ca117b 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt
@@ -24,6 +24,7 @@ atlas_depends_on_subdirs( PUBLIC
                           InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv
                           InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv
                           InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv
+                          InnerDetector/InDetConditions/TRT_ConditionsServices
                           Trigger/TrigEvent/TrigSteeringEvent )
 
 # Component(s) in the package:
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h
index b013d61026530c11150d1ccd260a293f2d6cebfc..fe0b3816a02cb49d1b29a255264046d3d83c92c9 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h
@@ -23,6 +23,7 @@
 #include "InDetTrigToolInterfaces/ITrigRawDataProviderTool.h"
 //typedef
 #include "InDetRawData/TRT_RDO_Container.h"
+#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h"
 
 #include <string>
 
@@ -60,6 +61,7 @@ namespace InDet {
     ServiceHandle<IROBDataProviderSvc>  m_robDataProvider;
     ToolHandle<ITRTRawDataProviderTool> m_rawDataTool;
     ServiceHandle<ITRT_CablingSvc>      m_IdMapping;
+    ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_bsErrorSvc;
     const TRT_ID*                       m_id; 
     //! the RDO container
     TRT_RDO_Container*                  m_container;
diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx
index 151170bccb0e1ad040b4c1e85ec02e4213e8474c..b32400654e2f2e3bb520297bd24e54cb2373b5a6 100644
--- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx
+++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx
@@ -10,7 +10,7 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
 #include "IRegionSelector/IRegSelSvc.h" 
 #include "TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h"
-
+#include "InDetByteStreamErrors/TRT_BSErrContainer.h"
 
 using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
 
@@ -28,6 +28,7 @@ namespace InDet {
     m_robDataProvider ("ROBDataProviderSvc", name),
     m_rawDataTool     ("TRTRawDataProviderTool/InDetTrigTRTRawDataProviderTool"),
     m_IdMapping       ("TRT_CablingSvc",name),
+    m_bsErrorSvc("TRT_ByteStream_ConditionsSvc",name),
     m_id(0),
     m_container(0)
   {
@@ -79,6 +80,12 @@ namespace InDet {
       return StatusCode::FAILURE;
     } else 
       msg(MSG::INFO) << "Retrieved service " << m_IdMapping << endmsg;
+    
+    if (m_bsErrorSvc.retrieve().isFailure()){
+      ATH_MSG_FATAL( "Could not retrieve " << m_bsErrorSvc );
+      return StatusCode::FAILURE;
+    }
+
 
     m_container = new TRT_RDO_Container(m_id->straw_layer_hash_max(), EventContainers::Mode::OfflineFast); 
     m_container ->addRef();     // make sure it is never deleted
@@ -144,11 +151,42 @@ namespace InDet {
     m_robDataProvider->getROBData(robIDlist , listOfRobf);
     // ask TRTRawDataProviderTool to decode it and to fill the IDC
     StatusCode scon = StatusCode::FAILURE;
+    std::unique_ptr<TRT_BSErrContainer> bsErrCnt=std::make_unique<TRT_BSErrContainer>();
     if (m_container){
-      scon = m_rawDataTool->convert(listOfRobf,m_container);
+      scon = m_rawDataTool->convert(listOfRobf,m_container,bsErrCnt.get());
       if (scon==StatusCode::FAILURE)
 	msg(MSG::ERROR) << "BS conversion into RDOs failed" << endmsg;
     }
+
+    //Backward compatiblity hack: convert TRT_BSErrContainer into thread-unsafe
+    //TRTByteStream_ConditionsSvc
+    
+     m_bsErrorSvc->resetCounts();
+     for (const auto& id_bcid : bsErrCnt->getBCIDErrorSet()) {
+       m_bsErrorSvc->add_bcid_error(id_bcid.first,id_bcid.second);
+     }
+
+     for (const auto& id_l1id : bsErrCnt->getL1ErrorSet()) {
+       m_bsErrorSvc->add_l1id_error(id_l1id.first,id_l1id.second);
+     }
+
+    for (const auto& id_missing : bsErrCnt->getMissingErrorSet()) {
+       m_bsErrorSvc->add_missing_error(id_missing);
+     } 
+
+    for (const auto& id : bsErrCnt->getErrorErrorSet()) {
+       m_bsErrorSvc->add_error_error(id);
+     } 
+    
+    for (const auto& id : bsErrCnt->getSidErrorSet()) {
+      m_bsErrorSvc->add_sid_error(id);
+     }
+
+    for (const auto& id_stat : bsErrCnt->getRobErrorSet()) {
+       m_bsErrorSvc->add_rob_error(id_stat.first,id_stat.second);
+     }
+
+
     return scon;
 
   }