diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonPrepRawData/MMPrepDataContainerCnv_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonPrepRawData/MMPrepDataContainerCnv_p1.h
index 90a066e69e8ee3c5f619764e4155bb94361a3e30..02a81c18cbcb9a695735264641112d18aaee45f0 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonPrepRawData/MMPrepDataContainerCnv_p1.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonPrepRawData/MMPrepDataContainerCnv_p1.h
@@ -11,7 +11,7 @@
 
 #include "MuonEventTPCnv/MuonPrepRawData/MuonPRD_Container_p2.h"
 
-#include "MuonEventTPCnv/CreateTransientTemplates.h"
+
 #include <iostream>
 
 class StoreGateSvc;
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawDataContainerCnv_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawDataContainerCnv_p1.h
index 22691cffe5c085d2a98fa9db97181bab749c108a..f1ecdd97e6091bdb2a3c937c85f9d9038207ed9c 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawDataContainerCnv_p1.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawDataContainerCnv_p1.h
@@ -22,10 +22,10 @@ namespace Muon{
 
       virtual void	persToTrans(const Muon::MM_RawDataContainer_p1* persCont,
           Muon::MM_RawDataContainer* transCont,
-          MsgStream &log) override;
+          MsgStream &log) ;
       virtual void	transToPers(const Muon::MM_RawDataContainer* transCont,
           Muon::MM_RawDataContainer_p1* persCont,
-          MsgStream &log) override;
+          MsgStream &log) ;
 
       virtual Muon::MM_RawDataContainer* createTransient(const Muon::MM_RawDataContainer_p1* persObj, MsgStream& log) override final;    
     
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawData_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawData_p1.h
index d12392da63b36991be7d3ba4faf79aef713b66fd..dd0bce370bfe59fee03dbab5cf70df24f82e8752 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawData_p1.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/MM_RawData_p1.h
@@ -8,13 +8,21 @@
 
 namespace Muon
 {
-    class MM_RawData_p1
-    {
-    public:
-        MM_RawData_p1() : m_id(0) {}
-                
-        unsigned int        m_id; //!< FIXME! Remove this eventually
-    };
+  class MM_RawData_p1
+  {
+  public:
+  MM_RawData_p1() : m_id(0), m_channel(0), m_time(0), m_charge(0) {}
+    
+    unsigned int        m_id; //!< FIXME! Remove this eventually
+    
+    /// writing out channel id, time and charge
+    unsigned int m_channel;
+    
+    unsigned int m_time;
+    
+    unsigned int m_charge;
+    
+  };
 }
 
 #endif 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawDataContainerCnv_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawDataContainerCnv_p1.h
index 01325a1c254f19615b5e060965cdb0d1a381ec89..56504a7c2bb80c95398a327a34cead396e939942 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawDataContainerCnv_p1.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawDataContainerCnv_p1.h
@@ -14,12 +14,6 @@
 
 class sTgcIdHelper;
 
-namespace TPCnv {
-  template<> class CreateTransient< Muon::STGC_RawDataContainer > {
-    public: static std::unique_ptr< Muon::STGC_RawDataContainer > create() { return nullptr;}
-  };
-}
-
 namespace Muon{
   class STGC_RawDataContainerCnv_p1 : public T_AthenaPoolTPCnvBase<Muon::STGC_RawDataContainer, Muon::STGC_RawDataContainer_p1>
   {
@@ -28,10 +22,10 @@ namespace Muon{
 
       virtual void	persToTrans(const Muon::STGC_RawDataContainer_p1* persCont,
           Muon::STGC_RawDataContainer* transCont,
-          MsgStream &log) override;
+          MsgStream &log) ;
       virtual void	transToPers(const Muon::STGC_RawDataContainer* transCont,
           Muon::STGC_RawDataContainer_p1* persCont,
-          MsgStream &log) override;
+          MsgStream &log) ;
 
       virtual Muon::STGC_RawDataContainer* createTransient(const Muon::STGC_RawDataContainer_p1* persObj, MsgStream& log) override final;    
     
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawData_p1.h b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawData_p1.h
index 5504cada1b9e255daa7535ba52a16288c0ac9e73..f7916f94c2003483097dc3a5a271a64017495505 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawData_p1.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/MuonEventTPCnv/MuonRDO/STGC_RawData_p1.h
@@ -11,9 +11,18 @@ namespace Muon
     class STGC_RawData_p1
     {
     public:
-        STGC_RawData_p1() : m_id(0) {}
+    STGC_RawData_p1() : m_id(0), m_time(0), m_charge(0), m_bcTag(0), m_isDead(false) {}
                 
         unsigned int        m_id; //!< FIXME! Remove this eventually
+
+	float m_time;
+
+	float m_charge;
+
+	uint16_t m_bcTag;
+
+	bool m_isDead;
+
     };
 }
 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/MMPrepDataContainerCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/MMPrepDataContainerCnv_p1.cxx
index ed730658a5ff6ec24dcf9449179c865ccad18f50..e30e88040da7915cef50dda40c620bb4cac472be 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/MMPrepDataContainerCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/MMPrepDataContainerCnv_p1.cxx
@@ -15,10 +15,13 @@
 // Gaudi
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/Bootstrap.h"
+// #include "GaudiKernel/CnvFactory.h"
+// #include "GaudiKernel/StatusCode.h"
+// #include "GaudiKernel/Service.h"
 
 // Athena
 #include "StoreGate/StoreGateSvc.h"
-#include "MuonEventTPCnv/CreateTransientTemplates.h"
+
 
 StatusCode Muon::MMPrepDataContainerCnv_p1::initialize(MsgStream &log) {
    // Do not initialize again:
@@ -243,7 +246,7 @@ void  Muon::MMPrepDataContainerCnv_p1::persToTrans(const Muon::MMPrepDataContain
       // int result = m_MMId->get_detectorElement_hash(chan->identify(), deIDHash);
       // if (result&&log.level() <= MSG::WARNING) 
       //   log << MSG::WARNING<< " Muon::MMPrepDataContainerCnv_p1::persToTrans: problem converting Identifier to DE hash "<<endmsg;
-          // chan->m_detEl = m_muonDetMgr->getMMReadoutElement(deIDHash);
+          // chan->m_detEl = m_muonDetMgr->getMMReadoutElement(deIDHash);;
       log << MSG::DEBUG<<"chan identify(): "<<chan->identify()<<endmsg;
 
       chan->setHashAndIndex(collIDHash, chanIndex); 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/sTgcPrepDataContainerCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/sTgcPrepDataContainerCnv_p1.cxx
index 97489f754b549dc0dae092d8f952df6c73971e8f..29bbf3db79e893bd426e1fa4d06280a58637783d 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/sTgcPrepDataContainerCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonPrepRawData/sTgcPrepDataContainerCnv_p1.cxx
@@ -15,10 +15,13 @@
 // Gaudi
 #include "GaudiKernel/ISvcLocator.h"
 #include "GaudiKernel/Bootstrap.h"
+// #include "GaudiKernel/CnvFactory.h"
+// #include "GaudiKernel/StatusCode.h"
+// #include "GaudiKernel/Service.h"
 
 // Athena
 #include "StoreGate/StoreGateSvc.h"
-#include "MuonEventTPCnv/CreateTransientTemplates.h"
+
 
 StatusCode Muon::sTgcPrepDataContainerCnv_p1::initialize(MsgStream &log) {
    // Do not initialize again:
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataCnv_p1.cxx
index 11cc296aff29c1a3527d4450545cdb09f09b1f4d..ae0af68ab3dc076b6460999619936f9291e7713d 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataCnv_p1.cxx
@@ -11,11 +11,18 @@ void Muon::MM_RawDataCnv_p1::persToTrans( const Muon::MM_RawData_p1 *, Muon::MM_
 void Muon::MM_RawDataCnv_p1::transToPers( const Muon::MM_RawData *transObj, Muon::MM_RawData_p1 *persObj, MsgStream & /**log*/ )
 {
   persObj->m_id = transObj->m_id.get_identifier32().get_compact();
+  persObj->m_channel = transObj->channel();
+  persObj->m_time = transObj->time();
+  persObj->m_charge = transObj->charge();
 }
 
 Muon::MM_RawData* Muon::MM_RawDataCnv_p1::createTransient(const Muon::MM_RawData_p1* persObj, MsgStream& /**log*/)
 {
-    Muon::MM_RawData*  trans = new MM_RawData( Identifier (persObj->m_id) );
-    return trans;
+  Muon::MM_RawData*  trans = new MM_RawData( Identifier (persObj->m_id),
+					     persObj->m_channel,
+					     persObj->m_time, 
+					     persObj->m_charge );
+  
+  return trans;
 }
 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataContainerCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataContainerCnv_p1.cxx
index e58c72a3aef687b832125f92011bc9ab6bb10726..d9bab01dc75b9e7fbb05736166f3ce467037ac6e 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataContainerCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/MM_RawDataContainerCnv_p1.cxx
@@ -6,7 +6,6 @@
 #include "MuonRDO/MM_RawDataContainer.h"
 #include "MuonEventTPCnv/MuonRDO/MM_RawDataContainer_p1.h"
 #include "MuonIdHelpers/MmIdHelper.h"
-#include "MuonEventTPCnv/CreateTransientTemplates.h"
 
 #define DEBUG 0
 
@@ -35,13 +34,20 @@ void Muon::MM_RawDataContainerCnv_p1::transToPers(const Muon::MM_RawDataContaine
 
 void  Muon::MM_RawDataContainerCnv_p1::persToTrans(const Muon::MM_RawDataContainer_p1* persCont, Muon::MM_RawDataContainer* transCont, MsgStream &log) 
 {
+
   size_t numColl = persCont->size();
+
   if (DEBUG) log<<MSG::VERBOSE<<"MM_RawDataContainerCnv_p1::persToTrans with MM_RawDataContainer_p1 with this many collections "<<numColl<<std::endl;
     
   MM_RawDataCollection* coll = nullptr;
   for ( const MM_RawDataCollection_p1 collection : *persCont){
+
     coll = new MM_RawDataCollection(collection.m_idHash);
-    transCont->addCollection(coll,collection.m_idHash);
+    if ( transCont->addCollection(coll,collection.m_idHash).isFailure() ) {
+      log << MSG::WARNING << "Could not add the MM RDO collection during persistent -> transient conversion" << std::endl;
+      return;
+    }
+
     if (DEBUG) log<<MSG::VERBOSE<<"Have created empty transient collection, now looping over persistent coll with this many entries: "<<collection.size() <<std::endl;
     
     for ( unsigned int j=0 ; j < collection.size() ; ++j ){
@@ -59,7 +65,7 @@ void  Muon::MM_RawDataContainerCnv_p1::persToTrans(const Muon::MM_RawDataContain
 //================================================================
 Muon::MM_RawDataContainer* Muon::MM_RawDataContainerCnv_p1::createTransient(const Muon::MM_RawDataContainer_p1* persObj, MsgStream& log) 
 {
-  std::unique_ptr<MM_RawDataContainer> trans(new Muon::MM_RawDataContainer(m_idHelper->module_hash_max())); // FIXME This seems to give a ridiculously large number. Maybe I need to call something else?
+  std::unique_ptr<MM_RawDataContainer> trans(new Muon::MM_RawDataContainer(m_idHelper->module_hash_max())); 
   if (DEBUG) log<<MSG::VERBOSE<<"MM_RawDataContainerCnv_p1::createTransient() Created new MM_RawDataContainer with this many collections "<<trans->numberOfCollections()<<std::endl;
   
   persToTrans(persObj, trans.get(), log);
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataCnv_p1.cxx
index 4f2bd0b79f31c44a4fa8c99bed1d24f8388e277d..bc1a78105411bbd72ce85213d09bb5f5e09a9f87 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataCnv_p1.cxx
@@ -11,11 +11,20 @@ void Muon::STGC_RawDataCnv_p1::persToTrans( const Muon::STGC_RawData_p1 *, Muon:
 void Muon::STGC_RawDataCnv_p1::transToPers( const Muon::STGC_RawData *transObj, Muon::STGC_RawData_p1 *persObj, MsgStream & /**log*/ )
 {
   persObj->m_id = transObj->m_id.get_identifier32().get_compact();
+  persObj->m_bcTag = transObj->bcTag();
+  persObj->m_time = transObj->time();
+  persObj->m_charge = transObj->charge();
+  persObj->m_isDead = transObj->isDead();
 }
 
 Muon::STGC_RawData* Muon::STGC_RawDataCnv_p1::createTransient(const Muon::STGC_RawData_p1* persObj, MsgStream& /**log*/)
 {
-    Muon::STGC_RawData*  trans = new STGC_RawData( Identifier (persObj->m_id) );
-    return trans;
+  Muon::STGC_RawData*  trans = new STGC_RawData( Identifier (persObj->m_id),
+						 persObj->m_bcTag,
+						 persObj->m_time,
+						 persObj->m_charge, 
+						 persObj->m_isDead);
+ 
+  return trans;
 }
 
diff --git a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataContainerCnv_p1.cxx b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataContainerCnv_p1.cxx
index a0ddbdb08c57e7958ce5f5ae34abff92afc143be..ece37a850d4f8056067d99163ceb83c21c47e545 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataContainerCnv_p1.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonEventTPCnv/src/MuonRDO/STGC_RawDataContainerCnv_p1.cxx
@@ -6,7 +6,6 @@
 #include "MuonRDO/STGC_RawDataContainer.h"
 #include "MuonEventTPCnv/MuonRDO/STGC_RawDataContainer_p1.h"
 #include "MuonIdHelpers/sTgcIdHelper.h"
-#include "MuonEventTPCnv/CreateTransientTemplates.h"
 
 #define DEBUG 0
 
@@ -42,7 +41,10 @@ void  Muon::STGC_RawDataContainerCnv_p1::persToTrans(const Muon::STGC_RawDataCon
   STGC_RawDataCollection* coll = nullptr;
   for ( const STGC_RawDataCollection_p1 collection : *persCont){
     coll = new STGC_RawDataCollection(collection.m_idHash);
-    transCont->addCollection(coll,collection.m_idHash);
+    if ( transCont->addCollection(coll,collection.m_idHash).isFailure() ) {
+      log << MSG::WARNING << "Could not add the sTGC collection during persistent->transient conversion" << std::endl;
+      return;
+    }
     if (DEBUG) log<<MSG::VERBOSE<<"Have created empty transient collection, now looping over persistent coll with this many entries: "<<collection.size() <<std::endl;
     
     for ( unsigned int j=0 ; j < collection.size() ; ++j ){
@@ -60,7 +62,7 @@ void  Muon::STGC_RawDataContainerCnv_p1::persToTrans(const Muon::STGC_RawDataCon
 //================================================================
 Muon::STGC_RawDataContainer* Muon::STGC_RawDataContainerCnv_p1::createTransient(const Muon::STGC_RawDataContainer_p1* persObj, MsgStream& log) 
 {
-  std::unique_ptr<STGC_RawDataContainer> trans(new Muon::STGC_RawDataContainer(m_idHelper->module_hash_max())); // FIXME This seems to give a ridiculously large number. Maybe I need to call something else?
+  std::unique_ptr<STGC_RawDataContainer> trans(new Muon::STGC_RawDataContainer(m_idHelper->module_hash_max())); 
   if (DEBUG) log<<MSG::VERBOSE<<"STGC_RawDataContainerCnv_p1::createTransient() Created new STGC_RawDataContainer with this many collections "<<trans->numberOfCollections()<<std::endl;
   
   persToTrans(persObj, trans.get(), log);
diff --git a/MuonSpectrometer/MuonCnv/MuonRdoToPrepData/src/StgcRdoToStgcPrepData.cxx b/MuonSpectrometer/MuonCnv/MuonRdoToPrepData/src/StgcRdoToStgcPrepData.cxx
index adcfee4778dc1bfe911e5f4f2daab1c99919083b..ef03632fc9dbd1bcd6955d6f5f91112242cf2d4d 100755
--- a/MuonSpectrometer/MuonCnv/MuonRdoToPrepData/src/StgcRdoToStgcPrepData.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonRdoToPrepData/src/StgcRdoToStgcPrepData.cxx
@@ -7,7 +7,7 @@
 
 StgcRdoToStgcPrepData::StgcRdoToStgcPrepData(const std::string& name, ISvcLocator* pSvcLocator) :
   AthAlgorithm(name, pSvcLocator),
-  m_decoderTool ("Muon::StgcRdoToStgcPrepDataTool/StgcRdoToStgcPrepDataTool", this),
+  m_decoderTool ("Muon::sTgcRdoToPrepDataTool/STGC_PrepDataProviderTool"),
   m_prdContainer("STGC_Measurements")
 {
   declareProperty("OutputCollection",   m_prdContainer);
diff --git a/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.cxx b/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.cxx
deleted file mode 100644
index ef3af13728e48ca0a26b880577221e6c891fe9d6..0000000000000000000000000000000000000000
--- a/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.cxx
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// TGC_CnvTool.cxx, (c) ATLAS Detector software
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#include "STGC_RawDataToPrepDataTool.h"
-
-#include "GaudiKernel/ISvcLocator.h"
-
-#include "MuonReadoutGeometry/MuonDetectorManager.h"
-#include "MuonReadoutGeometry/sTgcReadoutElement.h"
-
-#include "TrkSurfaces/Surface.h"
-
-#include "MuonCnvToolInterfaces/IDC_Helper.h"
-
-#include "EventPrimitives/EventPrimitives.h"
-// BS access
-#include "MuonCnvToolInterfaces/IMuonRawDataProviderTool.h"
-
-#include <cfloat>
-#include <algorithm>
-
-//================ Constructor =================================================
-
-Muon::STGC_RawDataToPrepDataTool::STGC_RawDataToPrepDataTool(const std::string& t, const std::string& n, const IInterface* p)
-  : AthAlgTool(t, n, p), 
-    m_muonMgr(0),
-    m_rawDataProviderTool("Muon::sTGC_RawDataProviderTool/sTGC_RawDataProviderTool"),
-    m_RDO_Key("sTGCRDO"),
-    m_PRD_Key("sTGC_Measurements")
-{
-  declareProperty("RawDataProviderTool",  m_rawDataProviderTool);
-  declareProperty("RDOContainer",         m_RDO_Key);
-  declareProperty("OutputCollection",     m_PRD_Key);
-}  
-
-//================ Destructor =================================================
-
-Muon::STGC_RawDataToPrepDataTool::~STGC_RawDataToPrepDataTool()
-{}
-
-//___________________________________________________________________________
-StatusCode Muon::STGC_RawDataToPrepDataTool::queryInterface(const InterfaceID& riid, void** ppvIf)
-{
-  if(riid==IMuonRdoToPrepDataTool::interfaceID()) {
-    *ppvIf = (IMuonRdoToPrepDataTool*)this;
-    addRef();
-    return StatusCode::SUCCESS;
-  }
-  
-  return AthAlgTool::queryInterface(riid, ppvIf);
-}
-
-
-//================ Initialization =================================================
-
-StatusCode Muon::STGC_RawDataToPrepDataTool::initialize()
-{
-  StatusCode sc = AthAlgTool::initialize();
-  if(sc.isFailure()) return sc;
-
-  sc = detStore()->retrieve(m_muonMgr);
-  if(sc.isFailure()) {
-    ATH_MSG_FATAL("Cannot retrieve MuonDetectorManager");
-    return sc;
-  }
-
-  m_rawDataProviderTool.disable();         // never used???
-
-  /// get tgcIdHelper from muonMgr
-  m_sTGC_Helper = m_muonMgr->stgcIdHelper();
-    
-  ATH_CHECK(m_RDO_Key.initialize());
-  ATH_CHECK(m_PRD_Key.initialize());
-  
-  ATH_MSG_INFO("initialize() successful in " << name());
-  return StatusCode::SUCCESS;
-}
-
-//================ Finalization =================================================
-
-StatusCode Muon::STGC_RawDataToPrepDataTool::finalize()
-{
-  StatusCode sc = AthAlgTool::finalize();
-  return sc;
-}
-
-//================ Decoding =================================================
-StatusCode Muon::STGC_RawDataToPrepDataTool::decode(std::vector<IdentifierHash>& requestedIdHashVect, 
-                                                    std::vector<IdentifierHash>& /*selectedIdHashVect*/)
-{
-  int sizeVectorRequested = requestedIdHashVect.size();
-  ATH_MSG_DEBUG("decode for " << sizeVectorRequested << " offline collections called");
-
-  // clear output vector of selected data collections containing data 
-  // selectedIdHashVect.clear();
-  //
-  // if(!evtStore()->contains<Muon::sTgcPrepDataContainer>( m_PRD_Key )) {
-  //   // initialize with false
-  //   // std::fill(m_decodedOnlineId.begin(), m_decodedOnlineId.end(), false);
-  //   SG::WriteHandle<sTgcPrepDataContainer>  handle(m_PRD_Key);
-  //
-  //   // record the container in storeGate
-  //   auto prds = std::make_unique<sTgcPrepDataContainer> (m_sTGC_Helper->module_hash_max());
-  //   ATH_CHECK( handle.record (std::move (prds)) );
-  //
-  //   // cache the pointer, storegate retains ownership
-  //   sTgcPrepDataContainer* stgcPrepDataContainer = handle.ptr();
-  // }
-
-  // seeded or unseeded decoding
-  // if (sizeVectorRequested != 0) {
-  //   processPRDHashes(idVect,idWithDataVect, *stgcPrepDataContainer);
-  // }  else {
-  //   processRDOContainer(idWithDataVect, *stgcPrepDataContainer);
-  // }
-
-  return StatusCode::SUCCESS;
-}
-
-void Muon::STGC_RawDataToPrepDataTool::processPRDHashes( const std::vector<IdentifierHash>& chamberHashInRobs, std::vector<IdentifierHash>& idWithDataVect, sTgcPrepDataContainer& prds ){
-  
-  // get RDO container
-  
-  SG::ReadHandle<STGC_RawDataContainer> rdos(m_RDO_Key);
-  const STGC_RawDataContainer* rdoContainer = rdos.get();
-    
-  if(!rdoContainer) {
-    return;
-  }                 
-
-  for( auto it = chamberHashInRobs.begin(); it != chamberHashInRobs.end(); ++it ){
-    if(!handlePRDHash(*it,*rdoContainer,idWithDataVect, prds) ) {
-      ATH_MSG_DEBUG("Failed to process hash " << *it );
-    }
-  }//ends loop over chamberhash  
-}
-
-bool Muon::STGC_RawDataToPrepDataTool::handlePRDHash( IdentifierHash /*hash*/, const STGC_RawDataContainer& /*rdoContainer*/, std::vector<IdentifierHash>& /*idWithDataVect*/, sTgcPrepDataContainer& /*prds*/ ) {
-  
-  // if in prep data the chamber already exists ... do nothing
-  // if( m_mdtPrepDataContainer->indexFind(hash) != m_mdtPrepDataContainer->end() ) return true;
-  //
-  // IdentifierHash rdoHash = hash; // before BMEs were installed, RDOs were indexed by offline hashes (same as PRD)
-  // // process CSM if data was found
-  // STGC_RawDataContainer::const_iterator rdoColli = rdoContainer.indexFind(rdoHash);
-  // if( rdoColli != rdoContainer.end() ) {
-  //   rdoColli->push_back(new STGC_RawData() );
-  // } else {
-  //   ATH_MSG_DEBUG("handlePRDHash: hash id " << (unsigned int)(hash) << " not found in RDO container");
-  // }
-  return true;
-}
-
-void Muon::STGC_RawDataToPrepDataTool::printPrepData() {
-  
-}
-
-void Muon::STGC_RawDataToPrepDataTool::printInputRdo() {
-  
-}
-
diff --git a/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.h b/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.h
deleted file mode 100644
index 36215e66e76185b51693a34342c1d542c363785f..0000000000000000000000000000000000000000
--- a/MuonSpectrometer/MuonCnv/MuonSTGC_CnvTools/src/STGC_RawDataToPrepDataTool.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-///////////////////////////////////////////////////////////////////
-// STGC_RawDataToPrepDataTool.h, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-#ifndef MUONATGC_CNVTOOLS_STGC_RAWDATATOPREPDATATOOL
-#define MUONATGC_CNVTOOLS_STGC_RAWDATATOPREPDATATOOL
-
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "MuonCnvToolInterfaces/IMuonRdoToPrepDataTool.h"
-#include <string>
-
-#include "GaudiKernel/ToolHandle.h"
-#include "MuonRDO/STGC_RawDataContainer.h"
-#include "MuonPrepRawData/sTgcPrepDataContainer.h"
-
-class AtlasDetectorID;
-class Identifier;
-
-class ITGCcablingSvc;
-class sTgcIdHelper;
-
-namespace MuonGM 
-{
-  class MuonDetectorManager;
-  class TgcReadoutElement; 
-}
-
-namespace Muon 
-{
-  class IMuonRawDataProviderTool;
-
-  /** @class STGC_RawDataToPrepDataTool 
-   *  This is the algorithm that convert STGC Raw data  To STGC PRD  as a tool.
-   */  
-
-  class STGC_RawDataToPrepDataTool : virtual public IMuonRdoToPrepDataTool, virtual public AthAlgTool
-    {
-    public:
-      /** Constructor */
-      STGC_RawDataToPrepDataTool(const std::string& t, const std::string& n, const IInterface* p);
-      
-      /** Destructor */
-      virtual ~STGC_RawDataToPrepDataTool();
-      
-      /** Query the IMuonRdoToPrepDataTool interface */
-      virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvIf) override;
-      
-      /** Standard AthAlgTool initialize method */
-      virtual StatusCode initialize() override;
-      /** Standard AthAlgTool finalize method */
-      virtual StatusCode finalize() override;
-      
-      /** Decode RDO to PRD  
-       *  A vector of IdentifierHash are passed in, and the data corresponding to this list (i.e. in a Region of Interest) are converted.  
-       *  @param requestedIdHashVect          Vector of hashes to convert i.e. the hashes of ROD collections in a 'Region of Interest'  
-       *  @return selectedIdHashVect This is the subset of requestedIdVect which were actually found to contain data   
-       *  (i.e. if you want you can use this vector of hashes to optimise the retrieval of data in subsequent steps.) */ 
-      virtual StatusCode decode(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& idWithDataVect) override;
-
-      virtual void printPrepData() override;
-      virtual void printInputRdo() override;
-
-      /** Resolve possible conflicts with IProperty::interfaceID() */
-      static const InterfaceID& interfaceID() { return IMuonRdoToPrepDataTool::interfaceID(); }
-      
-    private:
-      
-      void processPRDHashes( const std::vector<IdentifierHash>& chamberHashInRobs, std::vector<IdentifierHash>& idWithDataVect, sTgcPrepDataContainer& prds );
-      bool handlePRDHash( IdentifierHash hash, const STGC_RawDataContainer& rdoContainer, std::vector<IdentifierHash>& idWithDataVect, sTgcPrepDataContainer& prds );
-      
-      /** muon detector manager */
-      const MuonGM::MuonDetectorManager * m_muonMgr;
-
-      /** TGC identifier helper */
-      const sTgcIdHelper* m_sTGC_Helper;
-
-      /** TgcPrepRawData container key for current BC */ 
-      std::string m_outputCollectionLocation;      
-            
-      /** ToolHandle of the TGC_RawDataProviderTool */
-      ToolHandle<IMuonRawDataProviderTool> m_rawDataProviderTool;
-
-      SG::ReadHandleKey<STGC_RawDataContainer> m_RDO_Key;//"TGCRDO"
-      SG::WriteHandleKey<sTgcPrepDataContainer> m_PRD_Key;
-
-      /** Aboid compiler warning **/
-      virtual StatusCode decode( const std::vector<uint32_t>& /*robIds*/ ) override {return StatusCode::FAILURE;}
-   }; 
-} // end of namespace
-
-#endif // MUONTGC_CNVTOOLS_TGCRDOTOPREPDATATOOL_H
diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/MM_RawDataContainer.h b/MuonSpectrometer/MuonRDO/MuonRDO/MM_RawDataContainer.h
index 42e6b48a50112631fa9c7a02c299e85aed4ebcf4..339fc829e1490617f59a6bad54eb4145563018ff 100755
--- a/MuonSpectrometer/MuonRDO/MuonRDO/MM_RawDataContainer.h
+++ b/MuonSpectrometer/MuonRDO/MuonRDO/MM_RawDataContainer.h
@@ -17,6 +17,7 @@ class MM_RawDataContainer
 {
 public:  
   MM_RawDataContainer(unsigned int hashmax);
+  MM_RawDataContainer(); 
   virtual ~MM_RawDataContainer(); 
 
   /// class ID
diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/STGC_RawDataContainer.h b/MuonSpectrometer/MuonRDO/MuonRDO/STGC_RawDataContainer.h
index b394af3ef3bb8b12add9d64ec8aeaaeae31774f4..5283fd3c5304d577e341406fe0beceaec797911b 100755
--- a/MuonSpectrometer/MuonRDO/MuonRDO/STGC_RawDataContainer.h
+++ b/MuonSpectrometer/MuonRDO/MuonRDO/STGC_RawDataContainer.h
@@ -16,6 +16,7 @@ class STGC_RawDataContainer
   : public IdentifiableContainer<STGC_RawDataCollection>
 {
 public:  
+  STGC_RawDataContainer();
   STGC_RawDataContainer(unsigned int hashmax);
   ~STGC_RawDataContainer(); 
   
diff --git a/MuonSpectrometer/MuonRDO/src/MM_RawDataContainer.cxx b/MuonSpectrometer/MuonRDO/src/MM_RawDataContainer.cxx
index 5633cce5cb9370474ad7ff1b88d08e10176fb37d..869216a5ec0c780e8a285b4cb3afa36d2b00a532 100755
--- a/MuonSpectrometer/MuonRDO/src/MM_RawDataContainer.cxx
+++ b/MuonSpectrometer/MuonRDO/src/MM_RawDataContainer.cxx
@@ -6,6 +6,11 @@
 #include <iostream>
 #include "EventContainers/SelectAllObject.h"
 
+Muon::MM_RawDataContainer::MM_RawDataContainer()
+: IdentifiableContainer<MM_RawDataCollection>(0) 
+{
+}
+
 Muon::MM_RawDataContainer::MM_RawDataContainer(unsigned int hashmax)
 : IdentifiableContainer<MM_RawDataCollection>(hashmax) 
 {
diff --git a/MuonSpectrometer/MuonRDO/src/STGC_RawDataContainer.cxx b/MuonSpectrometer/MuonRDO/src/STGC_RawDataContainer.cxx
index 65dce06fd14ed74f07595eb55a625c5500a403be..3db6dae06e772a8e91fd843e698b6a9b62ff0257 100755
--- a/MuonSpectrometer/MuonRDO/src/STGC_RawDataContainer.cxx
+++ b/MuonSpectrometer/MuonRDO/src/STGC_RawDataContainer.cxx
@@ -5,6 +5,11 @@
 #include "MuonRDO/STGC_RawDataContainer.h"
 #include <iostream>
 
+Muon::STGC_RawDataContainer::STGC_RawDataContainer()
+  : IdentifiableContainer<STGC_RawDataCollection>(0) 
+{
+}
+
 Muon::STGC_RawDataContainer::STGC_RawDataContainer(unsigned int hashmax)
 : IdentifiableContainer<STGC_RawDataCollection>(hashmax) 
 {
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.h b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.h
index 315065061a9d6435d128d7f596b498c9ee84c069..2cd3041e7525dd9d83ee5065a601bcc84c3ecfe3 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.h
@@ -26,6 +26,9 @@
 #include "MuonPrepRawData/MdtPrepData.h"
 #include "MuonPrepRawData/RpcPrepData.h"
 #include "MuonPrepRawData/TgcPrepData.h"
+// New Small Wheel
+#include "MuonPrepRawData/MMPrepData.h"
+#include "MuonPrepRawData/sTgcPrepData.h"
 
 #include "MuonPrepRawData/MuonPrepDataCollection.h"
 
@@ -39,6 +42,9 @@ class MuonPrepDataContainer : public IdentifiableContainer<CollectionT> {
   // Public methods:
   ///////////////////////////////////////////////////////////////////
 public:
+
+    //default for POOL
+      MuonPrepDataContainer();
     
   // Constructor with parameters:
   MuonPrepDataContainer(unsigned int max);
@@ -90,7 +96,7 @@ private:
 ///////////////////////////////////////////////////////////////////
 // Inline methods:
 /////////////////////////////////////////////////////////////////// 
- 
+
 typedef MuonPrepDataCollection< MdtPrepData > MdtPrepDataCollection;
 typedef MuonPrepDataContainer< MdtPrepDataCollection > MdtPrepDataContainer;
  
@@ -100,6 +106,13 @@ typedef MuonPrepDataContainer< RpcPrepDataCollection > RpcPrepDataContainer;
 typedef MuonPrepDataCollection< TgcPrepData > TgcPrepDataCollection;
 typedef MuonPrepDataContainer< TgcPrepDataCollection > TgcPrepDataContainer;
 
+// New Small Wheel
+typedef MuonPrepDataCollection< sTgcPrepData > sTgcPrepDataCollection;
+typedef MuonPrepDataContainer< sTgcPrepDataCollection > sTgcPrepDataContainer;
+
+typedef MuonPrepDataCollection< MMPrepData > MMPrepDataCollection;
+typedef MuonPrepDataContainer< MMPrepDataCollection > MMPrepDataContainer;
+
 // member functions that use Collection T
 #include "MuonPrepRawData/MuonPrepDataContainer.icc"
 
@@ -110,6 +123,9 @@ typedef MuonPrepDataContainer< TgcPrepDataCollection > TgcPrepDataContainer;
 #include "MuonPrepRawData/RpcPrepDataContainer.h"
 #include "MuonPrepRawData/TgcPrepDataContainer.h"
 #include "MuonPrepRawData/MdtPrepDataContainer.h"
+// New Small Wheel
+#include "MuonPrepRawData/sTgcPrepDataContainer.h"
+#include "MuonPrepRawData/MMPrepDataContainer.h"
 
 #endif // TRKPREPRAWDATA_PREPRAWDATACONTAINER_H
 
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.icc b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.icc
index 1bad1c5c8caa08a4d8b594ad010ad159d3d16a6a..3d25d2b38141cdfbc3bc0d9fe779a6322b0c839c 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.icc
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/MuonPrepDataContainer.icc
@@ -12,6 +12,12 @@
 ///////////////////////////////////////////////////////////////////
 
 
+/// constructor for POOL with no parameters
+template< class CollectionT>
+MuonPrepDataContainer< CollectionT>::MuonPrepDataContainer() :
+  IdentifiableContainer<CollectionT>(0)
+{
+}
 
 template< class CollectionT>
 // Constructor with parameters:
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/sTgcPrepData.h b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/sTgcPrepData.h
index 499d45a91b63b73dc95176e6d76e9c00d7e00c7e..7846ba76202cac0ed426a3ae2a5585c8d0113f7b 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/sTgcPrepData.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/MuonPrepRawData/sTgcPrepData.h
@@ -52,6 +52,7 @@ namespace Muon
 		  const std::vector<Identifier>& rdoList,
 		  const Amg::MatrixX* locErrMat,
 		  const MuonGM::sTgcReadoutElement* detEl,
+		  const int charge = 0,
 		  const uint16_t bcBitMap=0);
 
 
@@ -74,6 +75,7 @@ namespace Muon
 
     /** @brief Returns the bcBitMap of this PRD
 	bit2 for Previous BC, bit1 for Current BC, bit0 for Next BC */
+    int charge() const;
     uint16_t getBcBitMap() const;
     enum {BCBIT_UNDEFINED=0, BCBIT_NEXT=1, BCBIT_CURRENT=2, BCBIT_PREVIOUS=4};
 
@@ -81,6 +83,7 @@ namespace Muon
 
     /** Cached pointer to the detector element - should never be zero.*/
     const MuonGM::sTgcReadoutElement* m_detEl;
+    int m_charge;
     uint16_t m_bcBitMap;
 
   };
@@ -98,6 +101,11 @@ namespace Muon
     return *m_globalPosition;
   }
 
+  inline int sTgcPrepData::charge() const
+  {
+    return m_charge;
+  }
+
   inline uint16_t sTgcPrepData::getBcBitMap() const
   {
     return m_bcBitMap;
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/MMPrepData.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/MMPrepData.cxx
index 760428b969722b12845a5b69c24e7f19c3e53302..f9ae7e52319844d0b014b425bc2d0341a2009fe5 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/MMPrepData.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/MMPrepData.cxx
@@ -52,16 +52,16 @@ namespace Muon
   MMPrepData::MMPrepData(const MMPrepData& RIO):
     MuonCluster(RIO),
     m_detEl( RIO.m_detEl ),
-    m_time(0),
-    m_charge(0)
+    m_time(RIO.m_time),
+    m_charge(RIO.m_charge)
   { }
 
   //move constructor:
   MMPrepData::MMPrepData(MMPrepData&& RIO):
     MuonCluster(std::move(RIO)),
     m_detEl( RIO.m_detEl ),
-    m_time(0),
-    m_charge(0)
+    m_time(RIO.m_time),
+    m_charge(RIO.m_charge)
   { }
 
   //assignment operator
@@ -72,6 +72,8 @@ namespace Muon
       {
 	MuonCluster::operator=(RIO);
 	m_detEl =  RIO.m_detEl ;
+	m_time = RIO.m_time;
+	m_charge = RIO.m_charge;
       }
     return *this;
 
@@ -84,6 +86,8 @@ namespace Muon
       {
 	MuonCluster::operator=(std::move(RIO));
 	m_detEl =  RIO.m_detEl ;
+	m_time =  RIO.m_time ;
+	m_charge =  RIO.m_charge ;
       }
     return *this;
 
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/sTgcPrepData.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/sTgcPrepData.cxx
index c89b406ba05f6be55b88641194362aaab3bfaaa3..c284a3cff173628a8d33325266f93c176064df7d 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/sTgcPrepData.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonPrepRawData/src/sTgcPrepData.cxx
@@ -14,12 +14,15 @@ namespace Muon
 			      const std::vector<Identifier>& rdoList,
 			      const Amg::MatrixX* locErrMat,
 			      const MuonGM::sTgcReadoutElement* detEl,
+                              const int charge,
 			      const uint16_t bcBitMap ) :
     MuonCluster(RDOId, idDE, locpos, rdoList, locErrMat), //call base class constructor
     m_detEl(detEl),
+    m_charge(charge),
     m_bcBitMap(bcBitMap)
   { }
 
+
   // Destructor:
   sTgcPrepData::~sTgcPrepData()
   {
@@ -30,6 +33,7 @@ namespace Muon
   sTgcPrepData::sTgcPrepData():
     MuonCluster(),
     m_detEl(0),
+    m_charge(0),
     m_bcBitMap(0)
   { }
 
@@ -37,6 +41,7 @@ namespace Muon
   sTgcPrepData::sTgcPrepData(const sTgcPrepData& RIO):
     MuonCluster(RIO),
     m_detEl( RIO.m_detEl ),
+    m_charge( RIO.m_charge ),
     m_bcBitMap( RIO.m_bcBitMap )
   { }
 
@@ -44,6 +49,7 @@ namespace Muon
   sTgcPrepData::sTgcPrepData(sTgcPrepData&& RIO):
     MuonCluster(std::move(RIO)),
     m_detEl( RIO.m_detEl ),
+    m_charge( RIO.m_charge ),
     m_bcBitMap( RIO.m_bcBitMap )
   { }
 
@@ -55,6 +61,7 @@ namespace Muon
       {
 	MuonCluster::operator=(RIO);
 	m_detEl =  RIO.m_detEl ;
+        m_charge = RIO.m_charge;
 	m_bcBitMap = RIO.m_bcBitMap;
       }
     return *this;
@@ -69,6 +76,7 @@ namespace Muon
       {
 	MuonCluster::operator=(std::move(RIO));
 	m_detEl =  RIO.m_detEl ;
+        m_charge = RIO.m_charge;
 	m_bcBitMap = RIO.m_bcBitMap;
       }
     return *this;