diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
index 42957bdb24ac825f39b18a2c51a32e6c48afedff..4d06d0d6c83ed45230f638976cb56ab2f017e51e 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
@@ -309,7 +309,11 @@ protected:
     void addStationID(Identifier& id, int stationName, int stationEta, int stationPhi, int technology) const;
 
     void addStationID(ExpandedIdentifier& id, int stationName, int stationEta, int stationPhi, int technology) const;
-
+    
+    inline void resetAndSet(const IdDictFieldImplementation & dict, const int new_val, Identifier& id ) const {
+        dict.reset(id);
+        dict.pack(new_val,id);
+    }
 private:
     // Copy constructor - do not use!
     MuonIdHelper(const MuonIdHelper& other) = delete;
diff --git a/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
index fca77b6ca4bd015af53061b7549012d824d6ab7d..8353a2a9099c7b2dcc618456ee807f4129c0ed6a 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
@@ -880,10 +880,10 @@ Identifier CscIdHelper::channelID(const std::string& stationNameStr, int station
 
 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip) const {
     Identifier result(id);
-    m_cla_impl.pack(chamberLayer, result);
-    m_lay_impl.pack(wireLayer, result);
-    m_mea_impl.pack(measuresPhi, result);
-    m_str_impl.pack(strip, result);
+    resetAndSet(m_cla_impl, chamberLayer, result);
+    resetAndSet(m_lay_impl, wireLayer, result);
+    resetAndSet(m_mea_impl, measuresPhi, result);
+    resetAndSet(m_str_impl, strip, result);
     return result;
 }
 Identifier CscIdHelper::channelID(const Identifier& id, int chamberLayer, int wireLayer, int measuresPhi, int strip, bool& isValid) const {
diff --git a/MuonSpectrometer/MuonIdHelpers/src/MdtIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/MdtIdHelper.cxx
index 5ce6f808b2f02283477dcefd7bf8fa8320186a27..520232cd613d2b9dc587d01d5c970ea5b93194de 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/MdtIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/MdtIdHelper.cxx
@@ -301,8 +301,8 @@ Identifier MdtIdHelper::multilayerID(const Identifier& channelID) const {
 }
 
 Identifier MdtIdHelper::multilayerID(const Identifier& moduleID, int multilayer) const {
-    Identifier result(moduleID);
-    m_mla_impl.pack(multilayer, result);
+    Identifier result{moduleID};
+    resetAndSet(m_mla_impl, multilayer, result);
     return result;
 }
 
@@ -712,9 +712,9 @@ Identifier MdtIdHelper::channelID(const std::string& stationNameStr, int station
 
 Identifier MdtIdHelper::channelID(const Identifier& id, int multilayer, int tubeLayer, int tube) const {
     Identifier result(id);
-    m_mla_impl.pack(multilayer, result);
-    m_lay_impl.pack(tubeLayer, result);
-    m_tub_impl.pack(tube, result);
+    resetAndSet(m_mla_impl, multilayer, result);
+    resetAndSet(m_lay_impl, tubeLayer, result);
+    resetAndSet(m_tub_impl, tube, result);
     return result;
 }
 Identifier MdtIdHelper::channelID(const Identifier& id, int multilayer, int tubeLayer, int tube, bool& isValid) const {
diff --git a/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
index b5396811e746a4880f90bc24e4e55ca581da7411..15eecafe9d99e1d6702a2a552e6f5feedb1ec828 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
@@ -284,7 +284,7 @@ Identifier MmIdHelper::multilayerID(const Identifier& channelID) const {
 /*******************************************************************************/
 Identifier MmIdHelper::multilayerID(const Identifier& moduleID, int multilayer) const {
     Identifier result(moduleID);
-    m_mplet_impl.pack(multilayer, result);
+    resetAndSet(m_mplet_impl, multilayer, result);
     return result;
 }
 Identifier MmIdHelper::multilayerID(const Identifier& moduleID, int multilayer, bool& isValid) const {
@@ -695,11 +695,10 @@ Identifier MmIdHelper::channelID(const std::string& stationNameStr, int stationE
 
 /*******************************************************************************/
 Identifier MmIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channel) const {
-    Identifier result(id);
-    m_mplet_impl.pack(multilayer, result);
-    m_gap_impl.pack(gasGap, result);
-    m_cha_impl.pack(channel, result);
-
+    Identifier result{id};
+    resetAndSet(m_mplet_impl, multilayer, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_cha_impl, channel, result);
     return result;
 }
 Identifier MmIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channel, bool& isValid) const {
diff --git a/MuonSpectrometer/MuonIdHelpers/src/RpcIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/RpcIdHelper.cxx
index a599f4c093e0ac600b64bda926b53e06d3013231..35d16b029b219fd4e0ebf7ebf384a29a28f98712 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/RpcIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/RpcIdHelper.cxx
@@ -844,7 +844,7 @@ Identifier RpcIdHelper::elementID(const std::string& stationNameStr, int station
 
 Identifier RpcIdHelper::elementID(const Identifier& id, int doubletR) const {
     Identifier result(id);
-    m_dbr_impl.pack(doubletR, result);
+    resetAndSet(m_dbr_impl, doubletR, result);
     return result;
 }
 
@@ -897,8 +897,8 @@ Identifier RpcIdHelper::panelID(const Identifier& channelID) const {
 
 Identifier RpcIdHelper::panelID(const Identifier& padID, int gasGap, int measuresPhi) const {
     Identifier result(padID);
-    m_gap_impl.pack(gasGap, result);
-    m_mea_impl.pack(measuresPhi, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_mea_impl, measuresPhi, result);
     return result;
 }
 Identifier RpcIdHelper::panelID(const Identifier& padID, int gasGap, int measuresPhi, bool& isValid) const {
@@ -944,7 +944,7 @@ Identifier RpcIdHelper::gapID(const Identifier& panelID) const {
 
 Identifier RpcIdHelper::gapID(const Identifier& padID, int gasGap) const {
     Identifier result(padID);
-    m_gap_impl.pack(gasGap, result);
+    resetAndSet(m_gap_impl, gasGap, result);
     return result;
 }
 Identifier RpcIdHelper::gapID(const Identifier& padID, int gasGap, bool& isValid) const {
@@ -996,11 +996,11 @@ Identifier RpcIdHelper::channelID(const std::string& stationNameStr, int station
 Identifier RpcIdHelper::channelID(const Identifier& id, int doubletZ, int doubletPhi, int gasGap, int measuresPhi, int strip) const {
     // pack fields independently
     Identifier result(id);
-    m_dbz_impl.pack(doubletZ, result);
-    m_dbp_impl.pack(doubletPhi, result);
-    m_gap_impl.pack(gasGap, result);
-    m_mea_impl.pack(measuresPhi, result);
-    m_str_impl.pack(strip, result);
+    resetAndSet(m_dbz_impl, doubletZ, result);
+    resetAndSet(m_dbp_impl, doubletPhi, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_mea_impl, measuresPhi, result);
+    resetAndSet(m_str_impl, strip, result);
     return result;
 }
 Identifier RpcIdHelper::channelID(const Identifier& id, int doubletZ, int doubletPhi, int gasGap, int measuresPhi, int strip,
@@ -1062,8 +1062,8 @@ Identifier RpcIdHelper::padID(int stationName, int stationEta, int stationPhi, i
 Identifier RpcIdHelper::padID(const Identifier& id, int doubletZ, int doubletPhi) const {
     // pack fields independently
     Identifier result(id);
-    m_dbz_impl.pack(doubletZ, result);
-    m_dbp_impl.pack(doubletPhi, result);
+    resetAndSet(m_dbz_impl, doubletZ, result);
+    resetAndSet(m_dbp_impl, doubletPhi, result);
     return result;
 }
 Identifier RpcIdHelper::padID(const Identifier& id, int doubletZ, int doubletPhi, bool& isValid) const {
diff --git a/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
index ebb69df535f0158e22b105bdcd83c139d4c25c13..bb355a82fcd7626dca7b25921646a9070361fbed 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
@@ -603,9 +603,9 @@ Identifier TgcIdHelper::channelID(const std::string& stationNameStr, int station
 
 Identifier TgcIdHelper::channelID(const Identifier& id, int gasGap, int isStrip, int channel) const {
     Identifier result(id);
-    m_gap_impl.pack(gasGap, result);
-    m_ist_impl.pack(isStrip, result);
-    m_cha_impl.pack(channel, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_ist_impl, isStrip, result);
+    resetAndSet(m_cha_impl, channel, result);
     return result;
 }
 Identifier TgcIdHelper::channelID(const Identifier& id, int gasGap, int isStrip, int channel, bool& isValid) const {
diff --git a/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
index 7c97876763566e25912296828a0ad6d01815ebda..a1a0aefddf43428df87e401172d832d0cf047e3f 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
@@ -295,7 +295,7 @@ Identifier sTgcIdHelper::multilayerID(const Identifier& channelID) const {
 /*******************************************************************************/
 Identifier sTgcIdHelper::multilayerID(const Identifier& moduleID, int multilayer) const {
     Identifier result(moduleID);
-    m_mplet_impl.pack(multilayer, result);
+    resetAndSet(m_mplet_impl, multilayer, result);
     return result;
 }
 Identifier sTgcIdHelper::multilayerID(const Identifier& moduleID, int multilayer, bool& isValid) const {
@@ -847,10 +847,10 @@ Identifier sTgcIdHelper::channelID(const std::string& stationNameStr, int statio
 /*******************************************************************************/
 Identifier sTgcIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channelType, int channel) const {
     Identifier result = parentID(id);
-    m_mplet_impl.pack(multilayer, result);
-    m_gap_impl.pack(gasGap, result);
-    m_typ_impl.pack(channelType, result);
-    m_cha_impl.pack(channel, result);
+    resetAndSet(m_mplet_impl, multilayer, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_typ_impl, channelType, result);
+    resetAndSet(m_cha_impl, channel, result);
     return result;
 }
 Identifier sTgcIdHelper::channelID(const Identifier& id, int multilayer, int gasGap, int channelType, int channel, bool& isValid) const {
@@ -910,9 +910,9 @@ Identifier sTgcIdHelper::padID(const std::string& stationNameStr, int stationEta
 Identifier sTgcIdHelper::padID(const Identifier& id, int multilayer, int gasGap, int channelType, int padEta, int padPhi) const {
     Identifier result(id);
     if (channelType != Pad) return result;
-    m_mplet_impl.pack(multilayer, result);
-    m_gap_impl.pack(gasGap, result);
-    m_typ_impl.pack(channelType, result);
+    resetAndSet(m_mplet_impl, multilayer, result);
+    resetAndSet(m_gap_impl, gasGap, result);
+    resetAndSet(m_typ_impl, channelType, result);
     int channel = (padPhi - 1) * PadEtaMax + padEta;
     m_cha_impl.pack(channel, result);