diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArABBADecoder.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArABBADecoder.h
index a07a73a6cd4379b06e0661a1442201c4c4fc95be..955af6df000d6f44f95d568812273cc84097292c 100755
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArABBADecoder.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArABBADecoder.h
@@ -1,7 +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
 */
 
 #ifndef LARBYTESTREAM_LARABBADDECODER_H
@@ -42,12 +42,12 @@ public:
   virtual StatusCode finalize() override;
 
 
-  StatusCode convert(const RawEvent* re, LArDigitContainer* coll);
+  StatusCode convert(const RawEvent* re, LArDigitContainer* coll) const;
 
 private:
 
   void fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment* pROB,
-                      LArDigitContainer* coll);
+                      LArDigitContainer* coll) const;
 }; 
 
 #endif
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
index aeb63e3c5388366c64b4de9a4769b810784b3a7b..a59f302c84268ac64e217a1e6856dbb981662212 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARACCUMULATEDCDIGITCONTRAWEVENTCNV_H
@@ -10,31 +10,29 @@
 #include <stdint.h>
 #include <map>
 #include <string>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
-class StoreGateSvc; 
-class MsgStream; 
 class LArAccumulatedCalibDigitContainer; 
 class LArRawDataContByteStreamTool ; 
 class IROBDataProviderSvc; 
 class ByteStreamCnvSvc;
 
-/** This class is the coverter to read/write LArAccumulatedCalibDigitContainer from/to ByteStream
+/** This class is the converter to read/write LArAccumulatedCalibDigitContainer from/to ByteStream
    * @author W. Lampl, R. Lafaye
 */
 
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArAccumulatedCalibDigitContByteStreamCnv: public Converter {
+class LArAccumulatedCalibDigitContByteStreamCnv: public AthConstConverter {
 
 public:
   LArAccumulatedCalibDigitContByteStreamCnv(ISvcLocator* svcloc);
@@ -43,21 +41,18 @@ public:
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override; 
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-   MsgStream* m_log;
-   BYTESTREAMTOOL* m_tool ; 
-   ByteStreamCnvSvc* m_ByteStreamEventAccess;
-   IROBDataProviderSvc *m_rdpSvc;
-   StoreGateSvc* m_storeGate; 
+   ToolHandle<BYTESTREAMTOOL> m_tool;
+   ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
 };
 #endif
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
index 39cad9f5e7e481c29bde0b46acec26b7c42f73c0..3f6d76ebcf5898ba3311088a2f6d434aae17c84a 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArAccumulatedDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARACCUMULATEDDIGITCONTRAWEVENTCNV_H
@@ -10,32 +10,31 @@
 #include <stdint.h>
 #include <map>
 #include <string>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
 class StoreGateSvc; 
-class MsgStream; 
 class LArAccumulatedDigitContainer; 
 class LArRawDataContByteStreamTool ; 
 class IROBDataProviderSvc; 
 class ByteStreamCnvSvc;
 
-/** This class is the coverter to read/write LArAccumulatedDigitContainer from/to ByteStream
+/** This class is the converter to read/write LArAccumulatedDigitContainer from/to ByteStream
    * @author W. Lampl, R. Lafaye
 */
 
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArAccumulatedDigitContByteStreamCnv: public Converter {
-
+class LArAccumulatedDigitContByteStreamCnv: public AthConstConverter
+{
 public:
   LArAccumulatedDigitContByteStreamCnv(ISvcLocator* svcloc);
   virtual ~LArAccumulatedDigitContByteStreamCnv();
@@ -43,21 +42,18 @@ public:
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override; 
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-   MsgStream* m_log;
-   BYTESTREAMTOOL* m_tool ; 
-   ByteStreamCnvSvc* m_ByteStreamEventAccess;
-   IROBDataProviderSvc *m_rdpSvc;
-   StoreGateSvc* m_storeGate; 
+   ToolHandle<BYTESTREAMTOOL> m_tool ; 
+   ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
 };
 #endif
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
index ecf8d3aff477e90bae5cae99b24fa82fa464d040..55feb530de4ed5658d10c42c19beb8e1180e20cb 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArCalibDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARCALIBDIGITCONTRAWEVENTCNV_H
@@ -10,55 +10,50 @@
 #include <stdint.h>
 #include <map>
 #include <string>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
-class StoreGateSvc; 
-class MsgStream; 
 class LArCalibDigitContainer; 
 class LArRawDataContByteStreamTool ; 
 class IROBDataProviderSvc; 
 class ByteStreamCnvSvc;
 
-/** This class is the coverter to read/write LArCalibDigitContainer from/to ByteStream
+/** This class is the converter to read/write LArCalibDigitContainer from/to ByteStream
    * @author W. Lampl, R. Lafaye
 */
 
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArCalibDigitContByteStreamCnv: public Converter {
-  
+class LArCalibDigitContByteStreamCnv: public AthConstConverter
+{
 public:
   LArCalibDigitContByteStreamCnv(ISvcLocator* svcloc);
   virtual ~LArCalibDigitContByteStreamCnv();
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override; 
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-  MsgStream* m_log;
-  BYTESTREAMTOOL* m_tool ; 
-   //IByteStreamEventAccess* m_ByteStreamEventAccess; 
-  ByteStreamCnvSvc* m_ByteStreamEventAccess;
-//   ByteStreamInputSvc *m_inputSvc;
-  IROBDataProviderSvc *m_rdpSvc;
-  StoreGateSvc* m_storeGate; 
+  ToolHandle<BYTESTREAMTOOL> m_tool; 
+  ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
+  ServiceHandle<IByteStreamEventAccess> m_byteStreamEventAccess;
+  ByteStreamCnvSvc* m_byteStreamCnvSvc;
 };
 #endif
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
index ff08b2a11bff3fc4116c01edbd65a61be372a181..a3643556fa01489c9bfd667bde9008ee7489324f 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArDigitContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARDIGITCONTRAWEVENTCNV_H
@@ -10,18 +10,16 @@
 #include <stdint.h>
 #include <map>
 #include <string>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
-class StoreGateSvc; 
-class MsgStream; 
 class LArDigitContainer; 
 class LArRawDataContByteStreamTool ; 
 class IROBDataProviderSvc; 
@@ -35,8 +33,8 @@ class LArABBADecoder;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArDigitContByteStreamCnv: public Converter {
-
+class LArDigitContByteStreamCnv: public AthConstConverter
+{
 public: 
   LArDigitContByteStreamCnv(ISvcLocator* svcloc);
   virtual ~LArDigitContByteStreamCnv();
@@ -44,25 +42,20 @@ public:
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override; 
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-
-   MsgStream* m_log;
-   BYTESTREAMTOOL* m_tool ; 
-   LArABBADecoder* m_scTool;
-   ByteStreamCnvSvc* m_ByteStreamEventAccess; 
-   IROBDataProviderSvc *m_rdpSvc;
-   StoreGateSvc* m_storeGate; 
+  ToolHandle<BYTESTREAMTOOL> m_tool ; 
+  ToolHandle<LArABBADecoder> m_scTool;
+  ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
+  ServiceHandle<IByteStreamEventAccess> m_byteStreamEventAccess;
+  ByteStreamCnvSvc* m_byteStreamCnvSvc;
 };
 #endif
-
-
-
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
index 92f5e28ac4fcbef1d0bc533a38fa2e1c8e65cb2c..09b3d8d45a65567446799f51d516d2edb84651cc 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArFebHeaderContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_FEBHEADERCONTRAWEVENTCNV_H
@@ -10,50 +10,47 @@
 #include <stdint.h>
 #include <map>
 #include <string>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "ByteStreamCnvSvc/ByteStreamInputSvc.h"
-//#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
-class StoreGateSvc; 
-class MsgStream; 
 class LArFebHeaderContainer; 
 class LArRawDataContByteStreamTool ; 
 class IROBDataProviderSvc; 
 class ByteStreamCnvSvc;
 
-/** This class is the coverter to read/write LArFebHeaderContainer from/to ByteStream
+/** This class is the converter to read/write LArFebHeaderContainer from/to ByteStream
    * @author W. Lampl, R. Lafaye
 */
 
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArFebHeaderContByteStreamCnv: public Converter {
+class LArFebHeaderContByteStreamCnv: public AthConstConverter
+{
  public:
   LArFebHeaderContByteStreamCnv(ISvcLocator* svcloc);
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override;
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-   BYTESTREAMTOOL* m_tool ; 
-   ByteStreamCnvSvc* m_ByteStreamEventAccess;
-   IROBDataProviderSvc *m_rdpSvc;
-   StoreGateSvc* m_storeGate; 
+   ToolHandle<BYTESTREAMTOOL> m_tool; 
+   ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
 };
 #endif
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
index 968883644651a241b14997139eda4f3e767e89f0..281bac44bc52996cbe677cbfc827c3be68f7729d 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawChannelContByteStreamCnv.h
@@ -1,7 +1,7 @@
 //Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef LARBYTESTREAM_LARRAWCHANNELCONTRAWEVENTCNV_H
@@ -9,17 +9,16 @@
 
 #include <stdint.h>
 #include <map>
-#include "GaudiKernel/Converter.h"
+#include "AthenaBaseComps/AthConstConverter.h"
 #include "ByteStreamData/RawEvent.h" 
-#include "ByteStreamCnvSvcBase/ByteStreamAddress.h" 
-//#include "LArByteStream/Hid2RESrcID.h"
+#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/ServiceHandle.h"
 
 class DataObject;
 class StatusCode;
 class IAddressCreator;
 class IByteStreamEventAccess;
-class StoreGateSvc; 
-class MsgStream; 
 class LArRawChannelContainer; 
 class LArRawDataContByteStreamTool;
 class IROBDataProviderSvc;  
@@ -28,8 +27,8 @@ class ByteStreamCnvSvc;
 // Abstract factory to create the converter
 template <class TYPE> class CnvFactory;
 
-class LArRawChannelContByteStreamCnv: public Converter {
-
+class LArRawChannelContByteStreamCnv: public AthConstConverter
+{
  public:
   LArRawChannelContByteStreamCnv(ISvcLocator* svcloc);
   virtual ~LArRawChannelContByteStreamCnv();
@@ -37,24 +36,20 @@ class LArRawChannelContByteStreamCnv: public Converter {
 
   typedef LArRawDataContByteStreamTool  BYTESTREAMTOOL ; 
 
-  virtual StatusCode initialize();
-  virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj); 
-  virtual StatusCode createRep(DataObject* pObj, IOpaqueAddress*& pAddr);
+  virtual StatusCode initialize() override;
+  virtual StatusCode createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const override; 
+  virtual StatusCode createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const override;
 
   /// Storage type and class ID
-  virtual long repSvcType() const { return i_repSvcType(); }
+  virtual long repSvcType() const override { return i_repSvcType(); }
   static long storageType()     { return ByteStreamAddress::storageType(); }
   static const CLID& classID();
 
 private: 
-  MsgStream* m_log;
-  BYTESTREAMTOOL* m_tool; 
-  ByteStreamCnvSvc* m_ByteStreamEventAccess;
-  IROBDataProviderSvc *m_rdpSvc;
-  StoreGateSvc* m_storeGate; 
-  size_t m_contSize;
+  ToolHandle<BYTESTREAMTOOL> m_tool; 
+  ServiceHandle<IROBDataProviderSvc> m_rdpSvc;
+  ServiceHandle<IByteStreamEventAccess> m_byteStreamEventAccess;
+  ByteStreamCnvSvc* m_byteStreamCnvSvc;
+  mutable std::atomic<size_t> m_contSize;
 };
 #endif
-
-
-
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.h b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.h
index 7dbe8efe82dd1886ba048c92f432065e78963fce..879ad19c035f9fbe4d68af343537c6838569af49 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.h
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.h
@@ -44,23 +44,24 @@ class IByteStreamEventAccess;
       
 class LArRawDataContByteStreamTool: public AthAlgTool {
 public:
+  using FEA_t = FullEventAssembler<Hid2RESrcID>;
 
   /** Constructor
       Standard AlgTool constructor
   */
    LArRawDataContByteStreamTool( const std::string& type, const std::string& name,
-        const IInterface* parent ) ;
+                                 const IInterface* parent ) ;
 
   /** Destructor 
   */ 
-  ~LArRawDataContByteStreamTool() ;
+  virtual ~LArRawDataContByteStreamTool() ;
 
   /** AlgTool InterfaceID
   */
   static const InterfaceID& interfaceID( ) ;
 
-  virtual StatusCode initialize();
-  virtual StatusCode finalize();
+  virtual StatusCode initialize() override;
+  virtual StatusCode finalize() override;
 
   /** 
    * @brief Templated conversion class form Raw Event to a container
@@ -78,7 +79,7 @@ public:
    * are used to deal with the individual ROD fragments. 
   */
   template <class COLLECTION >
-  StatusCode convert(const RawEvent* re, COLLECTION* digit_cont, CaloGain::CaloGain gain);
+  StatusCode convert(const RawEvent* re, COLLECTION* digit_cont, CaloGain::CaloGain gain) const;
 
   /** 
    * @brief Fill channels from LArDigitContainer to a FullEvent
@@ -86,7 +87,8 @@ public:
    * @param fea Pointer to FullEventAssember (output)
    * @return Gaudi StatusCode 
    */
-  StatusCode WriteLArDigits(const LArDigitContainer* digit_cont, FullEventAssembler<Hid2RESrcID> *fea);
+  StatusCode WriteLArDigits(const LArDigitContainer* digit_cont,
+                            FEA_t& fea) const;
 
  /** 
   * @brief Fill channels from LArCalibDigitContainer to a FullEvent
@@ -94,7 +96,8 @@ public:
   * @param fea Pointer to FullEventAssember (output)
   * @return Gaudi StatusCode 
   */
-  StatusCode WriteLArCalibDigits(const LArCalibDigitContainer* digit_cont, FullEventAssembler<Hid2RESrcID> *fea);
+  StatusCode WriteLArCalibDigits(const LArCalibDigitContainer* digit_cont,
+                                 FEA_t& fea) const;
 
   /** 
    * @brief Fill channels from LArRawChannelContainer to a FullEvent
@@ -102,11 +105,14 @@ public:
    * @param fea Pointer to FullEventAssember (output)
    * @return Gaudi StatusCode 
    */
-  StatusCode WriteLArRawChannels(const LArRawChannelContainer* CannelCont, FullEventAssembler<Hid2RESrcID> *fea);
+  StatusCode WriteLArRawChannels(const LArRawChannelContainer* CannelCont,
+                                 FEA_t& fea) const;
  
 private: 
+  using RobIndex_t = std::map<eformat::SubDetectorGroup, std::vector<const uint32_t*> >;
+
   /** Prepare ROB index before conversion */
-  StatusCode prepareRobIndex (const RawEvent* event);
+  StatusCode prepareRobIndex (const RawEvent* event, RobIndex_t& robIndex) const;
  
   //StatusCode prepareWriting();
   /** 
@@ -115,7 +121,7 @@ private:
    * @return false if an incosistency is detected
    */
   template <class COLLECTION >
-    bool checkGainConsistency(const COLLECTION* coll);
+    bool checkGainConsistency(const COLLECTION* coll) const;
  
   Hid2RESrcID m_hid2re;       //!< Contains the mapping from channel to ROD
   LArRodDecoder *m_decoder;   //!< Pointer to RodDecoder class
@@ -143,10 +149,6 @@ private:
   bool m_initializeForWriting;
   uint16_t m_subDetId;
   double m_nfebsigma;
-  // map with ROB group (LAr) to rob addresses
-  std::map<eformat::SubDetectorGroup, std::vector<const uint32_t*> > m_robIndex;
-  // last event processed
-  uint32_t m_lastEvent;
   // want to process digits together with RawChannel
   bool m_includeDigits;
   // Name of Digit container to retrieve
diff --git a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.icc b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.icc
index 0995b390c8261588c168e53f9398d07c9d76c916..b0f9552b693ebe2447addc6822af2dacb2e974e5 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.icc
+++ b/LArCalorimeter/LArCnv/LArByteStream/LArByteStream/LArRawDataContByteStreamTool.icc
@@ -1,7 +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
 */
 
 #ifndef LARBYTESTREAM_LARRAWDATACONTBYTESTREAMTOOL_ICC
@@ -13,7 +13,7 @@
 
 
 template <class COLLECTION >
-bool LArRawDataContByteStreamTool::checkGainConsistency(const COLLECTION* coll)
+bool LArRawDataContByteStreamTool::checkGainConsistency(const COLLECTION* coll) const
 {typedef typename COLLECTION::const_iterator contIter;
  contIter it=coll->begin();
  contIter it_e=coll->end();
@@ -33,14 +33,15 @@ bool LArRawDataContByteStreamTool::checkGainConsistency(const COLLECTION* coll)
 // LArAccumulatedCalibDigit, LArAccumulatedDigit, LArCalibDigit, LArDigit,
 // LArFebHeader and LArRawChannel
 template <class COLLECTION >
-StatusCode LArRawDataContByteStreamTool::convert(const RawEvent* re, COLLECTION* coll, CaloGain::CaloGain gain)
-{ 
-	if (prepareRobIndex(re).isFailure()){
+StatusCode LArRawDataContByteStreamTool::convert(const RawEvent* re, COLLECTION* coll, CaloGain::CaloGain gain) const
+{
+        RobIndex_t robIndex;
+	if (prepareRobIndex(re, robIndex).isFailure()){
           ATH_MSG_ERROR ( "Error in prepareRobIndex " );
           return StatusCode::FAILURE;
 	}
-        std::map<eformat::SubDetectorGroup, std::vector<const uint32_t*> >::const_iterator it = m_robIndex.find(eformat::LAR);
-        if ( it != m_robIndex.end() ) {
+        RobIndex_t::const_iterator it = robIndex.find(eformat::LAR);
+        if ( it != robIndex.end() ) {
           const std::vector<const uint32_t*>& robs = (*it).second;
 	  std::vector<const uint32_t*>::const_iterator rob_add;
           for(rob_add = robs.begin(); rob_add!=robs.end();++rob_add){
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArABBADecoder.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArABBADecoder.cxx
index e6947dcf2eb4abfc90423ddb5b29e6e79239ae60..cb95918ffa415231a91eab2245fd47705f725d42 100755
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArABBADecoder.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArABBADecoder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArABBADecoder.h"
@@ -35,7 +35,8 @@ StatusCode LArABBADecoder::finalize() {
   return StatusCode::SUCCESS;
 }
 
-StatusCode LArABBADecoder::convert(const RawEvent* re, LArDigitContainer* coll) {
+StatusCode LArABBADecoder::convert(const RawEvent* re, LArDigitContainer* coll) const
+{
 
   bool ret=false;
   // Check fragment validity:
@@ -75,8 +76,8 @@ StatusCode LArABBADecoder::convert(const RawEvent* re, LArDigitContainer* coll)
 }
 
 
-void LArABBADecoder::fillCollection(const ROBFragment* robFrag, LArDigitContainer* coll) {
-
+void LArABBADecoder::fillCollection(const ROBFragment* robFrag, LArDigitContainer* coll) const
+{
   const CaloGain::CaloGain dummyGain=CaloGain::LARHIGHGAIN;
   LArDigit * scDigit=0 ;
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
index b071138fe8530e8ca3f8e8629d0e543c97cd5fcf..f7e3a8cac50e45ef81ababd39a891d2e5cbf0f91 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedCalibDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArAccumulatedCalibDigitContByteStreamCnv.h"
@@ -32,98 +32,54 @@
 
 
 LArAccumulatedCalibDigitContByteStreamCnv::LArAccumulatedCalibDigitContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(storageType(), classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  AthConstConverter(storageType(), classID(),svcloc,"LArAccumulatedCalibDigitContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_rdpSvc("ROBDataProviderSvc", name())
+{}
 
 const CLID& LArAccumulatedCalibDigitContByteStreamCnv::classID(){
   return ClassID_traits<LArAccumulatedCalibDigitContainer>::ID() ;
 }
 
 LArAccumulatedCalibDigitContByteStreamCnv::~LArAccumulatedCalibDigitContByteStreamCnv() {
-  if (m_log) 
-    delete m_log;
 }
 
 
 StatusCode
 LArAccumulatedCalibDigitContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-   m_log = new MsgStream(msgSvc(),"LArAccumulatedCalibDigitBSCnv");
-   IService* svc;
-  //Get ByteStreamCnvSvc
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      (*m_log) <<MSG::ERROR<< "  LArAccumulatedCalibDigitContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  //Get ByteStreamInputSvc (only necessary for reading of digits, not for writing and for channels)
-  
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    (*m_log) << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      (*m_log) <<MSG::ERROR<< "  LArAccumulatedCalibDigitContByteStreamCnv: Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
-  }
+  ATH_CHECK( AthConstConverter::initialize() );
 
-  // retrieve ToolSvc
-  IToolSvc* toolSvc;
-
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
 
-  //Get LArByteStreamTool
-  std::string toolType = "LArRawDataContByteStreamTool" ; 
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-  {
-    (*m_log) << MSG::ERROR << " Can't get LArRawDataByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
-  }
-
-  //Get StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  ATH_CHECK( m_tool.retrieve() );
 
+  return StatusCode::SUCCESS;
 }
 
 StatusCode
-LArAccumulatedCalibDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+LArAccumulatedCalibDigitContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const
 {//Convert Accumulated Calib Digits from ByteStream to StoreGate
-  MsgStream log(msgSvc(), "LArAccumulatedCalibDigitContByteStreamCnv");
-  (*m_log) << MSG::VERBOSE << "Executing CreateObj method for LArAccumulatedCalibDigitContainer " << endmsg;
+  ATH_MSG_VERBOSE(  "Executing CreateObj method for LArAccumulatedCalibDigitContainer " );
   
 
-  if (!m_rdpSvc)
-    {(*m_log) << MSG::ERROR << " ROBDataProviderSvc not loaded. Can't read ByteStream." << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!m_rdpSvc) {
+    ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
+    return StatusCode::FAILURE;
+  }
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
-  if (!pRE_Addr)
-    {(*m_log) << MSG::ERROR << "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!pRE_Addr) {
+    ATH_MSG_ERROR(  "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
+    return StatusCode::FAILURE;
+  }
 
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {(*m_log) << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR(  "Could not get raw event from ByteStreamInputSvc" );
+  }
   const std::string& key = *(pAddr->par()); // Get key used in the StoreGateSvc::retrieve function
   // get gain and pass to convert function.
   CaloGain::CaloGain gain=CaloGain::LARNGAIN; //At this place, LARNGAINS means Automatic gain.
@@ -135,11 +91,12 @@ LArAccumulatedCalibDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, Data
     gain=CaloGain::LARLOWGAIN;
 
   // Convert the RawEvent to  LArAccumulatedCalibDigitContainer
-  (*m_log) << MSG::DEBUG << "Converting LArAccumulatedCalibDigits (from ByteStream). key=" << key << " ,gain=" << gain << endmsg; 
+  ATH_MSG_DEBUG(  "Converting LArAccumulatedCalibDigits (from ByteStream). key=" << key << " ,gain=" << gain );
   LArAccumulatedCalibDigitContainer *DigitContainer=new LArAccumulatedCalibDigitContainer;
   StatusCode sc=m_tool->convert(re,DigitContainer,gain);
-  if (sc!=StatusCode::SUCCESS)
-    (*m_log) << MSG::WARNING << "Conversion tool returned an error. LArAccumulatedCalibDigitContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING(  "Conversion tool returned an error. LArAccumulatedCalibDigitContainer might be empty." );
+  }
   DigitContainer->setDelayScale(25./240.);  //FIXME should not be hardcoded! 
   pObj = SG::asStorable(DigitContainer) ;
 
@@ -148,9 +105,9 @@ LArAccumulatedCalibDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, Data
 
 // IWS 19.07.2005 
  StatusCode 
- LArAccumulatedCalibDigitContByteStreamCnv::createRep(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/) 
+ LArAccumulatedCalibDigitContByteStreamCnv::createRepConst(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/)  const
 {// convert LArAccumulatedCalibDigits from StoreGate into ByteStream
-  (*m_log) << MSG::ERROR << "CreateRep method of LArAccumulatedCalibDigitContainer not implemented" << endmsg;
+  ATH_MSG_ERROR( "CreateRep method of LArAccumulatedCalibDigitContainer not implemented" );
   return StatusCode::SUCCESS;
 }
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
index 562dfa424e0ef7b20a84542ba021ba506ff992ad..162656aaa1ff43dfa0cdf353711614ceebd2ba49 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArAccumulatedDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArAccumulatedDigitContByteStreamCnv.h"
@@ -32,98 +32,55 @@
 
 
 LArAccumulatedDigitContByteStreamCnv::LArAccumulatedDigitContByteStreamCnv(ISvcLocator* svcloc) :
-    Converter(storageType(), classID(),svcloc),m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  AthConstConverter(storageType(), classID(),svcloc,"LArAccumulatedDigitContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_rdpSvc("ROBDataProviderSvc", name())
+{}
 
 const CLID& LArAccumulatedDigitContByteStreamCnv::classID(){
   return ClassID_traits<LArAccumulatedDigitContainer>::ID() ;
 }
 
 LArAccumulatedDigitContByteStreamCnv::~LArAccumulatedDigitContByteStreamCnv() {
-  if (m_log) 
-    delete m_log;
 }
 
 
 StatusCode
 LArAccumulatedDigitContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-   m_log = new MsgStream(msgSvc(),"LArAccumulatedDigitBSCnv");
-   IService* svc;
-  //Get ByteStreamCnvSvc
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      (*m_log) <<MSG::ERROR<< "  LArAccumulatedDigitContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  //Get ByteStreamInputSvc (only necessary for reading of digits, not for writing and for channels)
-  
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    (*m_log) << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      (*m_log) <<MSG::ERROR<< "  LArAccumulatedDigitContByteStreamCnv: Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
-  }
-
-  // retrieve ToolSvc
-  IToolSvc* toolSvc;
+  ATH_CHECK( AthConstConverter::initialize() );
 
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
 
-  //Get LArByteStreamTool
-  std::string toolType = "LArRawDataContByteStreamTool" ; 
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-  {
-    (*m_log) << MSG::ERROR << " Can't get LArRawDataByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
-  }
+  ATH_CHECK( m_tool.retrieve() );
 
-  //Get StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  return StatusCode::SUCCESS;
 
 }
 
 StatusCode
-LArAccumulatedDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+LArAccumulatedDigitContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj)  const
 {//Convert Accumulated  Digits from ByteStream to StoreGate
-  MsgStream log(msgSvc(), "LArAccumulatedDigitContByteStreamCnv");
-  (*m_log) << MSG::VERBOSE << "Executing CreateObj method for LArAccumulatedDigitContainer " << endmsg;
-  
-
-  if (!m_rdpSvc)
-    {(*m_log) << MSG::ERROR << " ROBDataProviderSvc not loaded. Can't read ByteStream." << endmsg;
-     return StatusCode::FAILURE;
-    }
+  ATH_MSG_VERBOSE(  "Executing CreateObj method for LArAccumulatedDigitContainer ");
+
+  if (!m_rdpSvc) {
+    ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
+    return StatusCode::FAILURE;
+  }
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
-  if (!pRE_Addr)
-    {(*m_log) << MSG::ERROR << "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!pRE_Addr) {
+    ATH_MSG_ERROR( "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
+    return StatusCode::FAILURE;
+  }
 
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {(*m_log) << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR( "Could not get raw event from ByteStreamInputSvc" );
+    return StatusCode::FAILURE;
+  }
   const std::string& key = *(pAddr->par()); // Get key used in the StoreGateSvc::retrieve function
   // get gain and pass to convert function.
   CaloGain::CaloGain gain=CaloGain::LARNGAIN; //At this place, LARNGAINS means Automatic gain.
@@ -135,20 +92,21 @@ LArAccumulatedDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObjec
     gain=CaloGain::LARLOWGAIN;
 
   // Convert the RawEvent to  LArAccumulatedDigitContainer
-  (*m_log) << MSG::DEBUG << "Converting LArAccumulatedDigits (from ByteStream). key=" << key << " ,gain=" << gain << endmsg; 
+  ATH_MSG_DEBUG(  "Converting LArAccumulatedDigits (from ByteStream). key=" << key << " ,gain=" << gain );
   LArAccumulatedDigitContainer *DigitContainer=new LArAccumulatedDigitContainer(SG::VIEW_ELEMENTS);
   StatusCode sc=m_tool->convert(re,DigitContainer,gain);
-  if (sc!=StatusCode::SUCCESS)
-    (*m_log) << MSG::WARNING << "Conversion tool returned an error. LArAccumulatedDigitContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING( "Conversion tool returned an error. LArAccumulatedDigitContainer might be empty." );
+  }
   pObj = SG::asStorable(DigitContainer) ;
 
   return StatusCode::SUCCESS;
 }
 // IWS 19.07.2005 
  StatusCode 
- LArAccumulatedDigitContByteStreamCnv::createRep(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/) 
+ LArAccumulatedDigitContByteStreamCnv::createRepConst(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/)  const
 {// convert LArAccumulatedDigits from StoreGate into ByteStream
-  (*m_log) << MSG::ERROR << "CreateRep method of LArAccumulatedDigitContainer not implemented" << endmsg;
+  ATH_MSG_ERROR( "CreateRep method of LArAccumulatedDigitContainer not implemented" );
   return StatusCode::SUCCESS;
 }
 
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
index f86ce40b28a1c16a483a6d5a906cc2343503fa46..750f18aedca4702e262c1f9a5b96b72288009308 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArCalibDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArCalibDigitContByteStreamCnv.h"
@@ -11,18 +11,9 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" 
 #include "ByteStreamData/RawEvent.h" 
 
-#include "GaudiKernel/MsgStream.h"
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/DataObject.h"
-#include "GaudiKernel/IRegistry.h"
-
 #include "LArRawEvent/LArCalibDigitContainer.h"
 
-#include "StoreGate/StoreGateSvc.h"
-#include "AthenaKernel/CLASS_DEF.h"
-
-// Tool 
-#include "GaudiKernel/IToolSvc.h"
+#include "AthenaKernel/StorableConversions.h"
 
 //STL-Stuff
 #include <map> 
@@ -30,12 +21,14 @@
 
 
 LArCalibDigitContByteStreamCnv::LArCalibDigitContByteStreamCnv(ISvcLocator* svcloc) :
-    Converter(storageType(), classID(),svcloc),
-    m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL) {}
+  AthConstConverter(storageType(), classID(),svcloc,"LArCalibDigitContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_rdpSvc("ROBDataProviderSvc", name()),
+  m_byteStreamEventAccess("ByteStreamCnvSvc", name()),
+  m_byteStreamCnvSvc(nullptr)
+{}
 
 LArCalibDigitContByteStreamCnv::~LArCalibDigitContByteStreamCnv() {
- if (m_log) 
-    delete m_log;
 }
 
 const CLID& LArCalibDigitContByteStreamCnv::classID(){
@@ -46,81 +39,41 @@ const CLID& LArCalibDigitContByteStreamCnv::classID(){
 StatusCode
 LArCalibDigitContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-   m_log = new MsgStream(msgSvc(),"LArCalibDigitBSCnv");
-   (*m_log) << MSG::DEBUG<< " initialize " <<endmsg; 
-
-   IService* svc;
-  //Get ByteStreamCnvSvc
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      (*m_log) <<MSG::ERROR<< "  LArCalibDigitContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  //Get ByteStreamInputSvc (only necessary for reading of digits, not for writing and for channels)
-  
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    (*m_log) << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      (*m_log) <<MSG::ERROR<< "Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
-  }
+  ATH_CHECK( AthConstConverter::initialize() );
 
-  // retrieve ToolSvc
-  IToolSvc* toolSvc=0;
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  //Get LArByteStreamTool
-  std::string toolType = "LArRawDataContByteStreamTool" ; 
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-  {
-    (*m_log) << MSG::ERROR << " Can't get LArRawDataByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
+
+  ATH_CHECK( m_byteStreamEventAccess.retrieve() );
+  m_byteStreamCnvSvc = dynamic_cast<ByteStreamCnvSvc*>(&*m_byteStreamEventAccess);
+
+  ATH_CHECK( m_tool.retrieve() );
   
-  //Get StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  return StatusCode::SUCCESS;
 }
 
 StatusCode
-LArCalibDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+LArCalibDigitContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const
 {//Convert Digits from ByteStream to StoreGate
-  (*m_log) << MSG::VERBOSE << "Executing CreateObj method for LArCalibDigitContainer " << endmsg;
+  ATH_MSG_VERBOSE( "Executing CreateObj method for LArCalibDigitContainer " );
   
-  if (!m_rdpSvc)
-    {(*m_log) << MSG::ERROR << " ROBDataProviderSvc not loaded. Can't read ByteStream." << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!m_rdpSvc) {
+    ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
+    return StatusCode::FAILURE;
+  }
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
-  if (!pRE_Addr)
-    {(*m_log) << MSG::ERROR << "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" << endmsg;
-     return StatusCode::FAILURE;
-    }
-
+  if (!pRE_Addr) {
+    ATH_MSG_ERROR( "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
+    return StatusCode::FAILURE;
+  }
  
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {(*m_log) << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR( "Could not get raw event from ByteStreamInputSvc" );
+    return StatusCode::FAILURE;
+  }
   const std::string& key = *(pAddr->par()); // Get key used in the StoreGateSvc::retrieve function
   // get gain an pass to convert function.
   // get gain and pass to convert function.
@@ -132,57 +85,36 @@ LArCalibDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pO
   else if (key=="LOW")
     gain=CaloGain::LARLOWGAIN;
   // Convert the RawEvent to  LArCalibDigitContainer
-  (*m_log) << MSG::DEBUG << "Converting LArCalibDigits (from ByteStream). key=" << key << " ,gain=" << gain << endmsg;
+  ATH_MSG_DEBUG( "Converting LArCalibDigits (from ByteStream). key=" << key << " ,gain=" << gain );
  
   LArCalibDigitContainer *CalibDigitContainer=new LArCalibDigitContainer;
   StatusCode sc=m_tool->convert(re,CalibDigitContainer,gain);
-  if (sc!=StatusCode::SUCCESS)
-    (*m_log) << MSG::WARNING << "Conversion tool returned an error. LArCalibDigitContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING( "Conversion tool returned an error. LArCalibDigitContainer might be empty." );
+  }
     
   pObj = SG::asStorable(CalibDigitContainer) ;
   return StatusCode::SUCCESS;
 }
 
- StatusCode 
-LArCalibDigitContByteStreamCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr) 
+StatusCode 
+LArCalibDigitContByteStreamCnv::createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const
 {// convert LArDigits from StoreGate into ByteStream
-  (*m_log) << MSG::VERBOSE << "Execute CreateRep method of LArCalibDigitContainer " << endmsg;
-  StatusCode sc;
+  ATH_MSG_VERBOSE( "Execute CreateRep method of LArCalibDigitContainer " );
   // Get Full Event Assembler
   FullEventAssembler<Hid2RESrcID> *fea = 0;
-  std::string key("LAr");
-  sc=m_ByteStreamEventAccess->getFullEventAssembler(fea,key);
-  if (sc.isFailure())
-    {(*m_log) << MSG::ERROR << "Cannot get full event assember with key \"LAr\" from ByteStreamEventAccess." << endmsg;
-     return sc;
-    }
-
-  if (!fea->idMap().isInitialized())
-  {
-   sc = fea->idMap().initialize();
-   if (sc.isFailure())
-    {(*m_log) << MSG::ERROR << "Cannot initialize Hid2RESrcID " << endmsg;
-     return sc;
-    }
-  }
-
-
+  ATH_CHECK( m_byteStreamCnvSvc->getFullEventAssembler(fea,"LAr") );
 
   LArCalibDigitContainer* CalibDigitContainer=0;
-  ATH_CHECK( m_storeGate->fromStorable(pObj, CalibDigitContainer) );
-  if(!CalibDigitContainer){
-     (*m_log) << MSG::ERROR << "Cannot get LArCalibDigitContainer for DataObject. Key=" << pObj->registry()->name() << endmsg ;
-     return StatusCode::FAILURE;    
+  if (!SG::fromStorable (pObj, CalibDigitContainer) || !CalibDigitContainer) {
+    ATH_MSG_ERROR( "Cannot get LArCalibDigitContainer for DataObject. Key=" << pObj->registry()->name() );
+    return StatusCode::FAILURE;    
   }
-   std::string nm = pObj->registry()->name(); 
-   ByteStreamAddress* addr = new
-       ByteStreamAddress(classID(),nm,""); 
 
-   pAddr = addr; 
+  std::string nm = pObj->registry()->name(); 
+  pAddr = new ByteStreamAddress(classID(),nm,""); 
 
-   sc=m_tool->WriteLArCalibDigits(CalibDigitContainer, fea);
-   if (sc.isFailure())
-     return sc;
+  ATH_CHECK( m_tool->WriteLArCalibDigits(CalibDigitContainer, *fea) );
 
-   return StatusCode::SUCCESS;
+  return StatusCode::SUCCESS;
 }
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
index 4328971c37cbe58d675a826bca41f05cef2fdaef..3bfcf354cdbb8745247222c03af746150aa9536c 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArDigitContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArDigitContByteStreamCnv.h"
@@ -15,31 +15,26 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" 
 #include "ByteStreamData/RawEvent.h" 
 
-#include "GaudiKernel/MsgStream.h"
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/DataObject.h"
-#include "GaudiKernel/IRegistry.h"
-
-//#include "LArRawEvent/LArRawChannelContainer.h"
 #include "LArRawEvent/LArDigitContainer.h"
 
-#include "StoreGate/StoreGateSvc.h"
+#include "AthenaKernel/StorableConversions.h"
 #include "AthenaKernel/CLASS_DEF.h"
 
-// Tool 
-#include "GaudiKernel/IToolSvc.h"
-
 //STL-Stuff
 #include <map> 
 #include <iostream>
 
 
 LArDigitContByteStreamCnv::LArDigitContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(storageType(), classID(),svcloc), m_log(NULL),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  AthConstConverter(storageType(), classID(),svcloc,"LArDigitContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_scTool("LArABBADecoder"),
+  m_rdpSvc("ROBDataProviderSvc", name()),
+  m_byteStreamEventAccess("ByteStreamCnvSvc", name()),
+  m_byteStreamCnvSvc(nullptr)
+{}
     
 LArDigitContByteStreamCnv::~LArDigitContByteStreamCnv() {
- if (m_log) 
-    delete m_log;
 }
 
 const CLID& LArDigitContByteStreamCnv::classID(){
@@ -50,90 +45,42 @@ const CLID& LArDigitContByteStreamCnv::classID(){
 StatusCode
 LArDigitContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-   m_log = new MsgStream(msgSvc(),"LArDigitBSCnv");
-   (*m_log) << MSG::DEBUG<< " initialize " <<endmsg; 
-   IService* svc;
-  //Get ByteStreamCnvSvc
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      (*m_log) <<MSG::ERROR<< "  LArDigitContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  //Get ByteStreamInputSvc (only necessary for reading of digits, not for writing and for channels)
-  
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    (*m_log) << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      (*m_log) <<MSG::ERROR<< "  LArDigitContByteStreamCnv: Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
-  }
-
-  // retrieve ToolSvc
-  IToolSvc* toolSvc;
+  ATH_CHECK( AthConstConverter::initialize() );
 
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
 
-  //Get LArByteStreamTool
-  std::string toolType = "LArRawDataContByteStreamTool" ; 
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-  {
-    (*m_log) << MSG::ERROR << " Can't get LArRawDataByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  
-  //Get SuperCellTool
-  sc=toolSvc->retrieveTool("LArABBADecoder",m_scTool);
-  if (sc.isFailure()) {
-    (*m_log) << MSG::ERROR << "Can't get LArABBADecoder Tool" << endmsg;
-    return sc;
-  }
+  ATH_CHECK( m_byteStreamEventAccess.retrieve() );
+  m_byteStreamCnvSvc = dynamic_cast<ByteStreamCnvSvc*>(&*m_byteStreamEventAccess);
 
-  //Get StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  ATH_CHECK( m_tool.retrieve() );
+  ATH_CHECK( m_scTool.retrieve() );
 
+  return StatusCode::SUCCESS;
 }
 
 StatusCode
-LArDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+LArDigitContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj)  const
 {//Convert Digits from ByteStream to StoreGate
-  (*m_log) << MSG::VERBOSE << "Executing CreateObj method for LArDigitContainer " << endmsg;
+  ATH_MSG_VERBOSE( "Executing CreateObj method for LArDigitContainer " );
   
-
-  if (!m_rdpSvc)
-    {(*m_log) << MSG::ERROR << " ROBDataProviderSvc not loaded. Can't read ByteStream." << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!m_rdpSvc) {
+    ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
+    return StatusCode::FAILURE;
+  }
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
-  if (!pRE_Addr)
-    {(*m_log) << MSG::ERROR << "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!pRE_Addr) {
+    ATH_MSG_ERROR( "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
+    return StatusCode::FAILURE;
+  }
 
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {(*m_log) << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR( "Could not get raw event from ByteStreamInputSvc" );
+    return StatusCode::FAILURE;
+  }
   const std::string& key = *(pAddr->par()); // Get key used in the StoreGateSvc::retrieve function
   // get gain and pass to convert function.
   CaloGain::CaloGain gain=CaloGain::LARNGAIN; //At this place, LARNGAINS means Automatic gain.
@@ -148,7 +95,7 @@ LArDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
     isSC=true;
 
   // Convert the RawEvent to  LArDigitContainer
-  (*m_log) << MSG::DEBUG << "Converting LArDigits (from ByteStream). key=" << key << " ,gain=" << gain << endmsg; 
+  ATH_MSG_DEBUG( "Converting LArDigits (from ByteStream). key=" << key << " ,gain=" << gain );
   LArDigitContainer *DigitContainer=new LArDigitContainer;
   StatusCode sc;
   if (!isSC) {//Regular readout
@@ -157,58 +104,33 @@ LArDigitContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
   else { //Supercell readout
     sc=m_scTool->convert(re,DigitContainer);
   }
-  if (sc!=StatusCode::SUCCESS)
-    (*m_log) << MSG::WARNING << "Conversion tool returned an error. LArDigitContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING( "Conversion tool returned an error. LArDigitContainer might be empty." );
+  }
     
   pObj = SG::asStorable(DigitContainer) ;
 
   return StatusCode::SUCCESS;
 }
 
- StatusCode 
-LArDigitContByteStreamCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr) 
+StatusCode 
+LArDigitContByteStreamCnv::createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr)  const
 {// convert LArDigits from StoreGate into ByteStream
-  (*m_log) << MSG::VERBOSE << "Execute CreateRep method of LArDigitContainer " << endmsg;
-  StatusCode sc;
+  ATH_MSG_VERBOSE( "Execute CreateRep method of LArDigitContainer " );
 
-  // Get the already existing part of the RawEvent 
-  //RawEvent* re = m_ByteStreamEventAccess->getRawEvent();
   // Get Full Event Assembler
   FullEventAssembler<Hid2RESrcID> *fea = 0;
-  std::string key("LAr");
-  sc=m_ByteStreamEventAccess->getFullEventAssembler(fea,key);
-  if (sc.isFailure())
-    {(*m_log) << MSG::ERROR << "Cannot get full event assember with key \"LAr\" from ByteStreamEventAccess." << endmsg;
-     return sc;
-    }
-//  fea=new  FullEventAssembler<Hid2RESrcID>;
-  if (!fea->idMap().isInitialized()) 
-  {
-   sc = fea->idMap().initialize(); 
-   if (sc.isFailure())
-    {(*m_log) << MSG::ERROR << "Cannot initialize Hid2RESrcID " << endmsg;
-     return sc;
-    }
-  }
-  
+  ATH_CHECK( m_byteStreamCnvSvc->getFullEventAssembler(fea,"LAr") );
+
   LArDigitContainer* DigitContainer=0;
-  ATH_CHECK( m_storeGate->fromStorable(pObj, DigitContainer) );
-  if(!DigitContainer){
-     (*m_log) << MSG::ERROR << "Cannot get LArDigitContainer for DataObject. Key=" << pObj->registry()->name() << endmsg ;
-     return StatusCode::FAILURE;    
+  if (!SG::fromStorable (pObj, DigitContainer) || !DigitContainer) {
+    ATH_MSG_ERROR( "Cannot get LArDigitContainer for DataObject. Key=" << pObj->registry()->name() );
+    return StatusCode::FAILURE;    
   }
-   std::string nm = pObj->registry()->name(); 
-   ByteStreamAddress* addr = new
-       ByteStreamAddress(classID(),nm,""); 
-
-   pAddr = addr; 
-
-   //(*m_log) << MSG::VERBOSE << "Start conversion of LArDigitContainer requested. Writing channels and digits. " << endmsg;
-   //return m_tool->convert(ChannelContainer, DigitContainer, DigitContainerArray, re, log); 
-   sc=m_tool->WriteLArDigits(DigitContainer, fea);
-   if (sc.isFailure())
-     return sc;
-   //fea->fill(re,log);
-   //delete fea;
-   return StatusCode::SUCCESS;
+
+  std::string nm = pObj->registry()->name(); 
+  pAddr = new ByteStreamAddress(classID(),nm,""); 
+
+  ATH_CHECK( m_tool->WriteLArDigits(DigitContainer, *fea) );
+  return StatusCode::SUCCESS;
 }
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
index eed4ce7041c200c09ef713c29c24a178735573f6..3a9be59e28fb2b3c684a381cd1290b176d840f9c 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArFebHeaderContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArFebHeaderContByteStreamCnv.h"
@@ -13,27 +13,20 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" 
 #include "ByteStreamData/RawEvent.h" 
 
-#include "GaudiKernel/MsgStream.h"
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/DataObject.h"
-#include "GaudiKernel/IRegistry.h"
-
-//#include "LArRawEvent/LArRawChannelContainer.h"
 #include "LArRawEvent/LArFebHeaderContainer.h"
 
-#include "StoreGate/StoreGateSvc.h"
 #include "AthenaKernel/CLASS_DEF.h"
 
-// Tool 
-#include "GaudiKernel/IToolSvc.h"
-
 //STL-Stuff
 #include <map> 
 #include <iostream>
 
 
 LArFebHeaderContByteStreamCnv::LArFebHeaderContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(storageType(), classID(),svcloc),m_tool(NULL),m_ByteStreamEventAccess(NULL),m_rdpSvc(NULL),m_storeGate(NULL){}
+  AthConstConverter(storageType(), classID(),svcloc,"LArFebHeaderContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_rdpSvc("ROBDataProviderSvc", name())
+{}
 
 const CLID& LArFebHeaderContByteStreamCnv::classID(){
   return ClassID_traits<LArFebHeaderContainer>::ID() ;
@@ -43,99 +36,54 @@ const CLID& LArFebHeaderContByteStreamCnv::classID(){
 StatusCode
 LArFebHeaderContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-   MsgStream log(msgSvc(), "LArFebHeaderContByteStreamCnv");
-   log << MSG::DEBUG<< " initialize " <<endmsg; 
-   IService* svc;
-  //Get ByteStreamCnvSvc
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    log << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      log<<MSG::ERROR<< "  LArFebHeaderContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  //Get ByteStreamInputSvc (only necessary for reading of digits, not for writing and for channels)
-  
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    log << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      log<<MSG::ERROR<< "  LArFebHeaderContByteStreamCnv: Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
-  }
+  ATH_CHECK( AthConstConverter::initialize() );
 
-  // retrieve ToolSvc
-  IToolSvc* toolSvc;
-
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    log << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
-  }
-
-  //Get LArByteStreamTool
-  std::string toolType = "LArRawDataContByteStreamTool" ; 
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool(toolType,m_tool))
-  {
-    log << MSG::ERROR << " Can't get LArRawDataByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
 
-  //Get StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  ATH_CHECK( m_tool.retrieve() );
 
+  return StatusCode::SUCCESS;
 }
 
-StatusCode LArFebHeaderContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+
+StatusCode LArFebHeaderContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj)  const
 {//Convert Digits from ByteStream to StoreGate
-  MsgStream log(msgSvc(), "LArFebHeaderContByteStreamCnv");
-  log << MSG::VERBOSE << "Executing CreateObj method for LArFebHeaderContainer " << endmsg;
-  
-
-  if (!m_rdpSvc)
-    {log << MSG::ERROR << " ROBDataProviderSvc not loaded. Can't read ByteStream." << endmsg;
-     return StatusCode::FAILURE;
-    }
+  ATH_MSG_VERBOSE( "Executing CreateObj method for LArFebHeaderContainer " );
+
+  if (!m_rdpSvc) {
+    ATH_MSG_ERROR( " ROBDataProviderSvc not loaded. Can't read ByteStream." );
+    return StatusCode::FAILURE;
+  }
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); //Cast from OpaqueAddress to ByteStreamAddress
-  if (!pRE_Addr)
-    {log << MSG::ERROR << "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!pRE_Addr) {
+    ATH_MSG_ERROR( "dynamic_cast of OpaqueAdress to ByteStreamAddress failed!" );
+    return StatusCode::FAILURE;
+  }
 
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {log << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR( "Could not get raw event from ByteStreamInputSvc" );
+    return StatusCode::FAILURE;
+  }
 
   // Convert the RawEvent to  LArFebHeaderContainer
-  log << MSG::DEBUG << "Converting LArFebHeaders (from ByteStream)." << endmsg;
+  ATH_MSG_DEBUG( "Converting LArFebHeaders (from ByteStream)." );
   LArFebHeaderContainer *febHeaderContainer=new LArFebHeaderContainer;
   StatusCode sc=m_tool->convert(re,febHeaderContainer,(CaloGain::CaloGain)0);
-  if (sc!=StatusCode::SUCCESS)
-    log << MSG::WARNING << "Conversion tool returned an error. LArFebHeaderContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING( "Conversion tool returned an error. LArFebHeaderContainer might be empty." );
+  }
     
   pObj = SG::asStorable(febHeaderContainer) ;
 
   return StatusCode::SUCCESS;
 }
 
-StatusCode LArFebHeaderContByteStreamCnv::createRep(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/) 
+StatusCode LArFebHeaderContByteStreamCnv::createRepConst(DataObject* /*pObj*/, IOpaqueAddress*& /*pAddr*/)  const
 {// convert LArFebHeaders from StoreGate into ByteStream
-  MsgStream log(msgSvc(), "LArFebHeaderContByteStreamCnv");
-  log<< MSG::ERROR << "CreateRep method of LArFebHeaderContainer not implemented!" << endmsg;
+  ATH_MSG_ERROR( "CreateRep method of LArFebHeaderContainer not implemented!" );
   return StatusCode::SUCCESS;
 }
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
index f1139d9ba36e1c3f3335915cdf21416dfa3e2640..d702953edb1919604a4ec2d3829962d3d0956712 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawChannelContByteStreamCnv.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "LArByteStream/LArRawChannelContByteStreamCnv.h"
@@ -11,20 +11,11 @@
 #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" 
 #include "ByteStreamData/RawEvent.h" 
 
-#include "GaudiKernel/MsgStream.h"
-#include "GaudiKernel/StatusCode.h"
-#include "GaudiKernel/DataObject.h"
-#include "GaudiKernel/IRegistry.h"
-
 #include "LArRawEvent/LArRawChannelContainer.h"
 #include "LArRawEvent/LArDigitContainer.h"
 
-#include "StoreGate/StoreGateSvc.h"
 #include "AthenaKernel/CLASS_DEF.h"
 
-// Tool 
-#include "GaudiKernel/IToolSvc.h"
-
 //STL-Stuff
 #include <map> 
 #include <iostream>
@@ -32,8 +23,12 @@
 
 
 LArRawChannelContByteStreamCnv::LArRawChannelContByteStreamCnv(ISvcLocator* svcloc) :
-  Converter(storageType(), classID(),svcloc), m_log(NULL),
-  m_tool(NULL),m_ByteStreamEventAccess(0),m_rdpSvc(0),m_storeGate(0),m_contSize(0)
+  AthConstConverter(storageType(), classID(),svcloc,"LArRawChannelContByteStreamCnv"),
+  m_tool("LArRawDataContByteStreamTool"),
+  m_rdpSvc("ROBDataProviderSvc", name()),
+  m_byteStreamEventAccess("ByteStreamCnvSvc", name()),
+  m_byteStreamCnvSvc(nullptr),
+  m_contSize(0)
 {}
 
 const CLID& LArRawChannelContByteStreamCnv::classID(){
@@ -41,100 +36,60 @@ const CLID& LArRawChannelContByteStreamCnv::classID(){
 }
 
 LArRawChannelContByteStreamCnv::~LArRawChannelContByteStreamCnv() {
- if (m_log) 
-    delete m_log;
 }
 
 
 StatusCode
 LArRawChannelContByteStreamCnv::initialize()
 {
-   StatusCode sc = Converter::initialize(); 
-   if(StatusCode::SUCCESS!=sc) 
-   { 
-    return sc; 
-   } 
-    m_log = new MsgStream(msgSvc(),"LArRawChannelBSCnv");
-    (*m_log) << MSG::DEBUG<< " initialize " <<endmsg; 
+  ATH_CHECK( AthConstConverter::initialize() );
    
-  //Get ByteStreamCnvSvc
-   IService* svc;
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ByteStreamCnvSvc",svc)){
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamEventAccess interface " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  m_ByteStreamEventAccess=dynamic_cast<ByteStreamCnvSvc*>(svc);
-  if (m_ByteStreamEventAccess==NULL)
-    {
-      (*m_log) << MSG::ERROR<< "  LArDigitContByteStreamCnv: Can't cast to  ByteStreamCnvSvc " <<endmsg; 
-      return StatusCode::FAILURE ;
-    }
-
-  if(StatusCode::SUCCESS != serviceLocator()->getService("ROBDataProviderSvc",svc)){
-    (*m_log) << MSG::WARNING << " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " << endmsg;
-    m_rdpSvc=0;
-  }
-  else {
-    m_rdpSvc=dynamic_cast<IROBDataProviderSvc*>(svc);
-    if(m_rdpSvc == 0 ) {
-      (*m_log) <<MSG::ERROR<< "  LArDigitContByteStreamCnv: Can't cast to  ByteStreamInputSvc " <<endmsg; 
-      return StatusCode::FAILURE;
-    }
+  if ( m_rdpSvc.retrieve().isFailure()) {
+    ATH_MSG_WARNING(  " Can't get ByteStreamInputSvc interface Reading of ByteStream Data not possible. " );
   }
 
-  // retrieve ToolSvc
-  IToolSvc* toolSvc;
+  ATH_CHECK( m_byteStreamEventAccess.retrieve() );
+  m_byteStreamCnvSvc = dynamic_cast<ByteStreamCnvSvc*>(&*m_byteStreamEventAccess);
 
-  if(StatusCode::SUCCESS != service("ToolSvc",toolSvc)){
-    (*m_log) << MSG::ERROR << " Can't get ToolSvc " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  // retrieve ConversionTool
-  if(StatusCode::SUCCESS !=toolSvc->retrieveTool("LArRawDataContByteStreamTool",m_tool))
-  {
-    (*m_log) << MSG::ERROR << " Can't get ByteStreamTool " << endmsg;
-    return StatusCode::FAILURE;
-  }
-  //retrieve StoreGateSvc
-  return service("StoreGateSvc", m_storeGate); 
+  ATH_CHECK( m_tool.retrieve() );
 
+  return StatusCode::SUCCESS;
 }
 
 StatusCode
-LArRawChannelContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+LArRawChannelContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj)  const
 { //Convert RawChannels from ByteStream to StoreGate
-  //(*m_log) << MSG::VERBOSE << "Executing CreateObj method for LArRawChannelContainer " << endmsg;
     
   ByteStreamAddress *pRE_Addr;
   pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr); 
   if(!pRE_Addr) {
-    (*m_log) << MSG::ERROR << " Can not cast to ByteStreamAddress " << endmsg ; 
+    ATH_MSG_ERROR( " Can not cast to ByteStreamAddress " );
     return StatusCode::FAILURE;    
   }
   
   const RawEvent* re = m_rdpSvc->getEvent();
-  if (!re)
-    {(*m_log) << MSG::ERROR << "Could not get raw event from ByteStreamInputSvc" << endmsg;
-     return StatusCode::FAILURE;
-    }
+  if (!re) {
+    ATH_MSG_ERROR( "Could not get raw event from ByteStreamInputSvc" );
+    return StatusCode::FAILURE;
+  }
 
   // create LArRawChannelContainer
   LArRawChannelContainer* channelContainer = new LArRawChannelContainer() ;
   if (m_contSize) channelContainer->reserve(m_contSize);
 
   StatusCode sc=m_tool->convert(re,channelContainer,CaloGain::CaloGain(0)); //Gain is a dummy variable in this case...
-  if (sc!=StatusCode::SUCCESS)
-    (*m_log) << MSG::WARNING << "Conversion tool returned an error. LArRawChannelContainer might be empty." << endmsg;
+  if (sc!=StatusCode::SUCCESS) {
+    ATH_MSG_WARNING( "Conversion tool returned an error. LArRawChannelContainer might be empty." );
+  }
     
   pObj = StoreGateSvc::asStorable( channelContainer ) ; 
 
-  if (m_log->level()<=MSG::DEBUG) {
-    (*m_log) << MSG::DEBUG << "Created a LArRawChannelContainer of size" << channelContainer->size() << endmsg;
-  }
+  ATH_MSG_DEBUG( "Created a LArRawChannelContainer of size" << channelContainer->size() );
+
   if (!m_contSize) {
     m_contSize=channelContainer->size();
-    (*m_log) << MSG::DEBUG << "For the following events, we will reserve space for " 
-	     << m_contSize << " LArRawchannels" << endmsg;
+    ATH_MSG_DEBUG( "For the following events, we will reserve space for " 
+                   << m_contSize << " LArRawchannels" );
   }
     
   return StatusCode::SUCCESS;  
@@ -142,46 +97,24 @@ LArRawChannelContByteStreamCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pO
   
 }
 
- StatusCode 
-LArRawChannelContByteStreamCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr) 
+StatusCode 
+LArRawChannelContByteStreamCnv::createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const
 { // convert LArRawChannels in the container into ByteStream
-  //(*m_log) << MSG::VERBOSE << "Executing CreateRep method of LArRawChannelContainer" << endmsg;
-   StatusCode sc;
    
    // Get Full Event Assembler
-   FullEventAssembler<Hid2RESrcID> *fea = 0;
-   sc=m_ByteStreamEventAccess->getFullEventAssembler(fea,"LAr");
-   if (sc.isFailure())
-     {(*m_log) << MSG::ERROR << "Cannot get full event assember with key \"LAr\" from ByteStreamEventAccess." << endmsg;
-      return sc;
-     }
-   if (!fea->idMap().isInitialized())
-   {
-    sc = fea->idMap().initialize();
-    if (sc.isFailure())
-     {(*m_log) << MSG::ERROR << "Cannot initialize Hid2RESrcID " << endmsg;
-      return sc;
-     } 
-   }
-
-
-   LArRawChannelContainer* ChannelContainer=0; 
-   StoreGateSvc::fromStorable(pObj, ChannelContainer ); 
-   if(!ChannelContainer){
-    (*m_log) << MSG::ERROR << " Can not cast to LArRawChannelContainer " << endmsg ;
+  FullEventAssembler<Hid2RESrcID> *fea = 0;
+  ATH_CHECK( m_byteStreamCnvSvc->getFullEventAssembler(fea,"LAr") );
+
+  LArRawChannelContainer* ChannelContainer = nullptr;
+  if (!SG::fromStorable (pObj, ChannelContainer ) || !ChannelContainer) {
+    ATH_MSG_ERROR( " Can not cast to LArRawChannelContainer " );
     return StatusCode::FAILURE;    
-   } 
+  } 
 
-   const std::string& nm = pObj->registry()->name(); 
+  const std::string& nm = pObj->registry()->name(); 
 
-   ByteStreamAddress* addr = new
-       ByteStreamAddress(classID(),nm,""); 
+  pAddr = new  ByteStreamAddress(classID(),nm,""); 
 
-   pAddr = addr; 
-   sc=m_tool->WriteLArRawChannels(ChannelContainer,fea);
-   if (sc.isFailure())
-     return sc;
-   //fea->fill(re,log);
-   return StatusCode::SUCCESS;
-   
+  ATH_CHECK( m_tool->WriteLArRawChannels(ChannelContainer,*fea) );
+  return StatusCode::SUCCESS;
 }
diff --git a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawDataContByteStreamTool.cxx b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawDataContByteStreamTool.cxx
index c64b071b6b30ee96323cdc7c9266e5454a844609..17cbb683866e90ba9e2486bcb2ba349bb120be84 100644
--- a/LArCalorimeter/LArCnv/LArByteStream/src/LArRawDataContByteStreamTool.cxx
+++ b/LArCalorimeter/LArCnv/LArByteStream/src/LArRawDataContByteStreamTool.cxx
@@ -49,7 +49,6 @@ LArRawDataContByteStreamTool::LArRawDataContByteStreamTool
   declareProperty("IncludeDigits",m_includeDigits=false);
   declareProperty("DigitsContainer",m_DigitContName="LArDigitContainer_MC_Thinned");
   m_RodBlockStructure=NULL;
-  m_lastEvent = 0xFFFFFFFF;
 }
 
 LArRawDataContByteStreamTool::~LArRawDataContByteStreamTool() {
@@ -128,7 +127,10 @@ LArRawDataContByteStreamTool::finalize()
 }
 
 
-StatusCode LArRawDataContByteStreamTool::WriteLArDigits(const LArDigitContainer* digitCont, FullEventAssembler<Hid2RESrcID> *fea) {
+StatusCode
+LArRawDataContByteStreamTool::WriteLArDigits(const LArDigitContainer* digitCont,
+                                             FEA_t& fea) const
+{
  if (!m_initializeForWriting) {
    ATH_MSG_ERROR ( "Tool not setup for writing! Use property " 
                    << name()<<".InitializeForWriting" );
@@ -144,11 +146,11 @@ StatusCode LArRawDataContByteStreamTool::WriteLArDigits(const LArDigitContainer*
    return StatusCode::FAILURE;
  }
  //prepareWriting();
- fea->setRodMinorVersion(m_RodBlockVersion);
- fea->setDetEvtType(m_DSPRunMode);
+ fea.setRodMinorVersion(m_RodBlockVersion);
+ fea.setDetEvtType(m_DSPRunMode);
  ATH_MSG_DEBUG ( "Setting Detector Event Type to " << m_DSPRunMode 
                  << " and Minor Version Number to " << m_RodBlockVersion );
- FullEventAssembler<Hid2RESrcID>::RODDATA*  theROD;
+ FEA_t::RODDATA*  theROD;
  LArDigitContainer::const_iterator it_b=digitCont->begin();
  LArDigitContainer::const_iterator it_e=digitCont->end();
  if (it_b==it_e) {
@@ -197,20 +199,21 @@ StatusCode LArRawDataContByteStreamTool::WriteLArDigits(const LArDigitContainer*
  // LArRodEncoder has collected all the channels, now can fill the
  // ROD block data.
  for(; it!=it_end;++it) {
-   theROD  = fea->getRodData( (*it).first );
+   theROD  = fea.getRodData( (*it).first );
    ((*it).second).fillROD(*theROD,msg(), **noise, m_nfebsigma ) ; 
  } 
  ATH_MSG_DEBUG ( "Filled " << mapEncoder.size() << " Rod Blocks" );
  // Finally, fill full event
- //fea->fill(re,log); 
+ //fea.fill(re,log); 
  return StatusCode::SUCCESS;
 }
 
 
 
-StatusCode LArRawDataContByteStreamTool::WriteLArCalibDigits(const LArCalibDigitContainer* digitCont, 
-							     FullEventAssembler<Hid2RESrcID> *fea) {
-
+StatusCode
+LArRawDataContByteStreamTool::WriteLArCalibDigits(const LArCalibDigitContainer* digitCont, 
+                                                  FEA_t& fea) const
+{
  if (!m_initializeForWriting) {
    ATH_MSG_ERROR ( "Tool not setup for writing! Use property " 
                    << name()<<".InitializeForWriting" );
@@ -226,11 +229,11 @@ StatusCode LArRawDataContByteStreamTool::WriteLArCalibDigits(const LArCalibDigit
    return StatusCode::FAILURE;
  }
  //prepareWriting(); 
- fea->setRodMinorVersion(m_RodBlockVersion);
- fea->setDetEvtType(m_DSPRunMode);
+ fea.setRodMinorVersion(m_RodBlockVersion);
+ fea.setDetEvtType(m_DSPRunMode);
  ATH_MSG_DEBUG ( "Setting Detector Event Type to " << m_DSPRunMode 
                  << "and Minor Version Number to " << m_RodBlockVersion );
- FullEventAssembler<Hid2RESrcID>::RODDATA*  theROD;
+ FEA_t::RODDATA*  theROD;
  LArCalibDigitContainer::const_iterator it_b=digitCont->begin();
  LArCalibDigitContainer::const_iterator it_e=digitCont->end();
  if (it_b==it_e) {
@@ -266,7 +269,7 @@ StatusCode LArRawDataContByteStreamTool::WriteLArCalibDigits(const LArCalibDigit
  // LArRodEncoder has collected all the channels, now can fill the
  // ROD block data.
  for(; it!=it_end;++it) {
-   theROD  = fea->getRodData( (*it).first ); 
+   theROD  = fea.getRodData( (*it).first ); 
    ((*it).second).fillROD( *theROD,msg(), **noise, m_nfebsigma ) ; 
  } 
  ATH_MSG_DEBUG ( "Filled " << mapEncoder.size() << " Rod Blocks" );
@@ -274,8 +277,10 @@ StatusCode LArRawDataContByteStreamTool::WriteLArCalibDigits(const LArCalibDigit
 }
 
 
-StatusCode LArRawDataContByteStreamTool::WriteLArRawChannels(const LArRawChannelContainer* channelCont, 
-							     FullEventAssembler<Hid2RESrcID> *fea) {
+StatusCode
+LArRawDataContByteStreamTool::WriteLArRawChannels(const LArRawChannelContainer* channelCont, 
+                                                  FEA_t& fea) const
+{
  if (!m_initializeForWriting) {
    ATH_MSG_ERROR ( "Tool not setup for writing! Use property " 
                    << name()<<".InitializeForWriting" );
@@ -289,9 +294,9 @@ StatusCode LArRawDataContByteStreamTool::WriteLArRawChannels(const LArRawChannel
    ATH_MSG_DEBUG ( "This instance of LArRodBlockStructure can't hold LArRawChannels!" );
     return StatusCode::FAILURE;
  }
- FullEventAssembler<Hid2RESrcID>::RODDATA*  theROD;
- fea->setRodMinorVersion(m_RodBlockVersion);
- fea->setDetEvtType(m_DSPRunMode);
+ FEA_t::RODDATA*  theROD;
+ fea.setRodMinorVersion(m_RodBlockVersion);
+ fea.setDetEvtType(m_DSPRunMode);
  ATH_MSG_DEBUG ( "Setting Detector Event Type to " << m_DSPRunMode 
                  << "and Minor Version Number to " << m_RodBlockVersion );
  LArRawChannelContainer::const_iterator it = channelCont->begin(); 
@@ -353,7 +358,7 @@ StatusCode LArRawDataContByteStreamTool::WriteLArRawChannels(const LArRawChannel
  // LArRodEncoder has collected all the channels, now can fill the
  // ROD block data.
  for(; it_m!=it_m_e;++it_m) {
-   theROD  = fea->getRodData( (*it_m).first ); 
+   theROD  = fea.getRodData( (*it_m).first ); 
    ((*it_m).second).fillROD( *theROD,msg(), **noise, m_nfebsigma ) ; 
    // delete ((*it_m).second);
    // ((*it_m).second)=NULL;
@@ -363,15 +368,14 @@ StatusCode LArRawDataContByteStreamTool::WriteLArRawChannels(const LArRawChannel
 }
 
  
-StatusCode LArRawDataContByteStreamTool::prepareRobIndex(const RawEvent* re)
+StatusCode
+LArRawDataContByteStreamTool::prepareRobIndex(const RawEvent* re,
+                                              RobIndex_t& robIndex) const
 {
   // This `optimization' leads to disaster if there ever happen to be
   // two adjacent events with identical L1 IDs --- in that case,
   // we'd be using the dangling ROB pointers from the last event.
-  // We should generally come through here only once per event anyway,
-  // so just remove this test.
-if ( 1/*re->lvl1_id() != m_lastEvent*/ ) {
-  m_lastEvent = re->lvl1_id();
+  // We should generally come through here only once per event anyway.
   ATH_MSG_DEBUG( "Converting event (from ByteStream)" );
 
   if (!re) {
@@ -386,11 +390,10 @@ if ( 1/*re->lvl1_id() != m_lastEvent*/ ) {
   ATH_MSG_VERBOSE ("Fragment size in words: " << re->fragment_size_word() );
 
   // Need to clear up or it will accumulate
-  m_robIndex.clear();
-  eformat::helper::build_toc(*re, m_robIndex );
-  if ( m_robIndex.empty() ) { // This is a problem
+  robIndex.clear();
+  eformat::helper::build_toc(*re, robIndex );
+  if ( robIndex.empty() ) { // This is a problem
 	return StatusCode::FAILURE;
   }
-  }
   return StatusCode::SUCCESS;
 }