diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataCollection_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataCollection_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..4e1b80f2bc539b6314e8862729eceeac4c2b90b3
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataCollection_p4.h
@@ -0,0 +1,79 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawDataCollection_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#ifndef MUON_CSCCRAWDATACOLLECTION_P4_H
+#define MUON_CSCCRAWDATACOLLECTION_P4_H
+
+#include "MuonEventAthenaPool/CscRawData_p4.h"
+
+/**
+Persistent represenation of the Collection of CSC Raw Hits.
+*/
+class CscRawDataCollection_p4
+   : public std::vector<CscRawData_p4>
+{
+public:
+
+  CscRawDataCollection_p4 () :
+    std::vector<CscRawData_p4>(),
+    m_id(0),
+    m_rodId(0),
+    m_subDetectorId(0),
+    m_numRPU(0),
+    m_samplingPhase(false),
+    m_triggerType(false),
+    m_firstBitSummary(0),
+    m_eventType(0),
+    m_rpuID(),
+    m_dataType(),
+    m_spuCount(10,0),
+    m_scaAddress(0)
+  {}
+
+friend class  CscRawDataCollectionCnv_p4;
+  
+private:
+
+  /** Identifier of this collection */
+  uint32_t m_id;
+
+  /** online ROD Identifier */
+  uint16_t m_rodId;
+  uint16_t m_subDetectorId;
+
+  /** number of RPU */
+  uint16_t m_numRPU;  
+
+  /** sampling phase */
+  bool m_samplingPhase;
+
+  /** trigger Type */ 
+  bool m_triggerType;
+
+  /** First Bit Summary */
+  uint8_t m_firstBitSummary;
+
+  /** event type/data type */
+  uint32_t m_eventType;
+
+  /** RPU ID and data type */
+  std::vector<uint16_t> m_rpuID;
+  std::vector<uint8_t> m_dataType;
+
+  /** cluster counts for 10 SPU: 5 SPU in each chamber or RPU! 
+      For Chamber CSS, RPU ID = 5 and for CSL RPU ID = 11
+      For CSS, SPU ID goes from 0-4 and 5-9 for CSS
+      The non-precision SPU are at index 4 and 9 in the list */
+  std::vector<uint16_t> m_spuCount;
+
+  /** SCA Address */
+  uint32_t m_scaAddress;
+
+};
+
+#endif
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataContainer_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataContainer_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..878cfd4f44c070ecd55c3012a195ff7da0f8839e
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawDataContainer_p4.h
@@ -0,0 +1,32 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawDataContainer_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#ifndef MUON_CSCCRAWDATACONTAINER_P4_H
+#define MUON_CSCCRAWDATACONTAINER_P4_H
+
+/*
+
+Persistent represenation of a container of collections of CSC Raw Hits,
+Author: Marcin Nowak
+        CERN, December, 2005
+
+*/
+
+#include "MuonEventAthenaPool/CscRawDataCollection_p4.h"
+
+
+class CscRawDataContainer_p4
+   : public std::vector<CscRawDataCollection_p4>
+{
+public:
+  CscRawDataContainer_p4() : std::vector<CscRawDataCollection_p4>()  {}
+
+  friend class CscRawDataContainerCnv_p4;
+};
+
+#endif
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawData_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawData_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..6882e7b4e65ad874fb21b05e2d3ea539f53fb7d7
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/CscRawData_p4.h
@@ -0,0 +1,61 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawData_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#ifndef MUON_CSCRAWDATA_P4_H
+#define MUON_CSCRAWDATA_P4_H
+
+#include <iostream>
+#include <vector>
+#include <inttypes.h>
+
+class CscRawData_p4  
+{
+public:
+    CscRawData_p4 () 
+        : 
+        m_amps(), 
+        m_address(0), 
+        m_id(0), 
+        m_time(0), 
+        m_rpuID(0), 
+        m_width(0), 
+        m_isTimeComputed(false), 
+        m_hashId(0)  
+    {}
+        
+    friend class  CscRawDataCnv_p4;
+
+private:
+    
+    /// in common with _p1
+    
+    /** ADC samples */
+    std::vector<uint16_t> m_amps;
+    /** online identifier of the first strip in the ROD cluster */
+    uint32_t m_address; 
+    /** online identifier of the collection in which this strip is */
+    uint16_t m_id;
+    
+    // m_dpuiID removed from _p1
+    
+    //New to _p2
+    
+    /** online peaking time of the first strip: this is 0 if failed to compute time in the ROD */
+    uint16_t m_time;
+    /** SPU -Sparsifier Processing Unit - identifier in which this strip is */
+    uint16_t m_rpuID;
+    /** number of consecutive strips forming the on-line cluster */
+    uint16_t m_width;
+    /** failed to compute the time in the ROD or not - if failure m_time = 0 */
+    bool m_isTimeComputed;
+    /** offline hash identifier of the first strip in the online cluster */
+    uint32_t m_hashId;
+};
+
+#endif
+
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/MuonRDOCnvDict.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/MuonRDOCnvDict.h
index cc84b1944e4f494210f62161f0f6be24dbac288c..6268df26de943c8dcabfc45ef3d88ad4d2fc13fe 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/MuonRDOCnvDict.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/MuonRDOCnvDict.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 /*
@@ -12,6 +12,10 @@
 #ifndef MUONRDO_CNVDICT_H
 #define MUONRDO_CNVDICT_H
 
+#include "MuonEventAthenaPool/CscRawData_p4.h"
+#include "MuonEventAthenaPool/CscRawDataCollection_p4.h"
+#include "MuonEventAthenaPool/CscRawDataContainer_p4.h"
+
 #include "MuonEventAthenaPool/CscRawData_p3.h"
 #include "MuonEventAthenaPool/CscRawDataCollection_p3.h"
 #include "MuonEventAthenaPool/CscRawDataContainer_p3.h"
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/selection.xml b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/selection.xml
index c72fdd64fad499beea08478e0eb11452a1adccad..bdf181b8e1ae94e9488b9bdebb5af84209ff3651 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/selection.xml
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/MuonEventAthenaPool/selection.xml
@@ -1,9 +1,4 @@
 <lcgdict>
-  <class name="CscRawData_p2" />
-  <class name="std::vector<CscRawData_p2>" />
-  <class name="CscRawDataCollection_p2" />
-  <class name="std::vector<CscRawDataCollection_p2>" />
-  <class name="CscRawDataContainer_p2" id="19221A0D-4167-4A1C-BE2A-EE335D7C9D5F" />
 
   <class name="CscRawData_p1" />
   <class name="std::vector<CscRawData_p1>" />
@@ -11,12 +6,24 @@
   <class name="std::vector<CscRawDataCollection_p1>" />
   <class name="CscRawDataContainer_p1" id="3586FE6B-0504-4E78-BD9F-AF839C50F931" />
 
+  <class name="CscRawData_p2" />
+  <class name="std::vector<CscRawData_p2>" />
+  <class name="CscRawDataCollection_p2" />
+  <class name="std::vector<CscRawDataCollection_p2>" />
+  <class name="CscRawDataContainer_p2" id="19221A0D-4167-4A1C-BE2A-EE335D7C9D5F" />
+
   <class name="CscRawData_p3" />
   <class name="std::vector<CscRawData_p3>" />
   <class name="CscRawDataCollection_p3" />
   <class name="std::vector<CscRawDataCollection_p3>" />
   <class name="CscRawDataContainer_p3" id="A77330FB-BD12-4E50-829C-DADFBF556119" />
 
+  <class name="CscRawData_p4" />
+  <class name="std::vector<CscRawData_p4>" />
+  <class name="CscRawDataCollection_p4" />
+  <class name="std::vector<CscRawDataCollection_p4>" />
+  <class name="CscRawDataContainer_p4" id="F94905BF-D474-4453-B9D0-80ECB7BA4041" />
+
   <class name="TgcRawData_p1" />
   <class name="std::vector<TgcRawData_p1>" />
   <class name="TgcRdo_p1" />
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.cxx b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..167bea90599d9da65343c2becfe75a1e8b5e26fa
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.cxx
@@ -0,0 +1,76 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "MuonRDO/CscRawData.h"
+#include "CscRawDataCnv_p4.h"
+#include "GaudiKernel/GaudiException.h"
+#include "StoreGate/StoreGateSvc.h"
+#include "MuonIdHelpers/CscIdHelper.h"
+#include <TString.h> // for Form
+
+bool CscRawDataCnv_p4::initialize() {
+  if (m_init) return m_init;
+  ISvcLocator* svcLocator = Gaudi::svcLocator();
+  StoreGateSvc* detStore;
+  if (svcLocator->service("DetectorStore", detStore).isFailure()) {
+    throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::initialize() - Failed to retrieve DetectorStore", __FILE__, __LINE__));
+  }  
+  if (detStore->retrieve(m_cscIdHelper, "CSCIDHELPER").isFailure()) {
+    throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::initialize() - Failed to retrieve CscIdHelper (needed for channel hash conversion)", __FILE__, __LINE__));
+  }
+  m_init = true;
+  return m_init;
+}
+
+void
+CscRawDataCnv_p4::transToPers(const CscRawData* trans, CscRawData_p4* pers, MsgStream &) 
+{
+    if (!this->initialize()) throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::transToPers() - Failed to initialize", __FILE__, __LINE__));
+
+    pers->m_amps        = trans->samples();
+    pers->m_address     = trans->address();
+    pers->m_id          = trans->identify();
+    pers->m_time        = trans->time();
+    pers->m_rpuID       = trans->rpuID();
+    pers->m_width       = trans->width();
+    pers->m_isTimeComputed        = trans->isTimeComputed();
+    if (m_cscIdHelper) {
+      // translate the transient (geometrical) hash into a positional hash as expected by the p4 persistent data format
+      IdContext context = m_cscIdHelper->channel_context();
+      Identifier id;
+      IdentifierHash posHash;
+      if (!m_cscIdHelper->get_id(trans->hashId(), id, &context)) { // retrieve identifier from geometrical hash
+          if (!m_cscIdHelper->get_pos_channel_hash(id, posHash)) pers->m_hashId  = posHash; // retrieve positional identifier hash from identifier
+      }
+    } else {
+      throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::transToPers() - No CscIdHelper present (needed for channel hash conversion)", __FILE__, __LINE__));
+    }
+}
+
+void
+CscRawDataCnv_p4::persToTrans(const CscRawData_p4* pers, CscRawData* trans, MsgStream &) 
+{
+   if (!this->initialize()) throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::persToTrans() - Failed to initialize", __FILE__, __LINE__));
+
+   *trans = CscRawData (pers->m_amps,
+                        pers->m_address,
+                        pers->m_id,
+                        pers->m_rpuID,
+                        pers->m_width);
+   if (m_cscIdHelper) {
+     // translate the persistent p4 (positional) hash into a geometrical hash (as expected by the transient data format)
+     IdentifierHash posHash = pers->m_hashId;
+     IdentifierHash geoHash;
+     Identifier id;
+     if (!m_cscIdHelper->get_id_fromPosHash(posHash, id)) { // retrieve identifier from positional identifier hash
+       if (!m_cscIdHelper->get_channel_hash(id, geoHash)) { // retrieve geometrical identifier hash from identifier
+         trans->setHashID(geoHash);
+       }
+     }
+   } else {
+      throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p4::persToTrans() - No CscIdHelper present (needed for channel hash conversion)", __FILE__, __LINE__));
+   }
+   if (pers->m_isTimeComputed)
+     trans->setTime (pers->m_time);
+}
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..87641ec1df3d88b651152fc30b532ffd7e180866
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCnv_p4.h
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MUON_CSCRAWDATACNV_P4_H
+#define MUON_CSCRAWDATACNV_P4_H
+
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"  
+#include "MuonEventAthenaPool/CscRawData_p4.h"
+#include "MuonRDO/CscRawData.h"
+
+class MsgStream;
+class CscIdHelper;
+
+
+/**
+Transient/Persistent converter for CscRawData class
+*/
+class CscRawDataCnv_p4  : public T_AthenaPoolTPCnvBase<CscRawData, CscRawData_p4>
+{
+public:
+  CscRawDataCnv_p4() {}
+  
+  virtual void		persToTrans(const CscRawData_p4* persObj, CscRawData* transObj, MsgStream &log);
+  virtual void		transToPers(const CscRawData* transObj, CscRawData_p4* persObj, MsgStream &log);
+private:
+  bool initialize();
+  bool m_init=false;
+  CscIdHelper* m_cscIdHelper=nullptr;
+
+};
+
+
+#endif
+
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.cxx b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..09b78fd23ce183ae71530c2e4e62dd88176114b8
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.cxx
@@ -0,0 +1,57 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawDataCollectionCnv_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#include "GaudiKernel/MsgStream.h"
+#include "CscRawDataCollectionCnv_p4.h"
+#include <sstream>
+
+void
+CscRawDataCollectionCnv_p4::persToTrans(const CscRawDataCollection_p4* persColl, CscRawDataCollection* transColl, MsgStream &log) 
+{
+
+   IdentifierHash idhash = transColl->identifyHash();
+   transColl->setOnlineId (persColl->m_id);
+   transColl->setIdentifyHash (idhash);
+   transColl->setRodId (persColl->m_rodId);
+   transColl->setSubDetectorId (persColl->m_subDetectorId);
+   transColl->setNumDPU (persColl->m_numRPU);
+   transColl->set_samplingPhase (persColl->m_samplingPhase);
+   transColl->set_triggerType (persColl->m_triggerType);
+   transColl->set_firstBitSummary (persColl->m_firstBitSummary);
+   transColl->set_eventType (persColl->m_eventType);
+   transColl->setRPUID (persColl->m_rpuID);
+   transColl->set_dataType (persColl->m_dataType);
+   transColl->set_spuCount (persColl->m_spuCount);
+   transColl->set_scaAddress (persColl->m_scaAddress);
+
+   // Invoke vector converter from the base template
+   CscRawDataCollection_Cnv_p4_base_t::persToTrans( persColl, transColl, log );
+}
+
+
+
+void
+CscRawDataCollectionCnv_p4::transToPers(const CscRawDataCollection* transColl, CscRawDataCollection_p4* persColl, MsgStream &log) 
+{
+    persColl->m_id             = transColl->identify();
+    persColl->m_rodId          = transColl->rodId() ;
+    persColl->m_subDetectorId  = transColl->subDetectorId();
+    persColl->m_numRPU         = transColl->numRPU();
+    persColl->m_samplingPhase  = transColl->samplingPhase() ;
+    persColl->m_triggerType    = transColl->triggerType() ;
+    persColl->m_firstBitSummary= transColl->firstBitSummary();
+    persColl->m_eventType      = transColl->eventType();
+    persColl->m_rpuID          = transColl->rpuID();
+    persColl->m_dataType       = transColl->dataType();
+    persColl->m_spuCount       = transColl->spuCount();
+    persColl->m_scaAddress     = transColl->scaAddress();
+    
+    // Invoke vector converter from the base template	 
+    CscRawDataCollection_Cnv_p4_base_t::transToPers( transColl, persColl, log );
+}
+
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ede8c883eee7713718830b0ea60cd80dacb586b
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataCollectionCnv_p4.h
@@ -0,0 +1,37 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawDataCollectionCnv_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#ifndef MUON_CSCCRAWDATACOLLECTIONCNV_P4_H
+#define MUON_CSCCRAWDATACOLLECTIONCNV_P4_H
+
+#include "MuonRDO/CscRawDataCollection.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+#include "MuonEventAthenaPool/CscRawDataCollection_p4.h"
+
+#include "CscRawDataCnv_p4.h"
+
+
+typedef  T_AthenaPoolTPCnvVector< CscRawDataCollection, CscRawDataCollection_p4, CscRawDataCnv_p4 >	CscRawDataCollection_Cnv_p4_base_t;
+
+/**
+Transient/Persistent converter for the Collection of CSC Raw Hits,
+*/
+
+class CscRawDataCollectionCnv_p4
+   : public CscRawDataCollection_Cnv_p4_base_t
+{
+public:
+  CscRawDataCollectionCnv_p4() {}
+
+  virtual void	persToTrans(const CscRawDataCollection_p4* persColl, CscRawDataCollection* transColl, MsgStream &log) ;
+  virtual void	transToPers(const CscRawDataCollection* transColl, CscRawDataCollection_p4* persColl, MsgStream &log) ;
+};
+
+
+#endif
+
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv.h
index ec28e23d303b929386ae46d48710dc3b7816c12e..1b19ccedbcdc55f3c2de14a02ccf89b43566df34 100644
--- a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv.h
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv.h
@@ -1,19 +1,16 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef MUONEVENTATHENAPOOL_CSCRAWDATACONTAINERCNV_H
 #define MUONEVENTATHENAPOOL_CSCRAWDATACONTAINERCNV_H
 
-
-
-
-#include "MuonEventAthenaPool/CscRawDataContainer_p1.h"
 #include "MuonRDO/CscRawDataContainer.h"
 #include "MuonRdoContainerTPCnv.h"
 #include "CscRawDataContainerCnv_p1.h"
 #include "CscRawDataContainerCnv_p2.h"
 #include "CscRawDataContainerCnv_p3.h"
+#include "CscRawDataContainerCnv_p4.h"
 
 /*
   custom POOL TP converter for CSC RDO
@@ -35,12 +32,17 @@ CscRawDataContainerCnv::createTransient()
    
    CscRawDataContainer *            trans_cont = 0;
    
-   static pool::Guid	p3_guid("A77330FB-BD12-4E50-829C-DADFBF556119");
-   static pool::Guid	p2_guid("19221A0D-4167-4A1C-BE2A-EE335D7C9D5F");
-   static pool::Guid	p1_guid("3586FE6B-0504-4E78-BD9F-AF839C50F931");
-   static pool::Guid	p0_guid("D7600810-31BC-4344-A3C6-9C59F47E5551");
+   static pool::Guid p4_guid("F94905BF-D474-4453-B9D0-80ECB7BA4041");
+   static pool::Guid p3_guid("A77330FB-BD12-4E50-829C-DADFBF556119");
+   static pool::Guid p2_guid("19221A0D-4167-4A1C-BE2A-EE335D7C9D5F");
+   static pool::Guid p1_guid("3586FE6B-0504-4E78-BD9F-AF839C50F931");
+   static pool::Guid p0_guid("D7600810-31BC-4344-A3C6-9C59F47E5551");
 
-   if( compareClassGuid(p3_guid) ) {
+   if( compareClassGuid(p4_guid) ) {
+      CscRawDataContainerCnv_p4        tpConvertor_p4;       
+      std::unique_ptr< CscRawDataContainer_p4 > col_vect( poolReadObject< CscRawDataContainer_p4 >() );
+      trans_cont = tpConvertor_p4.createTransient( col_vect.get(), log );
+   } else if( compareClassGuid(p3_guid) ) {
       std::unique_ptr< CscRawDataContainer_p3 > col_vect( poolReadObject< CscRawDataContainer_p3 >() );
       trans_cont = m_TPconverter.createTransient( col_vect.get(), log );
    } else if( compareClassGuid(p2_guid) ) {
diff --git a/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv_p4.h b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv_p4.h
new file mode 100644
index 0000000000000000000000000000000000000000..1051ce8138d3bbd182dab2d5f8d45ca3ea52b8da
--- /dev/null
+++ b/MuonSpectrometer/MuonCnv/MuonEventAthenaPool/src/CscRawDataContainerCnv_p4.h
@@ -0,0 +1,29 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+// NOTE: This is an exact copy of CscRawDataContainerCnv_p3, since from p3 to p4 only the meaning of the m_hashId changed:
+// Until p3, the m_hashId stores the identifier hash which encodes the geometrical position of the CSC
+// From p4 onwards, the m_hashId stores the position of the CSC identifier in the vector of identifiers
+
+#ifndef MUON_CSCCRAWDATACONTAINERCNV_P4_H
+#define MUON_CSCCRAWDATACONTAINERCNV_P4_H
+
+
+#include "MuonRDO/CscRawDataContainer.h"
+#include "MuonEventAthenaPool/CscRawDataContainer_p4.h"
+#include "CscRawDataCollectionCnv_p4.h"
+
+/**
+Transient/Persistent converter for a container of collections of CSC Raw Hits,
+*/
+class CscRawDataContainerCnv_p4
+    : public T_AthenaPoolTPCnvIDCont< CscRawDataContainer, CscRawDataContainer_p4, CscRawDataCollectionCnv_p4>
+{
+public:
+  CscRawDataContainerCnv_p4() {}
+
+};
+
+
+#endif