diff --git a/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/BCM_RawDataByteStreamCnv/BCM_RawDataProvider.h b/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/BCM_RawDataByteStreamCnv/BCM_RawDataProvider.h
index f65f1fb696bf7986bdc266c3928c5284a8d34172..24711286e298554010d5a38d3bc0a57837c2c7a3 100644
--- a/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/BCM_RawDataByteStreamCnv/BCM_RawDataProvider.h
+++ b/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/BCM_RawDataByteStreamCnv/BCM_RawDataProvider.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -9,7 +9,9 @@
 #ifndef BCM_RAWDATABYTESTREAMCNV_BCM_RAWDATAPROVIDER_H
 #define BCM_RAWDATABYTESTREAMCNV_BCM_RAWDATAPROVIDER_H
 
+#include "InDetBCM_RawData/BCM_RDO_Container.h"
 #include "AthenaBaseComps/AthAlgorithm.h"
+#include "StoreGate/WriteHandleKey.h"
 #include "GaudiKernel/ServiceHandle.h"
 #include "GaudiKernel/ToolHandle.h"
 
@@ -24,23 +26,24 @@ public:
   BCM_RawDataProvider(const std::string &name, ISvcLocator *pSvcLocator);
 
   //! Initialize
-  virtual StatusCode initialize();
+  virtual StatusCode initialize() override;
 
   //! Execute
-  virtual StatusCode execute();
+  virtual StatusCode execute() override;
 
   //! Finalize
-  virtual StatusCode finalize()
+  virtual StatusCode finalize() override
     { return StatusCode::SUCCESS; }
 
   //! Destructor
-  ~BCM_RawDataProvider();
+  virtual ~BCM_RawDataProvider();
 
 private:
 
   ServiceHandle<IROBDataProviderSvc>   m_robDataProvider;
   ToolHandle<BCM_RawDataProviderTool>  m_rawDataTool;
-  std::string                          m_RDO_Key;
+  SG::WriteHandleKey<BCM_RDO_Container> m_RDO_Key
+  { this, "RDOKey", "BDM_RDOs", "" };
 };
 
 #endif
diff --git a/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/src/BCM_RawDataProvider.cxx b/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/src/BCM_RawDataProvider.cxx
index 4d0e686abe16f9929048cf1e91f889ae45c784f6..b0a77102748bd1f8d70cb5e8abccd41a02af049d 100644
--- a/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/src/BCM_RawDataProvider.cxx
+++ b/InnerDetector/InDetEventCnv/BCM_RawDataByteStreamCnv/src/BCM_RawDataProvider.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -29,7 +29,6 @@ BCM_RawDataProvider::BCM_RawDataProvider(const std::string& name, ISvcLocator* p
   m_robDataProvider ("ROBDataProviderSvc",name),
   m_rawDataTool     ("BCM_RawDataProviderTool")
 {
-  declareProperty ("RDOKey"      , m_RDO_Key = "BCM_RDOs");
   declareProperty ("ProviderTool", m_rawDataTool);
 }
 
@@ -59,6 +58,8 @@ StatusCode BCM_RawDataProvider::initialize() {
     return StatusCode::FAILURE;
   } else
     if (msgLvl(MSG::INFO)) msg(MSG::INFO) << "Retrieved service " << m_rawDataTool << endmsg;
+
+  ATH_CHECK( m_RDO_Key.initialize() );
  
   return StatusCode::SUCCESS;
 }
@@ -69,11 +70,7 @@ StatusCode BCM_RawDataProvider::initialize() {
 StatusCode BCM_RawDataProvider::execute() {
 
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Create BCM RDO Container" << endmsg;
-  BCM_RDO_Container *container = new BCM_RDO_Container();
-  if (evtStore()->record(container, m_RDO_Key).isFailure()) {
-    if (msgLvl(MSG::FATAL)) msg(MSG::FATAL) << "Unable to record BCM RDO Container" << endmsg;
-    return StatusCode::FAILURE;
-  }
+  auto container = std::make_unique<BCM_RDO_Container>();
 
   // ask ROBDataProviderSvc for the vector of ROBFragment for all BCM ROBIDs
   // std::vector<const ROBFragment*> listOfRobf_all;
@@ -113,11 +110,13 @@ StatusCode BCM_RawDataProvider::execute() {
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Number of ROB fragments is " << listOfRobf.size() << endmsg;
 
   // ask BCM_RawDataProviderTool to decode it and to fill the container
-  if (m_rawDataTool->convert(listOfRobf,container).isFailure())
+  if (m_rawDataTool->convert(listOfRobf,container.get()).isFailure())
     if (msgLvl(MSG::ERROR)) msg(MSG::ERROR) << "BS conversion into RDOs failed" << endmsg;
 
   if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Number of collections in container is " << container->size() << endmsg;
 
+  ATH_CHECK( SG::makeHandle (m_RDO_Key).record (std::move (container)) );
+
   return StatusCode::SUCCESS;
 }