diff --git a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/MuonAlignmentData/MuonAlignmentPar.h b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/MuonAlignmentData/MuonAlignmentPar.h
index 60c5629a97e751b31dfa16d655b2b5cbf080aaa7..409fc0f39b85074d6d2ac1f82cfd0958c15cb726 100755
--- a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/MuonAlignmentData/MuonAlignmentPar.h
+++ b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/MuonAlignmentData/MuonAlignmentPar.h
@@ -17,7 +17,7 @@ public:
     Identifier identify() const { return m_stationId; }
     std::string key() const { return m_stationKey; }
 
-    void setAmdbId(const std::string& type, int jff, int jzz, int job);
+    void setAmdbId(std::string_view type, int jff, int jzz, int job);
     void getAmdbId(std::string& type, int& jff, int& jzz, int& job) const;
 
     bool isNew() const { return m_isNew; }
diff --git a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/MuonAlignmentPar.cxx b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/MuonAlignmentPar.cxx
index 73ed0dd5a97c06669a6bfe0b01df0bcfd08be22f..3f658810ac0af42e0a193309270eb7ff807be4d6 100755
--- a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/MuonAlignmentPar.cxx
+++ b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/MuonAlignmentPar.cxx
@@ -6,8 +6,8 @@
 
 MuonAlignmentPar::MuonAlignmentPar() : m_Jff(0), m_Jzz(0), m_Job(0), m_isNew(false) {}
 
-void MuonAlignmentPar::setAmdbId(const std::string& type, int jff, int jzz, int job) {
-    m_Type = type;
+void MuonAlignmentPar::setAmdbId(std::string_view type, int jff, int jzz, int job) {
+    m_Type = std::string(type);
     m_Jff = jff;
     m_Jzz = jzz;
     m_Job = job;
diff --git a/MuonSpectrometer/MuonCablings/MuonMDT_Cabling/src/MuonMDT_CablingAlg.cxx b/MuonSpectrometer/MuonCablings/MuonMDT_Cabling/src/MuonMDT_CablingAlg.cxx
index 088d736986f9a5cf1603dcd99d7f4cf30d148819..4328abcf232117d89708cc6237019240b6cb9256 100644
--- a/MuonSpectrometer/MuonCablings/MuonMDT_Cabling/src/MuonMDT_CablingAlg.cxx
+++ b/MuonSpectrometer/MuonCablings/MuonMDT_Cabling/src/MuonMDT_CablingAlg.cxx
@@ -154,9 +154,8 @@ StatusCode MuonMDT_CablingAlg::execute(){
     // convert the subdetector id to integer
     int subdetectorId = atoi(subdetector_id.c_str());
 
-    std::string delimiter = ",";
-    std::vector<std::string> info_map;
-    MuonCalib::MdtStringUtils::tokenize(map,info_map,delimiter);   
+    char delimiter = ',';
+    auto info_map = MuonCalib::MdtStringUtils::tokenize(map,delimiter);   
     ATH_MSG_VERBOSE( " parsing of the map"  );
 
     int index=0;
@@ -170,7 +169,7 @@ StatusCode MuonMDT_CablingAlg::execute(){
 
     for(unsigned int i=0; i<info_map.size();i++){
       ATH_MSG_VERBOSE( i << "..."<< info_map[i] );
-      int info = atoi(info_map[i].c_str());
+      int info = MuonCalib::MdtStringUtils::atoi(info_map[i]);
       index++;
       // this is a tdcid
       if (index==1) {
diff --git a/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabasePPToSL.cxx b/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabasePPToSL.cxx
index 4b6ebf7dc731bc3327523361251fc242b5706f71..57090fd3e05ae8ae3237fd4fd4c8aad0be06b0d7 100644
--- a/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabasePPToSL.cxx
+++ b/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabasePPToSL.cxx
@@ -15,7 +15,7 @@ TGCDatabasePPToSL::TGCDatabasePPToSL(const std::string& filename,
     : TGCDatabase(TGCDatabase::PPToSL, filename, blockname)
 {
   // read out ascii file and fill database
-  if(m_database.size()==0) readDB();
+  if(m_database.empty()) readDB();
 }
 
 TGCDatabasePPToSL::TGCDatabasePPToSL(const TGCDatabasePPToSL& right)
@@ -28,10 +28,10 @@ void TGCDatabasePPToSL::readDB(void) {
   std::ifstream file(m_filename.c_str());
   std::string buf;
 
-  unsigned int space = m_blockname.find(" ");
-  std::string module = m_blockname.substr(0,space);
-  std::string region = m_blockname.substr(space+1,1);
-  std::string type = m_blockname.substr(space+2);
+  unsigned int space = m_blockname.find(' ');
+  std::string_view module =std::string_view( m_blockname).substr(0,space);
+  std::string_view region = std::string_view(m_blockname).substr(space+1,1);
+  std::string_view type = std::string_view(m_blockname).substr(space+2);
 
   int offset=-1;
   if(type == "WT") offset = 1;
@@ -44,16 +44,16 @@ void TGCDatabasePPToSL::readDB(void) {
   if(type == "S")  offset = 2;
 
   while(getline(file,buf)){
-    if(buf.substr(0,1)==region) break;
+    if(buf.compare(0,1,region)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(1,module.size())==module) break;
+    if(buf.compare(1,module.size(),module)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(0,2)!="  ") break;
-    if(buf.substr(2,1)=="0") offset--;
+    if(buf.compare(0,2,"  ")!=0) break;
+    if(buf.compare(2,1,"0")==0) offset--;
     if(offset==0){
       std::istringstream line(buf);
       std::vector<int> entry;
@@ -62,7 +62,7 @@ void TGCDatabasePPToSL::readDB(void) {
         line >> temp; 
         entry.push_back(temp);
       }
-      m_database.push_back(entry);
+      m_database.emplace_back(std::move(entry));
     }
   }
   
diff --git a/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabaseSLBToROD.cxx b/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabaseSLBToROD.cxx
index c02386de14eda1da0cdc6915e90ebcd48526b211..f889491cc46a97a90edfde14b8f6b9eca56e6bc5 100644
--- a/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabaseSLBToROD.cxx
+++ b/MuonSpectrometer/MuonCablings/MuonTGC_Cabling/src/TGCDatabaseSLBToROD.cxx
@@ -15,7 +15,7 @@ TGCDatabaseSLBToROD::TGCDatabaseSLBToROD(const std::string& filename,
    : TGCDatabase(TGCDatabase::SLBToROD, filename, blockname)
 {
   // read out ascii file and fill database
-  if(m_database.size()==0) readDB();
+  if(m_database.empty()) readDB();
 }
 
 TGCDatabaseSLBToROD::TGCDatabaseSLBToROD(const TGCDatabaseSLBToROD& right)
@@ -27,20 +27,20 @@ void TGCDatabaseSLBToROD::readDB(void) {
   std::ifstream file(m_filename.c_str());
   std::string buf;
 
-  unsigned int space = m_blockname.find(" ");
-  std::string module = m_blockname.substr(0,space);
-  std::string type = m_blockname.substr(space+1);
+  unsigned int space = m_blockname.find(' ');
+  std::string_view module = std::string_view(m_blockname).substr(0,space);
+  std::string_view type = std::string_view(m_blockname).substr(space+1);
 
   while(getline(file,buf)){
-    if(buf.substr(0,module.size())==module) break;
+    if(buf.compare(0,module.size(),module)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(1,type.size())==type) break;
+    if(buf.compare(1,type.size(),type)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(0,2)!="  ") break;
+    if(buf.compare(0,2,"  ")!=0) break;
     std::istringstream line(buf);
     std::vector<int> entry;
     for(int i=0; i<6; i++){
@@ -48,7 +48,7 @@ void TGCDatabaseSLBToROD::readDB(void) {
       line >> temp; 
       entry.push_back(temp);
     }
-    m_database.push_back(entry);
+    m_database.emplace_back(std::move(entry));
   }
   
   file.close();
diff --git a/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabasePPToSL.cxx b/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabasePPToSL.cxx
index dc396a4e24df0327aafdced9f44fab3d8437e628..a3999dbbba1e0cd826a386d802e9bb5ce28cc4f6 100755
--- a/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabasePPToSL.cxx
+++ b/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabasePPToSL.cxx
@@ -15,10 +15,10 @@ void TGCDatabasePPToSL::readDB (void) {
   std::ifstream file(m_filename.c_str());
   std::string buf;
 
-  unsigned int space = m_blockname.find(" ");
-  std::string module = m_blockname.substr(0,space);
-  std::string region = m_blockname.substr(space+1,1);
-  std::string type = m_blockname.substr(space+2);
+  unsigned int space = m_blockname.find(' ');
+  std::string_view module = std::string_view(m_blockname).substr(0,space);
+  std::string_view region = std::string_view(m_blockname).substr(space+1,1);
+  std::string_view type = std::string_view(m_blockname).substr(space+2);
 
   int offset=-1;
   if(type == "WT") offset = 1;
@@ -31,16 +31,16 @@ void TGCDatabasePPToSL::readDB (void) {
   if(type == "S")  offset = 2;
 
   while(getline(file,buf)){
-    if(buf.substr(0,1)==region) break;
+    if(buf.compare(0,1, region)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(1,module.size())==module) break;
+    if(buf.compare(1,module.size(), module)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(0,2)!="  ") break;
-    if(buf.substr(2,1)=="0") offset--;
+    if(buf.compare(0,2,"  ")!=0) break;
+    if(buf.compare(2,1,"0")==0) offset--;
     if(offset==0){
       std::istringstream line(buf);
       std::vector<int> entry;
@@ -49,7 +49,7 @@ void TGCDatabasePPToSL::readDB (void) {
         line >> temp; 
         entry.push_back(temp);
       }
-      m_database.push_back(entry);
+      m_database.emplace_back(std::move(entry));
     }
   }
   
diff --git a/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabaseSLBToROD.cxx b/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabaseSLBToROD.cxx
index 68642cc11b3860ab8981e0ecec44ae920dca3137..157b00c344434dabce3559167324b69bf1dc991a 100755
--- a/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabaseSLBToROD.cxx
+++ b/MuonSpectrometer/MuonCablings/TGCcabling/src/TGCDatabaseSLBToROD.cxx
@@ -15,20 +15,20 @@ void TGCDatabaseSLBToROD::readDB (void) {
   std::ifstream file(m_filename.c_str());
   std::string buf;
 
-  unsigned int space = m_blockname.find(" ");
-  std::string module = m_blockname.substr(0,space);
-  std::string type = m_blockname.substr(space+1);
+  unsigned int space = m_blockname.find(' ');
+  std::string_view module = std::string_view(m_blockname).substr(0,space);
+  std::string_view type = std::string_view(m_blockname).substr(space+1);
 
   while(getline(file,buf)){
-    if(buf.substr(0,module.size())==module) break;
+    if(buf.compare(0,module.size(),module)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(1,type.size())==type) break;
+    if(buf.compare(1,type.size(),type)==0) break;
   }
 
   while(getline(file,buf)){
-    if(buf.substr(0,2)!="  ") break;
+    if(buf.compare(0,2,"  ")!=0) break;
     std::istringstream line(buf);
     std::vector<int> entry;
     for(int i=0; i<4; i++){
@@ -36,7 +36,7 @@ void TGCDatabaseSLBToROD::readDB (void) {
       line >> temp; 
       entry.push_back(temp);
     }
-    m_database.push_back(entry);
+    m_database.emplace_back(std::move(entry));
   }
   
   file.close();
diff --git a/MuonSpectrometer/MuonCalib/MuonCalibIdentifier/src/MdtGasChannel.cxx b/MuonSpectrometer/MuonCalib/MuonCalibIdentifier/src/MdtGasChannel.cxx
index 147869b686dc8b0b46c60eb60d70f39d72a4ab76..3307f4a4e7663af1178703f356d0675c3d51c788 100644
--- a/MuonSpectrometer/MuonCalib/MuonCalibIdentifier/src/MdtGasChannel.cxx
+++ b/MuonSpectrometer/MuonCalib/MuonCalibIdentifier/src/MdtGasChannel.cxx
@@ -44,16 +44,13 @@ bool MdtGasChannel::readFile()
 		lnstr>>chan;
 		if(lnstr.eof()) continue;
 		lnstr>>stations;
-		if((pos=chan.find("/"))==std::string::npos) continue;
+		if((pos=chan.find('/'))==std::string::npos) continue;
 		chan[pos]=' ';
 		std::istringstream chanstr(chan);
 		GasChannel c;
 		chanstr>>c.first;
 		chanstr>>c.second;
-		while((pos=stations.find(","))!=std::string::npos)
-			{
-			stations[pos]=' ';
-			}
+		std::replace(stations.begin(), stations.end(), ',', ' ');
 		std::istringstream st_stream(stations);
 		std::string station;
 		while(1)
diff --git a/MuonSpectrometer/MuonCnv/MuonPrdSelector/src/MuonIdCutTool.cxx b/MuonSpectrometer/MuonCnv/MuonPrdSelector/src/MuonIdCutTool.cxx
index f017b71f949d62e3e267dce3c10a23175d4a47fa..f7c7f3de6d63ed312197c4859f5479cae433d2b7 100644
--- a/MuonSpectrometer/MuonCnv/MuonPrdSelector/src/MuonIdCutTool.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonPrdSelector/src/MuonIdCutTool.cxx
@@ -6,7 +6,7 @@
 
 #include "MuonCalibTools/IdToFixedIdTool.h"
 #include "MuonCalibIdentifier/MuonFixedId.h"
-
+#include "MuonCondSvc/MdtStringUtils.h"
 
 //Tool to impliment a set of cuts on an Identifier, and then determine if a given ID is in that set
 
@@ -72,15 +72,15 @@ StatusCode MuonIdCutTool::initialize() {
   int max = m_EELList.size();
   
   for(int i=0;i<max;i++){
-    std::string cut = m_EELList[i];
+    std::string_view cut = m_EELList[i];
     ATH_MSG_DEBUG( "EEL String: "  << cut  );
     size_t length = cut.size();
     size_t loc = cut.find('/');
     if (loc!=std::string::npos){
-      std::string etaString = cut.substr(0,loc);
-      std::string sectorString = cut.substr(loc+1,length-loc-1);
-      int eta = atoi(etaString.c_str());
-      int sector = atoi(sectorString.c_str());
+      std::string_view etaString = cut.substr(0,loc);
+      std::string_view sectorString = cut.substr(loc+1,length-loc-1);
+      int eta =   MuonCalib::MdtStringUtils::atoi(etaString);
+      int sector =  MuonCalib::MdtStringUtils::atoi(sectorString);
 
       ATH_MSG_DEBUG( "EEL eta/phi string: "<< etaString << " " << sectorString  );
       ATH_MSG_DEBUG( "EEL eta/phi int: "<< eta << " " << sector  );
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/CscCondDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/CscCondDbAlg.cxx
index df7780722a85480192c63fab0e0dd5d615cc30bd..ccda0c7b974763d9bf59677e2f804368aaff4a44 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/CscCondDbAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/CscCondDbAlg.cxx
@@ -115,7 +115,7 @@ StatusCode CscCondDbAlg::loadDataHv(writeHandle_t& writeHandle, CscCondDbData* w
     CondAttrListCollection::const_iterator itr;
     std::map<Identifier, int> layerMap;
     int hv_state, lv_state, hv_setpoint0, hv_setpoint1;
-
+    using namespace MuonCalib;
     unsigned int chan_index = 0;
     for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
         unsigned int chanNum = readCdo->chanNum(chan_index);
@@ -129,27 +129,26 @@ StatusCode CscCondDbAlg::loadDataHv(writeHandle_t& writeHandle, CscCondDbData* w
             hv_setpoint0 = *(static_cast<const int*>((atr["HVSetpoint0"]).addressOfData()));
             hv_setpoint1 = *(static_cast<const int*>((atr["HVSetpoint1"]).addressOfData()));
 
-            std::string delimiter = "_";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(csc_chan_name, tokens, delimiter);
+            char delimiter = '_';
+            auto tokens = MuonCalib::MdtStringUtils::tokenize(csc_chan_name, delimiter);
 
             if ((hv_state != 1 or lv_state != 1 or hv_setpoint0 < 1000 or hv_setpoint1 < 1000) && !tokens.empty()) {
-                std::string layer = tokens[1];
-                std::string number_layer = tokens[1].substr(1, 2);
-                int wirelayer = atoi(const_cast<char*>(number_layer.c_str()));
+                std::string_view layer = tokens[1];
+                std::string_view number_layer = tokens[1].substr(1, 2);
+                int wirelayer = MdtStringUtils::atoi(number_layer);
 
                 int eta = 0;
-                std::string eta_side = tokens[0].substr(0, 1);
-                if (eta_side == "A") eta = +1;
-                if (eta_side == "C") eta = -1;
+                char eta_side = tokens[0][0];
+                if (eta_side == 'A') eta = +1;
+                if (eta_side == 'C') eta = -1;
 
-                std::string chamber_name;
-                std::string size_side = tokens[0].substr(1, 1);
-                if (size_side == "L") chamber_name = "CSL";
-                if (size_side == "S") chamber_name = "CSS";
+                std::string_view chamber_name;
+                char size_side = tokens[0][1];
+                if (size_side == 'L') chamber_name = "CSL";
+                if (size_side == 'S') chamber_name = "CSS";
 
                 int phi = 0;
-                std::string sector_side = tokens[0].substr(2, 4);
+                std::string_view sector_side = tokens[0].substr(2, 4);
                 if (sector_side == "01" || sector_side == "02") phi = 1;
                 if (sector_side == "03" || sector_side == "04") phi = 2;
                 if (sector_side == "05" || sector_side == "06") phi = 3;
@@ -161,7 +160,13 @@ StatusCode CscCondDbAlg::loadDataHv(writeHandle_t& writeHandle, CscCondDbData* w
 
                 Identifier ChamberId = m_idHelperSvc->cscIdHelper().elementID(chamber_name, eta, phi);
                 Identifier WireLayerId = m_idHelperSvc->cscIdHelper().channelID(ChamberId, 1, wirelayer, 1, 1);
-                std::string WireLayerstring = chamber_name + "_" + eta_side + "_" + sector_side + "_" + layer;
+                std::string WireLayerstring = std::string(chamber_name);
+                WireLayerstring += '_';
+                WireLayerstring += eta_side;
+                WireLayerstring += '_';
+                WireLayerstring += sector_side;
+                WireLayerstring += '_';
+                WireLayerstring += layer;
 
                 writeCdo->setDeadLayer(WireLayerstring, WireLayerId);
                 if (layerMap.count(ChamberId) == 0) layerMap[ChamberId] = 0;
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx
index fe6ec8a4636f54ca00e0b75c36940b179076cc1c..f5b84d4a9af8b9812d18a08200f433c4a03e472d 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MdtCondDbAlg.cxx
@@ -111,34 +111,36 @@ StatusCode MdtCondDbAlg::loadDataPsHv(writeHandle_t& wh, MdtCondDbData* writeCdo
 
         if (atr.size() == 1) {
             hv_name = *(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
-            std::string delimiter = " ";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(hv_name, tokens, delimiter);
+            char delimiter = ' ';
+            auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name, delimiter);
 
             std::string thename;
-            std::string delimiter2 = "_";
-            std::vector<std::string> tokens2;
-            MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2);
+            char delimiter2 = '_';
+            auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload, delimiter2);
 
             if (tokens[0] != "ON" && tokens[0] != "STANDBY" && tokens[0] != "UNKNOWN") {
-                int multilayer = atoi((tokens2[3].c_str()));
-                std::string chamber_name = tokens2[2];
+                int multilayer = MuonCalib::MdtStringUtils::atoi(tokens2[3]);
+                const auto  &chamber_name = tokens2[2];
                 Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
                 if (ChamberId.is_valid()) {
                     Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                    thename = chamber_name + "_multilayer" + tokens2[3];
+                    thename = std::string(chamber_name);
+                    thename += "_multilayer";
+                    thename += tokens2[3];
                     writeCdo->setDeadMultilayer(thename, MultiLayerId);
                     writeCdo->setDeadChamber(ChamberId);
                     cachedDeadMultiLayersId_standby.push_back(MultiLayerId);
                 }
             }
             if (tokens[0] == "STANDBY") {
-                int multilayer = atoi((tokens2[3].c_str()));
-                std::string chamber_name = tokens2[2];
+                int multilayer = MuonCalib::MdtStringUtils::atoi(tokens2[3]);
+                const auto &chamber_name = tokens2[2];
                 Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
                 if (ChamberId.is_valid()) {
                     Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                    thename = chamber_name + "_multilayer" + tokens2[3];
+                    thename = std::string(chamber_name);
+                    thename += "_multilayer";
+                    thename += tokens2[3];
                     writeCdo->setDeadMultilayer(thename, MultiLayerId);
                     writeCdo->setDeadChamber(ChamberId);
                     cachedDeadMultiLayersId_standby.push_back(MultiLayerId);
@@ -188,17 +190,18 @@ StatusCode MdtCondDbAlg::loadDataPsHv(writeHandle_t& wh, MdtCondDbData* writeCdo
 
         if (atr_v0.size() == 1) {
             setPointsV0_name = *(static_cast<const float*>((atr_v0["readBackSettings_v0"]).addressOfData()));
-            std::string delimiter2 = "_";
-            std::vector<std::string> tokens2;
-            MuonCalib::MdtStringUtils::tokenize(setPointsV0_payload, tokens2, delimiter2);
-
-            int multilayer = atoi(tokens2[3].c_str());
-            std::string chamber_name = tokens2[2];
-            std::string thename = chamber_name + "_" + tokens2[3];
+            char delimiter2 = '_';
+            auto tokens2 = MuonCalib::MdtStringUtils::tokenize(setPointsV0_payload, delimiter2);
+
+            int multilayer = MuonCalib::MdtStringUtils::atoi(tokens2[3]);
+            const auto &chamber_name = tokens2[2];
+            std::string thename = std::string(chamber_name);
+            thename += '_';
+            thename += tokens2[3];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name);
             Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
             chamberML_V0[MultiLayerId] = setPointsV0_name;
-            mlname[MultiLayerId] = thename;
+            mlname[MultiLayerId] = std::move(thename);
         }
     }
 
@@ -213,17 +216,18 @@ StatusCode MdtCondDbAlg::loadDataPsHv(writeHandle_t& wh, MdtCondDbData* writeCdo
         if (atr_v1.size() == 1) {
             setPointsV1_name = *(static_cast<const float*>((atr_v1["readBackSettings_v1"]).addressOfData()));
 
-            std::string delimiter2 = "_";
-            std::vector<std::string> tokens2;
-            MuonCalib::MdtStringUtils::tokenize(setPointsV1_payload, tokens2, delimiter2);
+            char delimiter2 = '_';
+            auto tokens2= MuonCalib::MdtStringUtils::tokenize(setPointsV1_payload, delimiter2);
 
-            int multilayer = atoi(tokens2[3].c_str());
-            std::string chamber_name = tokens2[2];
-            std::string thename = chamber_name + "_" + tokens2[3];
+            int multilayer = MuonCalib::MdtStringUtils::atoi(tokens2[3]);
+            const auto &chamber_name = tokens2[2];
+            std::string thename = std::string(chamber_name);
+            thename += '_';
+            thename += tokens2[3];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name);
             Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
             chamberML_V1[MultiLayerId] = setPointsV1_name;
-            mlname[MultiLayerId] = thename;
+            mlname[MultiLayerId] = std::move(thename);
         }
     }
 
@@ -266,15 +270,13 @@ StatusCode MdtCondDbAlg::loadDataPsLv(writeHandle_t& wh, MdtCondDbData* writeCdo
 
         if (!atr.size()) { continue; }
         hv_name = *(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
-        std::string delimiter = " ";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(hv_name, tokens, delimiter);
-        std::string delimiter2 = "_";
-        std::vector<std::string> tokens2;
-        MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2);
+        char delimiter = ' ';
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name, delimiter);
+        char delimiter2 = '_';
+        auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload, delimiter2);
 
         if (tokens[0] != "ON") {
-            std::string chamber_name = tokens2[2];
+            const auto &chamber_name = tokens2[2];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) { writeCdo->setDeadStation(chamber_name, ChamberId); }
         }
@@ -314,17 +316,16 @@ StatusCode MdtCondDbAlg::loadDataHv(writeHandle_t& wh, MdtCondDbData* writeCdo,
         hv_v1_ml2 = *(static_cast<const float*>((atr["v1set_ML2"]).addressOfData()));
 
         std::string thename;
-        std::string delimiter2 = "_";
-        std::vector<std::string> tokens2;
-        MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2);
+        char delimiter2 = '_';
+        auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload, delimiter2);
 
         if (hv_name_ml1 != "ON" && hv_name_ml1 != "STANDBY" && hv_name_ml1 != "UNKNOWN") {
             int multilayer = 1;
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) {
                 Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                thename = chamber_name + "_multilayer1";
+                thename = std::string(chamber_name) + "_multilayer1";
                 writeCdo->setDeadMultilayer(thename, MultiLayerId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -332,11 +333,11 @@ StatusCode MdtCondDbAlg::loadDataHv(writeHandle_t& wh, MdtCondDbData* writeCdo,
 
         if (hv_name_ml1 == "STANDBY" && hv_v0_ml1 != hv_v1_ml1) {
             int multilayer = 1;
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) {
                 Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                thename = chamber_name + "_multilayer1";
+                thename = std::string(chamber_name) + "_multilayer1";
                 writeCdo->setDeadMultilayer(thename, MultiLayerId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -344,11 +345,11 @@ StatusCode MdtCondDbAlg::loadDataHv(writeHandle_t& wh, MdtCondDbData* writeCdo,
 
         if (hv_name_ml2 != "ON" && hv_name_ml2 != "STANDBY" && hv_name_ml2 != "UNKNOWN") {
             int multilayer = 2;
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) {
                 Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                thename = chamber_name + "_multilayer2";
+                thename = std::string(chamber_name) + "_multilayer2";
                 writeCdo->setDeadMultilayer(thename, MultiLayerId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -356,11 +357,11 @@ StatusCode MdtCondDbAlg::loadDataHv(writeHandle_t& wh, MdtCondDbData* writeCdo,
 
         if (hv_name_ml2 == "STANDBY" && hv_v0_ml2 != hv_v1_ml2) {
             int multilayer = 2;
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) {
                 Identifier MultiLayerId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, multilayer, 1, 1);
-                thename = chamber_name + "_multilayer2";
+                thename = std::string(chamber_name) + "_multilayer2";
                 writeCdo->setDeadMultilayer(thename, MultiLayerId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -368,12 +369,12 @@ StatusCode MdtCondDbAlg::loadDataHv(writeHandle_t& wh, MdtCondDbData* writeCdo,
 
         if (hv_name_ml2 != "ON" && hv_name_ml2 != "STANDBY" && hv_name_ml2 != "UNKNOWN" && hv_name_ml1 != "ON" &&
             hv_name_ml1 != "STANDBY" && hv_name_ml1 != "UNKNOWN") {
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) { writeCdo->setDeadStation(chamber_name, ChamberId); }
         }
         if (hv_name_ml2 == "STANDBY" && hv_v0_ml2 != hv_v1_ml2 && hv_name_ml1 == "STANDBY" && hv_v0_ml1 != hv_v1_ml1) {
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) { writeCdo->setDeadStation(chamber_name, ChamberId); }
         }
@@ -402,15 +403,13 @@ StatusCode MdtCondDbAlg::loadDataLv(writeHandle_t& wh, MdtCondDbData* writeCdo,
 
         if (!atr.size()) { continue; }
         hv_name = *(static_cast<const std::string*>((atr["fsmCurrentState_LV"]).addressOfData()));
-        std::string delimiter = " ";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(hv_name, tokens, delimiter);
-        std::string delimiter2 = "_";
-        std::vector<std::string> tokens2;
-        MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2);
+        char delimiter = ' ';
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name, delimiter);
+        char delimiter2 = '_';
+        auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload, delimiter2);
 
         if (tokens[0] != "ON") {
-            std::string chamber_name = tokens2[0];
+            const auto &chamber_name = tokens2[0];
             Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
             if (ChamberId.is_valid()) { writeCdo->setDeadStation(chamber_name, ChamberId); }
         }
@@ -437,12 +436,11 @@ StatusCode MdtCondDbAlg::loadDroppedChambers(writeHandle_t& wh, MdtCondDbData* w
         std::string chamber_dropped;
         chamber_dropped = *(static_cast<const std::string*>((atr["Chambers_disabled"]).addressOfData()));
 
-        std::string delimiter = " ";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(chamber_dropped, tokens, delimiter);
+        char delimiter = ' ';
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(chamber_dropped, delimiter);
         for (unsigned int i = 0; i < tokens.size(); i++) {
             if (tokens[i] != "0") {
-                std::string chamber_name = tokens[i];
+                const auto &chamber_name = tokens[i];
                 Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name, true);
                 if (ChamberId.is_valid()) { writeCdo->setDeadStation(chamber_name, ChamberId); }
             }
@@ -474,22 +472,21 @@ StatusCode MdtCondDbAlg::loadMcDeadElements(writeHandle_t& wh, MdtCondDbData* wr
         list_tube = *(static_cast<const std::string*>((atr["Dead_tube"]).addressOfData()));
 
         std::string thename;
-        std::string delimiter = " ";
-        std::vector<std::string> tokens;
-        std::vector<std::string> tokens_mlayer;
-        std::vector<std::string> tokens_layer;
+        char delimiter = ' ';
         Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name);
-        MuonCalib::MdtStringUtils::tokenize(list_tube, tokens, delimiter);
-        MuonCalib::MdtStringUtils::tokenize(list_mlayer, tokens_mlayer, delimiter);
-        MuonCalib::MdtStringUtils::tokenize(list_layer, tokens_layer, delimiter);
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(list_tube, delimiter);
+        auto tokens_mlayer = MuonCalib::MdtStringUtils::tokenize(list_mlayer, delimiter);
+        auto tokens_layer = MuonCalib::MdtStringUtils::tokenize(list_layer, delimiter);
 
         for (unsigned int i = 0; i < tokens.size(); i++) {
             if (tokens[i] != "0") {
-                int ml = atoi((tokens[i].substr(0, 1)).c_str());
-                int layer = atoi((tokens[i].substr(1, 2)).c_str());
-                int tube = atoi((tokens[i].substr(2)).c_str());
+                int ml = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(0, 1));
+                int layer = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(1, 2));
+                int tube = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(2));
                 Identifier ChannelId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, ml, layer, tube);
-                thename = chamber_name + "_" + tokens[i];
+                thename = chamber_name;
+                thename += '_';
+                thename += tokens[i];
                 writeCdo->setDeadTube(thename, ChannelId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -497,9 +494,11 @@ StatusCode MdtCondDbAlg::loadMcDeadElements(writeHandle_t& wh, MdtCondDbData* wr
 
         for (unsigned int i = 0; i < tokens_mlayer.size(); i++) {
             if (tokens_mlayer[i] != "0") {
-                int ml = atoi((tokens_mlayer[i].substr(0)).c_str());
+                int ml = MuonCalib::MdtStringUtils::atoi(tokens_mlayer[i].substr(0));
                 Identifier ChannelId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, ml, 1, 1);
-                thename = chamber_name + "_" + tokens[i];
+                thename = chamber_name;
+                thename += '_';
+                thename += tokens[i];
                 writeCdo->setDeadMultilayer(thename, ChannelId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -507,10 +506,12 @@ StatusCode MdtCondDbAlg::loadMcDeadElements(writeHandle_t& wh, MdtCondDbData* wr
 
         for (unsigned int i = 0; i < tokens_layer.size(); i++) {
             if (tokens_layer[i] != "0") {
-                int ml = atoi((tokens_layer[i].substr(0, 1)).c_str());
-                int layer = atoi((tokens_layer[i].substr(1)).c_str());
+                int ml = MuonCalib::MdtStringUtils::atoi(tokens_layer[i].substr(0, 1));
+                int layer = MuonCalib::MdtStringUtils::atoi(tokens_layer[i].substr(1));
                 Identifier ChannelId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, ml, layer, 1);
-                thename = chamber_name + "_" + tokens[i];
+                thename = chamber_name;
+                thename += '_';
+                thename += tokens[i];
                 writeCdo->setDeadLayer(thename, ChannelId);
                 writeCdo->setDeadChamber(ChamberId);
             }
@@ -543,17 +544,19 @@ StatusCode MdtCondDbAlg::loadMcDeadTubes(writeHandle_t& wh, MdtCondDbData* write
         chamber_name = *(static_cast<const std::string*>((atr["Chamber_Name"]).addressOfData()));
 
         std::string thename;
-        std::vector<std::string> tokens;
-        std::string delimiter = " ";
-        MuonCalib::MdtStringUtils::tokenize(dead_tube, tokens, delimiter);
+        char delimiter = ' ';
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(dead_tube, delimiter);
         Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name);
 
         for (unsigned int i = 0; i < tokens.size(); i++) {
-            int ml = atoi((tokens[i].substr(0, 1)).c_str());
-            int layer = atoi((tokens[i].substr(1, 2)).c_str());
-            int tube = atoi((tokens[i].substr(2)).c_str());
-            thename = chamber_name + "_" + tokens[i];
-            tube_list = tokens[i] + ".";
+            int ml = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(0, 1));
+            int layer = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(1, 2));
+            int tube = MuonCalib::MdtStringUtils::atoi(tokens[i].substr(2));
+            thename = chamber_name;
+            thename += '_';
+            thename += tokens[i];
+            tube_list = tokens[i];
+            tube_list += '.';
             Identifier ChannelId = m_idHelperSvc->mdtIdHelper().channelID(ChamberId, ml, layer, tube);
             writeCdo->setDeadTube(thename, ChannelId);
         }
@@ -585,15 +588,13 @@ StatusCode MdtCondDbAlg::loadMcNoisyChannels(writeHandle_t& wh, MdtCondDbData* w
 
         if (atr.size()) {
             hv_name = *(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
-            std::string delimiter = " ";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(hv_name, tokens, delimiter);
-            std::string delimiter2 = "_";
-            std::vector<std::string> tokens2;
-            MuonCalib::MdtStringUtils::tokenize(hv_payload, tokens2, delimiter2);
+            char delimiter = ' ';
+            auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name, delimiter);
+            char delimiter2 = '_';
+            auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload, delimiter2);
 
             if (tokens[0] != "ON") {
-                std::string chamber_name = tokens2[2];
+                const auto &chamber_name = tokens2[2];
                 Identifier ChamberId = m_condMapTool->ConvertToOffline(chamber_name);
                 writeCdo->setDeadStation(chamber_name, ChamberId);
             }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentCondAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentCondAlg.cxx
index 8705b75c43f0f82d0cc98685ba66f3eaf5e30c5d..7c64daf532f7cd9a2095573b6b5810de1b075eaf 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentCondAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentCondAlg.cxx
@@ -187,35 +187,30 @@ StatusCode MuonAlignmentCondAlg::loadAlignABLines() {
 }
 
 StatusCode MuonAlignmentCondAlg::loadAlignABLinesData(const std::string& folderName, const std::string& data, nlohmann::json& json, bool hasBLine) {
-    // Check the first word to see if it is a correction
-    std::string type;
 
+    using namespace MuonCalib;
     // Parse corrections
-    std::string since_str;
-    std::string till_str;
-    std::string delimiter = "\n";
+    char delimiter = '\n';
 
     json = nlohmann::json::array();
-    std::vector<std::string> lines;
-    MuonCalib::MdtStringUtils::tokenize(data, lines, delimiter);
-    for (const std::string& blobline : lines) {
+    auto lines = MdtStringUtils::tokenize(data, delimiter);
+    for (const std::string_view& blobline : lines) {
         nlohmann::json line;
-        std::string delimiter = ":";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(blobline, tokens, delimiter);
+        char delimiter = ':';
+        const auto tokens = MdtStringUtils::tokenize(blobline, delimiter);
 
         // Check if tokens is not empty
         if (tokens.empty()) {
             ATH_MSG_FATAL("Empty string retrieved from DB in folder " << folderName);
             return StatusCode::FAILURE;
         }
-        type = tokens[0];
+        const std::string_view &type = tokens[0];
         // Parse line
-        if (type.find('#') == 0) {
+        if (type[0] == '#') {
             // skip it
             continue;
         }
-        if (type.find("Corr") == 0) {
+        if (type.compare(0, 4, "Corr") == 0) {
             //#: Corr line is counter typ,  jff,  jzz, job,                         * Chamber information
             //#:                       svalue,  zvalue, tvalue,  tsv,  tzv,  ttv,   * A lines
             //#:                       bz, bp, bn, sp, sn, tw, pg, tr, eg, ep, en   * B lines
@@ -224,9 +219,8 @@ StatusCode MuonAlignmentCondAlg::loadAlignABLinesData(const std::string& folderN
             // Corr: EMS  4   1  0     2.260     3.461    28.639 -0.002402 -0.002013  0.000482    -0.006    -0.013 -0.006000  0.000000
             // 0.000000     0.026    -0.353  0.000000  0.070000  0.012000    -0.012    EMS1A08
 
-            std::string delimiter = " ";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(blobline, tokens, delimiter);
+            char delimiter = ' ';
+            auto tokens = MdtStringUtils::tokenize(blobline, delimiter);
 
             // Check if tokens has the right length
             // if (tokens.size() != 12 and tokens.size() != 23) {
@@ -237,7 +231,7 @@ StatusCode MuonAlignmentCondAlg::loadAlignABLinesData(const std::string& folderN
             }
 
             ATH_MSG_VERBOSE("Parsing Line = ");
-            for (const std::string& token : tokens) ATH_MSG_VERBOSE(token << " | ");
+            for (const std::string_view& token : tokens) ATH_MSG_VERBOSE(token << " | ");
             ATH_MSG_VERBOSE(" ");
 
             bool thisRowHasBLine = true;
@@ -254,16 +248,13 @@ StatusCode MuonAlignmentCondAlg::loadAlignABLinesData(const std::string& folderN
             int jff;
             int jzz;
             int job;
-            std::string stationType = tokens[ival++];
-            line["typ"] = stationType;
-            std::string jff_str = tokens[ival++];
-            sscanf(jff_str.c_str(), "%80d", &jff);
+            std::string stationType = std::string(tokens[ival++]);
+            line["typ"] = std::move(stationType);
+            jff = MdtStringUtils::atoi(tokens[ival++]);
             line["jff"] = jff;
-            std::string jzz_str = tokens[ival++];
-            sscanf(jzz_str.c_str(), "%80d", &jzz);
+            jzz = MdtStringUtils::atoi(tokens[ival++]);
             line["jzz"] = jzz;
-            std::string job_str = tokens[ival++];
-            sscanf(job_str.c_str(), "%80d", &job);
+            job = MdtStringUtils::atoi(tokens[ival++]);
             line["job"] = job;
 
             // A-line
@@ -273,78 +264,58 @@ StatusCode MuonAlignmentCondAlg::loadAlignABLinesData(const std::string& folderN
             float ths;
             float thz;
             float tht;
-            std::string s_str = tokens[ival++];
-            sscanf(s_str.c_str(), "%80f", &s);
+            s = MdtStringUtils::stof(tokens[ival++]);
             line["svalue"] = s;
-            std::string z_str = tokens[ival++];
-            sscanf(z_str.c_str(), "%80f", &z);
+            z = MdtStringUtils::stof(tokens[ival++]);
             line["zvalue"] = z;
-            std::string t_str = tokens[ival++];
-            sscanf(t_str.c_str(), "%80f", &t);
+            t = MdtStringUtils::stof(tokens[ival++]);
             line["tvalue"] = t;
-            std::string ths_str = tokens[ival++];
-            sscanf(ths_str.c_str(), "%80f", &ths);
+            ths = MdtStringUtils::stof(tokens[ival++]);
             line["tsv"] = ths;
-            std::string thz_str = tokens[ival++];
-            sscanf(thz_str.c_str(), "%80f", &thz);
+            thz = MdtStringUtils::stof(tokens[ival++]);
             line["tzv"] = thz;
-            std::string tht_str = tokens[ival++];
-            sscanf(tht_str.c_str(), "%80f", &tht);
+            tht = MdtStringUtils::stof(tokens[ival++]);
             line["ttv"] = tht;
 
             // B-line
             float bz, bp, bn, sp, sn, tw, pg, tr, eg, ep, en;
             float xAtlas, yAtlas;
-            std::string ChamberHwName = "";
 
             if (hasBLine && thisRowHasBLine) {
-                std::string tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &bz);
+                bz = MdtStringUtils::stof(tokens[ival++]);
                 line["bz"] = bz;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &bp);
+                bp = MdtStringUtils::stof(tokens[ival++]);
                 line["bp"] = bp;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &bn);
+                bn = MdtStringUtils::stof(tokens[ival++]);
                 line["bn"] = bn;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &sp);
+                sp = MdtStringUtils::stof(tokens[ival++]);
                 line["sp"] = sp;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &sn);
+                sn = MdtStringUtils::stof(tokens[ival++]);
                 line["sn"] = sn;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &tw);
+                tw = MdtStringUtils::stof(tokens[ival++]);
                 line["tw"] = tw;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &pg);
+                pg = MdtStringUtils::stof(tokens[ival++]);
                 line["pg"] = pg;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &tr);
+                tr = MdtStringUtils::stof(tokens[ival++]);
                 line["tr"] = tr;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &eg);
+                eg = MdtStringUtils::stof(tokens[ival++]);
                 line["eg"] = eg;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &ep);
+                ep = MdtStringUtils::stof(tokens[ival++]);
                 line["ep"] = ep;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &en);
+                en = MdtStringUtils::stof(tokens[ival++]);
                 line["en"] = en;
 
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &xAtlas);
+                xAtlas = MdtStringUtils::stof(tokens[ival++]);
                 line["xAtlas"] = xAtlas;
-                tmp_str = tokens[ival++];
-                sscanf(tmp_str.c_str(), "%80f", &yAtlas);
+                yAtlas = MdtStringUtils::stof(tokens[ival++]);
                 line["yAtlas"] = yAtlas;
 
                 // ChamberName (hardware convention)
-                line["hwElement"] = tokens[ival++];
+                line["hwElement"] = std::string(tokens[ival++]);
             }
         }
         if (line.empty()) continue;
-        json.push_back(line);
+        json.push_back(std::move(line));
     }
     return StatusCode::SUCCESS;
 }
@@ -802,43 +773,36 @@ StatusCode MuonAlignmentCondAlg::loadAlignILines(const std::string& folderName)
 }
 
 StatusCode MuonAlignmentCondAlg::loadAlignILinesData(const std::string& folderName, const std::string& data, nlohmann::json& json) {
-    // Check the first word to see if it is a correction
-    std::string type;
-
+    using namespace MuonCalib;
     // Parse corrections
-    std::string since_str;
-    std::string till_str;
-    std::string delimiter = "\n";
+    char delimiter = '\n';
 
     json = nlohmann::json::array();
-    std::vector<std::string> lines;
-    MuonCalib::MdtStringUtils::tokenize(data, lines, delimiter);
-    for (const std::string& blobline : lines) {
+    auto lines = MuonCalib::MdtStringUtils::tokenize(data, delimiter);
+    for (const std::string_view& blobline : lines) {
         nlohmann::json line;
-        std::string delimiter = ":";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(blobline, tokens, delimiter);
+        char delimiter = ':';
+        auto tokens = MuonCalib::MdtStringUtils::tokenize(blobline, delimiter);
         // Check if tokens is not empty
         if (tokens.empty()) {
             ATH_MSG_FATAL("Empty string retrieved from DB in folder " << folderName);
             return StatusCode::FAILURE;
         }
-        type = tokens[0];
+        const std::string_view &type = tokens[0];
         // Parse line
-        if (type.find('#') == 0) {
+        if ('#' == type[0]) {
             // skip it
             continue;
         }
-        if (type.find("Corr") == 0) {
+        if (type.compare(0, 4, "Corr") == 0) {
             //# Amdb like clob for ilines using geometry tag ISZT-R06-02
             //# ISZT_DATA_ID VERS TYP JFF JZZ JOB JLAY TRAS TRAZ TRAT ROTS ROTZ ROTT
             //
             //.... example
             // Corr:  CSL 1 -1 3 1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
 
-            std::string delimiter = " ";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(blobline, tokens, delimiter);
+            char delimiter = ' ';
+            auto tokens = MuonCalib::MdtStringUtils::tokenize(blobline, delimiter);
             if (tokens.size() != 12) {
                 ATH_MSG_FATAL("Invalid length in string retrieved from DB in folder " << folderName << " String length is "
                                                                                       << tokens.size());
@@ -846,7 +810,7 @@ StatusCode MuonAlignmentCondAlg::loadAlignILinesData(const std::string& folderNa
             }
 
             ATH_MSG_VERBOSE("Parsing Line = ");
-            for (const std::string& token : tokens) ATH_MSG_VERBOSE(token << " | ");
+            for (const std::string_view& token : tokens) ATH_MSG_VERBOSE(token << " | ");
             ATH_MSG_VERBOSE(" ");
 
             // Start parsing
@@ -857,19 +821,15 @@ StatusCode MuonAlignmentCondAlg::loadAlignILinesData(const std::string& folderNa
             int jzz;
             int job;
             int jlay;
-            std::string stationType = tokens[ival++];
-            line["typ"] = stationType;
-            std::string jff_str = tokens[ival++];
-            sscanf(jff_str.c_str(), "%80d", &jff);
+            std::string stationType = std::string(tokens[ival++]);
+            line["typ"] = std::move(stationType);
+            jff = MdtStringUtils::atoi(tokens[ival++]);
             line["jff"] = jff;
-            std::string jzz_str = tokens[ival++];
-            sscanf(jzz_str.c_str(), "%80d", &jzz);
+            jzz = MdtStringUtils::atoi(tokens[ival++]);
             line["jzz"] = jzz;
-            std::string job_str = tokens[ival++];
-            sscanf(job_str.c_str(), "%80d", &job);
+            job = MdtStringUtils::atoi(tokens[ival++]);
             line["job"] = job;
-            std::string jlay_str = tokens[ival++];
-            sscanf(jlay_str.c_str(), "%80d", &jlay);
+            jlay = MdtStringUtils::atoi(tokens[ival++]);
             line["jlay"] = jlay;
 
             // I-line
@@ -879,27 +839,21 @@ StatusCode MuonAlignmentCondAlg::loadAlignILinesData(const std::string& folderNa
             float rots;
             float rotz;
             float rott;
-            std::string tras_str = tokens[ival++];
-            sscanf(tras_str.c_str(), "%80f", &tras);
+            tras = MdtStringUtils::stof(tokens[ival++]);
             line["tras"] = tras;
-            std::string traz_str = tokens[ival++];
-            sscanf(traz_str.c_str(), "%80f", &traz);
+            traz = MdtStringUtils::stof(tokens[ival++]);
             line["traz"] = traz;
-            std::string trat_str = tokens[ival++];
-            sscanf(trat_str.c_str(), "%80f", &trat);
+            trat = MdtStringUtils::stof(tokens[ival++]);
             line["trat"] = trat;
-            std::string rots_str = tokens[ival++];
-            sscanf(rots_str.c_str(), "%80f", &rots);
+            rots = MdtStringUtils::stof(tokens[ival++]);
             line["rots"] = rots;
-            std::string rotz_str = tokens[ival++];
-            sscanf(rotz_str.c_str(), "%80f", &rotz);
+            rotz = MdtStringUtils::stof(tokens[ival++]);
             line["rotz"] = rotz;
-            std::string rott_str = tokens[ival++];
-            sscanf(rott_str.c_str(), "%80f", &rott);
+            rott = MdtStringUtils::stof(tokens[ival++]);
             line["rott"] = rott;
         }
         if (line.empty()) continue;
-        json.push_back(line);
+        json.push_back(std::move(line));
     }
     return StatusCode::SUCCESS;
 }
@@ -957,34 +911,29 @@ StatusCode MuonAlignmentCondAlg::loadAlignAsBuilt(const std::string& folderName)
 
         ATH_MSG_DEBUG("Data load is " << data << " FINISHED HERE ");
 
-        // Check the first word to see if it is a correction
-        std::string type;
-
         // Parse corrections
-        std::string delimiter = "\n";
+        char delimiter = '\n';
 
-        std::vector<std::string> lines;
-        MuonCalib::MdtStringUtils::tokenize(data, lines, delimiter);
-        for (const std::string& blobline : lines) {
+        auto lines = MuonCalib::MdtStringUtils::tokenize(data, delimiter);
+        for (const std::string_view& blobline : lines) {
             ++nLines;
 
-            std::string delimiter = ":";
-            std::vector<std::string> tokens;
-            MuonCalib::MdtStringUtils::tokenize(blobline, tokens, delimiter);
+            char delimiter = ':';
+            auto tokens = MuonCalib::MdtStringUtils::tokenize(blobline, delimiter);
             // Check if tokens is not empty
             if (tokens.empty()) {
                 ATH_MSG_FATAL("Empty string retrieved from DB in folder " << folderName);
                 return StatusCode::FAILURE;
             }
-            type = tokens[0];
+            const std::string_view &type = tokens[0];
             // Parse line
-            if (type.find('#') == 0) {
+            if (type[0] == '#') {
                 // skip it
                 continue;
             }
 
-            if (type.find("Corr") == 0) {
-                if (!xPar.setFromAscii(blobline)) {
+            if (type.compare(0, 4, "Corr") == 0) {
+                if (!xPar.setFromAscii(std::string(blobline))) {
                     ATH_MSG_ERROR("Unable to parse AsBuilt params from Ascii line: " << blobline);
                     continue;
                 }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentErrorDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentErrorDbAlg.cxx
index 624856e73c0244dbbd756a34776d9b6b839722f3..6aba041fbc47922d222454effce3fa4d045f3938 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentErrorDbAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/MuonAlignmentErrorDbAlg.cxx
@@ -80,7 +80,7 @@ StatusCode MuonAlignmentErrorDbAlg::execute() {
     std::string line;
     while (getline(indata, line)) {
         // READING COMMENTS
-        if (line.substr(0, 1) == "#") {
+        if (line.compare(0, 1,"#") == 0) {
             // ATH_MSG_DEBUG("Reading a commented line saying " << line);
             continue;
         }
@@ -94,7 +94,7 @@ StatusCode MuonAlignmentErrorDbAlg::execute() {
         double rotation(0.);
 
         // GET INPUT FILE VERSION
-        if (line.substr(0, 7) == "version") {
+        if (line.compare(0, 7, "version") == 0) {
             std::istringstream(line) >> flag >> version_tag;
             ATH_MSG_INFO("*****************************************");
             ATH_MSG_INFO("Input file version " << version_tag);
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/RpcCondDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/RpcCondDbAlg.cxx
index bb9336fec3e4ec1cce3fbc8b3f6d2a69fa5017e4..ae8acb085ee256451d9b2ab512143e8c3cd9b57f 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/RpcCondDbAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondAlg/src/RpcCondDbAlg.cxx
@@ -5,7 +5,7 @@
 #include "MuonCondAlg/RpcCondDbAlg.h"
 
 #include "AthenaKernel/IOVInfiniteRange.h"
-
+using namespace MuonCalib;
 // constructor
 RpcCondDbAlg::RpcCondDbAlg(const std::string& name, ISvcLocator* pSvcLocator) :
     AthReentrantAlgorithm(name, pSvcLocator), m_condSvc("CondSvc", name) {
@@ -92,7 +92,6 @@ StatusCode RpcCondDbAlg::loadDataDeadPanels(EventIDRange& rangeW, RpcCondDbData*
 
     ATH_MSG_DEBUG("Size of CondAttrListCollection " << readHandle.fullKey() << " readCdo->size()= " << readCdo->size());
     ATH_MSG_DEBUG("Range of input is " << range << ", range of output is " << rangeW);
-
     CondAttrListCollection::const_iterator itr;
     unsigned int chan_index = 0;
     for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
@@ -110,17 +109,15 @@ StatusCode RpcCondDbAlg::loadDataDeadPanels(EventIDRange& rangeW, RpcCondDbData*
             ATH_MSG_DEBUG("panel_dead " << panel_dead);
             ATH_MSG_DEBUG("panel_reason " << panel_reason);
 
-            const char* ch_tmp;
-            std::string delimiter = ",";
-            std::vector<std::string> info_panel;
-            MuonCalib::MdtStringUtils::tokenize(panel_dead, info_panel, delimiter);
+            char delimiter = ',';
+            auto info_panel = MuonCalib::MdtStringUtils::tokenize(panel_dead, delimiter);
 
             Identifier PanelId;
 
             for (unsigned int i = 0; i < info_panel.size(); i++) {
-                ch_tmp = info_panel[i].c_str();
-                PanelId = atoi(ch_tmp);
-                ATH_MSG_DEBUG("info_panel " << ch_tmp << " " << atoi(ch_tmp));
+                const std::string_view &ch_tmp = info_panel[i];
+                PanelId =  MdtStringUtils::atoi(ch_tmp);
+                ATH_MSG_DEBUG("info_panel " << ch_tmp << " " << PanelId);
 
                 if (PanelId.get_compact()) {
                     ATH_MSG_DEBUG("DEADPANEL " << m_idHelperSvc->rpcIdHelper().show_to_string(PanelId));
@@ -175,16 +172,14 @@ StatusCode RpcCondDbAlg::loadDataOffPanels(EventIDRange& rangeW, RpcCondDbData*
             ATH_MSG_DEBUG("panel_off " << panel_off);
             ATH_MSG_DEBUG("panel_reason " << panel_reason);
 
-            const char* ch_tmp;
-            std::string delimiter = ",";
-            std::vector<std::string> info_panel;
-            MuonCalib::MdtStringUtils::tokenize(panel_off, info_panel, delimiter);
+            char delimiter = ',';
+            auto info_panel = MuonCalib::MdtStringUtils::tokenize(panel_off, delimiter);
 
             Identifier PanelId;
 
             for (unsigned int i = 0; i < info_panel.size(); i++) {
-                ch_tmp = info_panel[i].c_str();
-                PanelId = atoi(ch_tmp);
+                const std::string_view &ch_tmp = info_panel[i];
+                PanelId = MdtStringUtils::atoi(ch_tmp);
                 ATH_MSG_DEBUG("info_panel " << ch_tmp << " " << PanelId);
 
                 if (PanelId.get_compact()) {
@@ -224,14 +219,12 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
     ATH_MSG_DEBUG("Range of input is " << range << ", range of output is " << rangeW);
 
     CondAttrListCollection::const_iterator itr;
-
     unsigned int chan_index = 0;
     unsigned int iFracDeadStrip = 0;
     for (itr = readCdo->begin(); itr != readCdo->end(); ++itr) {
         const coral::AttributeList& atr = itr->second;
         CondAttrListCollection::ChanNum channum = itr->first;
-        Identifier chamberId;
-        chamberId = channum;
+        Identifier chamberId = Identifier(channum);
 
         std::string eff_panel, striplist, eff;
 
@@ -244,58 +237,42 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
         ATH_MSG_DEBUG("striplist load is " << striplist << " " << striplist.size());
 
         // Efficiencies and Cluster Sizes
-        std::string delimiter = " ";
-        std::vector<std::string> info_panel;
-        std::vector<float> info_panel_test;
-        MuonCalib::MdtStringUtils::tokenize(eff_panel, info_panel, delimiter);
+        char delimiter = ' ';
+        const auto info_panel = MdtStringUtils::tokenize(eff_panel, delimiter);
 
-        const char* SDBversion = (info_panel[0].c_str());
-        int DBversion = atoi(SDBversion);
+        int DBversion = MdtStringUtils::atoi(info_panel[0]);
 
-        const char* SNStrip = (info_panel[2].c_str());
-        int npanelstrip = atoi(SNStrip);
+        int npanelstrip = MdtStringUtils::atoi(info_panel[2]);
 
-        const char* SProjectedTracks = (info_panel[1].c_str());
-        double ProjectedTracks = atof(SProjectedTracks);
+        double ProjectedTracks = MdtStringUtils::stof(info_panel[1]);
         writeCdo->setProjectedTrack(chamberId, ProjectedTracks);
 
-        const char* SEfficiency = (info_panel[3].c_str());
-        double Efficiency = atof(SEfficiency);
+        double Efficiency = MdtStringUtils::stof(info_panel[3]);
         writeCdo->setEfficiency(chamberId, Efficiency);
 
         if (Efficiency <= m_panelEfficiency) writeCdo->setLowEffPanel(chamberId);
 
-        const char* SGapEfficiency = (info_panel[5].c_str());
-        double GapEfficiency = atof(SGapEfficiency);
+        double GapEfficiency = MdtStringUtils::stof(info_panel[5]);
         writeCdo->setGapEfficiency(chamberId, GapEfficiency);
 
-        const char* SMeanClusterSize = (info_panel[17].c_str());
-        double MeanClusterSize = atof(SMeanClusterSize);
+        double MeanClusterSize = MdtStringUtils::stof(info_panel[17]);
         writeCdo->setMeanClusterSize(chamberId, MeanClusterSize);
 
         if (DBversion > 2) {
-            const char* SFracClusterSize1_a = (info_panel[19].c_str());
-            const  char* SFracClusterSize1_b = (info_panel[20].c_str());
-            double FracClusterSize1 = atof(SFracClusterSize1_a) + atof(SFracClusterSize1_b) * 10000;
+            double FracClusterSize1 = MdtStringUtils::stof(info_panel[19]) + MdtStringUtils::stof(info_panel[20]) * 10000;
             writeCdo->setFracClusterSize1(chamberId, FracClusterSize1);
 
-            const char* SFracClusterSize2_a = (info_panel[21].c_str());
-            const char* SFracClusterSize2_b = (info_panel[22].c_str());
-            double FracClusterSize2 = atof(SFracClusterSize2_a) + atof(SFracClusterSize2_b) * 10000;
+            double FracClusterSize2 = MdtStringUtils::stof(info_panel[21]) + MdtStringUtils::stof(info_panel[22]) * 10000;
             writeCdo->setFracClusterSize2(chamberId, FracClusterSize2);
 
-            const char* SFracClusterSize3_a = (info_panel[23].c_str());
-            const char* SFracClusterSize3_b = (info_panel[24].c_str());
-            double FracClusterSize3 = atof(SFracClusterSize3_a) + atof(SFracClusterSize3_b) * 10000;
+            double FracClusterSize3 = MdtStringUtils::stof(info_panel[23]) + MdtStringUtils::stof(info_panel[24]) * 10000;
             writeCdo->setFracClusterSize3(chamberId, FracClusterSize3);
         } else {
             if (info_panel.size() > 20) {
-                const char* SFracClusterSize1 = (info_panel[19].c_str());
-                double FracClusterSize1 = atof(SFracClusterSize1);
+                double FracClusterSize1 = MdtStringUtils::stof(info_panel[19]);
                 writeCdo->setFracClusterSize1(chamberId, FracClusterSize1);
 
-                const char* SFracClusterSize2 = (info_panel[20].c_str());
-                double FracClusterSize2 = atof(SFracClusterSize2);
+                double FracClusterSize2 = MdtStringUtils::stof(info_panel[20]);
                 writeCdo->setFracClusterSize2(chamberId, FracClusterSize2);
             } else {
                 writeCdo->setFracClusterSize1(chamberId, 0.6);
@@ -314,35 +291,23 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
 
         // update for the timing and error on timing
         // new info strip |status time error_on_time|
-        std::string delimiter_strip = "|";
-        std::vector<std::string> info_strip;
+        char delimiter_strip = '|';
         std::string strip_status_list = "";
-        std::vector<float> info_strip_test;
-
-        MuonCalib::MdtStringUtils::tokenize(striplist, info_strip, delimiter_strip);
-        const char* ch_strip2;
 
+        const auto info_strip= MuonCalib::MdtStringUtils::tokenize(striplist, delimiter_strip);
         if (info_strip.size() > 1) {
             for (unsigned int i = 0; i < info_strip.size(); ++i) {
-                ch_strip2 = (info_strip[i].c_str());
-
-                std::string delimiter_strip2 = "  ";
-                std::vector<std::string> info_strip2;
-                std::vector<float> info_strip_test2;
+                const std::string_view &ch_strip2 = info_strip[i];
 
-                MuonCalib::MdtStringUtils::tokenize(ch_strip2, info_strip2, delimiter_strip2);
+                char delimiter_strip2 = ' ';
 
-                const char* STime = (info_strip2[1].c_str());
-                double Time = atof(STime);
-                const char* SSigmaTime = (info_strip2[2].c_str());
-                double SigmaTime = atof(SSigmaTime);
-                const char* strip_status = (info_strip2[0].c_str());
+                auto info_strip2 = MdtStringUtils::tokenize(ch_strip2, delimiter_strip2);
 
-                strip_status_list = strip_status_list + strip_status;
+                double Time = MdtStringUtils::stof(info_strip2[1]);
+                double SigmaTime = MdtStringUtils::stof(info_strip2[2]);
+                const auto &strip_status = info_strip2[0];
 
-                std::vector<double> Time_vect;
-                Time_vect.push_back(Time);
-                Time_vect.push_back(SigmaTime);
+                strip_status_list += strip_status;
 
                 Identifier strip_id;
                 CondAttrListCollection::ChanNum stripnum;
@@ -351,7 +316,7 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
 
                 ATH_MSG_DEBUG("strip " << strip_id << " has time " << Time << " and " << SigmaTime);
 
-                writeCdo->setStripTime(strip_id, Time_vect);
+                writeCdo->setStripTime(strip_id, std::vector<double>{Time, SigmaTime});
 
                 ATH_MSG_VERBOSE("strip #" << i + 1 << " strip_id " << stripnum << " expanded "
                                           << m_idHelperSvc->rpcIdHelper().show_to_string(strip_id));
@@ -372,9 +337,9 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
             ATH_MSG_DEBUG("no timing info");
 
             for (unsigned int i = 0; i < striplist.size(); i++) {
-                std::string part_strip = striplist.substr(i, 1);
-                strip_status_list = strip_status_list + part_strip;
-                const char* ch_panel = (part_strip.c_str());
+                char part_strip = striplist[i];
+                strip_status_list += part_strip;
+                char ch_panel = part_strip;
 
                 Identifier strip_id;
                 CondAttrListCollection::ChanNum stripnum;
@@ -386,7 +351,7 @@ StatusCode RpcCondDbAlg::loadMcElementStatus(EventIDRange& rangeW, RpcCondDbData
 
                 ++countpanelstrip;
 
-                if (part_strip == "0") {
+                if (part_strip == '0') {
                     ++countdeadstrip;
                     writeCdo->setDeadStrip(strip_id);
                     if (i > 1 && i < striplist.size() - 2) {
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/CscCondDbData.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/CscCondDbData.h
index 6c291243e3de90889330a2f2c9f166d3754d18a9..9fe455aedf402586f401df1b4ad36fbbd15447c4 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/CscCondDbData.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/CscCondDbData.h
@@ -43,8 +43,8 @@ public:
     void setChannelT0Phase(IdentifierHash, bool );
 
     void setDeadChannelHash(IdentifierHash);
-    void setDeadLayer     (std::string, Identifier);
-    void setDeadStation   (std::string, Identifier);
+    void setDeadLayer     (std::string_view, Identifier);
+    void setDeadStation   (std::string_view, Identifier);
    
     const std::vector<std::string>& getDeadLayers     () const;
     const std::vector<std::string>& getDeadStations   () const;
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/MdtCondDbData.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/MdtCondDbData.h
index d01e400cd8bc905af16461f6bea3780662e89254..d20c494a9e56f9e3aff4f77a2f1ada8c47a28ed0 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/MdtCondDbData.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/MdtCondDbData.h
@@ -29,10 +29,10 @@ public:
     
     virtual ~MdtCondDbData() = default;
 
-    void setDeadTube      (const std::string&, Identifier);
-    void setDeadLayer     (const std::string&, Identifier);
-    void setDeadMultilayer(const std::string&, Identifier);
-    void setDeadStation   (const std::string&, Identifier);
+    void setDeadTube      (std::string_view, Identifier);
+    void setDeadLayer     (std::string_view, Identifier);
+    void setDeadMultilayer(std::string_view, Identifier);
+    void setDeadStation   (std::string_view, Identifier);
     void setDeadChamber   (Identifier);
 
     void setNoisyTube      (Identifier);
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/RpcCalibDBEntry.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/RpcCalibDBEntry.h
index 06c4bfe5e751e87dbc587d0df76ed5e6b0e68204..0cc21163ec57dd3c0a188bc184ce1db15b18186a 100755
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/RpcCalibDBEntry.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/MuonCondData/RpcCalibDBEntry.h
@@ -27,8 +27,8 @@ namespace MuonCalib{
     {
         public:
             RpcCalibDBEntry(){};
-            RpcCalibDBEntry(Identifier gapID, std::string etaRec, std::string etaDet, std::string phiRec1, std::string phiRec2, std::string phiDet1, std::string phiDet2);
-            RpcCalibDBEntry(Identifier gapID, std::string payload);
+            RpcCalibDBEntry(Identifier gapID, const std::string& etaRec, const std::string& etaDet, const std::string& phiRec1, const std::string& phiRec2, const std::string& phiDet1, const std::string& phiDet2);
+            RpcCalibDBEntry(Identifier gapID, std::string_view payload);
 
 	    void getColumns(std::string &recEta, std::string &detEta,std::string &recPhi1,std::string &recPhi2,std::string &detPhi1,std::string &detPhi2) const;  
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/CscCondDbData.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/CscCondDbData.cxx
index b6631b4fae9ffa56f0728cc2b21f19115e6ff502..b22ab3df16a8e9208156181659ec1303f77cefa1 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/CscCondDbData.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/CscCondDbData.cxx
@@ -147,17 +147,17 @@ CscCondDbData::setDeadChannelHash(IdentifierHash hash){
 
 // setDeadLayer
 void
-CscCondDbData::setDeadLayer(std::string name, Identifier Id){
+CscCondDbData::setDeadLayer(std::string_view name, Identifier Id){
     if(std::find(m_cachedDeadLayersId.begin(), m_cachedDeadLayersId.end(), Id)!=m_cachedDeadLayersId.end()) return;
-    m_cachedDeadLayers  .push_back(name);
+    m_cachedDeadLayers  .push_back(std::string(name));
     m_cachedDeadLayersId.push_back(Id  );
 }
 
 // setDeadStation
 void
-CscCondDbData::setDeadStation(std::string name, Identifier Id){
+CscCondDbData::setDeadStation(std::string_view name, Identifier Id){
     if(std::find(m_cachedDeadStationsId.begin(), m_cachedDeadStationsId.end(), Id)!=m_cachedDeadStationsId.end()) return;
-    m_cachedDeadStations  .push_back(name);
+    m_cachedDeadStations  .push_back(std::string(name));
     m_cachedDeadStationsId.push_back(Id  );
 }
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/MdtCondDbData.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/MdtCondDbData.cxx
index 4b827d9a9012742e2aef1ff87ff0b255daa9aea5..f49c4122dd5faff36f544a5074b2a05ec656fdc0 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/MdtCondDbData.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/MdtCondDbData.cxx
@@ -10,33 +10,33 @@ MdtCondDbData::MdtCondDbData(const MdtIdHelper& id_helper):
     m_id_helper(id_helper){}
 // setDeadTube
 void
-MdtCondDbData::setDeadTube(const std::string& id_name, Identifier Id){
+MdtCondDbData::setDeadTube(std::string_view id_name, Identifier Id){
     if(std::find(m_cachedDeadTubesId.begin(), m_cachedDeadTubesId.end(), Id)!=m_cachedDeadTubesId.end()) return;
-    m_cachedDeadTubes  .push_back(id_name);
+    m_cachedDeadTubes  .push_back(std::string(id_name));
     m_cachedDeadTubesId.push_back(Id  );
 }
 
 // setDeadLayer
 void
-MdtCondDbData::setDeadLayer(const std::string& id_name, Identifier Id){
+MdtCondDbData::setDeadLayer(std::string_view id_name, Identifier Id){
     if(std::find(m_cachedDeadLayersId.begin(), m_cachedDeadLayersId.end(), Id)!=m_cachedDeadLayersId.end()) return;
-    m_cachedDeadLayers  .push_back(id_name);
+    m_cachedDeadLayers  .push_back(std::string(id_name));
     m_cachedDeadLayersId.push_back(Id  );
 }
 
 // setDeadMultilayer
 void
-MdtCondDbData::setDeadMultilayer(const std::string& id_name, Identifier Id){
+MdtCondDbData::setDeadMultilayer(std::string_view id_name, Identifier Id){
     if(std::find(m_cachedDeadMultilayersId.begin(), m_cachedDeadMultilayersId.end(), Id)!=m_cachedDeadMultilayersId.end()) return;
-    m_cachedDeadMultilayers  .push_back(id_name);
+    m_cachedDeadMultilayers  .push_back(std::string(id_name));
     m_cachedDeadMultilayersId.push_back(Id  );
 }
 
 // setDeadStation (= a chamber dead by itself)
 void
-MdtCondDbData::setDeadStation(const std::string& id_name, Identifier Id){
+MdtCondDbData::setDeadStation(std::string_view id_name, Identifier Id){
     if(std::find(m_cachedDeadStationsId.begin(), m_cachedDeadStationsId.end(), Id)!=m_cachedDeadStationsId.end()) return;
-    m_cachedDeadStations  .push_back(id_name);
+    m_cachedDeadStations  .push_back(std::string(id_name));
     m_cachedDeadStationsId.push_back(Id  );
 }
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCalibDBEntry.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCalibDBEntry.cxx
index 61f5901e6593edcda71cd29dc48fdd7bfc186b8e..a2b25965fd1d30cb8265ca61f28b457c14e46834 100755
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCalibDBEntry.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCalibDBEntry.cxx
@@ -19,33 +19,33 @@ namespace MuonCalib{
     for(unsigned int k=0;k<m_thePhiData.size();k++) delete m_thePhiData[k];
   }
 
-  RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, std::string payLoad):m_nRecEta(0),m_nDetEta(0), m_nRecPhi1(0),m_nRecPhi2(0),m_nDetPhi1(0),m_nDetPhi2(0),m_theGap(gapID) {
+  RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, std::string_view payLoad):m_nRecEta(0),m_nDetEta(0), m_nRecPhi1(0),m_nRecPhi2(0),m_nDetPhi1(0),m_nDetPhi2(0),m_theGap(gapID) {
 
     
     std::string::size_type end=payLoad.find("END ");
-    std::string etaRec=payLoad.substr(0,end);
+    std::string_view etaRec=payLoad.substr(0,end);
     payLoad=payLoad.substr(end+4,payLoad.size()-end-4);
 
     end=payLoad.find("END ");
-    std::string etaDet=payLoad.substr(0,end);
+    std::string_view etaDet=payLoad.substr(0,end);
     payLoad=payLoad.substr(end+4,payLoad.size()-end-4);
 
     end=payLoad.find("END ");
-    std::string phiRec1=payLoad.substr(0,end);
+    std::string_view phiRec1=payLoad.substr(0,end);
     payLoad=payLoad.substr(end+4,payLoad.size()-end-4);
 
     end=payLoad.find("END ");
-    std::string phiRec2=payLoad.substr(0,end);
+    std::string_view phiRec2=payLoad.substr(0,end);
     payLoad=payLoad.substr(end+4,payLoad.size()-end-4);
 
     end=payLoad.find("END ");
-    std::string phiDet1=payLoad.substr(0,end);
+    std::string_view phiDet1=payLoad.substr(0,end);
     payLoad=payLoad.substr(end+4,payLoad.size()-end-4);
 
     end=payLoad.find("END ");
-    std::string phiDet2=payLoad.substr(0,end);
+    std::string_view phiDet2=payLoad.substr(0,end);
 
-    this->initData(etaRec, etaDet,phiRec1,phiRec2,phiDet1,phiDet2);
+    this->initData(std::string(etaRec), std::string(etaDet),std::string(phiRec1),std::string(phiRec2),std::string(phiDet1),std::string(phiDet2));
     
   }
 
@@ -53,23 +53,23 @@ namespace MuonCalib{
 
 
     unsigned long int pos = 0;
-    std::string::size_type start = etaRec.find_first_not_of(" ",pos);
+    std::string::size_type start = etaRec.find_first_not_of(' ',pos);
     if(start == std::string::npos) {
       std::cout << "RpcCalibDBEntry::initData -- problems extracting m_nRecEta -- crashing." << std::endl;
       throw;      
     }
-    std::string::size_type stop = etaRec.find_first_of(" ",start+1);
+    std::string::size_type stop = etaRec.find_first_of(' ',start+1);
     if (stop == std::string::npos) stop = etaRec.size();
     m_nRecEta = std::stoi(etaRec.substr(start,stop-start),nullptr);
     etaRec.erase(pos,stop-pos);
 
     pos = 0;
-    start = phiRec1.find_first_not_of(" ",pos);
+    start = phiRec1.find_first_not_of(' ',pos);
     if(start == std::string::npos) {
       std::cout << "RpcCalibDBEntry::initData -- problems extracting m_nRecPhi1 -- crashing." << std::endl;
       throw;      
     }
-    stop = phiRec1.find_first_of(" ",start+1);
+    stop = phiRec1.find_first_of(' ',start+1);
     if (stop == std::string::npos) stop = phiRec1.size();
     m_nRecPhi1 = std::stoi(phiRec1.substr(start,stop-start),nullptr);
     phiRec1.erase(pos,stop-pos);
@@ -163,7 +163,7 @@ namespace MuonCalib{
 
   // initialize from db columns
   
-  RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, std::string etaRec, std::string etaDet, std::string phiRec1, std::string phiRec2, std::string phiDet1, std::string phiDet2 ):m_nRecEta(0),m_nDetEta(0), m_nRecPhi1(0),m_nRecPhi2(0),m_nDetPhi1(0),m_nDetPhi2(0),m_theGap(gapID)
+  RpcCalibDBEntry::RpcCalibDBEntry(Identifier gapID, const std::string& etaRec, const std::string& etaDet, const std::string& phiRec1, const std::string& phiRec2, const std::string& phiDet1, const std::string& phiDet2 ):m_nRecEta(0),m_nDetEta(0), m_nRecPhi1(0),m_nRecPhi2(0),m_nDetPhi1(0),m_nDetPhi2(0),m_theGap(gapID)
   {
     
     this->initData(etaRec, etaDet,phiRec1,phiRec2,phiDet1,phiDet2);
@@ -185,14 +185,14 @@ namespace MuonCalib{
 
     float eff, errEff, res1, res2, resX, errRes1, errRes2, errResX, time, errTime, noise, errNoise, noiseC, errNoiseC, cs, errCs;
     
-    recEta_str<<m_nRecEta<<" ";
-    detEta_str<<m_nDetEta<<" ";
+    recEta_str<<m_nRecEta<<' ';
+    detEta_str<<m_nDetEta<<' ';
 
-    recPhi1_str<<m_nRecPhi1<<" ";
-    detPhi1_str<<m_nDetPhi1<<" ";
+    recPhi1_str<<m_nRecPhi1<<' ';
+    detPhi1_str<<m_nDetPhi1<<' ';
 
-    recPhi2_str<<m_nRecPhi2<<" ";
-    detPhi2_str<<m_nDetPhi2<<" ";
+    recPhi2_str<<m_nRecPhi2<<' ';
+    detPhi2_str<<m_nDetPhi2<<' ';
 
 
 
@@ -217,12 +217,9 @@ namespace MuonCalib{
       cs=theData->getCs();
       errCs=theData->getErrCs();
 
-      //      std::cout<<" provo a metterci "<<eff<< " "<<errEff<< " "<<res1<< " "<<errRes1<< " "<<res2<< " "<<errRes2<< " "<<resX<< " "<<errResX<< " "<<time<< " "<<errTime<<std::endl;
+      recEta_str<< eff<< ' '<<errEff<< ' '<<res1<< ' '<<errRes1<< ' '<<res2<< ' '<<errRes2<< ' '<<resX<< ' '<<errResX<< ' '<<time<< ' '<<errTime<< ' ';
+      detEta_str<<noise<< ' '<<errNoise<< ' '<<noiseC<< ' '<<errNoiseC<< ' '<<cs<< ' '<<errCs<< ' ';
 
-      recEta_str<< eff<< " "<<errEff<< " "<<res1<< " "<<errRes1<< " "<<res2<< " "<<errRes2<< " "<<resX<< " "<<errResX<< " "<<time<< " "<<errTime<< " ";
-      detEta_str<<noise<< " "<<errNoise<< " "<<noiseC<< " "<<errNoiseC<< " "<<cs<< " "<<errCs<< " ";
-      
-      //      std::cout<<" vediamo se ha funzionato,  ora receta e' "<<recEta.str()<<std::endl;
 
     }
 
@@ -247,9 +244,9 @@ namespace MuonCalib{
       cs=theData->getCs();
       errCs=theData->getErrCs();
 
-      recPhi1_str<<eff<<" " <<res1<<" " <<res2<<" " <<resX<<" " <<time<< " ";
-      recPhi2_str<<errEff<<" " <<errRes1<<" " <<errRes2<<" " <<errResX<<" " <<errTime<< " ";
-      detPhi1_str<<noise<<" " <<errNoise<<" " <<noiseC<<" " <<errNoiseC<<" " <<cs<<" " <<errCs<< " ";
+      recPhi1_str<<eff<<' ' <<res1<<' ' <<res2<<' ' <<resX<<' ' <<time<< ' ';
+      recPhi2_str<<errEff<<' ' <<errRes1<<' ' <<errRes2<<' ' <<errResX<<' ' <<errTime<< ' ';
+      detPhi1_str<<noise<<' ' <<errNoise<<' ' <<noiseC<<' ' <<errNoiseC<<' ' <<cs<<' ' <<errCs<< ' ';
 
 
     }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCondDbData.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCondDbData.cxx
index b51fe176ea8be9a59018426847247002807653db..bbf0f5ab6cf247802a07447ff175f0ada630d12b 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCondDbData.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondData/src/RpcCondDbData.cxx
@@ -37,7 +37,7 @@ RpcCondDbData::setDeadStripInt(Identifier chamberId, int striplist){
 void
 RpcCondDbData::setDeadStripList(Identifier chamberId, const std::string& striplist){
     if(m_cachedDeadStripList.count(chamberId)) return;
-    m_cachedDeadStripList[chamberId] = striplist;
+    m_cachedDeadStripList[chamberId] = std::move(striplist);
 }
 
 // setEfficiency
@@ -115,7 +115,7 @@ RpcCondDbData::setProjectedTrack(Identifier chamberId, int projectedTracks){
 void
 RpcCondDbData::setStripTime(Identifier stripId, const std::vector<double>& time){
     if(m_cachedStripTime.count(stripId)) return;
-    m_cachedStripTime[stripId] = time;
+    m_cachedStripTime[stripId] = std::move(time);
 }
 
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondInterface/MuonCondInterface/IMDT_MapConversion.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondInterface/MuonCondInterface/IMDT_MapConversion.h
index ef1d9fbddc2d5d014c810462cd57668a7f61e9bc..bc4410e8bd33c2c4c243708dee85e9e6b6282c58 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondInterface/MuonCondInterface/IMDT_MapConversion.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondInterface/MuonCondInterface/IMDT_MapConversion.h
@@ -27,7 +27,7 @@ class IMDT_MapConversion: virtual public IAlgTool{
    static const InterfaceID& interfaceID() {return IID_IMDT_MapConversion;};
 
  
-   virtual const Identifier& ConvertToOffline(const std::string &OnlineId,
+   virtual const Identifier& ConvertToOffline(std::string_view OnlineId,
                                               bool quiet = false) const =0;
   
 };
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/MuonCondSvc/MdtStringUtils.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/MuonCondSvc/MdtStringUtils.h
index e1c733c7aab98335228f8ddf65885b5b1469cc62..64ccc06d0d7ab1b7e500a9253cc9ac7eb0f5c151 100755
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/MuonCondSvc/MdtStringUtils.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/MuonCondSvc/MdtStringUtils.h
@@ -11,6 +11,14 @@ class MdtStringUtils {
   static void tokenize(const std::string& str,
 		       std::vector<std::string>& tokens,
         	       const std::string& delimiters = " ");
+  static void tokenize(const std::string& str,
+           std::vector<std::string>& tokens,
+                 char delimiters = ' ');
+  static std::vector<std::string_view> tokenize(std::string_view str,
+                       char delimiters = ' ');
+  static int atoi(std::string_view);
+  static float stof(std::string_view);
+  static int atoi(char a) noexcept { return ((int)a) - ((int)'0'); }
 }; 
 }
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/MdtStringUtils.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/MdtStringUtils.cxx
index c1ad020b33831998efb7cbf8d1d2e35f0806cbac..f9108120674f9e18afa7319ef8a9b243c4796405 100755
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/MdtStringUtils.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/MdtStringUtils.cxx
@@ -5,6 +5,7 @@
 #include <string>
 #include <vector>
 #include "MuonCondSvc/MdtStringUtils.h"
+#include <charconv>
 
 namespace MuonCalib {
 
@@ -29,4 +30,56 @@ void  MdtStringUtils::tokenize(const std::string& str,
     }
 }
 
+void  MdtStringUtils::tokenize(const std::string& str,
+                      std::vector<std::string>& tokens,
+                      char delimiter)
+{
+    // Skip delimiters at beginning.
+    std::string::size_type lastPos = str.find_first_not_of(delimiter, 0);
+    // Find first "non-delimiter".
+    std::string::size_type pos     = str.find_first_of(delimiter, lastPos);
+
+    while (std::string::npos != pos || std::string::npos != lastPos)
+    {
+        // Found a token, add it to the vector.
+        tokens.push_back(str.substr(lastPos, pos - lastPos));
+        // Skip delimiters.  Note the "not_of"
+        lastPos = str.find_first_not_of(delimiter, pos);
+        // Find next "non-delimiter"
+        pos = str.find_first_of(delimiter, lastPos);
+    //  std::cout << "Added token : " << tokens[tokens.size()-1] << "!" << std::endl;
+    }
+}
+
+std::vector<std::string_view>  MdtStringUtils::tokenize(std::string_view str,
+                      char delimiter)
+{
+    // Skip delimiters at beginning.
+    std::string::size_type lastPos = str.find_first_not_of(delimiter, 0);
+    // Find first "non-delimiter".
+    std::string::size_type pos     = str.find_first_of(delimiter, lastPos);
+    std::vector<std::string_view> tokens;
+    while (std::string::npos != pos || std::string::npos != lastPos)
+    {
+        // Found a token, add it to the vector.
+        tokens.push_back(str.substr(lastPos, pos - lastPos));
+        // Skip delimiters.  Note the "not_of"
+        lastPos = str.find_first_not_of(delimiter, pos);
+        // Find next "non-delimiter"
+        pos = str.find_first_of(delimiter, lastPos);
+    //  std::cout << "Added token : " << tokens[tokens.size()-1] << "!" << std::endl;
+    }
+    return tokens;
+}
+
+int MdtStringUtils::atoi(std::string_view str){
+   int result=-9999;
+   std::from_chars(str.data(), str.data() + str.size(), result);
+   return result;
+}
+
+float MdtStringUtils::stof(std::string_view str){
+    //TODO: Replace this with from_chars once the compilers support it!
+   return std::stof(std::string(str));
+}
 }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/NSWCondUtils.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/NSWCondUtils.cxx
index efb5fe3edd696d79dc19726a79fe232b21ebd5a2..dabdde1407fa813dbfd8edd2c784458772a3476d 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/NSWCondUtils.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/NSWCondUtils.cxx
@@ -12,55 +12,53 @@
 #include "MuonCondSvc/NSWCondUtils.h"
 #include "GaudiKernel/MsgStream.h"
 #include "AthenaKernel/getMessageSvc.h"
-
+#include <charconv>
+#include "boost/algorithm/string.hpp"
 namespace MuonCalib{
   void NSWCondUtils::setNSWABLinesFromAscii(const std::string& filename, ALineMapContainer& writeALines, BLineMapContainer& writeBLines, const sTgcIdHelper* stgcHelper, const MmIdHelper* mmHelper)
   {
+    using namespace MuonCalib;
     std::ifstream inputFile;
     inputFile.open(filename);
     int nLines = 1;
     int nNewALines = 0;
     int nNewBLines = 0;
     std::string line;
-    std::string type;
-    std::string since_str;
-    std::string till_str;
+    std::string_view since_str;
+    std::string_view till_str;
 
     while(std::getline(inputFile,line)){
 
       ++nLines;
 
-      std::vector<std::string> tokens;
-      std::string delimiter = ":";
-      MuonCalib::MdtStringUtils::tokenize(line, tokens, delimiter);
+      char delimiter = ':';
+      const auto tokens = MdtStringUtils::tokenize(line, delimiter);
 
-      type = tokens[0];
+      const auto &type = tokens[0];
 
-      if(type.find("#") == 0){
+      if(type[0] == '#' ){
         continue;
       }
 
-      if(type.find("Header") == 0){
-        std::string delimiter = "|";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(line, tokens, delimiter);
+      if(boost::algorithm::starts_with(type, "Header")){
+        char delimiter = '|';
+        auto tokens = MdtStringUtils::tokenize(line, delimiter);
         since_str = tokens[1];
         till_str = tokens[2];
       }
 
-      if(type.find("IOV") == 0){
-        std::string delimiter = " ";
-        MuonCalib::MdtStringUtils::tokenize(line, tokens, delimiter);
+      if(boost::algorithm::starts_with(type, "IOV")){
+        char delimiter = ' ';
+        auto tokens = MdtStringUtils::tokenize(line, delimiter);
         int ival = 1;
         long int iovThisBlob = 0; 
-        std::string str_iovThisBlob = tokens[ival];
-        sscanf(str_iovThisBlob.c_str(), "%80ld", &iovThisBlob);
+        std::string_view str_iovThisBlob = tokens[ival];
+        std::from_chars(str_iovThisBlob.data(), str_iovThisBlob.data() + str_iovThisBlob.size(), iovThisBlob);
       }
 
-      if(type.find("Corr") == 0){
-        std::string delimiter = " ";
-        std::vector<std::string> tokens;
-        MuonCalib::MdtStringUtils::tokenize(line, tokens, delimiter);
+      if(boost::algorithm::starts_with(type, "Corr")){
+        char delimiter = ' ';
+        auto tokens = MdtStringUtils::tokenize(line, delimiter);
 
         if(tokens.size() != 25){
           MsgStream log(Athena::getMessageSvc(), "NSWCondUtils");
@@ -70,60 +68,31 @@ namespace MuonCalib{
 
         int ival =1;
         int phi, eta, mult;
-        std::string stationType = tokens[ival++];
-        
-        std::string phi_str = tokens[ival++];
-        sscanf(phi_str.c_str(),"%80d",&phi);
-
-        std::string eta_str = tokens[ival++];
-        sscanf(eta_str.c_str(),"%80d",&eta);
-
-        std::string mult_str = tokens[ival++];
-        sscanf(mult_str.c_str(),"%80d",&mult);
+        std::string_view stationType = tokens[ival++];
+        phi = MdtStringUtils::atoi(tokens[ival++]);
+        eta = MdtStringUtils::atoi(tokens[ival++]);
+        mult = MdtStringUtils::atoi(tokens[ival++]);
 
         float s, z, t, rots, rotz, rott;
-
-        std::string s_str = tokens[ival++];
-        sscanf(s_str.c_str(),"%80f",&s);
-
-        std::string z_str = tokens[ival++];
-        sscanf(z_str.c_str(),"%80f",&z);
-
-        std::string t_str = tokens[ival++];
-        sscanf(t_str.c_str(),"%80f",&t);
-
-        std::string rots_str = tokens[ival++];
-        sscanf(rots_str.c_str(),"%80f",&rots);
-
-        std::string rotz_str = tokens[ival++];
-        sscanf(rotz_str.c_str(),"%80f",&rotz);
-
-        std::string rott_str = tokens[ival++];
-        sscanf(rott_str.c_str(),"%80f",&rott);
+        s = MdtStringUtils::stof(tokens[ival++]);
+        z = MdtStringUtils::stof(tokens[ival++]);
+        t = MdtStringUtils::stof(tokens[ival++]);
+        rots = MdtStringUtils::stof(tokens[ival++]);
+        rotz = MdtStringUtils::stof(tokens[ival++]);
+        rott = MdtStringUtils::stof(tokens[ival++]);
 
         float bz, bp, bn, sp, sn, tw, pg, tr, eg, ep, en;
-        std::string tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&bz);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&bp);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&bn);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&sp);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&sn);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&tw);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&pg);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&tr);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&eg);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&ep);
-        tmp_str = tokens[ival++];
-        sscanf(tmp_str.c_str(),"%80f",&en);
+        bz = MdtStringUtils::stof(tokens[ival++]);
+        bp = MdtStringUtils::stof(tokens[ival++]);
+        bn = MdtStringUtils::stof(tokens[ival++]);
+        sp = MdtStringUtils::stof(tokens[ival++]);
+        sn = MdtStringUtils::stof(tokens[ival++]);
+        tw = MdtStringUtils::stof(tokens[ival++]);
+        pg = MdtStringUtils::stof(tokens[ival++]);
+        tr = MdtStringUtils::stof(tokens[ival++]);
+        eg = MdtStringUtils::stof(tokens[ival++]);
+        ep = MdtStringUtils::stof(tokens[ival++]);
+        en = MdtStringUtils::stof(tokens[ival++]);
 
         Identifier id, id_mult;
         if(stationType == "MML" || stationType == "MMS"){
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/RpcCoolStrSvc.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/RpcCoolStrSvc.cxx
index 01ecaff64126de8ce0c70d389c61db63e7d2043f..e7d64c3369b92261e600619bd5be2df48324139c 100755
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/RpcCoolStrSvc.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/RpcCoolStrSvc.cxx
@@ -23,6 +23,7 @@
 #include "MuonCondData/RpcCalibDBEntry.h"
 #include "MuonCondData/RpcCalibDataContainer.h"
 #include "MuonCondSvc/RpcCoolStrSvc.h"
+#include "MuonCondSvc/MdtStringUtils.h"
 
 namespace MuonCalib {
 
@@ -130,9 +131,10 @@ namespace MuonCalib {
 
     while (getline(in, theLine)) { // Reads all lines
 
-      int delimiter=theLine.find(";");
-      Identifier gapID(atoi(theLine.substr(0,delimiter).c_str()));
-      std::string payLoad=theLine.substr(delimiter+2,theLine.size()-delimiter-2);
+      int delimiter=theLine.find(';');
+      std::string_view lineview(theLine);
+      Identifier gapID(MuonCalib::MdtStringUtils::atoi(lineview.substr(0,delimiter)));
+      std::string_view payLoad=lineview.substr(delimiter+2,theLine.size()-delimiter-2);
 
 
       const RpcCalibDBEntry* newEntry=new RpcCalibDBEntry(gapID, payLoad);
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/TGCTriggerDbAlg.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/TGCTriggerDbAlg.cxx
index 93d66ac6493f16efe71d84afae099fca1c8ed003..9d84977eed698b701a7a96b84b54a48bbc8e522a 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/TGCTriggerDbAlg.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondSvc/src/TGCTriggerDbAlg.cxx
@@ -195,7 +195,7 @@ void TGCTriggerDbAlg::fillReadMapBw(TGCTriggerData* writeCdo,
 
     char delimiter = '\n';
     std::string field, tag;
-    uint32_t phimod2 = modulename[moduleId].find("b") != std::string::npos ? 1 : 0;
+    uint32_t phimod2 = modulename[moduleId].find('b') != std::string::npos ? 1 : 0;
     uint32_t modaddr = ((modulenumber[moduleId] & TGCTriggerData::MODULE_MASK)<<TGCTriggerData::MODULE_SHIFT) +
                        ((phimod2 & TGCTriggerData::PHIMOD2_MASK)<<TGCTriggerData::PHIMOD2_SHIFT);
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/MuonCondTool/MDT_MapConversion.h b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/MuonCondTool/MDT_MapConversion.h
index 71ea00e53da6caa9adbc56ea84afc3ec99af8014..d9f99406c3c6ea799e2ddbaa2f602983286749d1 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/MuonCondTool/MDT_MapConversion.h
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/MuonCondTool/MDT_MapConversion.h
@@ -31,7 +31,7 @@ public:
   virtual StatusCode initialize();
 
 
-  virtual const Identifier& ConvertToOffline(const std::string &OnlineId,
+  virtual const Identifier& ConvertToOffline(std::string_view OnlineId,
                                              bool quiet = false) const;
 
   //  const std::string OnlineName(Identifier OfflineId);
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/CSC_DCSConditionsTool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/CSC_DCSConditionsTool.cxx
index 5ef7dfb1c31126e839e4124338c729c59c0d91bc..48bd6ad5f80cbe7650fb46856b873fec796a4261 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/CSC_DCSConditionsTool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/CSC_DCSConditionsTool.cxx
@@ -70,9 +70,11 @@ StatusCode CSC_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   const CondAttrListCollection* atrc=nullptr;
   ATH_MSG_INFO("Try to read from folder <"<<m_hvFolder<<">");
   // Print out callback information
-  if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Level " << I << " Keys: ");
-  std::list<std::string>::const_iterator keyIt = keys.begin();
-  for (; keyIt != keys.end(); ++ keyIt)  if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG(*keyIt << " ");  
+  if (msgLvl(MSG::DEBUG)) {
+    ATH_MSG_DEBUG("Level " << I << " Keys: ");
+    std::list<std::string>::const_iterator keyIt = keys.begin();
+    for (; keyIt != keys.end(); ++ keyIt)  ATH_MSG_DEBUG(*keyIt << " ");
+  }
 
   ATH_CHECK(detStore()->retrieve(atrc,m_hvFolder));
   ATH_MSG_INFO("CondAttrListCollection from DB folder have been obtained with size "<< atrc->size());
@@ -81,8 +83,6 @@ StatusCode CSC_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   Identifier ChamberId;
   unsigned int layer_index=0;
   unsigned int chan_index=0;
-  std::map<Identifier,int>::const_iterator it;
-  std::pair<std::map<Identifier,int>::const_iterator,bool> ret;
   
   int hv_state, lv_state, hv_setpoint0, hv_setpoint1;
   for (itr = atrc->begin(); itr != atrc->end(); ++itr){
@@ -105,38 +105,34 @@ StatusCode CSC_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
    
     
     
-    std::string delimiter = "_";
-    std::vector<std::string> tokens;
-    MuonCalib::MdtStringUtils::tokenize(csc_chan_name,tokens,delimiter);
-
-    for (unsigned int i=0; i<tokens.size(); i++) {
-      
-      if(tokens[i]!="0"){
-	 if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Sequence for name string load is \n" << tokens[i]); 
-      }
-      
+    char delimiter = '_';
+    const auto tokens = MuonCalib::MdtStringUtils::tokenize(csc_chan_name,delimiter);
+    if (msgLvl(MSG::DEBUG)){
+       for (unsigned int i=0; i<tokens.size(); i++) {
+          if(tokens[i]!="0"){
+	           ATH_MSG_DEBUG("Sequence for name string load is \n" << tokens[i]); 
+       }
+     }
     }
 
-    
-
     if((hv_state!=1 or lv_state!=1 or hv_setpoint0 <1000 or hv_setpoint1 <1000) && !tokens.empty()){
       
       if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("NOT 0 HV : " << hv_state << " ChamberName : "<<tokens[0] << "wirelayer" << tokens[1]);
       int eta=0; int phi=0;
       //std::string chamber_name;
-      std::string layer = tokens[1];
-      std::string number_layer =tokens[1].substr(1,2);   
-      int wirelayer = atoi(const_cast<char*>(number_layer.c_str()));
+      std::string_view layer = tokens[1];
+      std::string_view number_layer =tokens[1].substr(1,2);
+      int wirelayer = MuonCalib::MdtStringUtils::atoi(number_layer);
       //std::string chamber_name = tokens[0];
-      std::string chamber_name;
-      std::string eta_side = tokens[0].substr(0,1);
-      if (eta_side == "A") eta = +1;
-      if (eta_side == "C") eta = -1;
-      std::string size_side = tokens[0].substr(1,1);
+      std::string_view chamber_name;
+      char eta_side = tokens[0][0];
+      if (eta_side == 'A') eta = +1;
+      if (eta_side == 'C') eta = -1;
+      char size_side = tokens[0][1];
       
-      if (size_side == "L") chamber_name = "CSL";
-      if (size_side == "S") chamber_name = "CSS";
-      std::string sector_side = tokens[0].substr(2,4);
+      if (size_side == 'L') chamber_name = "CSL";
+      if (size_side == 'S') chamber_name = "CSS";
+      std::string_view sector_side = tokens[0].substr(2,4);
       if (sector_side == "01" || sector_side == "02") phi=1;
       if (sector_side == "03" || sector_side == "04") phi=2;
       if (sector_side == "05" || sector_side == "06") phi=3;
@@ -149,9 +145,15 @@ StatusCode CSC_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
       ChamberId = m_idHelperSvc->cscIdHelper().elementID(chamber_name, eta, phi);
       Identifier WireLayerId = m_idHelperSvc->cscIdHelper().channelID(ChamberId, 1, wirelayer,1,1);
       if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("chamber Name = " <<chamber_name);
-      std::string WireLayerstring = chamber_name+"_"+eta_side+"_"+sector_side+"_"+layer;  
-      m_cachedDeadWireLayers.push_back(WireLayerstring);
-       if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Layers Off = " <<WireLayerstring);
+      std::string WireLayerstring = std::string(chamber_name);
+      WireLayerstring+='_';
+      WireLayerstring+=eta_side;
+      WireLayerstring+='_';
+      WireLayerstring+=sector_side;
+      WireLayerstring+='_';
+      WireLayerstring+=layer;
+      if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Layers Off = " <<WireLayerstring);
+      m_cachedDeadWireLayers.push_back(std::move(WireLayerstring));
       m_cachedDeadWireLayersId.push_back(WireLayerId);
 
       if(m_CSC_LayerMap.count(ChamberId))
@@ -188,10 +190,11 @@ StatusCode CSC_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
 StatusCode CSC_DCSConditionsTool::loadchamber(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   ATH_MSG_INFO("Load chamber from DCS DB");
   // Print out callback information
-  if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("Level " << I << " Keys: ");
-  std::list<std::string>::const_iterator keyIt = keys.begin();
-  for (; keyIt != keys.end(); ++ keyIt)  if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG(*keyIt << " ");
- 
+  if (msgLvl(MSG::DEBUG)) {
+    ATH_MSG_DEBUG("Level " << I << " Keys: ");
+    std::list<std::string>::const_iterator keyIt = keys.begin();
+    for (; keyIt != keys.end(); ++ keyIt)  ATH_MSG_DEBUG(*keyIt << " ");
+  }
   const CondAttrListCollection* atrc=nullptr;
   ATH_MSG_INFO("Try to read from folder <"<<m_chamberFolder<<">");
 
@@ -199,32 +202,26 @@ StatusCode CSC_DCSConditionsTool::loadchamber(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   ATH_MSG_INFO(" CondAttrListCollection from DB folder have been obtained with size "<< atrc->size());
   
   CondAttrListCollection::const_iterator itr;
-  
-  std::map<Identifier,int>::const_iterator it;
-
-  std::pair<std::map<Identifier,int>::const_iterator,bool> ret;
 
-  std::vector<std::string> chamber_good;
+  std::vector<std::string> chamber_good;//Not string_view because of possible scoping issues
 
   for (itr = atrc->begin(); itr != atrc->end(); ++itr){
     
     const coral::AttributeList& atr=itr->second;
      if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("AttributeList  size : " << atr.size());
     
-    std::string chamber_enabled=*(static_cast<const std::string*>((atr["enabledChambers"]).addressOfData()));
+    const std::string &chamber_enabled=*(static_cast<const std::string*>((atr["enabledChambers"]).addressOfData()));
     
-    std::string delimiter = " ";
-    std::vector<std::string> tokens;
-    MuonCalib::MdtStringUtils::tokenize(chamber_enabled,tokens,delimiter);
+    char delimiter = ' ';
+    auto tokens = MuonCalib::MdtStringUtils::tokenize(chamber_enabled,delimiter);
     
     for (unsigned int i=0; i<tokens.size(); i++) {
-      chamber_good.push_back(tokens[i]);
+      chamber_good.emplace_back(tokens[i]);
     }
     
   }
   
-  std::string chamber_all[] = {"A01","A02","A03","A04","A05","A06","A07","A08","A09","A10","A11","A12","A13","A14","A15","A16","C01","C02","C03","C04","C05","C06","C07","C08","C09","C10","C11","C12","C13","C14","C15","C16"};
-  std::vector<std::string> chamber_v(chamber_all,chamber_all+32);      
+  std::vector<std::string_view> chamber_v{"A01","A02","A03","A04","A05","A06","A07","A08","A09","A10","A11","A12","A13","A14","A15","A16","C01","C02","C03","C04","C05","C06","C07","C08","C09","C10","C11","C12","C13","C14","C15","C16"};
   sort(chamber_v.begin(), chamber_v.end());
   
   for(unsigned int count=0; count<chamber_good.size(); count++){
@@ -233,7 +230,7 @@ StatusCode CSC_DCSConditionsTool::loadchamber(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
       if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG("found chamber good!\n" <<chamber_v[count]); 
     }else {
       if (msgLvl(MSG::DEBUG)) ATH_MSG_DEBUG(" not found = " << chamber_good[count]);
-      m_cachedDeadStationsStr.push_back(chamber_good[count]);
+      m_cachedDeadStationsStr.emplace_back(chamber_good[count]);
     }
     
   }
@@ -241,11 +238,11 @@ StatusCode CSC_DCSConditionsTool::loadchamber(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   for(unsigned int tot=0; tot<m_cachedDeadStationsStr.size(); tot++){
     int eta=0; int phi=0;
 
-    std::string chamber_name;
-    std::string eta_side = m_cachedDeadStationsStr[tot].substr(0,1);
-    if (eta_side == "A") eta = +1;
-    if (eta_side == "C") eta = -1;
-    std::string sector_side = m_cachedDeadStationsStr[tot].substr(2,4);
+    std::string_view chamber_name;
+    char eta_side = m_cachedDeadStationsStr[tot][0];
+    if (eta_side == 'A') eta = +1;
+    if (eta_side == 'C') eta = -1;
+    std::string_view sector_side = std::string_view(m_cachedDeadStationsStr[tot]).substr(2,4);
     if (sector_side == "01" || sector_side == "02") phi=1;
     if (sector_side == "03" || sector_side == "04") phi=2;
     if (sector_side == "05" || sector_side == "06") phi=3;
@@ -271,9 +268,8 @@ StatusCode CSC_DCSConditionsTool::loadchamber(IOVSVC_CALLBACK_ARGS_P(I,keys)) {
   m_cachedDeadStationsId.insert( m_cachedDeadStationsId.end(),
 				 m_cachedDeadStationsId_chamber.begin(),m_cachedDeadStationsId_chamber.end());
   std::sort(m_cachedDeadStationsId.begin(),m_cachedDeadStationsId.end(),compareId);  
-  std::vector<Identifier>::const_iterator itId;
-  itId= std::unique(m_cachedDeadStationsId.begin(),m_cachedDeadStationsId.end());
-  m_cachedDeadStationsId.resize(itId -m_cachedDeadStationsId.begin());
+  std::vector<Identifier>::const_iterator itId= std::unique(m_cachedDeadStationsId.begin(),m_cachedDeadStationsId.end());
+  m_cachedDeadStationsId.resize(std::distance(m_cachedDeadStationsId.cbegin(), itId));
 
   return StatusCode::SUCCESS;
 }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsRun2Tool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsRun2Tool.cxx
index f3703324ae7b3bfe639388666fcac27440966a90..f7e6e9f98de7a3127e213d97d263987f0873a19a 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsRun2Tool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsRun2Tool.cxx
@@ -242,7 +242,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       hv_v1_ml2=*(static_cast<const float*>((atr["v1set_ML2"]).addressOfData()));
       
             
-      std::string delimiter2 = "_";
+      char delimiter2 = '_';
       std::vector<std::string> tokens2;
       
       MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2);
@@ -261,7 +261,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	//	m_log << MSG::INFO << "NOT ON and NOT STANDBY HV : " <<hv_name_ml1  << " ChamberName : "<<tokens2[0] << "multilayer 1"  <<endmsg;	
 	//	m_cachedDeadMultiLayers.push_back(1);
 	int multilayer =1;
-	std::string chamber_name = tokens2[0];
+	const std::string &chamber_name = tokens2[0];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId.push_back(MultiLayerId);
@@ -274,7 +274,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	//m_log << MSG::INFO << "STANDBY HV : " << hv_name_ml1<< " ChamberName : "<<tokens2[0] << "multilayer 1"<<endmsg;	
 	
 	int multilayer =1;
-	std::string chamber_name = tokens2[0];
+	const std::string &chamber_name = tokens2[0];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId.push_back(MultiLayerId);
@@ -285,7 +285,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	//m_log << MSG::INFO << "NOT ON and NOT STANDBY HV : " <<hv_name_ml2  << " ChamberName : "<<tokens2[0] << "multilayer 2"  <<endmsg;	
 	//m_cachedDeadMultiLayers.push_back(2);
 	int multilayer =1;
-	std::string chamber_name = tokens2[0];
+	const std::string &chamber_name = tokens2[0];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId.push_back(MultiLayerId);
@@ -298,7 +298,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	//m_log << MSG::INFO << "STANDBY HV : " << hv_name_ml2<< " ChamberName : "<<tokens2[0] << "multilayer 2"<<endmsg;	
 	
 	int multilayer =2;
-	std::string chamber_name = tokens2[0];
+	const std::string &chamber_name = tokens2[0];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId.push_back(MultiLayerId);
@@ -307,7 +307,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if(hv_name_ml2 !="ON" && hv_name_ml2 !="STANDBY" && hv_name_ml2 !="UNKNOWN" && hv_name_ml1 !="ON" && hv_name_ml1 !="STANDBY" && hv_name_ml1 !="UNKNOWN" ){
 	
       m_cachedDeadStations.push_back(tokens2[0]);
-      std::string chamber_name=tokens2[0];
+      const std::string &chamber_name=tokens2[0];
       
       Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
       m_cachedDeadStationsId.push_back(ChamberId);
@@ -316,7 +316,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if(hv_name_ml2=="STANDBY" && hv_v0_ml2 != hv_v1_ml2 && hv_name_ml1=="STANDBY" && hv_v0_ml1 != hv_v1_ml1){
  	
 	m_cachedDeadStations.push_back(tokens2[0]);
-      std::string chamber_name=tokens2[0];
+      const std::string &chamber_name=tokens2[0];
       
       Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
       m_cachedDeadStationsId.push_back(ChamberId);
@@ -378,7 +378,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
     if(atr.size()){
       hv_name=*(static_cast<const std::string*>((atr["fsmCurrentState_LV"]).addressOfData()));
       //m_log<<MSG::DEBUG<<" CondAttrListCollection ChanNum : "<<chanNum<<" ChanName : " << atrc->chanName(chanNum) <<endmsg;
-      std::string delimiter = " ";
+      char delimiter = ' ';
       std::vector<std::string> tokens;
       MuonCalib::MdtStringUtils::tokenize(hv_name,tokens,delimiter);
       for (unsigned int i=0; i<tokens.size(); i++)
@@ -389,7 +389,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	  }
 	}
        
-      std::string delimiter2 = "_";
+      char delimiter2 = '_';
       std::vector<std::string> tokens2;
       MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2);
       
@@ -403,7 +403,7 @@ StatusCode MDT_DCSConditionsRun2Tool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if(tokens[0]!="ON"){
 	 if( m_verbose ) m_log << MSG::VERBOSE << "NOT ON LV: " << tokens[0]<< " ChamberName : "<<tokens2[0] <<endmsg;
 	m_cachedDeadLVStations.push_back(tokens2[0]);
-	std::string chamber_name= tokens2[0];
+	const std::string &chamber_name= tokens2[0];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	m_cachedDeadLVStationsId.push_back(ChamberId);
 	 if( m_verbose ) m_log<<MSG::VERBOSE<<"Chamber off from LV Chamber !=ON "<<tokens2[0] <<endmsg;
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsTool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsTool.cxx
index acfc96008d2235cbf6d296370d2feb8056f3415f..7c44fa34af1c2d1a0499c25a395643b8ae330ddf 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsTool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DCSConditionsTool.cxx
@@ -249,14 +249,13 @@ StatusCode MDT_DCSConditionsTool::loadDropChamber(IOVSVC_CALLBACK_ARGS_P(I,keys)
     
     chamber_dropped=*(static_cast<const std::string*>((atr["Chambers_disabled"]).addressOfData()));
     
-    std::string delimiter = " ";
-    std::vector<std::string> tokens;
-    MuonCalib::MdtStringUtils::tokenize(chamber_dropped,tokens,delimiter);
+    char delimiter = ' ';
+    auto tokens = MuonCalib::MdtStringUtils::tokenize(chamber_dropped,delimiter);
     for (unsigned int i=0; i<tokens.size(); i++) {
       if(tokens[i]!="0"){
 
-        m_cachedDeadStations.push_back(tokens[i]);
-	std::string chamber_name=tokens[i];
+        m_cachedDeadStations.push_back(std::string(tokens[i]));
+	std::string_view chamber_name=tokens[i];
 	 
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	m_cachedDeadStationsId.push_back(ChamberId);
@@ -275,7 +274,7 @@ StatusCode MDT_DCSConditionsTool::loadDropChamber(IOVSVC_CALLBACK_ARGS_P(I,keys)
 StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 {
  
-
+  using namespace MuonCalib;
   m_log.setLevel(msgLevel());
   m_debug = m_log.level() <= MSG::DEBUG;
   m_verbose = m_log.level() <= MSG::VERBOSE;
@@ -359,9 +358,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
     if(atr.size()==1){
       hv_name=*(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
       //m_log<<MSG::DEBUG<<" CondAttrListCollection ChanNum  : "<<chanNum<<" ChanName : " << atrc->chanName(chanNum) <<endmsg;
-      std::string delimiter = " ";
-      std::vector<std::string> tokens;
-      MuonCalib::MdtStringUtils::tokenize(hv_name,tokens,delimiter);
+      char delimiter = ' ';
+      auto tokens= MuonCalib::MdtStringUtils::tokenize(hv_name,delimiter);
       for (unsigned int i=0; i<tokens.size(); i++)
 	{
 	  
@@ -371,9 +369,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	}
       
       
-      std::string delimiter2 = "_";
-      std::vector<std::string> tokens2;
-      MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2);
+      char delimiter2 = '_';
+      auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload,delimiter2);
       
       for (unsigned int i=0; i<tokens2.size(); i++) {
 	if(tokens2[i]!="0"){
@@ -385,9 +382,9 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if(tokens[0]!="ON" && tokens[0]!="STANDBY" && tokens[0]!="UNKNOWN"){
 	
 	if( m_verbose ) m_log << MSG::VERBOSE << "NOT ON and NOT STANDBY HV : " << tokens[0]<< " ChamberName : "<<tokens2[2] << "multilayer" << tokens2[3]<<endmsg;	
-	m_cachedDeadMultiLayers.push_back(tokens2[2]);
-	int multilayer =atoi(tokens2[3].c_str());
-	std::string chamber_name = tokens2[2];
+	m_cachedDeadMultiLayers.push_back(std::string(tokens2[2]));
+	int multilayer =MdtStringUtils::atoi(tokens2[3]);
+	std::string_view chamber_name = tokens2[2];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId.push_back(MultiLayerId);
@@ -396,8 +393,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	
 	if( m_verbose ) m_log << MSG::VERBOSE << "STANDBY HV : " << tokens[0]<< " ChamberName : "<<tokens2[2] << "multilayer" << tokens2[3]<<endmsg;	
 	
-	int multilayer =atoi(tokens2[3].c_str());
-	std::string chamber_name = tokens2[2];
+	int multilayer =MdtStringUtils::atoi(tokens2[3]);
+	std::string_view chamber_name = tokens2[2];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
 	m_cachedDeadMultiLayersId_standby.push_back(MultiLayerId);
@@ -435,9 +432,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       setPointsV0_name=*(static_cast<const float*>((atr_v0["readBackSettings_v0"]).addressOfData()));
       //m_log << MSG::DEBUG << "Sequence for name string load is inside V0\n" << "  "<<setPointsV0_name<< endmsg; 
       //m_log<<MSG::DEBUG<<" CondAttrListCollection ChanName : "<<atrc_v0->chanName(chanNum) <<endmsg;
-      std::string delimiter2 = "_";
-      std::vector<std::string> tokens2;
-      MuonCalib::MdtStringUtils::tokenize(setPointsV0_payload,tokens2,delimiter2);
+      char delimiter2 = '_';
+      const auto tokens2= MuonCalib::MdtStringUtils::tokenize(setPointsV0_payload,delimiter2);
       //m_ChamberML_V0_chanum.insert(std::make_pair(int(chanNum),float(setPointsV0_name)));
       m_ChamberML_V0_chanum[int(chanNum)]=float(setPointsV0_name);
 
@@ -451,8 +447,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 
       }
       
-      int multilayer =atoi(tokens2[3].c_str());
-      std::string chamber_name = tokens2[2];
+      int multilayer =MdtStringUtils::atoi(tokens2[3]);
+      const std::string_view &chamber_name = tokens2[2];
       
       Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
       Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
@@ -485,9 +481,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
     if(atr_v1.size()==1){
       setPointsV1_name=*(static_cast<const float*>((atr_v1["readBackSettings_v1"]).addressOfData()));
          
-      std::string delimiter2 = "_";
-      std::vector<std::string> tokens2;
-      MuonCalib::MdtStringUtils::tokenize(setPointsV1_payload,tokens2,delimiter2);
+      char delimiter2 = '_';
+      auto tokens2 = MuonCalib::MdtStringUtils::tokenize(setPointsV1_payload,delimiter2);
       //m_ChamberML_V1_chanum.insert(std::make_pair(int(chanNum),float(setPointsV1_name)));
       m_ChamberML_V1_chanum[int(chanNum)]=float(setPointsV1_name);
       
@@ -498,8 +493,8 @@ StatusCode MDT_DCSConditionsTool::loadHV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	
       }
      
-      int multilayer =atoi(tokens2[3].c_str());
-      std::string chamber_name = tokens2[2];
+      int multilayer =MuonCalib::MdtStringUtils::atoi(tokens2[3]);
+      std::string_view chamber_name = tokens2[2];
       Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
       Identifier MultiLayerId = m_mdtIdHelper->channelID(ChamberId,multilayer,1,1);
       //m_ChamberML_V1.insert(std::make_pair(MultiLayerId,setPointsV1_name));
@@ -578,9 +573,8 @@ StatusCode MDT_DCSConditionsTool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
     if(atr.size()==1){
       hv_name=*(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
       //m_log<<MSG::DEBUG<<" CondAttrListCollection ChanNum : "<<chanNum<<" ChanName : " << atrc->chanName(chanNum) <<endmsg;
-      std::string delimiter = " ";
-      std::vector<std::string> tokens;
-      MuonCalib::MdtStringUtils::tokenize(hv_name,tokens,delimiter);
+      char delimiter = ' ';
+      const auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name,delimiter);
       for (unsigned int i=0; i<tokens.size(); i++)
 	{
 	  
@@ -590,9 +584,8 @@ StatusCode MDT_DCSConditionsTool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	}
      
       
-      std::string delimiter2 = "_";
-      std::vector<std::string> tokens2;
-      MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2);
+      char delimiter2 = '_';
+      auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload,delimiter2);
       
       for (unsigned int i=0; i<tokens2.size(); i++) {
 	if(tokens2[i]!="0"){
@@ -603,8 +596,8 @@ StatusCode MDT_DCSConditionsTool::loadLV(IOVSVC_CALLBACK_ARGS_P(I,keys))
       
       if(tokens[0]!="ON"){
 	 if( m_verbose ) m_log << MSG::VERBOSE << "NOT ON LV: " << tokens[0]<< " ChamberName : "<<tokens2[2] <<endmsg;
-	m_cachedDeadLVStations.push_back(tokens2[2]);
-	std::string chamber_name= tokens2[2];
+	m_cachedDeadLVStations.push_back(std::string(tokens2[2]));
+	std::string_view chamber_name= tokens2[2];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	m_cachedDeadLVStationsId.push_back(ChamberId);
 	 if( m_verbose ) m_log<<MSG::VERBOSE<<"Chamber off from LV Chamber !=ON "<<tokens2[2] <<endmsg;
@@ -689,18 +682,16 @@ StatusCode MDT_DCSConditionsTool::loadJTAG(IOVSVC_CALLBACK_ARGS_P(I,keys))
         
     if(atr.size()==1){
       hv_name=*(static_cast<const std::string*>((atr["fsm_currentState"]).addressOfData()));
-      std::string delimiter = " ";
-      std::vector<std::string> tokens;
-      MuonCalib::MdtStringUtils::tokenize(hv_name,tokens,delimiter);
+      char delimiter = ' ';
+      auto tokens = MuonCalib::MdtStringUtils::tokenize(hv_name,delimiter);
       for (unsigned int i=0; i<tokens.size(); i++)
 	{
 	  if(tokens[i]!="0"){
 	  }
 	}
       
-      std::string delimiter2 = "_";
-      std::vector<std::string> tokens2;
-      MuonCalib::MdtStringUtils::tokenize(hv_payload,tokens2,delimiter2);
+      char delimiter2 = '_';
+      auto tokens2 = MuonCalib::MdtStringUtils::tokenize(hv_payload,delimiter2);
       
       for (unsigned int i=0; i<tokens2.size(); i++) {
 	if(tokens2[i]!="0"){
@@ -710,8 +701,8 @@ StatusCode MDT_DCSConditionsTool::loadJTAG(IOVSVC_CALLBACK_ARGS_P(I,keys))
       
       if(tokens[0]!="INITIALIZED"){
 
-	m_cachedDeadJTAGStatus.push_back(tokens2[2]);
-	std::string chamber_name= tokens2[2];
+	m_cachedDeadJTAGStatus.push_back(std::string(tokens2[2]));
+	std::string_view chamber_name= tokens2[2];
 	Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
 	m_cachedDeadJTAGStatusId.push_back(ChamberId);
       }
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DQConditionsTool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DQConditionsTool.cxx
index fcb4d6cb7c584e2c0359f330b5077614159a36b0..6ea08115db7881f2b2274339f3c7f4521cbd76f9 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DQConditionsTool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_DQConditionsTool.cxx
@@ -206,7 +206,7 @@ StatusCode MDT_DQConditionsTool::loadDeadChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
   else
     if( m_debug ) m_log<<MSG::DEBUG<<" CondAttrListCollection from DB folder have been obtained with size "<< atrc->size() <<endmsg;
   
- 
+   using namespace MuonCalib;
   CondAttrListCollection::const_iterator itr;
  
   for (itr = atrc->begin(); itr != atrc->end(); ++itr) {
@@ -220,21 +220,18 @@ StatusCode MDT_DQConditionsTool::loadDeadChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
     list_layer=*(static_cast<const std::string*>((atr["Dead_layer"]).addressOfData()));
     list_tube=*(static_cast<const std::string*>((atr["Dead_tube"]).addressOfData()));
     
-    std::string delimiter = " ";
-    std::vector<std::string> tokens;
-    std::vector<std::string> tokens_mlayer;
-    std::vector<std::string> tokens_layer;
+    char delimiter = ' ';
     Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
-    MuonCalib::MdtStringUtils::tokenize(list_tube,tokens,delimiter);
-    MuonCalib::MdtStringUtils::tokenize(list_mlayer,tokens_mlayer,delimiter);
-    MuonCalib::MdtStringUtils::tokenize(list_layer,tokens_layer,delimiter);
+    const auto tokens = MuonCalib::MdtStringUtils::tokenize(list_tube,delimiter);
+    const auto tokens_mlayer = MuonCalib::MdtStringUtils::tokenize(list_mlayer,delimiter);
+    const auto tokens_layer = MuonCalib::MdtStringUtils::tokenize(list_layer,delimiter);
     
     for (unsigned int i=0; i<tokens.size(); i++) {
       if(tokens[i]!="0"){
         
-	int ml = atoi((tokens[i].substr(0,1)).c_str());
-	int layer= atoi((tokens[i].substr(1,2)).c_str());
-	int tube= atoi((tokens[i].substr(2)).c_str());
+	int ml = MdtStringUtils::atoi(tokens[i][0]);
+	int layer= MdtStringUtils::atoi(tokens[i].substr(1,2));
+	int tube= MdtStringUtils::atoi(tokens[i].substr(2));
 	
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,layer,tube); 
 	m_cachedDeadTubesId.push_back(ChannelId);
@@ -245,7 +242,7 @@ StatusCode MDT_DQConditionsTool::loadDeadChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
     for (unsigned int i=0; i<tokens_mlayer.size(); i++) {
       if(tokens_mlayer[i]!="0"){
         
-	int ml = atoi((tokens_mlayer[i].substr(0)).c_str());
+	int ml = MdtStringUtils::atoi(tokens_mlayer[i].substr(0));
 	
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,1,1); 
 	m_cachedDeadMultiLayersId.push_back(ChannelId);
@@ -256,8 +253,8 @@ StatusCode MDT_DQConditionsTool::loadDeadChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
     for (unsigned int i=0; i<tokens_layer.size(); i++) {
       if(tokens_layer[i]!="0"){
         
-	int ml = atoi((tokens_layer[i].substr(0,1)).c_str());
-	int layer = atoi((tokens_layer[i].substr(1)).c_str());
+	int ml = MdtStringUtils::atoi(tokens_layer[i].substr(0,1));
+	int layer = MdtStringUtils::atoi(tokens_layer[i].substr(1));
 		
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,layer,1); 
 	m_cachedDeadLayersId.push_back(ChannelId);
@@ -275,7 +272,7 @@ StatusCode MDT_DQConditionsTool::loadDeadChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
 	
 StatusCode MDT_DQConditionsTool::loadNoisyChamber(IOVSVC_CALLBACK_ARGS_P(I,keys))
 {
-
+  using namespace MuonCalib;
   m_log.setLevel(msgLevel());
   m_debug = m_log.level() <= MSG::DEBUG;
   m_verbose = m_log.level() <= MSG::VERBOSE; 
@@ -318,21 +315,18 @@ StatusCode MDT_DQConditionsTool::loadNoisyChamber(IOVSVC_CALLBACK_ARGS_P(I,keys)
     list_layer=*(static_cast<const std::string*>((atr["Noisy_layer"]).addressOfData()));
     list_tube=*(static_cast<const std::string*>((atr["Noisy_tube"]).addressOfData()));
     
-    std::string delimiter = " ";
-    std::vector<std::string> tokens;
-    std::vector<std::string> tokens_mlayer;
-    std::vector<std::string> tokens_layer;
+    char delimiter = ' ';
     Identifier ChamberId= m_condMapTool->ConvertToOffline(chamber_name);
-    MuonCalib::MdtStringUtils::tokenize(list_tube,tokens,delimiter);
-    MuonCalib::MdtStringUtils::tokenize(list_mlayer,tokens_mlayer,delimiter);
-    MuonCalib::MdtStringUtils::tokenize(list_layer,tokens_layer,delimiter);
+    auto tokens = MuonCalib::MdtStringUtils::tokenize(list_tube,delimiter);
+    auto tokens_mlayer = MuonCalib::MdtStringUtils::tokenize(list_mlayer,delimiter);
+    auto tokens_layer = MuonCalib::MdtStringUtils::tokenize(list_layer,delimiter);
     
     for (unsigned int i=0; i<tokens.size(); i++) {
       if(tokens[i]!="0"){
         
-	int ml = atoi((tokens[i].substr(0,1)).c_str());
-	int layer= atoi((tokens[i].substr(1,2)).c_str());
-	int tube= atoi((tokens[i].substr(2)).c_str());
+	int ml = MdtStringUtils::atoi(tokens[i][0]);
+	int layer= MdtStringUtils::atoi(tokens[i].substr(1,2));
+	int tube= MdtStringUtils::atoi(tokens[i].substr(2));
 	
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,layer,tube); 
 	m_cachedNoisyTubesId.push_back(ChannelId);
@@ -343,7 +337,7 @@ StatusCode MDT_DQConditionsTool::loadNoisyChamber(IOVSVC_CALLBACK_ARGS_P(I,keys)
     for (unsigned int i=0; i<tokens_mlayer.size(); i++) {
       if(tokens_mlayer[i]!="0"){
         
-	int ml = atoi((tokens_mlayer[i].substr(0)).c_str());
+	int ml = MdtStringUtils::atoi(tokens_mlayer[i].substr(0));
 	
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,1,1); 
 	m_cachedNoisyMultiLayersId.push_back(ChannelId);
@@ -354,8 +348,8 @@ StatusCode MDT_DQConditionsTool::loadNoisyChamber(IOVSVC_CALLBACK_ARGS_P(I,keys)
     for (unsigned int i=0; i<tokens_layer.size(); i++) {
       if(tokens_layer[i]!="0"){
         
-	int ml = atoi((tokens_layer[i].substr(0,1)).c_str());
-	int layer = atoi((tokens_layer[i].substr(1)).c_str());
+	int ml = MdtStringUtils::atoi(tokens_layer[i].substr(0,1));
+	int layer = MdtStringUtils::atoi(tokens_layer[i].substr(1));
 		
 	Identifier ChannelId =m_mdtIdHelper->channelID(ChamberId,ml,layer,1); 
 	m_cachedNoisyLayersId.push_back(ChannelId);
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx
index b9f7e3828cfd4edcff1441a1c189339c088b2c37..10dc7c3d3ad775967e5c378fb0ad865ee9afa545 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/MDT_MapConversion.cxx
@@ -137,29 +137,21 @@ StatusCode MDT_MapConversion::initialize()
   
 }
 
-const Identifier& MDT_MapConversion::ConvertToOffline(const std::string &OnlineId,
+const Identifier& MDT_MapConversion::ConvertToOffline(std::string_view OnlineId,
                                                       bool quiet /*=false */) const
 {
-//  int size = m_Chamber_Map.size();
-  //log << MSG::VERBOSE << "*************** size is\n" << size<< endmsg;
-  std::map<std::string, Identifier>::iterator iter;
-  
-  //const Identifier m_Online_empty;
-  
-  if (!m_Chamber_Map.empty()){
-    const auto& mapit = m_Chamber_Map.find(OnlineId);
-    if (ATH_UNLIKELY(mapit == m_Chamber_Map.end())) {
-      if (!quiet) {
-        ATH_MSG_ERROR( "Lookup of ID " << OnlineId << " in MDT_MapConversion::ConvertToOffline failed" );
-      }
-      return m_Online_empty; // not quite right but should never get here
-    }
-    const Identifier & OfflineName = (mapit->second);
+
+  if(m_Chamber_Map.empty()) return m_Online_empty; 
+
+  for(const auto &mappair : m_Chamber_Map){
+    if(mappair.first != OnlineId) continue;
+    const Identifier & OfflineName = mappair.second;
     return OfflineName;
-  } else { 
-    return m_Online_empty; 
   }
-  
+  if (!quiet) {
+    ATH_MSG_ERROR( "Lookup of ID " << OnlineId << " in MDT_MapConversion::ConvertToOffline failed" );
+  }
+  return m_Online_empty; // not quite right but should never get here
   
 }
 
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RPC_DCSConditionsTool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RPC_DCSConditionsTool.cxx
index 1d22116c46a4e4bc1be8b1e1df75d2c6bde71f9b..064dd3098794080f5725f6968a0d13a530182850 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RPC_DCSConditionsTool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RPC_DCSConditionsTool.cxx
@@ -197,17 +197,16 @@ StatusCode RPC_DCSConditionsTool::loadPanelOff(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if( m_debug )  m_log << MSG::DEBUG <<  "panel_off "<< panel_off << endmsg;
       if( m_debug )  m_log << MSG::DEBUG <<  "panel_reason "<< panel_reason_off << endmsg;
  
-      std::string delimiter = ",";
-      std::vector<std::string> info_panel;
-      MuonCalib::MdtStringUtils::tokenize(panel_off,info_panel,delimiter);
+      char delimiter = ',';
+      const auto info_panel = MuonCalib::MdtStringUtils::tokenize(panel_off,delimiter);
    
       Identifier PanelId;
     
       for(unsigned int i=0; i<info_panel.size();i++){
-        const char* ch_tmp= (info_panel[i].c_str());
-        if( m_debug )  m_log << MSG::DEBUG << " info_panel " << ch_tmp << " "<<atoi(ch_tmp)<< endmsg; 
+        const std::string_view &ch_tmp= info_panel[i];
+        if( m_debug )  m_log << MSG::DEBUG << " info_panel " << ch_tmp << " "<<MuonCalib::MdtStringUtils::atoi(ch_tmp)<< endmsg; 
       
-        PanelId= atoi(ch_tmp);
+        PanelId= MuonCalib::MdtStringUtils::atoi(ch_tmp);
     
         if(PanelId.get_compact()){
           if( m_debug )  m_log << MSG::DEBUG << "OFFPANEL "<<m_rpcIdHelper->show_to_string(PanelId) << endmsg;
@@ -274,17 +273,16 @@ StatusCode RPC_DCSConditionsTool::loadPanelDead(IOVSVC_CALLBACK_ARGS_P(I,keys))
       if( m_debug ) m_log << MSG::DEBUG <<  "panel_dead "<< panel_dead << endmsg;
       if( m_debug ) m_log << MSG::DEBUG <<  "panel_reason "<< panel_reason_dead << endmsg;
  
-      std::string delimiter = ",";
-      std::vector<std::string> info_panel;
-      MuonCalib::MdtStringUtils::tokenize(panel_dead,info_panel,delimiter);
+      char delimiter = ',';
+      const auto info_panel = MuonCalib::MdtStringUtils::tokenize(panel_dead,delimiter);
     
       Identifier PanelId;
     
       for(unsigned int i=0; i<info_panel.size();i++){
-        const char* ch_tmp= (info_panel[i].c_str());
-        if( m_debug ) m_log << MSG::DEBUG << " info_panel " << ch_tmp << " "<<atoi(ch_tmp)<< endmsg; 
+        const auto &ch_tmp= info_panel[i];
+        if( m_debug ) m_log << MSG::DEBUG << " info_panel " << ch_tmp << " "<<MuonCalib::MdtStringUtils::atoi(ch_tmp)<< endmsg; 
       
-        PanelId= atoi(ch_tmp);
+        PanelId= MuonCalib::MdtStringUtils::atoi(ch_tmp);
     
         if(PanelId.get_compact()){
           if( m_debug ) m_log << MSG::DEBUG << "DEADPANEL "<<  m_rpcIdHelper->show_to_string(PanelId) << endmsg;
diff --git a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RpcDetectorStatusDbTool.cxx b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RpcDetectorStatusDbTool.cxx
index ef8a1f810670d271b1aaff1be371df0c7eaae6a2..279ee345d63bcc14bb8e61613cecff4512fd7b1b 100644
--- a/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RpcDetectorStatusDbTool.cxx
+++ b/MuonSpectrometer/MuonConditions/MuonCondGeneral/MuonCondTool/src/RpcDetectorStatusDbTool.cxx
@@ -166,14 +166,13 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
       m_log << MSG::DEBUG << "striplist load is " << striplist << " "
             << striplist.size() << endmsg;
     }
-    std::string delimiter = " ";
-    std::vector<std::string> info_panel;
-    std::vector<float> info_panel_test;
-    MuonCalib::MdtStringUtils::tokenize(eff_panel, info_panel, delimiter);
+    char delimiter = ' ';
+    using namespace MuonCalib;
+    const auto info_panel = MdtStringUtils::tokenize(eff_panel, delimiter);
 
     if (m_verbose) {
       for (unsigned int i = 0; i < info_panel.size(); i++) {
-        const char* ch_tmp = (info_panel[i].c_str());
+        const auto &ch_tmp = info_panel[i];
         m_log << MSG::VERBOSE << " info_panel " << ch_tmp << endmsg;
         // version(3), # tracks, #strips, eff, errors, eff_gap, errors, res_cs1,
         // errors, res_cs2, errors, res_csother, errors, noise, errors,
@@ -182,8 +181,7 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
       }
     }
 
-    const char* SDBversion = (info_panel[0].c_str());
-    int DBversion = atoi(SDBversion);
+    int DBversion = MdtStringUtils::atoi(info_panel[0]);
     if (m_FirstCall)
       m_log << MSG::INFO << " DB version  " << info_panel[0]
             << " Size of info_panel array = " << info_panel.size() << endmsg;
@@ -216,117 +214,104 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
       m_log << MSG::INFO << " aver_cs9_up " << info_panel[24] << endmsg;
     }
 
-    const char* SNStrip = (info_panel[2].c_str());
-    int npanelstrip = atoi(SNStrip);
+    int npanelstrip = MdtStringUtils::atoi(info_panel[2]);
 
-    const char* SProjectedTracks = (info_panel[1].c_str());
-    double ProjectedTracks = atof(SProjectedTracks);
+    double ProjectedTracks = MdtStringUtils::stof(info_panel[1]);
     // m_RPC_PanelProjectedTracksMap.insert(std::make_pair(chamberId,ProjectedTracks));
     m_RPC_PanelProjectedTracksMap[chamberId] = ProjectedTracks;
 
     if (m_debug)
       m_log << MSG::DEBUG << "Size of  RPC_PanelProjectedTracksMap "
             << m_RPC_PanelProjectedTracksMap.size() << "; in panel " << channum
-            << " SProjectedTracks " << SProjectedTracks << " ProjectedTracks "
+            << " SProjectedTracks " << info_panel[1] << " ProjectedTracks "
             << ProjectedTracks << endmsg;
 
-    const char* SEfficiency = (info_panel[3].c_str());
-    double Efficiency = atof(SEfficiency);
+    double Efficiency = MdtStringUtils::stof(info_panel[3]);
     // m_RPC_PanelEfficiencyMap.insert(std::make_pair(chamberId,Efficiency));
     m_RPC_PanelEfficiencyMap[chamberId] = Efficiency;
 
     if (m_debug)
       m_log << MSG::DEBUG << "Size of  RPC_PanelEfficiencyMap "
             << m_RPC_PanelEfficiencyMap.size() << "; in panel " << channum
-            << " SEfficiency " << SEfficiency << " Efficiency " << Efficiency
+            << " SEfficiency " << info_panel[3] << " Efficiency " << Efficiency
             << endmsg;
 
-    const char* SGapEfficiency = (info_panel[5].c_str());
-    double GapEfficiency = atof(SGapEfficiency);
+    double GapEfficiency = MdtStringUtils::stof(info_panel[5]);
     // m_RPC_GapEfficiencyMap.insert(std::make_pair(chamberId,GapEfficiency));
     m_RPC_GapEfficiencyMap[chamberId] = GapEfficiency;
 
     if (m_debug)
       m_log << MSG::DEBUG << "Size of  RPC_GapEfficiencyMap "
             << m_RPC_GapEfficiencyMap.size() << "; in panel " << channum
-            << " SGapEfficiency " << SGapEfficiency << " GapEfficiency "
+            << " SGapEfficiency " << info_panel[5] << " GapEfficiency "
             << GapEfficiency << endmsg;
 
-    const char* SMeanClusterSizeMap = (info_panel[17].c_str());
-    double MeanClusterSizeMap = atof(SMeanClusterSizeMap);
+    double MeanClusterSizeMap = MdtStringUtils::stof(info_panel[17]);
     // m_RPC_PanelMeanClusterSizeMap.insert(std::make_pair(chamberId,MeanClusterSizeMap));
     m_RPC_PanelMeanClusterSizeMap[chamberId] = MeanClusterSizeMap;
 
     if (m_debug)
       m_log << MSG::DEBUG << "Size of  RPC_PanelMeanClusterSizeMap "
             << m_RPC_PanelMeanClusterSizeMap.size() << "; in panel " << channum
-            << " SMeanClusterSizeMap " << SMeanClusterSizeMap
+            << " SMeanClusterSizeMap " << info_panel[17]
             << " MeanClusterSizeMap " << MeanClusterSizeMap << endmsg;
     if (DBversion > 2) {
-      const char* SFracClusterSize1Map_a = (info_panel[19].c_str());
-      const char* SFracClusterSize1Map_b = (info_panel[20].c_str());
       double FracClusterSize1Map =
-        atof(SFracClusterSize1Map_a) + atof(SFracClusterSize1Map_b) * 10000;
+        MdtStringUtils::stof(info_panel[19]) + MdtStringUtils::stof(info_panel[20]) * 10000;
       // m_RPC_PanelFracClusterSize1Map.insert(std::make_pair(chamberId,FracClusterSize1Map));
       m_RPC_PanelFracClusterSize1Map[chamberId] = FracClusterSize1Map;
 
       if (m_debug)
         m_log << MSG::DEBUG << "Size of  RPC_PanelFracClusterSize1Map "
               << m_RPC_PanelFracClusterSize1Map.size() << "; in panel "
-              << channum << " SFracClusterSize1Map_a " << SFracClusterSize1Map_a
-              << " SFracClusterSize1Map_b " << SFracClusterSize1Map_b
+              << channum << " SFracClusterSize1Map_a " << info_panel[19]
+              << " SFracClusterSize1Map_b " << info_panel[20]
               << " FracClusterSize1Map " << FracClusterSize1Map << endmsg;
 
-      const char* SFracClusterSize2Map_a = (info_panel[21].c_str());
-      const char* SFracClusterSize2Map_b = (info_panel[22].c_str());
       double FracClusterSize2Map =
-        atof(SFracClusterSize2Map_a) + atof(SFracClusterSize2Map_b) * 10000;
+        MdtStringUtils::stof(info_panel[21]) + MdtStringUtils::stof(info_panel[22]) * 10000;
       // m_RPC_PanelFracClusterSize2Map.insert(std::make_pair(chamberId,FracClusterSize2Map));
       m_RPC_PanelFracClusterSize2Map[chamberId] = FracClusterSize2Map;
 
       if (m_debug)
         m_log << MSG::DEBUG << "Size of  RPC_PanelFracClusterSize2Map "
               << m_RPC_PanelFracClusterSize2Map.size() << "; in panel "
-              << channum << " SFracClusterSize2Map_a " << SFracClusterSize2Map_a
-              << " SFracClusterSize2Map_b " << SFracClusterSize2Map_b
+              << channum << " SFracClusterSize2Map_a " << info_panel[21]
+              << " SFracClusterSize2Map_b " << info_panel[22]
               << " FracClusterSize2Map " << FracClusterSize2Map << endmsg;
 
-      const char* SFracClusterSize3Map_a = (info_panel[23].c_str());
-      const char* SFracClusterSize3Map_b = (info_panel[24].c_str());
       double FracClusterSize3Map =
-        atof(SFracClusterSize3Map_a) + atof(SFracClusterSize3Map_b) * 10000;
+        MdtStringUtils::stof(info_panel[23]) + MdtStringUtils::stof(info_panel[24]) * 10000;
       // m_RPC_PanelFracClusterSize3Map.insert(std::make_pair(chamberId,FracClusterSize3Map));
       m_RPC_PanelFracClusterSize3Map[chamberId] = FracClusterSize3Map;
 
       if (m_debug)
         m_log << MSG::DEBUG << "Size of  RPC_PanelFracClusterSize3Map "
               << m_RPC_PanelFracClusterSize3Map.size() << "; in panel "
-              << channum << " SFracClusterSize3Map_a " << SFracClusterSize3Map_a
-              << " SFracClusterSize3Map_b " << SFracClusterSize3Map_b
+              << channum << " SFracClusterSize3Map_a " << info_panel[23]
+              << " SFracClusterSize3Map_b " << info_panel[24]
               << " FracClusterSize3Map " << FracClusterSize3Map << endmsg;
 
     } else {
       if (info_panel.size() > 20) {
-        const char* SFracClusterSize1Map = (info_panel[19].c_str());
-        double FracClusterSize1Map = atof(SFracClusterSize1Map);
+        double FracClusterSize1Map = MdtStringUtils::stof(info_panel[19]);
         // m_RPC_PanelFracClusterSize1Map.insert(std::make_pair(chamberId,FracClusterSize1Map));
         m_RPC_PanelFracClusterSize1Map[chamberId] = FracClusterSize1Map;
 
         if (m_debug)
           m_log << MSG::DEBUG << "Size of  RPC_PanelFracClusterSize1Map "
                 << m_RPC_PanelFracClusterSize1Map.size() << "; in panel "
-                << channum << " SFracClusterSize1Map " << SFracClusterSize1Map
+                << channum << " SFracClusterSize1Map " << info_panel[19]
                 << " FracClusterSize1Map " << FracClusterSize1Map << endmsg;
 
-        const char* SFracClusterSize2Map = (info_panel[20].c_str());
-        double FracClusterSize2Map = atof(SFracClusterSize2Map);
+        double FracClusterSize2Map = MdtStringUtils::stof(info_panel[20]);
         // m_RPC_PanelFracClusterSize2Map.insert(std::make_pair(chamberId,FracClusterSize2Map));
         m_RPC_PanelFracClusterSize2Map[chamberId] = FracClusterSize2Map;
 
         if (m_debug)
           m_log << MSG::DEBUG << "Size of  RPC_PanelFracClusterSize2Map "
                 << m_RPC_PanelFracClusterSize2Map.size() << "; in panel "
-                << channum << " SFracClusterSize2Map " << SFracClusterSize2Map
+                << channum << " SFracClusterSize2Map " << info_panel[20]
                 << " FracClusterSize2Map " << FracClusterSize2Map << endmsg;
       } else {
         // m_RPC_PanelFracClusterSize1Map.insert(std::make_pair(chamberId,0.6));
@@ -353,12 +338,10 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
     // update for the timing and error on timing
     // new info strip |status time error_on_time|
 
-    std::string delimiter_strip = "|";
-    std::vector<std::string> info_strip;
+    char delimiter_strip = '|';
     std::string strip_status_list = "";
-    std::vector<float> info_strip_test;
 
-    MuonCalib::MdtStringUtils::tokenize(striplist, info_strip, delimiter_strip);
+    const auto info_strip = MdtStringUtils::tokenize(striplist, delimiter_strip);
 
     if (m_debug)
       m_log << MSG::DEBUG << "strip list " << striplist << " info list "
@@ -371,37 +354,32 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
 
       for (unsigned int i = 0; i < info_strip.size(); i++) {
 
-        const char* ch_strip2 = (info_strip[i].c_str());
+        const auto &ch_strip2 = info_strip[i];
         if (m_verbose)
           m_log << MSG::VERBOSE << "strip # " << i
                 << " Status+Timing INFO (time, error) " << ch_strip2 << endmsg;
 
-        std::string delimiter_strip2 = "  ";
-        std::vector<std::string> info_strip2;
-        std::vector<float> info_strip_test2;
+        char delimiter_strip2 = ' ';
         // 	 //
-        MuonCalib::MdtStringUtils::tokenize(
-          ch_strip2, info_strip2, delimiter_strip2);
+        const auto info_strip2 = MdtStringUtils::tokenize(ch_strip2, delimiter_strip2);
 
         if (m_verbose) {
           for (unsigned int ii = 0; ii < info_strip2.size(); ii++) {
-            const char* ch_strip_new = (info_strip2[ii].c_str());
+            const auto& ch_strip_new = info_strip2[ii];
             m_log << MSG::VERBOSE << " info_strip with time " << info_strip2[ii]
                   << "  again  " << ch_strip_new << endmsg;
           }
         }
 
-        const char* STime = const_cast<char*>(info_strip2[1].c_str());
-        double Time = atof(STime);
-        const char* SSigmaTime = const_cast<char*>(info_strip2[2].c_str());
-        double SigmaTime = atof(SSigmaTime);
-        const char* strip_status = const_cast<char*>(info_strip2[0].c_str());
+        double Time = MdtStringUtils::stof(info_strip2[1]);
+        double SigmaTime = MdtStringUtils::stof(info_strip2[2]);
+        const std::string_view &strip_status = info_strip2[0];
 
         if (m_verbose)
           m_log << MSG::VERBOSE << "strip # " << i
                 << " after dec: Status+Timing INFO (time, error) "
                 << strip_status << " " << Time << "+/-" << SigmaTime << endmsg;
-        strip_status_list = strip_status_list + strip_status;
+        strip_status_list += strip_status;
 
         std::vector<double> Time_vect;
         Time_vect.push_back(Time);
@@ -418,7 +396,7 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
                 << m_rpcIdHelper->show_to_string(strip_id) << endmsg;
 
         // m_RPC_StripTimeMap.insert(std::make_pair(strip_id,Time_vect));
-        m_RPC_StripTimeMap[strip_id] = Time_vect;
+        m_RPC_StripTimeMap[strip_id] = std::move(Time_vect);
 
         countpanelstrip++;
 
@@ -465,11 +443,11 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
       }
       for (unsigned int i = 0; i < striplist.size(); i++) {
 
-        std::string part_strip = striplist.substr(i, 1);
+        char part_strip = striplist[i];
 
-        strip_status_list = strip_status_list + part_strip;
+        strip_status_list += part_strip;
 
-        const char* h_panel = (part_strip.c_str());
+        char h_panel = part_strip;
 
         Identifier strip_id;
         CondAttrListCollection::ChanNum stripnum;
@@ -484,7 +462,7 @@ StatusCode RpcDetectorStatusDbTool::loadRpcDqStatus(
 
         countpanelstrip++;
 
-        if (part_strip == "0") {
+        if (part_strip == '0') {
           if (m_debug && (!m_verbose))
             m_log << MSG::DEBUG << "strip #" << i + 1 << " info_strip "
                   << part_strip << " strip_id " << stripnum << " expanded "
diff --git a/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/MuonAGDDDescription/sTGCDetectorHelper.h b/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/MuonAGDDDescription/sTGCDetectorHelper.h
index e03fb9b9e304d951b994740ad2301dffd84e2006..0036e8ab3e0bc44abf2c8db01edb3aae2855e29c 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/MuonAGDDDescription/sTGCDetectorHelper.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/MuonAGDDDescription/sTGCDetectorHelper.h
@@ -26,6 +26,8 @@ public:
 	sTGCDetectorDescription* Get_sTGCDetector(char type,int ieta,int iphi,int layer=1,char side='A');
 	sTGCDetectorDescription* Get_sTGCDetectorType(const std::string& type);
 	sTGCDetectorDescription* Get_sTGCDetectorSubType(const std::string& type);
+	sTGCDetectorDescription* Get_sTGCDetectorType(std::string_view type);
+	sTGCDetectorDescription* Get_sTGCDetectorSubType(std::string_view type);
 	AGDDPositionedDetector Get_sTGCPositionedDetector(char type,int ieta,int iphi,int layer=1,char side='A');
 	
 private:
diff --git a/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/src/sTGCDetectorHelper.cxx b/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/src/sTGCDetectorHelper.cxx
index 5e51b3499bce8a0ff527823d236a44a4c3426510..158ecfbb12f07a7fd620eff5f3c58de07e9b3c41 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/src/sTGCDetectorHelper.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonAGDDDescription/src/sTGCDetectorHelper.cxx
@@ -100,13 +100,28 @@ AGDDPositionedDetector sTGCDetectorHelper::Get_sTGCPositionedDetector(char type,
 
 sTGCDetectorDescription* sTGCDetectorHelper::Get_sTGCDetectorType(const std::string& type)
 {
-	if (m_sTGCList.find(type) != m_sTGCList.end()) return m_sTGCList[type];
+	if (auto itr = m_sTGCList.find(type); itr != m_sTGCList.end()) return itr->second;
 	return nullptr;
 }
 
 sTGCDetectorDescription* sTGCDetectorHelper::Get_sTGCDetectorSubType(const std::string& type)
 {
-	if (m_sTGCListSubType.find(type) != m_sTGCListSubType.end()) return m_sTGCListSubType[type];
+	if (auto itr = m_sTGCListSubType.find(type); itr != m_sTGCListSubType.end()) return itr->second;
 	return nullptr;
 }
 
+sTGCDetectorDescription* sTGCDetectorHelper::Get_sTGCDetectorType(std::string_view type)
+{
+	for(const auto &pair : m_sTGCList){
+     if(pair.first == type) return pair.second;
+	}
+	return nullptr;
+}
+
+sTGCDetectorDescription* sTGCDetectorHelper::Get_sTGCDetectorSubType(std::string_view type)
+{
+	for(const auto &pair : m_sTGCListSubType){
+     if(pair.first == type) return pair.second;
+	}
+	return nullptr;
+}
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/GlobalUtilities.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/GlobalUtilities.h
index 10844c9e1bd760b3cf27a4a24a8960ab18b1935a..884a3f8e80731f12b6bff05ad7dd8c835462b384 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/GlobalUtilities.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/GlobalUtilities.h
@@ -15,8 +15,8 @@
 namespace MuonGM 
 {
     std::string buildString(int i, int ncha);
-    int strtoint(const std::string& str, unsigned int istart, unsigned int length);
-    int stationPhiTGC(const std::string& stName, int fi, int zi_input, const std::string& geometry_version);
+    int strtoint(std::string_view str, unsigned int istart, unsigned int length);
+    int stationPhiTGC(std::string_view stName, int fi, int zi_input, std::string_view geometry_version);
 }
 
 #endif // MUONREADOUTGEOMETRY_GLOBALUTILITIES_H
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
index 20876dc7f8804bee94030bb1d8c6bb2021517a07..439092c035768bfd1ad30a22658bd54ad34db34f 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonStation.h
@@ -46,7 +46,7 @@ class MuonReadoutElement;
 class MuonStation {
 public:
 
-   MuonStation(std::string stName,
+   MuonStation(std::string_view stName,
                double m_Ssize, double m_Rsize, double m_Zsize,
                double m_LongSsize, double m_LongRsize, double m_LongZsize, int zi, int fi, 
                bool m_descratzneg);
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/GlobalUtilities.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/GlobalUtilities.cxx
index e121ecce535ee71db533f52e0bc9acd79c169661..fb8da4a4574d68841e4b2cc4ef481d00bd4dea57 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/GlobalUtilities.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/GlobalUtilities.cxx
@@ -12,6 +12,7 @@
 #include <iostream>
 #include <sstream>
 #include <cmath>
+#include <charconv>
 
 namespace MuonGM 
 {
@@ -19,9 +20,7 @@ namespace MuonGM
 std::string buildString(int i, int ncha)
 {
   if (ncha<=0) {
-    std::ostringstream ostigg;
-    ostigg << i;
-    return ostigg.str();
+    return std::to_string(i);
   } else {
     int ij = i;
     std::ostringstream ostigg;
@@ -36,19 +35,20 @@ std::string buildString(int i, int ncha)
     
 
 
-int strtoint(const std::string& str, unsigned int istart, unsigned int length)
+int strtoint(std::string_view str, unsigned int istart, unsigned int length)
 {
-  std::string s(str.substr(istart,length));
-  int result = std::stoi(s);
+  std::string_view s(str.substr(istart,length));
+  int result = -999;
+  std::from_chars(s.data(), s.data() + s.size(), result);
   return result;
 }
 
 
 
-int stationPhiTGC(const std::string& stName, int fi, int zi_input, const std::string& geometry_version) 
+int stationPhiTGC(std::string_view stName, int fi, int zi_input, std::string_view geometry_version) 
 {
     // fi and zi_imput are the amdb indices (1, ... 8) and (-8, 8) are their ranges
-    std::string stName3 = stName.substr(0,3);
+    std::string_view stName3 = stName.substr(0,3);
     int stphi = 0;
 
     int zi = std::abs(zi_input);
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
index cf89b0a461e5c90b0e0debfbaefc8bc1c7af6f20..1a436c71df43715d89df1501a6b76a9bba1f672a 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonStation.cxx
@@ -18,12 +18,12 @@
 
 namespace MuonGM {
 
-MuonStation::MuonStation(std::string stName,
+MuonStation::MuonStation(std::string_view stName,
                          double Ssize, double Rsize, double Zsize,
                          double LongSsize, double LongRsize, double LongZsize, int zi, int fi, 
                          bool descratzneg)
 {
-  m_statname    = std::move(stName);
+  m_statname    = std::string(stName);
   m_Ssize       = Ssize      ;
   m_Rsize       = Rsize      ;
   m_Zsize       = Zsize      ;
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx
index 60f7d9063550f3722456a268547980957f157485..f0e047b3a4518156d088ad8743a6b5aff7ce86a9 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx
@@ -262,12 +262,12 @@ int TgcReadoutElement::chamberType() const
 
 bool TgcReadoutElement::endcap() const
 {
-    return ("E" == stationType().substr(2,1));
+    return (0 == stationType().compare(2,1,"E"));
 }
 
 bool TgcReadoutElement::forward() const
 {
-    return ("F" == stationType().substr(2,1));
+    return (0 == stationType().compare(2,1,"F"));
 }
 
 bool TgcReadoutElement::doublet() const
@@ -484,7 +484,7 @@ float TgcReadoutElement::stripDeltaPhi(int gasGap) const
   float dphi;
 
   int iStation = atoi(getStationType().substr(1,1).c_str());
-  if (iStation != 4 || "E" != getStationType().substr(2,1)) { // except for station T4E
+  if (iStation != 4 || 0 != getStationType().compare(2,1,"E")) { // except for station T4E
     dphi = 360.*CLHEP::degree/((float) getNPhiChambers())/nDivInChamberPhi[iStation-1];
   }
   else { // T4E
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
index bb4ce9c84c0efea37adbfb2ff38290148cf81d1e..0bd15fa5ea072cd03e73ca2b07adf590d3bdb185 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonInertMaterialBuilder.cxx
@@ -133,9 +133,9 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonInertMaterialBu
                 protMass += calculateVolume((*((*msTypeIter).first->constituents()))[ic].first.get()) *
                             (*((*msTypeIter).first->constituents()))[ic].second;
             }
-            perm = msTypeName.substr(0, 1) != "J" && m_blendLimit > 0 && protMass > m_blendLimit;
+            perm = msTypeName.compare(0, 1, "J") != 0 && m_blendLimit > 0 && protMass > m_blendLimit;
         }
-        if (perm) msTypeName = msTypeName + "PERM";
+        if (perm) msTypeName +=  "PERM";
         //
         const Trk::DetachedTrackingVolume* msTV = (*msTypeIter).first;
         for (unsigned int it = 0; it < (*msTypeIter).second.size(); it++) {
@@ -183,11 +183,8 @@ Muon::MuonInertMaterialBuilder::buildDetachedTrackingVolumeTypes(bool blend) {
     while (!vol.atEnd()) {
         const GeoVPhysVol* cv = &(*(vol.getVolume()));
         const GeoLogVol* clv = cv->getLogVol();
-        std::string vname = clv->getName();
-        //	if ( vname.size()<8 && vname.substr(0,3)=="NSW" && vname.substr(1,4)=="sTGC" ) {   // do nothing NSW sTGC station
-        //	} else if ( vname.size()<8 && vname.substr(0,3)=="NSW" && vname.substr(1,2)=="MM" ) {   // do nothing NSW MM station
-        //	} else if ( vname.size()>=8 && vname.substr(0,8)=="NewSmall" && vname.substr(1,4)=="sTGC" ) {  // do nothing, probably NSW
-        // station 	} else if ( vname.size()>=8 && vname.substr(0,8)=="NewSmall" && vname.substr(1,2)=="MM" ) {  // do nothing, probably
+        const std::string vnamestr = clv->getName();
+        std::string_view vname(vnamestr);
         // NSW station
         if (vname.size() > 7 && vname.substr(vname.size() - 7, 7) == "Station") {  // do nothing, active station
         } else {
@@ -240,7 +237,7 @@ Muon::MuonInertMaterialBuilder::buildDetachedTrackingVolumeTypes(bool blend) {
             if (!cv->getNChildVols()) {
                 std::vector<Amg::Transform3D> volTr;
                 volTr.push_back(vol.getTransform());
-                vols.emplace_back(clv, volTr);
+                vols.emplace_back(clv, std::move(volTr));
                 simpleTree = true;
             } else {
                 getObjsForTranslation(cv, Trk::s_idTransform, vols);
@@ -253,8 +250,8 @@ Muon::MuonInertMaterialBuilder::buildDetachedTrackingVolumeTypes(bool blend) {
             m_constituents.reserve(vols.size() + 3);
 
             for (unsigned int ish = 0; ish < vols.size(); ish++) {
-                std::string protoName = vname;
-                if (!simpleTree) protoName = vname + (vols[ish].first->getName());
+                std::string protoName = std::string(vname);
+                if (!simpleTree) protoName += (vols[ish].first->getName());
                 std::string pName = vols[ish].first->getName();
                 ATH_MSG_VERBOSE(" check in pName " << pName << ", made of " << vols[ish].first->getMaterial()->getName() << " x0 "
                                                    << vols[ish].first->getMaterial()->getRadLength() << ","
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
index 9d19da55f089ca4a78b8a4082679b6a3e65445c6..cb0dba7899d666a0baab85aec0d99eab0e639aea 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilder.cxx
@@ -115,10 +115,10 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilder:
     while (!vol.atEnd()) {
         const GeoVPhysVol* cv = &(*(vol.getVolume()));
         const GeoLogVol* clv = cv->getLogVol();
-        std::string vname = clv->getName();
+        const std::string &vname = clv->getName();
 
         // special treatment for NSW
-        if (vname.substr(0, 3) == "NSW" || vname.substr(0, 8) == "NewSmall") {
+        if (vname.compare(0, 3, "NSW") == 0 || vname.compare(0, 8, "NewSmall") == 0) {
             ATH_MSG_INFO(vname << " processing NSW ");
             std::vector<std::pair<const Trk::DetachedTrackingVolume*, std::vector<Amg::Transform3D> > > objs;
 
@@ -131,7 +131,7 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilder:
                 std::vector<Amg::Transform3D> volTr;
                 volTr.push_back(vol.getTransform());
                 std::pair<const GeoLogVol*, Trk::MaterialProperties*> cpair(clv, 0);
-                vols.emplace_back(cpair, volTr);
+                vols.emplace_back(cpair, std::move(volTr));
                 volNames.push_back(vname);
                 simpleTree = true;
             } else {
@@ -835,7 +835,8 @@ void Muon::MuonStationBuilder::glueComponents(const Trk::DetachedTrackingVolume*
 void Muon::MuonStationBuilder::identifyLayers(const Trk::DetachedTrackingVolume* station, int eta, int phi) const {
     ATH_MSG_VERBOSE(name() << " identifying layers ");
 
-    std::string stationName = station->trackingVolume()->volumeName();
+    const std::string &stationNamestr = station->trackingVolume()->volumeName();
+    std::string_view stationName(stationNamestr);
     ATH_MSG_VERBOSE(" in station " << station->name());
 
     if (stationName.substr(0, 1) == "C") {
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilderCond.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilderCond.cxx
index 424f97b7a2e16ec3e4f7a9ad9a347a555ebde94e..53837fed175629fd500c0d03b0303ac808958fe3 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilderCond.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationBuilderCond.cxx
@@ -125,7 +125,7 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
         std::string vname = clv->getName();
 
         // special treatment for NSW
-        if (vname.substr(0, 3) == "NSW" || vname.substr(0, 8) == "NewSmall") {
+        if (vname.compare(0, 3,"NSW") == 0 || vname.compare(0, 8,"NewSmall") == 0) {
             ATH_MSG_INFO(vname << " processing NSW ");
             std::vector<std::pair<const Trk::DetachedTrackingVolume*, std::vector<Amg::Transform3D> > > objs;
 
@@ -138,7 +138,7 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
                 std::vector<Amg::Transform3D> volTr;
                 volTr.push_back(vol.getTransform());
                 std::pair<const GeoLogVol*, Trk::MaterialProperties*> cpair(clv, 0);
-                vols.emplace_back(cpair, volTr);
+                vols.emplace_back(cpair, std::move(volTr));
                 volNames.push_back(vname);
                 simpleTree = true;
             } else {
@@ -171,7 +171,7 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
 
                 // Got to mothervolume of sTGC_Sensitive/sTGC_Frame and MM_Sensitive/MM_Frame: TGCGas ArCo2
                 ATH_MSG_DEBUG(" ish " << ish << " protoName14 " << protoName.substr(1, 4) << " volName04 " << volNames[ish].substr(0, 4));
-                if (volNames[ish].substr(0, 4) != "sTGC" && volNames[ish].substr(0, 2) != "MM") continue;
+                if (volNames[ish].compare(0, 4,"sTGC") != 0 && volNames[ish].substr(0, 2) != "MM") continue;
 
                 std::string oName = protoName.substr(protoName.find('-') + 1);
                 Identifier nswId = m_muonStationTypeBuilder->identifyNSW(muonMgr, oName, vols[ish].second[0]);
@@ -500,9 +500,9 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
 
         }  // end NSW!
 
-        if (vname.size() > 7 && vname.substr(vname.size() - 7, 7) == "Station" &&
-            ((m_buildBarrel && vname.substr(0, 1) == "B") || (m_buildEndcap && vname.substr(0, 1) == "E") ||
-             (m_buildCsc && vname.substr(0, 1) == "C") || (m_buildTgc && vname.substr(0, 1) == "T"))) {
+        if (vname.size() > 7 && vname.compare(vname.size() - 7, 7, "Station") == 0 &&
+            ((m_buildBarrel && vname.compare(0, 1,"B") == 0) || (m_buildEndcap && vname.compare(0, 1,"E") == 0) ||
+             (m_buildCsc && vname.compare(0, 1,"C") == 0) || (m_buildTgc && vname.compare(0, 1, "T") == 0))) {
             int etaphi = vol.getId();  // retrive eta/phi indexes
             int sign = (etaphi < 0) ? -1 : 1;
             etaphi = sign * etaphi;
@@ -530,31 +530,31 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
             //
             if (!gmStation) ATH_MSG_WARNING("Muon station not found! " << vname << "," << eta << "," << phi);
             std::string stName = (clv->getName()).substr(0, vname.size() - 8);
-            if (stName.substr(0, 1) == "B" && eta < 0) { stName = (clv->getName()).substr(0, vname.size() - 8) + "-"; }
-            if (stName.substr(0, 1) == "T" || stName.substr(0, 1) == "C") { stName = vname.substr(0, 4); }
+            if (stName.compare(0, 1,"B") == 0 && eta < 0) { stName = (clv->getName()).substr(0, vname.size() - 8) + "-"; }
+            if (stName.compare(0, 1,"T") == 0 || stName.compare(0, 1,"C") == 0) { stName = vname.substr(0, 4); }
             // loop over prototypes
             const Trk::DetachedTrackingVolume* msTV = nullptr;
             for (msTypeIter = msTypes->begin(); msTypeIter != msTypes->end(); ++msTypeIter) {
                 std::string msTypeName = (*msTypeIter)->name();
-                if ((stName.substr(0, 1) == "T" && stName == msTypeName.substr(0, stName.size())) ||
-                    (stName.substr(0, 1) != "T" && stName == msTypeName)) {
+                if ((stName.compare(0, 1,"T") == 0 && 0 == msTypeName.compare(0, stName.size(),stName)) ||
+                    (stName.compare(0, 1, "T") != 0 && stName == msTypeName)) {
                     msTV = *msTypeIter;
                     if (msTV && gmStation) {
                         Amg::Transform3D transf = Amg::CLHEPTransformToEigen(gmStation->getTransform());
                         Identifier stId(0);
-                        if (m_idHelperSvc->hasCSC() && stName.substr(0, 1) == "C") {
+                        if (m_idHelperSvc->hasCSC() && stName.compare(0, 1,"C") == 0) {
                             stId = m_idHelperSvc->cscIdHelper().elementID(vname.substr(0, 3), eta, phi);
                         }
                         // adjust eta,phi
-                        if (msTypeName.substr(0, 1) == "C") {
+                        if (msTypeName.compare(0, 1,"C") == 0) {
                             eta = 1;
                             if (transf.translation().z() < 0) eta = 0;
                             double phic = transf.translation().phi() + 0.1;
                             phi = static_cast<int>(phic < 0 ? 4 * phic / M_PI + 8 : 4 * phic / M_PI);
                         }
-                        if (msTypeName.substr(0, 1) == "T") {
+                        if (msTypeName.compare(0, 1,"T") == 0) {
                             bool az = true;
-                            std::string msName = msTV->trackingVolume()->volumeName();
+                            std::string_view msName ( msTV->trackingVolume()->volumeName());
                             if (transf.translation().z() < 0) az = false;
                             if (msName.substr(7, 2) == "01") eta = az ? 5 : 4;
                             if (msName.substr(7, 2) == "02") eta = az ? 5 : 4;
@@ -579,19 +579,19 @@ Muon::MuonStationBuilderCond::buildDetachedTrackingVolumes(const EventContext& c
                             if (msName.substr(7, 2) == "21") eta = az ? 5 : 4;
                             if (msName.substr(7, 2) == "22") eta = az ? 5 : 4;
                         }
-                        if (m_idHelperSvc->hasTGC() && stName.substr(0, 1) == "T") {
+                        if (m_idHelperSvc->hasTGC() && stName.compare(0, 1, "T") == 0) {
                             int etaSt = eta - 4;
                             if (eta < 5) etaSt = eta - 5;
                             double phic = transf.translation().phi();
-                            if (msTypeName.substr(2, 1) == "E" && msTypeName.substr(0, 3) != "T4E")
+                            if (msTypeName.compare(2, 1, "E") == 0 && msTypeName.compare(0, 3, "T4E") != 0)
                                 phi = static_cast<int>(phic < 0 ? 24 * phic / M_PI + 48 : 24 * phic / M_PI);
                             else
                                 phi = static_cast<int>(phic < 0 ? 12 * phic / M_PI + 24 : 12 * phic / M_PI);
                             phi++;
                             stId = m_idHelperSvc->tgcIdHelper().elementID(vname.substr(0, 3), etaSt, phi);
-                        } else if (m_idHelperSvc->hasRPC() && stName.substr(0, 3) == "BML") {
+                        } else if (m_idHelperSvc->hasRPC() && stName.compare(0, 3, "BML") == 0) {
                             stId = m_idHelperSvc->rpcIdHelper().elementID(vname.substr(0, 3), eta, phi, 1);
-                        } else if (m_idHelperSvc->hasMDT() && stName.substr(0, 1) != "C") {
+                        } else if (m_idHelperSvc->hasMDT() && stName.compare(0, 1, "C") != 0) {
                             stId = m_idHelperSvc->mdtIdHelper().elementID(vname.substr(0, 3), eta, phi);
                         }
                         if (!(stId.get_compact()))
@@ -638,9 +638,9 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilderC
             const GeoVPhysVol* cv = &(*(vol.getVolume()));
             const GeoLogVol* clv = cv->getLogVol();
             const std::string& vname = clv->getName();
-            if (vname.size() > 7 && vname.substr(vname.size() - 7, 7) == "Station" &&
-                ((m_buildBarrel && vname.substr(0, 1) == "B") || (m_buildEndcap && vname.substr(0, 1) == "E") ||
-                 (m_buildCsc && vname.substr(0, 1) == "C") || (m_buildTgc && vname.substr(0, 1) == "T"))) {
+            if (vname.size() > 7 && vname.compare(vname.size() - 7, 7, "Station") == 0 &&
+                ((m_buildBarrel && vname.compare(0, 1, "B") == 0) || (m_buildEndcap && vname.compare(0, 1, "E") == 0) ||
+                 (m_buildCsc && vname.compare(0, 1, "C") == 0) || (m_buildTgc && vname.compare(0, 1,"T") == 0))) {
                 int etaphi = vol.getId();  // retrieve eta/phi indexes
                 int sign = (etaphi < 0) ? -1 : 1;
                 etaphi = sign * etaphi;
@@ -670,11 +670,11 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilderC
                 std::string name = (clv->getName()).substr(0, vname.size() - 8);
                 // is this station known ?
                 // if TGC station, look for 1 component instead
-                if (name.substr(0, 1) == "T") {
+                if (name.compare(0, 1,"T") == 0) {
                     std::string tgc_name = cv->getChildVol(0)->getLogVol()->getName();
                     name = tgc_name;
                 }
-                if (name.substr(0, 1) == "B" && eta < 0) { name = (clv->getName()).substr(0, vname.size() - 8) + "-"; }
+                if (name.compare(0, 1, "B") == 0 && eta < 0) { name = (clv->getName()).substr(0, vname.size() - 8) + "-"; }
                 unsigned is = 0;
                 for (unsigned in = 0; in < stations.size(); in++) {
                     if (stations[in] != nullptr && name == stations[in]->name()) is++;
@@ -683,9 +683,9 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilderC
                     ATH_MSG_VERBOSE(" new station type " << name << "," << clv->getShape()->type());
                     ATH_MSG_VERBOSE(" prototype built from eta, phi:" << eta << "," << phi);
 
-                    if (name.substr(0, 2) == "CS" || name.substr(0, 1) == "T") {
+                    if (name.compare(0, 2,"CS") == 0 || name.compare(0, 1,"T") == 0) {
                         if (m_muonStationTypeBuilder) {
-                            if (name.substr(0, 2) == "CS") {
+                            if (name.compare(0, 2, "CS") == 0) {
                                 Trk::TrackingVolume* csc_station = m_muonStationTypeBuilder->processCscStation(cv, name, cache);
                                 // create layer representation
                                 std::pair<const Trk::Layer*, const std::vector<const Trk::Layer*>*> layerRepr =
@@ -782,7 +782,7 @@ const std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonStationBuilderC
                                 delete envelope;
 
                                 // identify prototype
-                                if ((name.substr(0, 1) == "B" || name.substr(0, 1) == "E"))
+                                if ((name.compare(0, 1, "B") == 0 || name.compare(0, 1,"E") == 0))
                                     identifyPrototype(newType, eta, phi, Amg::CLHEPTransformToEigen(gmStation->getTransform()), muonMgr);
 
                                 // create layer representation
@@ -844,8 +844,8 @@ void Muon::MuonStationBuilderCond::identifyLayers(const Trk::DetachedTrackingVol
     std::string stationName = station->trackingVolume()->volumeName();
     ATH_MSG_VERBOSE(" in station " << station->name());
 
-    if (stationName.substr(0, 1) == "C") {
-        int st = stationName.substr(0, 3) == "CSS" ? 0 : 1;
+    if (stationName.compare(0, 1, "C") == 0) {
+        int st = stationName.compare(0, 3, "CSS") == 0 ? 0 : 1;
         const MuonGM::CscReadoutElement* cscRE = muonMgr->getCscReadoutElement(st, eta, phi, 0);
         int cLay = cscRE ? 0 : 1;
         if (!cscRE) cscRE = muonMgr->getCscReadoutElement(st, eta, phi, cLay);
@@ -870,21 +870,21 @@ void Muon::MuonStationBuilderCond::identifyLayers(const Trk::DetachedTrackingVol
         }
     }
 
-    if (stationName.substr(0, 1) == "T") {
+    if (stationName.compare(0, 1, "T") == 0) {
         int st = 7;
-        if (stationName.substr(0, 3) == "T1F") {
+        if (stationName.compare(0, 3, "T1F") == 0) {
             st = 0;
-        } else if (stationName.substr(0, 3) == "T1E") {
+        } else if (stationName.compare(0, 3, "T1E") == 0) {
             st = 1;
-        } else if (stationName.substr(0, 3) == "T2F") {
+        } else if (stationName.compare(0, 3, "T2F") == 0) {
             st = 2;
-        } else if (stationName.substr(0, 3) == "T2E") {
+        } else if (stationName.compare(0, 3, "T2E") == 0) {
             st = 3;
-        } else if (stationName.substr(0, 3) == "T3F") {
+        } else if (stationName.compare(0, 3, "T3F") == 0) {
             st = 4;
-        } else if (stationName.substr(0, 3) == "T3E") {
+        } else if (stationName.compare(0, 3, "T3E") == 0) {
             st = 5;
-        } else if (stationName.substr(0, 3) == "T4F") {
+        } else if (stationName.compare(0, 3, "T4F") == 0) {
             st = 6;
         }
 
@@ -946,7 +946,7 @@ void Muon::MuonStationBuilderCond::identifyLayers(const Trk::DetachedTrackingVol
         }
     }
 
-    if (m_idHelperSvc->hasMDT() && (stationName.substr(0, 1) == "B" || stationName.substr(0, 1) == "E")) {
+    if (m_idHelperSvc->hasMDT() && (stationName.compare(0, 1, "B") == 0 || stationName.compare(0, 1, "E") == 0)) {
         // recalculate id
         Identifier stId(station->layerRepresentation()->layerType());
 
@@ -1213,7 +1213,7 @@ void Muon::MuonStationBuilderCond::getNSWStationsForTranslation(
             childName = childName + st.str();
         }
 
-        std::string cName = childName.substr(0, 3) == "NSW" || childName.substr(0, 8) == "NewSmall" ? name : name + childName;
+        std::string cName = childName.compare(0, 3, "NSW") == 0 || childName.compare(0, 8, "NewSmall") == 0 ? name : name + childName;
         ATH_MSG_VERBOSE("child number,name,position:" << ic << ":" << clv->getName() << ":" << (transform * transf).translation().perp()
                                                       << "," << (transform * transf).translation().z() << ","
                                                       << (transform * transf).translation().phi());
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
index c21aacec4afa60341f79662cba6e12a9cf8b1c9e..8c39b0a713a6825b222e1ace24a126110f0181e8 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonStationTypeBuilder.cxx
@@ -148,9 +148,9 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
         vol = new Trk::Volume(new Amg::Transform3D(transf), volBounds);
         ATH_MSG_VERBOSE("subvolume center:" << vol->center().x() << "," << vol->center().y() << "," << vol->center().z());
         std::string cname = clv->getName();
-        std::string vname = mv->getLogVol()->getName();
+        const std::string &vname = mv->getLogVol()->getName();
         int nameSize = vname.size() - 8;
-        if (cname.substr(0, nameSize) == vname.substr(0, nameSize)) cname = cname.substr(nameSize, cname.size() - nameSize);
+        if (cname.compare(0, nameSize, vname, 0, nameSize) == 0) cname = cname.substr(nameSize, cname.size() - nameSize);
         // order in X
         if (compVol.empty() || vol->center()[0] >= compVol.back()->center()[0]) {
             compVol.push_back(vol);
@@ -220,7 +220,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
         if (uppX > maxX) ATH_MSG_WARNING(" clash between component and envelope:" << compName[i] << "upper:" << uppX << ">" << maxX);
 
         // close Rpc if no further components
-        if (openRpc && compName[i].substr(0, 3) != "RPC" && compName[i].substr(0, 3) != "Ded") {
+        if (openRpc && compName[i].compare(0, 3, "RPC") != 0 && compName[i].compare(0, 3, "Ded") != 0) {
             // low edge of current volume
             double Xcurr = compVol[i]->center()[0] - compBounds->halflengthX();
             if (Xcurr >= currX + rpclowXsize + rpcuppXsize) {
@@ -238,7 +238,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
             }
         }
         // close spacer if no further components
-        if (openSpacer && compName[i].substr(0, 1) != "C" && compName[i].substr(0, 2) != "LB") {
+        if (openSpacer && compName[i].compare(0, 1, "C") != 0 && compName[i].compare(0, 2, "LB") != 0) {
             // low edge of current volume
             double Xcurr = compVol[i]->center()[0] - compBounds->halflengthX();
             if (Xcurr - currX - (spacerlowXsize + spaceruppXsize) >= -tolerance) {
@@ -253,7 +253,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
                 ATH_MSG_WARNING("clash in spacer definition!");
             }
         }
-        if (compName[i].substr(0, 3) == "RPC" || compName[i].substr(0, 3) == "Ded") {
+        if (compName[i].compare(0, 3, "RPC") == 0 || compName[i].compare(0, 3, "Ded") == 0) {
             if (!openRpc) {
                 openRpc = true;
                 geoRpc.clear();
@@ -276,7 +276,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
             }
             comp_processed = true;
         }
-        if (compName[i].substr(0, 1) == "C" || compName[i].substr(0, 2) == "LB") {
+        if (compName[i].compare(0, 1, "C") == 0 || compName[i].compare(0, 2, "LB") == 0) {
             if (!openSpacer) {
                 openSpacer = true;
                 geoSpacer.clear();
@@ -304,7 +304,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
             }
             comp_processed = true;
         }
-        if (compName[i].substr(0, 3) == "MDT") {
+        if (compName[i].compare(0, 3, "MDT") == 0) {
             Trk::Volume* mdtVol;
             Trk::CuboidVolumeBounds* mdtBounds = nullptr;
             // remove z shift in transform !! bugfix !!
@@ -327,9 +327,9 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processBoxStationC
             }
             double shiftSign = 1.;
             if (std::abs(zShift) > 0.) {
-                std::string stName = mv->getLogVol()->getName();
-                if (stName.substr(0, 4) == "BIR3" || stName.substr(0, 4) == "BIR5" || stName.substr(0, 4) == "BIR7" ||
-                    stName.substr(0, 5) == "BIR10")
+                const std::string &stName = mv->getLogVol()->getName();
+                if (stName.compare(0, 4, "BIR3") == 0 || stName.compare(0, 4, "BIR5") == 0 || stName.compare(0, 4, "BIR7") == 0 ||
+                    stName.compare(0, 5, "BIR10") == 0)
                     shiftSign = -1.;
             }
             const Trk::TrackingVolume* mdtTrkVol =
@@ -440,7 +440,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
         } else {
             double xSize = get_x_size(cv);
             // printChildren(cv);
-            if (clv->getName().substr(0, 1) != "C" && clv->getName().substr(0, 2) != "LB")
+            if (clv->getName().compare(0, 1, "C") != 0 && clv->getName().compare(0, 2, "LB") != 0)
                 transf *= Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 1., 0.)) * Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 0., 1.));
             volBounds =
                 new Trk::TrapezoidVolumeBounds(envelope->minHalflengthX(), envelope->maxHalflengthX(), envelope->halflengthY(), xSize);
@@ -449,7 +449,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
         std::string cname = clv->getName();
         std::string vname = mv->getLogVol()->getName();
         int nameSize = vname.size() - 8;
-        if (cname.substr(0, nameSize) == vname.substr(0, nameSize)) cname = cname.substr(nameSize, cname.size() - nameSize);
+        if (cname.compare(0, nameSize, vname, 0, nameSize) == 0) cname = cname.substr(nameSize, cname.size() - nameSize);
         // order in X
         if (compVol.empty() || vol->center()[0] >= compVol.back()->center()[0]) {
             compVol.push_back(vol);
@@ -520,7 +520,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
             return nullptr;
         }
         // close spacer if no further components
-        if (openSpacer && compName[i].substr(0, 1) != "C" && compName[i].substr(0, 2) != "LB") {
+        if (openSpacer && compName[i].compare(0, 1, "C") !=0  && compName[i].compare(0, 2, "LB") != 0) {
             if (Xcurr - currX - (spacerlowXsize + spaceruppXsize) >= -tolerance) {
                 Trk::TrapezoidVolumeBounds* spacerBounds = new Trk::TrapezoidVolumeBounds(envX1, envX2, envY, 0.5 * (Xcurr - currX));
                 Amg::Transform3D tr(Amg::Translation3D(currX + spacerBounds->halflengthZ(), 0., 0.) *
@@ -540,10 +540,10 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
                 std::cout << "clash in spacer definition!" << std::endl;
             }
         }
-        if (compName[i].substr(0, 3) == "RPC" || compName[i].substr(0, 3) == "Ded") {
+        if (compName[i].compare(0, 3, "RPC") == 0 || compName[i].compare(0, 3, "Ded") == 0) {
             std::cout << " RPC components for endcaps not coded " << std::endl;
         }
-        if (compName[i].substr(0, 1) == "C" || compName[i].substr(0, 2) == "LB") {
+        if (compName[i].compare(0, 1, "C") == 0 || compName[i].compare(0, 2, "LB") == 0) {
             if (!openSpacer) {
                 openSpacer = true;
                 geoSpacer.clear();
@@ -585,7 +585,7 @@ const Trk::TrackingVolumeArray* Muon::MuonStationTypeBuilder::processTrdStationC
             }
             comp_processed = true;
         }
-        if (compName[i].substr(0, 3) == "MDT") {
+        if (compName[i].compare(0, 3, "MDT") == 0) {
             Trk::Volume* mdtVol = nullptr;
             Trk::TrapezoidVolumeBounds* mdtBounds = nullptr;
             if (lowX == currX) {
@@ -670,7 +670,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processMdtBox(Trk::Volu
         Trk::MaterialProperties* mdtMat = nullptr;
         double xv = 0.;
         int active = 0;
-        if ((clv->getName()).substr(0, 3) == "MDT") {
+        if ((clv->getName()).compare(0, 3, "MDT") == 0) {
             xv = 13.0055;  // the half-thickness
             if (!cache.m_mdtTubeMat) {
                 const GeoTube* tube = dynamic_cast<const GeoTube*>(clv->getShape());
@@ -825,7 +825,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processMdtTrd(Trk::Volu
             if (x1v == x2v) xv = x1v;
         }
         Trk::MaterialProperties* mdtMat = nullptr;
-        if ((clv->getName()).substr(0, 3) == "MDT") {
+        if ((clv->getName()).compare(0, 3, "MDT") == 0) {
             xv = 13.0055;  // the half-thickness
             if (!cache.m_mdtTubeMat) {
                 const GeoTube* tube = dynamic_cast<const GeoTube*>(clv->getShape());
@@ -968,7 +968,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processRpc(Trk::Volume*
             Amg::Transform3D cTr(transfc[ic] * Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 1., 0.)) *
                                  Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 0., 1.)));
             Trk::MaterialProperties rpcMat(0., 10.e10, 10.e10, 13., 26., 0.);  // default
-            if ((glv->getName()).substr(0, 3) == "Ded") {
+            if ((glv->getName()).compare(0, 3, "Ded") == 0) {
                 // find if material exists already
                 bool found = false;
                 for (unsigned int i = 0; i < cache.m_rpcDed.size(); i++) {
@@ -999,7 +999,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processRpc(Trk::Volume*
             layer = new Trk::PlaneLayer(cTr, bounds, rpcMaterial, thickness, od);
             layers.push_back(layer);
             // make preliminary identification of active layers
-            if ((glv->getName()).substr(0, 3) != "Ded") {
+            if ((glv->getName()).compare(0, 3, "Ded") != 0) {
                 layer->setLayerType(1);
             } else {
                 layer->setLayerType(0);
@@ -1021,7 +1021,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processRpc(Trk::Volume*
                 Amg::Transform3D cTr(transfc[ic] * Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 1., 0.)) *
                                      Amg::AngleAxis3D(0.5 * M_PI, Amg::Vector3D(0., 0., 1.)));
                 Trk::MaterialProperties rpcMat(0., 10.e10, 10.e10, 13., 26., 0.);  // default
-                if ((glv->getName()).substr(0, 3) == "Ded") {
+                if ((glv->getName()).compare(0, 3, "Ded") == 0) {
                     // find if material exists already
                     bool found = false;
                     for (unsigned int i = 0; i < cache.m_rpcDed.size(); i++) {
@@ -1065,7 +1065,7 @@ const Trk::TrackingVolume* Muon::MuonStationTypeBuilder::processRpc(Trk::Volume*
                         double gy = gtrd->getYHalfLength1();
                         double gz = gtrd->getZHalfLength();
 
-                        if ((gclv->getName()).substr(0, 6) == "RPC_AL") {
+                        if ((gclv->getName()).compare(0, 6, "RPC_AL") == 0) {
                             if (std::abs(gx - 5.0) < 0.001) {
                                 if (!cache.m_rpcExtPanel) {
                                     double volc = 8 * gx * gy * gz;
@@ -1792,7 +1792,7 @@ void Muon::MuonStationTypeBuilder::collectMaterial(const GeoVPhysVol* pv, Trk::M
     std::string nm = lv->getName();
     if (nm.empty()) nm = "Spacer";
 
-    if (lv->getMaterial()->getName() != "Air" && nm.substr(0, 1) != "T") {
+    if (lv->getMaterial()->getName() != "Air" && nm.compare(0, 1,"T") != 0) {
         // get material properties from GeoModel
         Trk::Material newMP = m_materialConverter->convert(lv->getMaterial());
         // current volume
@@ -1872,7 +1872,7 @@ const Trk::LayerArray* Muon::MuonStationTypeBuilder::processCSCTrdComponent(cons
     double maxX = compBounds->maxHalflengthX();
     double halfY = compBounds->halflengthY();
     double halfZ = compBounds->halflengthZ();
-    if (name.substr(name.size() - 5, 5) == "CSC01") {
+    if (name.compare(name.size() - 5, 5, "CSC01") == 0) {
         if (!cache.m_matCSC01) {
             double vol = (minX + maxX) * 2 * halfY * thickness;
             cache.m_matCSC01 = std::make_unique<Trk::MaterialProperties>(getAveragedLayerMaterial(pv, vol, thickness));
@@ -1998,7 +1998,7 @@ const Trk::LayerArray* Muon::MuonStationTypeBuilder::processCSCDiamondComponent(
     double halfY1 = compBounds->halflengthY1();
     double halfY2 = compBounds->halflengthY2();
     double halfZ = compBounds->halflengthZ();
-    if (name.substr(name.size() - 5, 5) == "CSC02") {
+    if (name.compare(name.size() - 5, 5, "CSC02") == 0) {
         if (!cache.m_matCSC02) {
             double vol = ((minX + medX) * 2 * halfY1 + (medX + maxX) * 2 * halfY2) * thickness;
             cache.m_matCSC02 = std::make_unique<Trk::MaterialProperties>(getAveragedLayerMaterial(pv, vol, thickness));
diff --git a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilderCond.cxx b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilderCond.cxx
index be7060dbdddd0e19c9d46fdafed45139745bedff..787e406040f352de5858f33ccdaf5535a5a2872d 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilderCond.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/src/MuonTrackingGeometryBuilderCond.cxx
@@ -165,7 +165,7 @@ std::pair<EventIDRange, const Trk::TrackingGeometry*> Muon::MuonTrackingGeometry
 
     if (inertObjs && m_blendInertMaterial && m_removeBlended) {
         while (m_inertPerm < inertObjs->size() &&
-               (*inertObjs)[m_inertPerm]->name().substr((*inertObjs)[m_inertPerm]->name().size() - 4, 4) == "PERM")
+               (*inertObjs)[m_inertPerm]->name().compare((*inertObjs)[m_inertPerm]->name().size() - 4, 4, "PERM") == 0)
             m_inertPerm++;
     }
 
@@ -2017,7 +2017,7 @@ std::vector<const Trk::DetachedTrackingVolume*>* Muon::MuonTrackingGeometryBuild
                     } else
                         accepted = true;
                     if (accepted) {
-                        bool perm = inert->name().substr(inert->name().size() - 4, 4) == "PERM";
+                        bool perm = inert->name().compare(inert->name().size() - 4, 4, "PERM") == 0;
                         if (!m_blendInertMaterial || !m_removeBlended || perm) detached.push_back(inert);
                         if (m_blendInertMaterial && !perm) blendVols.push_back(inert);
                         ATH_MSG_VERBOSE(" Inert volume accepted by rLimit " << inert->name() << " zMin " << zMin << " zMax " << zMax
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetector.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetector.cxx
index 5e15094d353b1248479644c109e0d880224b42e1..01ffe2c955038caa9920fe741642649da76bc063 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetector.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetector.cxx
@@ -123,8 +123,8 @@ G4bool CSCSensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory* /*ROH
 
       // now get the geoIdentifierTag of the rpc components
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetectorCosmics.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetectorCosmics.cxx
index 360b6687a3504dcc112a4abfa2118b77285db9c3..f8caf9986a2efbadef86d8a8e4ace50a2a72dd94 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetectorCosmics.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/CSCSensitiveDetectorCosmics.cxx
@@ -160,8 +160,8 @@ G4bool CSCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
 
       // now get the geoIdentifierTag of the rpc components
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetector.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetector.cxx
index afaaff0a3b2cdee9431183eedd8724e19bbd464f..c1ef4370b4e52c93a482aa7678e9603173c1c76a 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetector.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetector.cxx
@@ -166,8 +166,8 @@ int MDTSensitiveDetector::GetIdentifier(G4TouchableHistory* touchHist)
     else if ((npos = volName.find("component")) != std::string::npos  && (!isAssembly)) {     // multilayer
 
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
@@ -206,8 +206,8 @@ int MDTSensitiveDetector::GetIdentifier(G4TouchableHistory* touchHist)
       stationPhi = fi;
 
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetectorCosmics.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetectorCosmics.cxx
index 8449adffede4cb25728286fb61f895834d963cac..7e86e0706c68851a3215e19846ceee7d0f1ae4b3 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetectorCosmics.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/MDTSensitiveDetectorCosmics.cxx
@@ -210,8 +210,8 @@ int MDTSensitiveDetectorCosmics::GetIdentifier(G4TouchableHistory* touchHist)
     else if ((npos = volName.find("component")) != std::string::npos && (!isAssembly)) {     // multilayer
 
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
@@ -250,8 +250,8 @@ int MDTSensitiveDetectorCosmics::GetIdentifier(G4TouchableHistory* touchHist)
       stationPhi = fi;
 
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetector.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetector.cxx
index 4f17034e976160d6c206af6a54032483789fe2d9..30d11eff3c7b3b138098cf779bfc268ae48d656a 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetector.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetector.cxx
@@ -157,8 +157,8 @@ G4bool RPCSensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory*) {
 
       // now get the geoIdentifierTag of the rpc components
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           //G4cout << "first [ is at "<<loc1<<" first ] at "<<loc2 << G4endl;
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
@@ -177,8 +177,8 @@ G4bool RPCSensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory*) {
       std::string::size_type loc1,loc2;
       tech=volName.substr(npos-5,5);
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetectorCosmics.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetectorCosmics.cxx
index 572cbd845d4c1a58d56319b1dbc7b0054e9baaac..c48869c99889ac5186bb982d4a85a89f9b23eac4 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetectorCosmics.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/RPCSensitiveDetectorCosmics.cxx
@@ -182,8 +182,8 @@ G4bool RPCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
 
       // now get the geoIdentifierTag of the rpc components
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
@@ -202,8 +202,8 @@ G4bool RPCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
 
       std::string::size_type loc1,loc2;
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
@@ -222,8 +222,8 @@ G4bool RPCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
 
       std::string::size_type loc1,loc2;
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetector.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetector.cxx
index 4e87914aa0beb192d793527ec54dc7ff2b08ed7c..8ef51c2089c052385c8c45f85e20f89462b18bbc 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetector.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetector.cxx
@@ -189,8 +189,8 @@ G4bool TGCSensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory*) {
 
       // now get the geoIdentifierTag of the rpc components
       int gmID = 0;
-      if ((loc1 = volName.find("[")) != std::string::npos) {
-        if ((loc2 = volName.find("]", loc1+1)) != std::string::npos) {
+      if ((loc1 = volName.find('[')) != std::string::npos) {
+        if ((loc2 = volName.find(']', loc1+1)) != std::string::npos) {
           std::istringstream istrvar(volName.substr(loc1+1,loc2-loc1-1));
           istrvar>>gmID;
         }
@@ -223,7 +223,6 @@ G4bool TGCSensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory*) {
       }
     } else if ((npos = volName.find("TGCGas")) != std::string::npos) {
 
-      std::string currentTech = volName.substr(0,4);
       int volCopyNo = touchHist->GetVolume(i)->GetCopyNo();
 
       if (volCopyNo != 0)
diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetectorCosmics.cxx b/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetectorCosmics.cxx
index bfd12f3444d61091bad91f93c26e340b52baa7e0..862c5ca65e5a94c4746c1f2fbbd9aaa31f6c3070 100755
--- a/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetectorCosmics.cxx
+++ b/MuonSpectrometer/MuonG4/MuonG4SD/src/TGCSensitiveDetectorCosmics.cxx
@@ -102,7 +102,7 @@ G4bool TGCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
       } else {
         zside = -1;
       }
-      if (stationName.substr(2,1) == "F") {
+      if (stationName.compare(2,1, "F") == 0) {
 
         stationPhi    = (abs(volCopyNo%100)-1)*3;
         if (abs(volCopyNo/100) > 3) {
@@ -116,8 +116,8 @@ G4bool TGCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
           stationPhi = 24 - stationPhi;
         }
 
-      } else if (stationName.substr(2,1) == "E") {
-        if (stationName.substr(1,1) == "4") {
+      } else if (stationName.compare(2,1,"E") == 0) {
+        if (stationName.compare(1,1,"4") == 0) {
 
           stationPhi = (abs(volCopyNo%100)-1)*3+abs(volCopyNo/100);
 
@@ -168,7 +168,6 @@ G4bool TGCSensitiveDetectorCosmics::ProcessHits(G4Step* aStep,G4TouchableHistory
       }
     } else if ((npos = volName.find("TGCGas")) != std::string::npos) {
 
-      std::string currentTech = volName.substr(0,4);
       int volCopyNo = touchHist->GetVolume(i)->GetCopyNo();
 
       if (volCopyNo != 0)
diff --git a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
index 8b3893f3d0640277560664fa267f5f56da71dd86..f6440bd1e038b9c22aa85c6268294f4f7598860b 100644
--- a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
+++ b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/DBReader.h
@@ -117,7 +117,7 @@ namespace MuonGM {
       public:
         virtual StatusCode ProcessDB() { return StatusCode::SUCCESS; };
         void setGeometryVersion(std::string s);
-        std::string getGeometryVersion() const;
+        const std::string& getGeometryVersion() const;
         void setManager(MuonDetectorManager *detmgr) { m_mgr = detmgr; };
 
         virtual ~DBReader(){};
@@ -161,7 +161,7 @@ namespace MuonGM {
         nmdt++;
 
         for (unsigned int i = 0; i < dhwmdt->size(); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wmdt[i].iw, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wmdt[i].iw, 2)) == 0) {
                 mdt->numOfLayers = wmdt[i].laymdt;
                 mdt->innerRadius = wmdt[i].tubrad * Gaudi::Units::cm;
                 mdt->totalThickness = wmdt[i].tubsta * Gaudi::Units::cm;
@@ -263,7 +263,7 @@ namespace MuonGM {
         int nStruct = dhwrpc->size();
         bool done = false;
         for (unsigned int i = 0; (i < dhwrpc->size() && !done); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wrpc[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wrpc[i].jsta, 2)) == 0) {
                 if (RPCprint) {
                     log << MSG::INFO << " ProcessRPC " << s << " index " << i << " jsta =" << wrpc[i].jsta << " strings comparison:: <" << s.substr(3, s.size() - 3) << ">=<"
                         << MuonGM::buildString(wrpc[i].jsta, 2) << ">" << endmsg;
@@ -328,7 +328,7 @@ namespace MuonGM {
         double p, t;
 
         for (unsigned int i = 0; i < dhwtgcall->size(); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wtgcall[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3,MuonGM::buildString(wtgcall[i].jsta, 2)) ==0 ) {
                 tgc->nlayers = wtgcall[i].nbevol;
                 tgc->thickness = wtgcall[i].widchb * Gaudi::Units::cm;
                 tgc->frame_h = wtgcall[i].fwirch * Gaudi::Units::cm;
@@ -388,7 +388,7 @@ namespace MuonGM {
         std::string tname = s;
         while (tname != "XXXXX") {
             for (unsigned int i = 0; i < dhwcsc->size(); i++) {
-                if (tname.substr(3, s.size() - 3) == MuonGM::buildString(wcsc[i].jsta, 2)) {
+                if (tname.compare(3, s.size() - 3, MuonGM::buildString(wcsc[i].jsta, 2)) == 0) {
                     csc->numOfLayers = wcsc[i].laycsc;
                     csc->totalThickness = wcsc[i].ttotal * Gaudi::Units::cm;
                     csc->thickness = csc->totalThickness;
@@ -478,7 +478,7 @@ namespace MuonGM {
         nspa++;
 
         for (unsigned int i = 0; i < dhwspa->size(); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wspa[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wspa[i].jsta, 2)) == 0) {
                 spa->thickness = wspa[i].tckspa * Gaudi::Units::cm;
             }
         }
@@ -494,10 +494,10 @@ namespace MuonGM {
         nsup++;
 
         for (unsigned int i = 0; i < dhwsup->size(); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wsup[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wsup[i].jsta, 2)) == 0) {
                 sup->alFlangeThickness = wsup[i].xxsup[0] * Gaudi::Units::cm;
 
-                if (s.substr(3, s.size() - 3) == "03") {
+                if (s.compare(3, s.size() - 3, "03") == 0) {
                     sup->alHorFlangeLength = (fabs)(wsup[i].zzsup[1]) * Gaudi::Units::cm;
                     sup->alVerFlangeLength = wsup[i].xxsup[1] * Gaudi::Units::cm - wsup[i].xxsup[0] * Gaudi::Units::cm;
                     sup->alVerProfileThickness = wsup[i].zzsup[3] * Gaudi::Units::cm;
@@ -544,7 +544,7 @@ namespace MuonGM {
         nded++;
 
         for (unsigned int i = 0; i < dhwded->size(); i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wded[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wded[i].jsta, 2)) == 0) {
                 // a lot of confusion in the various versions of the geometry in nova
                 ded->AlThickness = 0.3 * Gaudi::Units::mm;
                 ded->thickness = (wded[i].auphcb) * Gaudi::Units::cm;
@@ -565,7 +565,7 @@ namespace MuonGM {
         nchv++;
 
         for (int i = 0; i < nStruct; i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wchv[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wchv[i].jsta, 2)) == 0) {
                 chv->thickness = wchv[i].thickness * Gaudi::Units::cm;
                 chv->largeness = wchv[i].largeness * Gaudi::Units::cm;
                 chv->height = wchv[i].heightness * Gaudi::Units::cm;
@@ -584,7 +584,7 @@ namespace MuonGM {
         ncro++;
 
         for (int i = 0; i < nStruct; i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wcro[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wcro[i].jsta, 2)) == 0) {
                 cro->thickness = wcro[i].thickness * Gaudi::Units::cm;
                 cro->largeness = wcro[i].largeness * Gaudi::Units::cm;
                 cro->height = wcro[i].heightness * Gaudi::Units::cm;
@@ -603,7 +603,7 @@ namespace MuonGM {
         ncmi++;
 
         for (int i = 0; i < nStruct; i++) {
-            if (s.substr(3, s.size() - 3) == MuonGM::buildString(wcmi[i].jsta, 2)) {
+            if (s.compare(3, s.size() - 3, MuonGM::buildString(wcmi[i].jsta, 2)) == 0) {
                 cmi->thickness = wcmi[i].thickness * Gaudi::Units::cm;
                 cmi->largeness = wcmi[i].largeness * Gaudi::Units::cm;
                 cmi->height = wcmi[i].heightness * Gaudi::Units::cm;
@@ -622,7 +622,7 @@ namespace MuonGM {
         nlbi++;
 
         for (int i = 0; i < nStruct; i++) {
-            if (s.substr(2, s.size() - 2) == MuonGM::buildString(wlbi[i].jsta, 2)) {
+            if (s.compare(2, s.size() - 2, MuonGM::buildString(wlbi[i].jsta, 2)) == 0) {
                 lbi->thickness = wlbi[i].thickness * Gaudi::Units::cm;
                 lbi->height = wlbi[i].height * Gaudi::Units::cm;
                 lbi->lowerThickness = wlbi[i].lowerThickness * Gaudi::Units::cm;
@@ -708,7 +708,7 @@ namespace MuonGM {
                 halfpitch = default_halfpitch;
                 for (int icomp = 0; icomp < stat->GetNrOfComponents(); ++icomp) {
                     const Component *c = stat->GetComponent(icomp);
-                    if (c->name.substr(0, 3) != "MDT")
+                    if (c->name.compare(0, 3,"MDT") != 0)
                         continue;
                     MDT *mdtobj = (MDT *)mysql->GetATechnology(c->name);
                     if (!mdtobj) {
@@ -733,7 +733,7 @@ namespace MuonGM {
                 p.phi = aptp[ipos].dphi + double(phiindex) * 45.;
                 p.radius = aptp[ipos].r * Gaudi::Units::cm;
                 p.z = aptp[ipos].z * Gaudi::Units::cm;
-                if (p.zindex < 0 && name.substr(0, 1) == "B" && hasMdts)
+                if (p.zindex < 0 && name.compare(0, 1,"B") == 0 && hasMdts)
                     p.z = p.z - halfpitch;
                 p.shift = aptp[ipos].s * Gaudi::Units::cm;
                 if (verbose_posmap) {
@@ -954,7 +954,7 @@ namespace MuonGM {
         MsgStream log(Athena::getMessageSvc(), "MuGM:ProcStations");
         log << MSG::INFO << " Processing Stations and Components" << endmsg;
 
-        std::string cartyp, cartec;
+        std::string  cartec;
         Station *stat = NULL, *previous_stat = NULL, *previous_stored = NULL;
 
         // control on new stations/subtypes
@@ -1037,7 +1037,7 @@ namespace MuonGM {
                 c = new TgcComponent;
             } else if (cartec == "CRO" || cartec == "CMI" || cartec == "CHV") {
                 c = new CbmComponent;
-            } else if (cartec.substr(0, 2) == "LB") {
+            } else if (cartec.compare(0, 2, "LB") == 0) {
                 c = new LbiComponent;
             } else {
                 c = new StandardComponent;
@@ -1074,7 +1074,7 @@ namespace MuonGM {
             } else if (cartec == "SPA") {
                 SpaComponent *derc = (SpaComponent *)c;
                 derc->maxwdy = derc->dy;
-                if (jtech == 6 && name.substr(0, 3) == "CSL") {
+                if (jtech == 6 && name.compare(0, 3, "CSL") == 0) {
                     derc->dy = 1129.20 * Gaudi::Units::mm; // AMDB-Q and CTB
                 }
             } else if (cartec == "MDT") {
@@ -1094,9 +1094,9 @@ namespace MuonGM {
                 // DHW 4 Feb 09 : no longer needed, read in above:   derc->iswap = 1;
             } else if (cartec == "DED") {
 
-            } else if (cartec == "SUP" || cartec == "TGC" || cartec == "CHV" || cartec == "CRO" || cartec == "CMI" || cartec.substr(0, 2) == "LB") {
+            } else if (cartec == "SUP" || cartec == "TGC" || cartec == "CHV" || cartec == "CRO" || cartec == "CMI" || cartec.compare(0, 2, "LB") == 0) {
 
-                if (cartec.substr(0, 2) == "LB") {
+                if (cartec.compare(0, 2, "LB") == 0) {
                     LbiComponent *derc = (LbiComponent *)c;
                     derc->associated_CMIsubtype = "";
                     if ((name == "BMF1" || name == "BMF2" || name == "BMF3" || name == "BMF4" || name == "BMF5" || name == "BMF6") && derc->name == "LB02") {
diff --git a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/MuonChamber.h b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/MuonChamber.h
index 4ed2fda6ad8bb2dbba5553fe180ba6917e15f4c6..90fec8552aa4e6a67b8d0f5b101bfc6d496db35d 100644
--- a/MuonSpectrometer/MuonGeoModel/MuonGeoModel/MuonChamber.h
+++ b/MuonSpectrometer/MuonGeoModel/MuonGeoModel/MuonChamber.h
@@ -34,7 +34,7 @@ namespace MuonGM {
 
         double rotangle[10];
 
-        int stationPhiTGC(const std::string& stName, int fi, int zi, const std::string& geometry_version) const;
+        int stationPhiTGC(std::string_view stName, int fi, int zi, std::string_view geometry_version) const;
         inline void setFineClashFixingFlag(int value);
 
         MuonChamber(Station *s);
diff --git a/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx b/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
index 0cd538ff1d576bcf31f4e173dba3d89799e2832f..7438160a70f44d3d09f4666d99add7af656034f6 100644
--- a/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/DBReader.cxx
@@ -17,7 +17,7 @@ namespace MuonGM {
 
     void DBReader::setGeometryVersion(std::string geoVersion) { m_version = std::move(geoVersion); }
 
-    std::string DBReader::getGeometryVersion() const { return m_version; }
+    const std::string& DBReader::getGeometryVersion() const { return m_version; }
 
     std::string DBReader::TGCreadoutName(int ichtyp) {
         MsgStream log(Athena::getMessageSvc(), "DBReader::TGCreadoutName");
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
index aaea21962cbf761c6a56fba2f0000d78cddf5eeb..af83d67b604ed9a9e2a842dc164a0ba2762c0dbd 100644
--- a/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonChamber.cxx
@@ -121,10 +121,11 @@ namespace MuonGM {
         MYSQL *mysql = MYSQL::GetPointer();
 
         double halfpitch = m_station->mdtHalfPitch();
-        std::string stName = m_station->GetName();
+        const std::string stName = m_station->GetName();
+
         const MdtIdHelper *mdt_id = manager->mdtIdHelper();
         int stationType = mdt_id->stationNameIndex(stName.substr(0, 3));
-        bool is_barrel = (stName.substr(0, 1) == "B");
+        bool is_barrel = (stName.compare(0, 1, "B") == 0);
 
         std::string geometry_version = manager->geometryVersion();
         double extratop = m_station->GetExtraTopThickness();
@@ -168,7 +169,7 @@ namespace MuonGM {
             double cxpos = 0;
             for (int i = 0; i < m_station->GetNrOfComponents(); i++) {
                 comp = (StandardComponent *)m_station->GetComponent(i);
-                if ((comp->name).substr(0, 3) == "CSC") {
+                if ((comp->name).compare(0, 3, "CSC") == 0) {
                     clen = comp->dy;
                     cthick = comp->GetThickness();
                     cypos = clen - comp->posy + 1.0 - length / 2.;
@@ -223,8 +224,7 @@ namespace MuonGM {
                 int mdt_index[4] = {0, 0, 0, 0};
                 for (int i = 0; i < m_station->GetNrOfComponents(); i++) {
                     comp = (StandardComponent *)m_station->GetComponent(i);
-                    std::string compName = (comp->name).substr(0, 3);
-                    if (compName == "MDT") {
+                    if (comp->name.compare(0,3,"MDT") == 0) {
                         mdt_index[index] = i;
                         index += 1;
                     }
@@ -296,7 +296,7 @@ namespace MuonGM {
         // double lengthShiftCP = 0.;
 
         // if this is a BOG, we want to make cutouts in the MOTHER VOLUME
-        if (stName.substr(0, 3) == "BOG" && (manager->IncludeCutoutsBogFlag() || manager->IncludeCutoutsFlag())) {
+        if (stName.compare(0, 3, "BOG") == 0 && (manager->IncludeCutoutsBogFlag() || manager->IncludeCutoutsFlag())) {
 
             if (verbose) {
                 log << MSG::VERBOSE << "amdb org: length= " << amdbOrigine_along_length << " thickness= " << amdbOrigine_along_thickness << endmsg;
@@ -339,7 +339,7 @@ namespace MuonGM {
                             }
                             // create the cutout with the full thickness of the STATION
                             cut->setThickness(totthick * 1.01); // extra to be sure
-                            if ((cut->subtype == mysql->allocPosFindSubtype(statType, fi, zi)) && (cut->icut == mysql->allocPosFindCutout(statType, fi, zi)) &&
+                            if ((cut->subtype == mysql->allocPosFindSubtype(std::string(statType), fi, zi)) && (cut->icut == mysql->allocPosFindCutout(std::string(statType), fi, zi)) &&
                                 (cut->ijob == c->index)) {
 
                                 foundCutouts = true;
@@ -352,7 +352,7 @@ namespace MuonGM {
 
         // remove overlaps between end-cap and forward region of TGC stations,
         // T[1-3]E1_station and T[1-3]F1_station
-        if (stName.substr(0, 1) == "T" && stName.substr(2, 1) == "E" && stName.substr(1, 1) != "4") {
+        if (stName.compare(0, 1, "T") == 0 && stName.compare(2, 1, "E") == 0 && stName.compare(1, 1, "4") != 0) {
             GeoTrd *strdoverlap = new GeoTrd(totthick / 4, totthick / 4, width / 2, longWidth / 2, 400. / 2);
             strd = &(strd->subtract((*strdoverlap) << GeoTrf::Translate3D(-totthick / 4., 0., -length / 2 + 400. / 2.)));
         }
@@ -363,7 +363,7 @@ namespace MuonGM {
         } else {
             mtrd = getMaterialManager()->getMaterial("std::Air");
         }
-        GeoLogVol *ltrd = new GeoLogVol(stName + "_Station", strd, mtrd);
+        GeoLogVol *ltrd = new GeoLogVol(std::string(stName) + "_Station", strd, mtrd);
         GeoPhysVol *ptrd = new GeoPhysVol(ltrd);
 
         double ypos;
@@ -385,7 +385,7 @@ namespace MuonGM {
 
         for (int j = 0; j < m_station->GetNrOfComponents(); j++) {
             StandardComponent *d = (StandardComponent *)m_station->GetComponent(j);
-            std::string cn = (d->name).substr(0, 3);
+            std::string_view cn = std::string_view(d->name).substr(0, 3);
             if (cn == "RPC") {
                 nRpc++;
                 if (nRpc == 1)
@@ -394,7 +394,7 @@ namespace MuonGM {
                 // std::cerr << " nRpc, nDoubletR, depth " << nRpc << " " << nDoubletR
                 //           << " " << depth;
                 // BI RPC Chambers have one one doubletR
-                if (!(stname.substr(0, 2) == "BI") && nDoubletR == 1 && nRpc > 1 && depth * previous_depth < 0)
+                if (!(stname.compare(0, 2, "BI") == 0) && nDoubletR == 1 && nRpc > 1 && depth * previous_depth < 0)
                     nDoubletR++;
                 // std::cerr<<" updated to "<<nDoubletR<<std::endl;
 
@@ -424,7 +424,7 @@ namespace MuonGM {
         double LBpos[2] = {-1, -1};
         for (int i = 0; i < m_station->GetNrOfComponents(); i++) {
             StandardComponent *c = (StandardComponent *)m_station->GetComponent(i);
-            std::string cname = (c->name).substr(0, 2);
+            std::string_view cname = std::string_view(c->name).substr(0, 2);
             if (cname == "LB") {
                 LBI *lb = (LBI *)mysql->GetTechnology(c->name);
                 LByShift = lb->yShift;
@@ -440,7 +440,7 @@ namespace MuonGM {
 
         for (int i = 0; i < m_station->GetNrOfComponents(); i++) {
             StandardComponent *c = (StandardComponent *)m_station->GetComponent(i);
-            std::string cname = (c->name).substr(0, 3);
+            std::string_view cname = std::string_view(c->name).substr(0, 3);
             if (cname == "CRO" || cname == "CMI" || cname == "CHV") {
                 CbmComponent *ccbm = (CbmComponent *)c;
                 ccbm->lb_height = LBheight;
@@ -454,7 +454,7 @@ namespace MuonGM {
         std::string CMIcomponentNumber = "";
         for (int j = 0; j < m_station->GetNrOfComponents(); j++) {
             StandardComponent *d = (StandardComponent *)m_station->GetComponent(j);
-            std::string cn = (d->name).substr(0, 3);
+            std::string_view cn = std::string_view(d->name).substr(0, 3);
             if (cn == "CMI") {
                 CMIcomponentNumber = (d->name).substr(3, 2);
                 break;
@@ -463,7 +463,7 @@ namespace MuonGM {
 
         for (int j = 0; j < m_station->GetNrOfComponents(); j++) {
             StandardComponent *d = (StandardComponent *)m_station->GetComponent(j);
-            std::string cn = (d->name).substr(0, 2);
+            std::string_view cn = std::string_view(d->name).substr(0, 2);
             if (cn == "LB") {
                 LbiComponent *lbic = (LbiComponent *)d;
                 if (lbic) {
@@ -475,7 +475,7 @@ namespace MuonGM {
 
         // Build the MuonStation(readout-geometry) corresponding to this MuonChamber(raw-geometry)
         MuonStation *mstat;
-        if (stName.substr(0, 1) == "B") {
+        if (stName.compare(0, 1, "B") == 0) {
             mstat = new MuonStation(stName.substr(0, 3), width, totthick, length, longWidth, totthick, length, zi, fi + 1,
                                     (zi < 0 && !is_mirrored)); //!< fi here goes from 0 to 7; in amdb from 1 to 8;
         } else {
@@ -506,8 +506,8 @@ namespace MuonGM {
             zpos = -length / 2. + amdbOrigine_along_length + c->posy + c->dy / 2.;
             xpos = c->posx;
 
-            std::string techname = c->name;
-            std::string type = techname.substr(0, 3);
+            const std::string &techname = c->name;
+            std::string_view type = std::string_view(techname).substr(0, 3);
 
             GeoVPhysVol *lv = nullptr;
             GeoVPhysVol *lvd = nullptr;
@@ -530,7 +530,7 @@ namespace MuonGM {
                 Cutout *cut = m_station->GetCutout(ii);
                 cut->setThickness(cthickness * 1.01); // extra thickness to be sure
 
-                if ((cut->subtype == mysql->allocPosFindSubtype(statType, fi, zi)) && (cut->icut == mysql->allocPosFindCutout(statType, fi, zi)) && (cut->ijob == c->index)) {
+                if ((cut->subtype == mysql->allocPosFindSubtype(std::string(statType), fi, zi)) && (cut->icut == mysql->allocPosFindCutout(std::string(statType), fi, zi)) && (cut->ijob == c->index)) {
 
                     double tempdx = cut->dx;
                     double tempdy = cut->dy;
@@ -538,7 +538,7 @@ namespace MuonGM {
                     cut->dx = 0.;
                     cut->dy = 0.;
 
-                    if (stName.substr(0, 3) == "BOG") {
+                    if (stName.compare(0, 3, "BOG") == 0) {
                         // make the cutouts a bit longer
                         cut->lengthY = templengthY + 31.;
                     }
@@ -568,7 +568,7 @@ namespace MuonGM {
                     }
 
                     // Corrected cutout values for BMS7, BMS14
-                    if (stName.substr(0, 3) == "BMS") {
+                    if (stName.compare(0, 3, "BMS") == 0) {
                         if (fi == 3) {               // stationPhi = 4
                             if (std::abs(zi) == 1) { // stationEta = +-1
                                 double margin = 1.0; // make cutout a little bigger to avoid coincident boundaries
@@ -592,7 +592,7 @@ namespace MuonGM {
                     }
 
                     // the following is a fine tuning ----- MUST CHECK for a better solution
-                    if (stName.substr(0, 3) == "BOS" && zi == -6 && type == "MDT") {
+                    if (stName.compare(0, 3,"BOS") == 0 && zi == -6 && type == "MDT") {
                         cut->dy = c->dy - cut->dy - cut->lengthY - halfpitch;
                         cut->dead1 = 30.; // why this is not 30. or -30. already ?????
                         if (techname == "MDT03")
@@ -605,7 +605,7 @@ namespace MuonGM {
                     // this mirroring of the cutout is necessary only for barrel MDT chambers; for EC the cutout will be automatically mirrored
                     // this fix cannot be applied in 15.6.X.Y for layout < r.04.04 due to the frozen tier0 policy
 
-                    if (type == "MDT" && (is_mirrored || zi < 0) && stName.substr(0, 1) == "B") {
+                    if (type == "MDT" && (is_mirrored || zi < 0) && stName.compare(0, 1, "B") == 0) {
                         // MDT in chambers explicitly described at z<0 have to be
                         // rotated by 180deg to adj. tube staggering
                         // reverse the position (x amdb) of the cutout if the m_station is mirrored
@@ -621,11 +621,11 @@ namespace MuonGM {
                     } else if (type == "RPC" || type == "DED") {
                         Cutout *cutRpcType = new Cutout(*cut);
                         // temporary for testing fixes to r.03.09
-                        if (stName.substr(0, 3) == "BMS" && zi == 4 && (c->index == 20 || c->index == 21 || c->index == 24 || c->index == 25)) {
+                        if (stName.compare(0, 3, "BMS") == 0 && zi == 4 && (c->index == 20 || c->index == 21 || c->index == 24 || c->index == 25)) {
                             cutRpcType->dy = 1102.5;
                         }
 
-                        if (stName.substr(0, 3) == "BOS" && zi == 6 && type == "DED")
+                        if (stName.compare(0, 3, "BOS") == 0 && zi == 6 && type == "DED")
                             cutRpcType->dy = 706.;
 
                         cutRpcType->dy = cutRpcType->dy - c->posy;
@@ -671,10 +671,9 @@ namespace MuonGM {
             GeoTransform *xfcomponent{nullptr};
             GeoAlignableTransform *xfaligncomponent{nullptr};
             // for RPCs we need a vector of transforms for M28 geometry...
-            // std::vector<GeoTransform*> xfrpccomponent;
 
             if (type == "CRO") {
-                if (stName.substr(0, 1) != "B" && is_mirrored)
+                if (stName.compare(0, 1, "B") != 0 && is_mirrored)
                     mstat->setxAmdbCRO(-xpos);
                 else
                     mstat->setxAmdbCRO(xpos);
@@ -691,7 +690,7 @@ namespace MuonGM {
 
                 // ss - 24-05-2006 I don't really understand if this is needed at all
                 //      it was introduced by Isabel T.
-                if (zi < 0 && stName.substr(0, 3) == "BOG" && is_mirrored) {
+                if (zi < 0 && stName.compare(0, 3, "BOG") == 0 && is_mirrored) {
                     //      htcomponent = htcomponent*GeoTrf::RotateX3D(180.*Gaudi::Units::deg);
                     //      tubes OK but chambers wrong
                     //      htcomponent = GeoTrf::RotateX3D(180.*Gaudi::Units::deg)*htcomponent;
@@ -700,15 +699,15 @@ namespace MuonGM {
                 } // ss - 24-05-2006 I don't really understand if this is needed at all
 
                 xfaligncomponent = new GeoAlignableTransform(htcomponent);
-                std::string key = stName + techname;
+                std::string key =std::string( stName) + techname;
 
                 // for cutouts:
                 // MDT cutouts for BOS1,5, BMS7,14, (problem with BMS4,10), EMS, BMG and BIS MDT14
                 bool mdtCutoutFlag = ((stname == "BOS" && std::abs(zi) == 6) || stname == "BMG" || techname == "MDT14" || (stname == "BMS" && (std::abs(zi) == 1 && fi == 3)) ||
                                       (stname == "EMS" && (std::abs(zi) == 1 || std::abs(zi) == 3)));
-                if (((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                if (((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
-                } else if (((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if (((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG")) == 0) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
                 }
 
@@ -720,7 +719,7 @@ namespace MuonGM {
                             << manager->IncludeCutoutsFlag() << " manager->IncludeCutoutsBogFlag() " << manager->IncludeCutoutsBogFlag() << endmsg;
                     }
 
-                    if ((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) {
+                    if ((manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) {
                         lvm = r->build(vcutdef);
                     } else {
                         lvm = r->build();
@@ -738,7 +737,7 @@ namespace MuonGM {
                 }
 
             } else if (type == "SPA" && manager->MinimalGeoFlag() == 0) {
-                if (techname == "SPA01" && stName.substr(0, 1) == "C") {
+                if (techname == "SPA01" && stName.compare(0, 1, "C") == 0) {
                     if (debug) {
                         log << MSG::DEBUG << "Ficticious spacer SPA01 in CSC chamber - skip it " << endmsg;
                     }
@@ -749,10 +748,10 @@ namespace MuonGM {
 
                 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos);
                 xfcomponent = new GeoTransform(htcomponent);
-                std::string key = stName + techname;
-                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                std::string key = std::string(stName) + techname;
+                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
-                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,"BOG") == 0)) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
                 }
 
@@ -761,7 +760,7 @@ namespace MuonGM {
                     Spacer *r = new Spacer(c);
                     // log << MSG::DEBUG << " Building a SPA for m_station "
                     //     << key << " component name is " << c->name << endmsg;
-                    if (manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) {
+                    if (manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) {
                         lv = r->build(1);
                     } else {
                         lv = r->build();
@@ -778,7 +777,7 @@ namespace MuonGM {
                 BeamHeight = r->height;
                 ypos = c->posx;
                 double xpos = (c->posz + amdbOrigine_along_thickness) - thickness / 2. + BeamHeight / 2.;
-                if (type.substr(0, 2) == "LB")
+                if (type.compare(0, 2, "LB") == 0)
                     xpos -= LByShift;
 
                 double angle = 0.;
@@ -818,9 +817,9 @@ namespace MuonGM {
                 xfcomponent = new GeoTransform(htcomponent);
 
                 std::string key = stName + techname;
-                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
-                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
                 }
                 // can have LB of different length in same m_station:
@@ -831,13 +830,13 @@ namespace MuonGM {
                 //                   << key << " component name is "
                 //                   << c->name << endmsg;
                 GeoVPhysVol *fpv = m_FPVMAP->GetDetector(key);
-                if (fpv == 0 || (stName.substr(0, 3) == "BOG" && type == "CMI")) {
-                    if (stName.substr(0, 3) == "BOG") {
+                if (fpv == 0 || (stName.compare(0, 3, "BOG") == 0 && type == "CMI")) {
+                    if (stName.compare(0, 3, "BOG") == 0) {
                         if (verbose) {
                             log << MSG::VERBOSE << " Building a SpacerBeam for station " << key << " component name is " << c->name << endmsg;
                         }
                     }
-                    if (manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) {
+                    if (manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) {
                         lvo = r->build(1, is_barrel);
                     } else {
                         lvo = r->build(is_barrel);
@@ -847,7 +846,7 @@ namespace MuonGM {
                     // end of bar.
                     // From centre, it is -height/2 in x, 0 in y, -length/2 in z
                 } else {
-                    if (stName.substr(0, 3) == "BOG")
+                    if (stName.compare(0, 3,"BOG") == 0)
                         if (verbose)
                             log << MSG::VERBOSE << " This spacerbeam for station " << key << " component name is " << c->name << " already exists; re-use it " << endmsg;
                     lvo = fpv;
@@ -886,17 +885,17 @@ namespace MuonGM {
                 bool rpcCutoutFlag = (stname == "BOS" && std::abs(zi) == 6) || (stname == "BMS" && (std::abs(zi) == 2 || std::abs(zi) == 4 || std::abs(zi) == 6)) ||
                                      (stname == "BMS" && std::abs(zi) == 1 && fi == 3);
                 std::string key = stName + techname;
-                if (((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                if (((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0) + "_" +
                            buildString(vcutdef.size(), 0) + "_" + buildString(rp->iswap, 0);
-                } else if (((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if (((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0) + "_" +
                            buildString(vcutdef.size(), 0) + "_" + buildString(rp->iswap, 0);
                 }
                 GeoVPhysVol *fpv = m_FPVMAP->GetDetector(key);
                 if (fpv == 0) {
                     Rpc *r = new Rpc(c);
-                    r->setLogVolName(stName + techname);
+                    r->setLogVolName(std::string(stName) + techname);
                     if (stName.find("BI") != std::string::npos) {
                         std::map<std::string, float>::const_iterator yItr = rpcYTrans.find(techname);
                         if (yItr != rpcYTrans.end())
@@ -906,7 +905,7 @@ namespace MuonGM {
                             r->z_translation = zItr->second;
                     }
 
-                    if ((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) {
+                    if ((manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) {
                         lvr = r->build(manager->MinimalGeoFlag(), 1, vcutdef);
                     } else {
                         lvr = r->build(manager->MinimalGeoFlag());
@@ -931,11 +930,11 @@ namespace MuonGM {
 
                 bool dedCutoutFlag = (stname == "BOS" && std::abs(zi) == 6) || (stname == "BMS" && (std::abs(zi) == 2 || std::abs(zi) == 4 || std::abs(zi) == 6)) ||
                                      (stname == "BMS" && std::abs(zi) == 1 && fi == 3);
-                std::string key = stName + techname;
-                if (((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                std::string key = std::string(stName) + techname;
+                if (((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,"BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0) + "_" +
                            buildString(vcutdef.size(), 0);
-                } else if (((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if (((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0) + "_" +
                            buildString(vcutdef.size(), 0);
                 }
@@ -946,7 +945,7 @@ namespace MuonGM {
                     Ded *r = new Ded(c);
                     if (verbose)
                         log << MSG::VERBOSE << " Building a DED for station " << key << " component name is " << c->name << endmsg;
-                    if ((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) {
+                    if ((manager->IncludeCutoutsFlag() && dedCutoutFlag) || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3, "BOG") == 0)) {
                         lvd = r->build(1, vcutdef);
                     } else {
                         lvd = r->build();
@@ -968,10 +967,10 @@ namespace MuonGM {
                 double xpos = c->posx - SupComponent::yAMDB0(*c);
 
                 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateY3D(xpos) * GeoTrf::TranslateZ3D(zpos);
-                std::string key = stName + techname;
-                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi >= 0) {
+                std::string key = std::string(stName) + techname;
+                if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,"BOG") == 0)) && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
-                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.substr(0, 3) == "BOG")) && zi < 0) {
+                } else if ((manager->IncludeCutoutsFlag() || (manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,"BOG") == 0)) && zi < 0) {
                     key += "m" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
                 }
 
@@ -994,7 +993,7 @@ namespace MuonGM {
                 xfaligncomponent = new GeoAlignableTransform(htcomponent);
 
                 // Define key for this TGC component
-                std::string key = stName + techname;
+                std::string key = std::string(stName) + techname;
                 if (manager->IncludeCutoutsFlag()) {
                     if (mysql->allocPosFindCutout(statType, fi, zi) > 0) {
                         // If there is a cutout for this chamber, give it a special key
@@ -1013,7 +1012,7 @@ namespace MuonGM {
                 GeoVPhysVol *fpv = m_FPVMAP->GetDetector(key);
                 if (fpv == 0) {
                     Tgc *t = new Tgc(c);
-                    t->setLogVolName(stName + techname);
+                    t->setLogVolName(std::string(stName) + techname);
                     if (manager->IncludeCutoutsFlag()) {
                         lvt = t->build(manager->MinimalGeoFlag(), 1, vcutdef);
                     } else {
@@ -1031,7 +1030,7 @@ namespace MuonGM {
                 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos);
                 xfaligncomponent = new GeoAlignableTransform(htcomponent);
                 // Here define the key for this CSC component
-                std::string key = stName + techname;
+                std::string key = std::string(stName) + techname;
                 if (manager->IncludeCutoutsFlag() && zi >= 0) {
                     key += "p" + buildString(mysql->allocPosFindSubtype(statType, fi, zi), 0) + "_" + buildString(mysql->allocPosFindCutout(statType, fi, zi), 0);
                 } else if (manager->IncludeCutoutsFlag() && zi < 0) {
@@ -1041,7 +1040,7 @@ namespace MuonGM {
                 GeoVPhysVol *fpv = m_FPVMAP->GetDetector(key);
                 if (fpv == 0) {
                     Csc *t = new Csc(c);
-                    t->setLogVolName(stName + techname);
+                    t->setLogVolName(std::string(stName) + techname);
 
                     if (manager->IncludeCutoutsFlag()) {
                         lvc = t->build(manager->MinimalGeoFlag(), 1, vcutdef);
@@ -1593,7 +1592,7 @@ namespace MuonGM {
         re->m_phistripwidth = re->m_phistrippitch - rc->stripSeparation;
         re->m_etastripwidth = re->m_etastrippitch - rc->stripSeparation;
         re->m_nphistripsperpanel = int((re->m_Ssize / re->m_nphistrippanels) / re->m_phistrippitch);
-        if (re->getStationName().substr(0, 3) != "BME")
+        if (re->getStationName().compare(0, 3, "BME") != 0)
             while ((re->m_nphistripsperpanel % 8) != 0) {
                 re->m_nphistripsperpanel--;
             }
@@ -1652,7 +1651,7 @@ namespace MuonGM {
         re->m_Zsize = cc->GetThickness();
         re->m_LongZsize = cc->GetThickness();
 
-        std::string tname = cc->name;
+        const std::string &tname = cc->name;
         int tname_index = MuonGM::strtoint(tname, 3, 2);
         re->setTechnologyName(tname);
 
@@ -1667,7 +1666,7 @@ namespace MuonGM {
         char index[2];
         sprintf(index, "%i", cc->index);
 
-        re->m_readout_name = stName.substr(0, 4) + "_" + index;
+        re->m_readout_name = stName.substr(0, 4) + '_' + index;
         re->m_readoutParams = mysql->GetTgcRPars(tname_index);
 
         if (re->m_readoutParams == 0) {
@@ -1714,8 +1713,8 @@ namespace MuonGM {
         log << MSG::INFO << "MuonChamber " << name << " :" << endmsg;
     }
 
-    int MuonChamber::stationPhiTGC(const std::string& stName, int fi, int zi_input, const std::string& geometry_version) const {
-        std::string stName3 = stName.substr(0, 3);
+    int MuonChamber::stationPhiTGC(std::string_view stName, int fi, int zi_input, std::string_view geometry_version) const {
+        std::string_view stName3 = stName.substr(0, 3);
         int stphi = 0;
 
         int zi = abs(zi_input);
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonSystemDescription.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonSystemDescription.cxx
index b0f07b159f5f5308ad5ca1f267940459bc717988..6c38c4fa8ba34d37dc89efc13157867bfbe6db67 100644
--- a/MuonSpectrometer/MuonGeoModel/src/MuonSystemDescription.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonSystemDescription.cxx
@@ -10,8 +10,6 @@
 
 namespace MuonGM {
 
-    extern std::vector<std::string> tokenize(std::string);
-
     MuonSystemDescription::MuonSystemDescription(std::string n)
         : barrelInnerRadius(0.), innerRadius(0.), outerRadius(0.), endcapFrontFace(0.), length(0.), barreLength(0.), barrelInterRadius(0.), extraZ(0.), extraR(0.), m_name(std::move(n)) {}
 
diff --git a/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx b/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
index 92619a9d652d3cd4c16def3944e42cd701653431..85b8dcecb1f757cf9a58ba5b5a28eb49b8cf3dbc 100644
--- a/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/RDBReaderAtlas.cxx
@@ -460,29 +460,29 @@ namespace MuonGM {
                 Component *c = station->GetComponent(ic);
                 if (c == NULL)
                     continue;
-                std::string cname = c->name;
+                const std::string &cname = c->name;
 
-                if (cname.substr(0, 3) == "CSC")
+                if (cname.compare(0, 3, "CSC") == 0)
                     MuonGM::ProcessCSC(m_dhwcsc, m_wcsc, cname);
-                else if (cname.substr(0, 3) == "MDT")
+                else if (cname.compare(0, 3, "MDT") == 0)
                     MuonGM::ProcessMDT(m_dhwmdt, m_wmdt, cname);
-                else if (cname.substr(0, 3) == "RPC")
+                else if (cname.compare(0, 3, "RPC") == 0)
                     MuonGM::ProcessRPC(m_dhwrpc, m_wrpc, m_dhwrpcall, m_wrpcall, cname);
-                else if (cname.substr(0, 3) == "TGC")
+                else if (cname.compare(0, 3, "TGC") == 0)
                     MuonGM::ProcessTGC(m_dhwtgc, m_wtgc, m_dhwtgcall, m_wtgcall, cname);
-                else if (cname.substr(0, 3) == "SPA")
+                else if (cname.compare(0, 3, "SPA") == 0)
                     MuonGM::ProcessSPA(m_dhwspa, m_wspa, cname);
-                else if (cname.substr(0, 3) == "DED")
+                else if (cname.compare(0, 3, "DED") == 0)
                     MuonGM::ProcessDED(m_dhwded, m_wded, cname);
-                else if (cname.substr(0, 3) == "SUP")
+                else if (cname.compare(0, 3, "SUP") == 0)
                     MuonGM::ProcessSUP(m_dhwsup, m_wsup, cname);
-                else if (cname.substr(0, 3) == "CHV" && have_spa_details)
+                else if (cname.compare(0, 3, "CHV") == 0 && have_spa_details)
                     MuonGM::ProcessCHV(m_dhwchv, m_wchv, cname);
-                else if (cname.substr(0, 3) == "CRO" && have_spa_details)
+                else if (cname.compare(0, 3, "CRO") == 0 && have_spa_details)
                     MuonGM::ProcessCRO(m_dhwcro, m_wcro, cname);
-                else if (cname.substr(0, 3) == "CMI" && have_spa_details)
+                else if (cname.compare(0, 3, "CMI") == 0 && have_spa_details)
                     MuonGM::ProcessCMI(m_dhwcmi, m_wcmi, cname);
-                else if (cname.substr(0, 2) == "LB" && have_spa_details)
+                else if (cname.compare(0, 2, "LB") == 0 && have_spa_details)
                     MuonGM::ProcessLBI(m_dhwlbi, m_wlbi, cname);
             }
         }
@@ -520,9 +520,8 @@ namespace MuonGM {
                     std::vector<float> iwgs1(180), iwgs2(180), iwgs3(180);
 
                     for (int i = 0; i < 3; i++) {
-                        std::ostringstream Astr;
-                        Astr << "_" << i;
-                        std::string A = Astr.str();
+                        std::string A("_");
+                        A+= std::to_string(i);
                         nwgs.push_back((*ggcd)[ich]->getDouble("NWGS" + A));
                         roffst.push_back((*ggcd)[ich]->getDouble("ROFFST" + A));
                         poffst.push_back((*ggcd)[ich]->getDouble("POFFST" + A));
@@ -530,24 +529,21 @@ namespace MuonGM {
                     }
 
                     for (int i = 0; i < nwgs[0]; i++) {
-                        std::ostringstream Astr;
-                        Astr << "_" << i;
-                        std::string A = Astr.str();
+                        std::string A("_");
+                        A+= std::to_string(i);
                         // float xxx = (*ggcd)[ich]->getDouble("IWGS1"+A);
                         iwgs1[i] = (float)(*ggcd)[ich]->getDouble("IWGS1" + A);
                     }
 
                     for (int i = 0; i < nwgs[1]; i++) {
-                        std::ostringstream Astr;
-                        Astr << "_" << i;
-                        std::string A = Astr.str();
+                        std::string A("_");
+                        A+= std::to_string(i);
                         iwgs2[i] = (float)(*ggcd)[ich]->getDouble("IWGS2" + A);
                     }
 
                     for (int i = 0; i < nwgs[2]; i++) {
-                        std::ostringstream Astr;
-                        Astr << "_" << i;
-                        std::string A = Astr.str();
+                        std::string A("_");
+                        A+= std::to_string(i);
                         iwgs3[i] = (float)(*ggcd)[ich]->getDouble("IWGS3" + A);
                     }
 
@@ -597,9 +593,8 @@ namespace MuonGM {
                 std::vector<float> iwgs1(130), iwgs2(130), iwgs3(130), slarge(33), sshort(33);
 
                 for (int i = 0; i < 3; i++) {
-                    std::ostringstream Astr;
-                    Astr << "_" << i;
-                    std::string A = Astr.str();
+                    std::string A("_");
+                    A+= std::to_string(i);
                     nwgs.push_back((*ggln)[ich]->getInt("NWGS" + A));
                     roffst.push_back((*ggln)[ich]->getInt("ROFFST" + A));
                     // poffst.push_back((*ggln)[ich]->getInt("POFFST"+A));
@@ -608,24 +603,21 @@ namespace MuonGM {
                 }
 
                 for (int i = 0; i < nwgs[0]; i++) {
-                    std::ostringstream Astr;
-                    Astr << "_" << i;
-                    std::string A = Astr.str();
+                    std::string A("_");
+                    A+= std::to_string(i);
                     // float xxx = (*ggln)[ich]->getInt("IWGS1"+A);
                     iwgs1[i] = (float)(*ggln)[ich]->getInt("IWGS1" + A);
                 }
 
                 for (int i = 0; i < nwgs[1]; i++) {
-                    std::ostringstream Astr;
-                    Astr << "_" << i;
-                    std::string A = Astr.str();
+                    std::string A("_");
+                    A+= std::to_string(i);
                     iwgs2[i] = (float)(*ggln)[ich]->getInt("IWGS2" + A);
                 }
 
                 for (int i = 0; i < nwgs[2]; i++) {
-                    std::ostringstream Astr;
-                    Astr << "_" << i;
-                    std::string A = Astr.str();
+                    std::string A("_");
+                    A+= std::to_string(i);
                     iwgs3[i] = (float)(*ggln)[ich]->getInt("IWGS3" + A);
                 }
 
@@ -633,9 +625,8 @@ namespace MuonGM {
                 float pdist = (*ggln)[ich]->getFloat("PDIST");
 
                 for (int i = 0; i < nsps[0] + 1; i++) {
-                    std::ostringstream Astr;
-                    Astr << "_" << i;
-                    std::string A = Astr.str();
+                    std::string A("_");
+                    A+= std::to_string(i);
                     slarge[i] = (float)(*ggln)[ich]->getFloat("SLARGE" + A);
                     sshort[i] = (float)(*ggln)[ich]->getFloat("SHORT" + A);
                 }
diff --git a/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx b/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
index 3e72f1eca58bac27ef8dd2b6ef8a702f152929ec..cedf09fefe12fa47883c4a2c737b02ea83c7f736 100644
--- a/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Rpc.cxx
@@ -113,7 +113,7 @@ namespace MuonGM {
         if (minimalgeo == 1)
             return prpc;
 
-        if (geometry_version.substr(0, 1) != "M") {
+        if (geometry_version.compare(0, 1,"M") != 0) {
             // here layout P and following (hopefully!)
             if (idiv * jdiv != 1)
                 assert(0);
diff --git a/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx b/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
index ea3f404ede025a512a861ac8ba97675ca5d98bd4..177041ec9f4d9c19382ce43f434bf1920d4e01ca 100644
--- a/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/SpacerBeam.cxx
@@ -26,7 +26,7 @@ namespace MuonGM {
 
     SpacerBeam::SpacerBeam(Component *ss) : DetectorElement(ss->name), m_hole_pos1(0), m_hole_pos2(0), m_lb_height(0), m_lb_width(0), m_cross_excent(0) {
         StandardComponent *s = (StandardComponent *)ss;
-        std::string componentType = (s->name).substr(0, 3);
+        std::string_view componentType = std::string_view(s->name).substr(0, 3);
 
         double tol = 1.e-4;
 
@@ -84,11 +84,11 @@ namespace MuonGM {
         GeoPhysVol *pvol = 0;
         GeoLogVol *lvol = 0;
         const GeoMaterial *mat = getMaterialManager()->getMaterial("std::Aluminium");
-        if (name.substr(0, 3) == "CHV" || name.substr(0, 3) == "CRO" || name.substr(0, 3) == "CMI") {
+        if (name.compare(0, 3, "CHV") == 0 || name.compare(0, 3, "CRO") == 0 || name.compare(0, 3, "CMI") == 0) {
             double sinexc = 0.;
             double cosexc = 1.;
             double volumelargeness = largeness;
-            if ((name.substr(0, 3) == "CHV" || name.substr(0, 3) == "CRO") && !is_barrel) {
+            if ((name.compare(0, 3, "CHV") == 0 || name.compare(0, 3, "CRO") == 0) && !is_barrel) {
                 double ltemp = std::sqrt(length * length + excent * excent);
                 sinexc = std::abs(excent) / ltemp;
                 cosexc = length / ltemp;
@@ -121,7 +121,7 @@ namespace MuonGM {
             }
             return pvol;
 
-        } else if (name.substr(0, 2) == "LB") {
+        } else if (name.compare(0, 2, "LB") == 0) {
             const GeoShape *LBbox = new GeoBox(height / 2., (width - length / 4.) / 2., length / 2.);
             // (width - length/4) is temporary until excent parameter is put into LbiComponent
             GeoBox *innerBox = new GeoBox(height / 2. - thickness, width / 2. + 1., length / 2. - lowerThickness);
diff --git a/MuonSpectrometer/MuonGeoModel/src/StandardComponent.cxx b/MuonSpectrometer/MuonGeoModel/src/StandardComponent.cxx
index ced156aa4f0cc34b8dab12bdd7dd8d3f52569f5d..32e933c803073553914b9070d60a98bfd99c6be4 100644
--- a/MuonSpectrometer/MuonGeoModel/src/StandardComponent.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/StandardComponent.cxx
@@ -68,16 +68,16 @@ namespace MuonGM {
         MYSQL *mysql = MYSQL::GetPointer();
         Technology *tec = mysql->GetTechnology(name);
 
-        if (name.substr(0, 3) == "CHV") {
+        if (name.compare(0, 3,"CHV") == 0) {
             CHV *chv = (CHV *)tec;
             return chv->height;
-        } else if (name.substr(0, 3) == "CRO") {
+        } else if (name.compare(0, 3,"CRO") == 0) {
             CRO *chv = (CRO *)tec;
             return chv->height;
-        } else if (name.substr(0, 3) == "CMI") {
+        } else if (name.compare(0, 3,"CMI") == 0) {
             CMI *chv = (CMI *)tec;
             return chv->height;
-        } else if (name.substr(0, 3) == "LBI" || name.substr(0, 2) == "LB") {
+        } else if (name.compare(0, 3,"LBI") == 0 || name.compare(0, 2,"LB") == 0) {
             LBI *chv = (LBI *)tec;
             return chv->height;
         }
diff --git a/MuonSpectrometer/MuonGeoModel/src/Station.cxx b/MuonSpectrometer/MuonGeoModel/src/Station.cxx
index bda7b6f53fffcb424f259216a7dff627fe69f577..5e7c097713456a0932e590cf704280bcfd090731 100644
--- a/MuonSpectrometer/MuonGeoModel/src/Station.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/Station.cxx
@@ -317,10 +317,10 @@ namespace MuonGM {
         double ymin = getYMin();
         double w = 0;
         for (unsigned int i = 0; i < m_components.size(); i++) {
-            std::string n = m_components[i]->name.substr(0, 3);
+            std::string_view n = std::string_view(m_components[i]->name).substr(0, 3);
             if (n == "TGC") {
                 double dw = 20.;
-                std::string typetgc = m_components[i]->name.substr(3, 2);
+                std::string_view typetgc = std::string_view(m_components[i]->name).substr(3, 2);
                 // in case of station containing one module
                 if (typetgc == "01" || typetgc == "06" || typetgc == "12" || typetgc == "18" || typetgc == "19" || typetgc == "20" || typetgc == "21") {
                     dw = 0.;
@@ -366,10 +366,10 @@ namespace MuonGM {
                 w = m_components[i]->dx2;
             }
 
-            std::string n = m_components[i]->name.substr(0, 3);
+            std::string_view n = std::string_view(m_components[i]->name).substr(0, 3);
             if (n == "TGC") {
                 double dw = 20.;
-                std::string typetgc = m_components[i]->name.substr(3, 2);
+                std::string_view typetgc = std::string_view(m_components[i]->name).substr(3, 2);
                 // in case of one station containing one module
                 if (typetgc == "01" || typetgc == "06" || typetgc == "12" || typetgc == "18" || typetgc == "19" || typetgc == "20" || typetgc == "21") {
                     dw = 0.;
@@ -391,7 +391,7 @@ namespace MuonGM {
             }
         }
 
-        if (m_name.substr(0, 1) == "T")
+        if (m_name.compare(0, 1, "T") == 0)
             return w;
         else
             return maxdxmax;
@@ -428,7 +428,7 @@ namespace MuonGM {
 
             for (int icomp = 0; icomp < GetNrOfComponents(); ++icomp) {
                 const Component *c = GetComponent(icomp);
-                if (c->name.substr(0, 3) != "MDT")
+                if (c->name.compare(0, 3, "MDT") != 0)
                     continue;
                 MDT *mdtobj = (MDT *)mysql->GetATechnology(c->name);
                 if (!mdtobj) {
diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/CscIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/CscIdHelper.h
index cd343607fee6619852146aa2f87cffe6b11a86ad..95a0910b439144219e57f60cc9ddda8538498a05 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/CscIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/CscIdHelper.h
@@ -83,7 +83,7 @@ public:
     // Identifier builders
 
     Identifier elementID(int stationName, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
-    Identifier elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
+    Identifier elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
     Identifier elementID(const Identifier& channelID) const;
     Identifier channelID(int stationName, int stationEta, int stationPhi, int chamberLayer, int wireLayer, int measuresPhi, int strip,
                          bool check = false, bool* isValid = 0) const;
diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MmIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MmIdHelper.h
index 63301a412d161268f9fbec4f5275d6a9c4e3f81d..8844583371021dc1c2752cebf1e57e98401a92fe 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MmIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MmIdHelper.h
@@ -70,7 +70,7 @@ public:
 
     // Identifier builders
     Identifier elementID(int stationName, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
-    Identifier elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
+    Identifier elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
     Identifier elementID(const Identifier& channelID) const;
 
     Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channel, bool check = false,
diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
index 0dfd2963c1d7fc62d872b99e373a55f98890da35..bde41c06ea84af98c043677fd3bb0ed30d48b2ca 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelper.h
@@ -125,7 +125,7 @@ public:
 
     // Access to name and technology maps
 
-    int stationNameIndex(const std::string& name) const;
+    int stationNameIndex(std::string_view name) const;
     int technologyIndex(const std::string& name) const;
     const std::string& stationNameString(const int& index) const;
     const std::string& technologyString(const int& index) const;
diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/TgcIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/TgcIdHelper.h
index 837cbeabf4ec2ceaf8ad16e6f9f62f9caf348356..71ee04c0baa319d2f6672e5ef27f049d253410ea 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/TgcIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/TgcIdHelper.h
@@ -69,11 +69,11 @@ public:
     // Identifier builders
 
     Identifier elementID(int stationName, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
-    Identifier elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
+    Identifier elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
     Identifier elementID(const Identifier& channelID) const;
     Identifier channelID(int stationName, int stationEta, int stationPhi, int gasGap, int isStrip, int channel, bool check = false,
                          bool* isValid = 0) const;
-    Identifier channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int gasGap, int isStrip, int channel,
+    Identifier channelID(std::string_view stationNameStr, int stationEta, int stationPhi, int gasGap, int isStrip, int channel,
                          bool check = false, bool* isValid = 0) const;
     Identifier channelID(const Identifier& id, int gasGap, int isStrip, int channel, bool check = false, bool* isValid = 0) const;
 
diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/sTgcIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/sTgcIdHelper.h
index 5b53afda513b34c8b2a1c99909b5533be8585e36..feda8faaf2587b8a19965b9ae51287ba56890c94 100644
--- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/sTgcIdHelper.h
+++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/sTgcIdHelper.h
@@ -72,7 +72,7 @@ public:
 
     // Identifier builders
     Identifier elementID(int stationName, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
-    Identifier elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
+    Identifier elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check = false, bool* isValid = 0) const;
     Identifier elementID(const Identifier& channelID) const;
 
     Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int channel,
diff --git a/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
index ecce2660248c64e6c2df07c444cd4790578a3f97..4bd0ff75e389d28b80a92ea86e4f444c0632b7b6 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/CscIdHelper.cxx
@@ -916,7 +916,7 @@ Identifier CscIdHelper::elementID(int stationName, int stationEta, int stationPh
     return result;
 }
 
-Identifier CscIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
+Identifier CscIdHelper::elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
     Identifier id;
     int stationName = stationNameIndex(stationNameStr);
     id = elementID(stationName, stationEta, stationPhi, check, isValid);
diff --git a/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
index a7a38c7d4ec4d8ec790874b114372c846fe664bd..d2479a2610f0ae43b51114d660e5da4ffd31cedc 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/MmIdHelper.cxx
@@ -700,7 +700,7 @@ Identifier MmIdHelper::elementID(int stationName, int stationEta, int stationPhi
     return result;
 }
 /*******************************************************************************/
-Identifier MmIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
+Identifier MmIdHelper::elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
     Identifier id;
     int stationName = stationNameIndex(stationNameStr);
     id = elementID(stationName, stationEta, stationPhi, check, isValid);
diff --git a/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelper.cxx
index 85a45889ba1b90cd77dad0d94e587334c4c4556f..d8bb06dbd33a244ee79339af36bf89e061e043d5 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelper.cxx
@@ -968,7 +968,7 @@ bool MuonIdHelper::isForward(const int& stationNameIndex) const { return (m_isFo
 bool MuonIdHelper::isSmall(const int& stationNameIndex) const { return (m_isSmall.count(stationNameIndex) == 1); }
 /*******************************************************************************/
 // Access to name and technology maps
-int MuonIdHelper::stationNameIndex(const std::string& name) const {
+int MuonIdHelper::stationNameIndex(std::string_view name) const {
     int counter = 0;
     for (const std::string& station_name : m_stationNameVector) {
         if (name.compare(station_name) == 0) { return counter; }
diff --git a/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
index aa935203b7cd29cd4f3b8d5cc45dd10490b0b865..6da1e63f89974408aaa8204176e7e23f4702470f 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/TgcIdHelper.cxx
@@ -624,7 +624,7 @@ Identifier TgcIdHelper::elementID(int stationName, int stationEta, int stationPh
     return result;
 }
 
-Identifier TgcIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
+Identifier TgcIdHelper::elementID( std::string_view stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
     Identifier id;
     int stationName = stationNameIndex(stationNameStr);
     id = elementID(stationName, stationEta, stationPhi, check, isValid);
@@ -653,7 +653,7 @@ Identifier TgcIdHelper::channelID(int stationName, int stationEta, int stationPh
     return result;
 }
 
-Identifier TgcIdHelper::channelID(const std::string& stationNameStr, int stationEta, int stationPhi, int gasGap, int isStrip, int channel,
+Identifier TgcIdHelper::channelID(std::string_view stationNameStr, int stationEta, int stationPhi, int gasGap, int isStrip, int channel,
                                   bool check, bool* isValid) const {
     Identifier id;
     int stationName = stationNameIndex(stationNameStr);
diff --git a/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx b/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
index 79e4a081cef84fdcdd5c80fee027edf7409b61f5..e8f71e7e27b81e0fcbc40dc5ffc551b977baa99a 100644
--- a/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
+++ b/MuonSpectrometer/MuonIdHelpers/src/sTgcIdHelper.cxx
@@ -891,7 +891,7 @@ Identifier sTgcIdHelper::elementID(int stationName, int stationEta, int stationP
     return result;
 }
 /*******************************************************************************/
-Identifier sTgcIdHelper::elementID(const std::string& stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
+Identifier sTgcIdHelper::elementID(std::string_view stationNameStr, int stationEta, int stationPhi, bool check, bool* isValid) const {
     Identifier id;
     int stationName = stationNameIndex(stationNameStr);
     id = elementID(stationName, stationEta, stationPhi, check, isValid);
diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx
index 1112de6087fb156dac46d31991c4e2e7bbbb3ade..51af0c9363a51392ddab6f7dabbb0b7ca90aef2c 100644
--- a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx
+++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx
@@ -67,11 +67,11 @@ namespace Muon {
             return StatusCode::SUCCESS;
         }
 
-        std::string truthSegmentContainerName = m_muonTruthSegmentContainerName.key();
-        int ppos = truthSegmentContainerName.find(".");
+        std::string truthSegmentContainerName (m_muonTruthSegmentContainerName.key());
+        int ppos = truthSegmentContainerName.find('.');
         truthSegmentContainerName = truthSegmentContainerName.substr(0, ppos);
-        std::string segmentCollectionName = m_muonSegmentCollectionName.key();
-        ppos = segmentCollectionName.find(".");
+        std::string segmentCollectionName( m_muonSegmentCollectionName.key());
+        ppos = segmentCollectionName.find('.');
         segmentCollectionName = segmentCollectionName.substr(0, ppos);
 
         std::vector<const Muon::MuonSegment*> muonSegments;
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MDTChamber.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MDTChamber.h
index e9dbdd103a0818b45386f16fb00330de45fddd82..e1f33e468b8ffdbb7b4167454532b597bd713670 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MDTChamber.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MDTChamber.h
@@ -22,7 +22,7 @@ class TH2F; // no TH2Fs are ever allocated by this class or owned
 class MDTChamber {
 
  public:
-  MDTChamber( std::string name );
+  MDTChamber( std::string_view name );
   ~MDTChamber();
 
   TH1F_LW* mdttdc;
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonAlg.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonAlg.h
index e15da23f102e86c2a2a9792f53a3407f1a76ace3..adaf973d5977be989bfdfdf86975fbf568fe991c 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonAlg.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonAlg.h
@@ -134,21 +134,21 @@ class MdtRawDataMonAlg: public AthMonitorAlgorithm {
   //MDTRawDataUtils_cxx
   bool AinB( int A, std::vector<int> & B ) const;
   virtual StatusCode  binMdtGlobal( TH2*, char ecap );
-  virtual StatusCode  binMdtRegional( TH2*, std::string &xAxis );
+  virtual StatusCode  binMdtRegional( TH2*, std::string_view xAxis );
   virtual StatusCode  binMdtGlobal_byLayer( TH2*, TH2*, TH2*);
   virtual StatusCode binMdtOccVsLB(TH2* &h, int region, int layer);
   virtual StatusCode binMdtOccVsLB_Crate(TH2* &h, int region, int crate);
-  void ChamberTubeNumberCorrection(int & tubeNum, const std::string & hardware_name, int tubePos, int numLayers) const;
+  void ChamberTubeNumberCorrection(int & tubeNum, std::string_view hardware_name, int tubePos, int numLayers) const;
   void CorrectTubeMax(const std::string & hardware_name, int & numTubes) const;
   void CorrectLayerMax(const std::string & hardware_name, int & numLayers) const;
   virtual StatusCode  fillMDTMaskedTubes(IdentifierHash, const std::string &, TH1F_LW*& h);//DEV not used at moment, should be revised
   int get_bin_for_LB_hist(int region, int layer, int phi, int eta, bool isBIM) const;
-  int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string chamber) const;
+  int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string_view chamber) const;
   // private function to initialize the selection of a certain region
   void mdtchamberId();    
   //private function to find mdt mezz cards
   int mezzmdt(Identifier) const;
-  int GetTubeMax(const Identifier & digcoll_id, const std::string & hardware_name);
+  int GetTubeMax(const Identifier & digcoll_id, std::string_view hardware_name);
 
   inline int cachedTubeMax(const Identifier& digcoll_id) const { return m_tubemax_map.at(digcoll_id.get_compact() & s_detectorElementMask); };
   inline int cachedTubeLayerMax(const Identifier& digcoll_id) const { return m_tubelayermax_map.at(digcoll_id.get_compact() & s_detectorElementMask); };
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataValAlg.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataValAlg.h
index e7fa452cfbf5261352b4f81e1a44cc2a37920ca3..45e31cd92e1835e2b14ca23f8fce9c4bb43df185 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataValAlg.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataMonitoring/MdtRawDataValAlg.h
@@ -133,12 +133,12 @@ class MdtRawDataValAlg: public ManagedMonitorToolBase {
 
   bool AinB( int A, std::vector<int> & B );
   virtual StatusCode  binMdtGlobal( TH2*, char ecap );
-  virtual StatusCode  binMdtRegional( TH2*, std::string &xAxis );
+  virtual StatusCode  binMdtRegional( TH2*, std::string_view xAxis );
   virtual StatusCode  binMdtGlobal_byLayer( TH2*, TH2*, TH2*);
   virtual StatusCode binMdtOccVsLB(TH2* &h, int region, int layer);
   virtual StatusCode binMdtOccVsLB_Crate(TH2* &h, int region, int crate);
-  void TubeID_to_ID_L_ML(int & tubeID, const std::string & hardware_name, int & tube, int & layer, int & ML, int max);
-  void ChamberTubeNumberCorrection(int & tubeNum, const std::string & hardware_name, int tubePos, int numLayers);
+  void TubeID_to_ID_L_ML(int & tubeID, std::string_view hardware_name, int & tube, int & layer, int & ML, int max);
+  void ChamberTubeNumberCorrection(int & tubeNum, std::string_view hardware_name, int tubePos, int numLayers);
   void CorrectTubeMax(const std::string & hardware_name, int & numTubes);
   void CorrectLayerMax(const std::string & hardware_name, int & numLayers);
   virtual StatusCode  bookMDTHisto_overview( TH1*&, TString, TString, TString, int, float, float, MonGroup&);
@@ -150,12 +150,12 @@ class MdtRawDataValAlg: public ManagedMonitorToolBase {
   void putBox(TH2* h, float x1, float y1, float x2, float y2);
   void putLine(TH2* h, float x1, float y1, float x2, float y2, Color_t c=kBlack);
   int get_bin_for_LB_hist(int region, int layer, int phi, int eta, bool isBIM);
-  int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string chamber);
+  int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string_view chamber);
   // private function to initialize the selection of a certain region
   void mdtchamberId();    
   //private function to find mdt mezz cards
   int mezzmdt(Identifier);
-  int GetTubeMax(const Identifier & digcoll_id, const std::string & hardware_name);
+  int GetTubeMax(const Identifier & digcoll_id,  std::string_view  hardware_name);
   StatusCode StoreTriggerType();
   void StoreTriggerType(int type);
   int GetTriggerType() { return m_trigtype; }
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTChamber.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTChamber.cxx
index 5483c7241f0c3880c5c3467ef1b58f2f65cd9881..d020e089d3db9dd7ef959155b920a46a35ec7668 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTChamber.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTChamber.cxx
@@ -13,7 +13,7 @@
 #include <cmath>
 #include <iostream>
 
-MDTChamber::MDTChamber(std::string name) :
+MDTChamber::MDTChamber(std::string_view name) :
   mdttdc(0),
   mdttdccut_ML1(0),
   mdttdccut_ML2(0),
@@ -41,7 +41,7 @@ MDTChamber::MDTChamber(std::string name) :
   mdt_DRvsSegD(0),
   mdttubenoise(0),
   mdttdctube(0),
-  m_hardware_name(name),
+  m_hardware_name(std::string(name)),
   m_mdthitsperchamber_InnerMiddleOuterLumi_bin(0),
   m_mdthitsperchamber_InnerMiddleOuterLumi_binx(0),
   m_mdthitsperchamber_InnerMiddleOuterLumi_biny(0),
@@ -93,15 +93,15 @@ MDTChamber::MDTChamber(std::string name) :
     ss.clear();
     
     //set m_station_phi
-    std::string statphi_s(name.substr(5,2));
+    std::string_view statphi_s(name.substr(5,2));
     ss << statphi_s;
     ss >> m_station_phi;
     m_station_phi--;
     ss.clear();
-
+  std::string_view name_v(m_hardware_name);
   //First there were only BMF1,2,3, then BMGs were added which are between the BMFs, so doing the eta-station assignment by hand.
-  if( m_hardware_name.substr(0, 4) == "BMF2") m_station_eta = 3; 
-  if( m_hardware_name.substr(0, 4) == "BMF3") m_station_eta = 5; 
+  if( name_v.substr(0, 4) == "BMF2") m_station_eta = 3; 
+  if( name_v.substr(0, 4) == "BMF3") m_station_eta = 5; 
     
     //station_phi is used as an iterator, and is thus 1 less than its value (since it always starts at 01, not 00).
 
@@ -163,38 +163,45 @@ MDTChamber::~MDTChamber(){}
 void MDTChamber::SetMDTHitsPerChamber_IMO_Bin(TH2F* h){
   //Plots BEE Chambers at the edge BIS plots, and EES/EEL on EIS/EIL plots
   //EIL goes up to EIL5 in hardware name but in reality there are only 4 eta stations!
+  std::string_view name_v(m_hardware_name);
+  std::string_view station_eta_s = name_v.substr(3,1);
+  std::string_view statphi_s = name_v.substr(5,2);
+  if(name_v.substr(0,4)=="BMF2") station_eta_s = "3";
+  if(name_v.substr(0,4)=="BMF3") station_eta_s = "5";
 
-  std::string station_eta_s = m_hardware_name.substr(3,1);
-  std::string statphi_s = m_hardware_name.substr(5,2);
-  if(m_hardware_name.substr(0,4)=="BMF2") station_eta_s = "3";
-  if(m_hardware_name.substr(0,4)=="BMF3") station_eta_s = "5";
+  std::string ecap_layer_IMO = std::string(name_v.substr(0,1));
+  ecap_layer_IMO += name_v.substr(4,1);
+  ecap_layer_IMO += station_eta_s;
 
-  std::string ecap_layer_IMO = m_hardware_name.substr(0,1) + m_hardware_name.substr(4,1) + station_eta_s;
   if( m_station_phi == 12 && (m_station_eta == 4 || m_station_eta == 5) ) {//m_station_phi+1==actual phi station
-    if(m_hardware_name == "BML4A13") ecap_layer_IMO = "BA5";
-    if(m_hardware_name == "BML5A13") ecap_layer_IMO = "BA6";
-    if(m_hardware_name == "BML4C13") ecap_layer_IMO = "BC5";
-    if(m_hardware_name == "BML5C13") ecap_layer_IMO = "BC6";
+    if(name_v == "BML4A13") ecap_layer_IMO = "BA5";
+    if(name_v == "BML5A13") ecap_layer_IMO = "BA6";
+    if(name_v == "BML4C13") ecap_layer_IMO = "BC5";
+    if(name_v == "BML5C13") ecap_layer_IMO = "BC6";
   }
 
-  if(m_hardware_name == "BME1A14" || m_hardware_name == "BME1A13" ){ //protect against future fix in mdt helper
+  if(name_v == "BME1A14" || name_v == "BME1A13" ){ //protect against future fix in mdt helper
 	  ecap_layer_IMO = "BA4";
 	  statphi_s = "13";
   }
-  if(m_hardware_name == "BME1C14" || m_hardware_name == "BME1C13"){
+  if(name_v == "BME1C14" || name_v == "BME1C13"){
 	  ecap_layer_IMO = "BC4";
 	  statphi_s = "13";
   }
   //First there were only BMF1,2,3, then BMGs were added which are between the BMFs, so doing the ecap-layer assignment by hand.
-  if( m_hardware_name.substr(0, 5) == "BMF2A") ecap_layer_IMO  = "BA3";
-  if( m_hardware_name.substr(0, 5) == "BMF3A") ecap_layer_IMO  = "BA5";
-  if( m_hardware_name.substr(0, 5) == "BMF2C") ecap_layer_IMO = "BC3";
-  if( m_hardware_name.substr(0, 5) == "BMF3C") ecap_layer_IMO = "BC5";
-
-  std::string statphi_IMO_s = m_hardware_name.substr(1,1)+","+statphi_s;
+  if( name_v.substr(0, 5) == "BMF2A") ecap_layer_IMO  = "BA3";
+  if( name_v.substr(0, 5) == "BMF3A") ecap_layer_IMO  = "BA5";
+  if( name_v.substr(0, 5) == "BMF2C") ecap_layer_IMO = "BC3";
+  if( name_v.substr(0, 5) == "BMF3C") ecap_layer_IMO = "BC5";
+
+  std::string statphi_IMO_s = std::string(name_v.substr(1,1));
+  statphi_IMO_s+=',';
+  statphi_IMO_s+=statphi_s;
   //Separate pesky BIR/BIM 11,15
-  if(m_hardware_name.substr(0,3)=="BIR" || m_hardware_name.substr(0,3)=="BIM")
-    statphi_IMO_s = statphi_IMO_s+","+m_hardware_name.at(2);  
+  if(name_v.substr(0,3)=="BIR" || name_v.substr(0,3)=="BIM"){
+    statphi_IMO_s += ',';
+    statphi_IMO_s += name_v.at(2);
+  }
 
   int binx = h->GetXaxis()->FindBin( ecap_layer_IMO.c_str() );
   int biny = h->GetYaxis()->FindBin( statphi_IMO_s.c_str() );
@@ -209,7 +216,7 @@ void MDTChamber::SetMDTHitsPerML_byLayer_Bins(TH2F* h_mdthitspermultilayerLumi,
   std::string statphi_s = m_hardware_name.substr(5,2);
 
   if(m_hardware_name == "BME1A14" || m_hardware_name == "BME1C14") statphi_s = "13";
-
+  std::string_view name_v(m_hardware_name);
   std::string statphi_ml1_s = statphi_s+",1";
   std::string statphi_ml2_s = statphi_s+",2";
 
@@ -220,8 +227,8 @@ void MDTChamber::SetMDTHitsPerML_byLayer_Bins(TH2F* h_mdthitspermultilayerLumi,
   }
 
   std::string stateta_s = m_hardware_name.substr(3,1);
-  if(m_hardware_name.substr(0,4)=="BMF2") stateta_s = "3";
-  if(m_hardware_name.substr(0,4)=="BMF3") stateta_s = "5";
+  if(name_v.substr(0,4)=="BMF2") stateta_s = "3";
+  if(name_v.substr(0,4)=="BMF3") stateta_s = "5";
   std::string ecap_layer = m_hardware_name.substr(0,2) + m_hardware_name.at(4) + stateta_s;
   
   if( m_station_phi == 12 && (m_station_eta == 4 || m_station_eta == 5) ) {//m_station_phi+1==actual phi station
@@ -238,10 +245,10 @@ void MDTChamber::SetMDTHitsPerML_byLayer_Bins(TH2F* h_mdthitspermultilayerLumi,
     }
   
   // Setting BMF by hand because of irregular naming convention. BMF and BMG chambers alternate; historical BMF naming is BMF1,2,3 but BMG it is 2,4,6  
-  if( m_hardware_name.substr(0, 5) == "BMF2A") ecap_layer = "BMA3";
-  if( m_hardware_name.substr(0, 5) == "BMF3A") ecap_layer = "BMA5";
-  if( m_hardware_name.substr(0, 5) == "BMF2C") ecap_layer = "BMC3";
-  if( m_hardware_name.substr(0, 5) == "BMF3C") ecap_layer = "BMC5";
+  if( name_v.substr(0, 5) == "BMF2A") ecap_layer = "BMA3";
+  if( name_v.substr(0, 5) == "BMF3A") ecap_layer = "BMA5";
+  if( name_v.substr(0, 5) == "BMF2C") ecap_layer = "BMC3";
+  if( name_v.substr(0, 5) == "BMF3C") ecap_layer = "BMC5";
 
   int binx = h_mdthitspermultilayerLumi->GetXaxis()->FindBin(ecap_layer.c_str());
   int biny_m1 = h_mdthitspermultilayerLumi->GetYaxis()->FindBin(statphi_ml1_s.c_str());
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtils.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtils.cxx
index 3faa6e3c0e0f0779b2131443e675884ab8436dc0..01a6acec879be49fe270db925799504fea7acd7e 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtils.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtils.cxx
@@ -220,7 +220,7 @@ StatusCode MdtRawDataValAlg::binMdtGlobal( TH2* h, char ecap ) {
   return StatusCode::SUCCESS;
 } 
 
-StatusCode  MdtRawDataValAlg::binMdtRegional( TH2* h, string &xAxis ) {
+StatusCode  MdtRawDataValAlg::binMdtRegional( TH2* h, std::string_view xAxis ) {
   
   ///SET Ghost Entries
   int LowerEta=-0;
@@ -565,7 +565,7 @@ StatusCode  MdtRawDataValAlg::binMdtGlobal_byLayer( TH2* nHits_In, TH2* nHits_Mi
 
 }
 
-void MdtRawDataValAlg::TubeID_to_ID_L_ML(int & tubeID, const std::string & hardware_name, int & derived_tube, int & derived_layer, int & derived_ML, int totalTubes) {
+void MdtRawDataValAlg::TubeID_to_ID_L_ML(int & tubeID, std::string_view hardware_name, int & derived_tube, int & derived_layer, int & derived_ML, int totalTubes) {
   derived_tube = 1;
   derived_layer = 1;
   derived_ML = 1;
@@ -621,7 +621,7 @@ void MdtRawDataValAlg::TubeID_to_ID_L_ML(int & tubeID, const std::string & hardw
 }
 
 //Correct for CutOuts
-void MdtRawDataValAlg::ChamberTubeNumberCorrection(int & tubeNum, const std::string & hardware_name, int tubePos, int numLayers) {
+void MdtRawDataValAlg::ChamberTubeNumberCorrection(int & tubeNum, std::string_view hardware_name, int tubePos, int numLayers) {
   //numLayers should be mdt_layer-1 so numLayers = 0 implies layer 1 ML 1 or mdt_layer==1
   if(hardware_name.substr(0,4)=="BMS4" || hardware_name.substr(0,4)=="BMS6"){//layer 1-4 tubeId 41-48 cut out
     if( numLayers <= 2 ) tubeNum = tubePos + numLayers * 48;
@@ -784,7 +784,7 @@ int MdtRawDataValAlg::mezzmdt(Identifier digcoll_id) { //int mezz_chamber, int m
 // Get the Maximum # of tubes in the chamber
 // the 'if' statements are for chambers with ML1 != ML2
 // except for BIS8 -- mdtIdHelper gets the # layers wrong in this instance
-int MdtRawDataValAlg::GetTubeMax( const Identifier & digcoll_id, const std::string & hardware_name ) {
+int MdtRawDataValAlg::GetTubeMax( const Identifier & digcoll_id, std::string_view hardware_name ) {
   int numtubes = m_idHelperSvc->mdtIdHelper().tubeMax(digcoll_id);
   int numlayers = m_idHelperSvc->mdtIdHelper().tubeLayerMax(digcoll_id);
   int numML = m_idHelperSvc->mdtIdHelper().numberOfMultilayers(digcoll_id);
@@ -811,10 +811,10 @@ int MdtRawDataValAlg::GetTubeMax( const Identifier & digcoll_id, const std::stri
   if( hardware_name.substr(0,3) == "BME")
 	  tubeMax = 546;
   
-  
-  std::map<string,float>::iterator iter_tubesperchamber = m_tubesperchamber_map.find(hardware_name);
+  std::string hardware_namestr(hardware_name);
+  std::map<string,float>::iterator iter_tubesperchamber = m_tubesperchamber_map.find(hardware_namestr);
   if ( iter_tubesperchamber == m_tubesperchamber_map.end() ) { 
-      m_tubesperchamber_map.insert( make_pair( hardware_name, tubeMax ) );
+      m_tubesperchamber_map.insert( make_pair( hardware_namestr, tubeMax ) );
       ATH_MSG_DEBUG("Chamber " << hardware_name << " has " << tubeMax << " tubes.");
   } 
   else {
@@ -1499,7 +1499,7 @@ StatusCode MdtRawDataValAlg::binMdtOccVsLB_Crate(TH2* &h, int region, int crate)
 }
 
 
-int MdtRawDataValAlg::get_bin_for_LB_crate_hist(int region, int crate, int phi, int eta, std::string chamber){
+int MdtRawDataValAlg::get_bin_for_LB_crate_hist(int region, int crate, int phi, int eta, std::string_view chamber){
   int binNum = 999;
 
   if(region == 0 || region == 1){ //Barrel
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtilsRun3.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtilsRun3.cxx
index 17821827d89b727769556a40aafe589b90ff6886..1cc22df572418a6c3b0268b12a8deeb3b0686ec6 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtilsRun3.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MDTRawDataUtilsRun3.cxx
@@ -74,7 +74,7 @@ StatusCode MdtRawDataMonAlg::binMdtGlobal( TH2* h, char ecap ) {
   return StatusCode::SUCCESS;
 } 
 
-StatusCode  MdtRawDataMonAlg::binMdtRegional( TH2* h, string &xAxis ) {
+StatusCode  MdtRawDataMonAlg::binMdtRegional( TH2* h, std::string_view xAxis ) {
   
   ///SET Ghost Entries
   int LowerEta=-0;
@@ -276,7 +276,7 @@ StatusCode  MdtRawDataMonAlg::binMdtGlobal_byLayer( TH2* nHits_In, TH2* nHits_Mi
 
 
 //Correct for CutOuts
-void MdtRawDataMonAlg::ChamberTubeNumberCorrection(int & tubeNum, const std::string & hardware_name, int tubePos, int numLayers) const{
+void MdtRawDataMonAlg::ChamberTubeNumberCorrection(int & tubeNum, std::string_view hardware_name, int tubePos, int numLayers) const{
   //numLayers should be mdt_layer-1 so numLayers = 0 implies layer 1 ML 1 or mdt_layer==1
   if(hardware_name.substr(0,4)=="BMS4" || hardware_name.substr(0,4)=="BMS6"){//layer 1-4 tubeId 41-48 cut out
     if( numLayers <= 2 ) tubeNum = tubePos + numLayers * 48;
@@ -442,7 +442,7 @@ int MdtRawDataMonAlg::mezzmdt(Identifier digcoll_id) const { //int mezz_chamber,
 // Get the Maximum # of tubes in the chamber
 // the 'if' statements are for chambers with ML1 != ML2
 // except for BIS8 -- mdtIdHelper gets the # layers wrong in this instance
-int MdtRawDataMonAlg::GetTubeMax( const Identifier & digcoll_id, const std::string & hardware_name ) {
+int MdtRawDataMonAlg::GetTubeMax( const Identifier & digcoll_id, std::string_view hardware_name ) {
   int tubeMax(0);
   if( hardware_name.substr(0,4) == "BIS8" ) { // Why does mdtIdHelper get this one wrong?
     tubeMax = 16*3;
@@ -1096,7 +1096,7 @@ StatusCode MdtRawDataMonAlg::binMdtOccVsLB_Crate(TH2* &h, int region, int crate)
 }
 
 
-int MdtRawDataMonAlg::get_bin_for_LB_crate_hist(int region, int crate, int phi, int eta, std::string chamber) const{
+int MdtRawDataMonAlg::get_bin_for_LB_crate_hist(int region, int crate, int phi, int eta, std::string_view chamber) const{
   int binNum = 999;
 
   if(region == 0 || region == 1){ //Barrel
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx
index 2e51be20c960f87ab3301859b36934160be9e608..20f45d3f3801009d11aaf1ffff4406fb90346215 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx
@@ -475,7 +475,7 @@ StatusCode MdtRawDataValAlg::fillHistograms()
           nPrd++;
           hardware_name = getChamberName(*mdtCollection);
           float adc = (*mdtCollection)->adc();
-          if(hardware_name.substr(0,3) == "BMG") adc /= 4.;
+          if(hardware_name.compare(0,3,"BMG") == 0) adc /= 4.;
           if( adc > m_ADCCut ) 
           {
             nPrdcut++;
@@ -1519,9 +1519,9 @@ StatusCode MdtRawDataValAlg::fillMDTHistograms( const Muon::MdtPrepData* mdtColl
 
   float tdc = mdtCollection->tdc()*25.0/32.0;
   // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
-  if(hardware_name.substr(0,3)=="BMG") tdc = mdtCollection->tdc() * 0.2;
+  if(hardware_name.compare(0,3,"BMG")==0) tdc = mdtCollection->tdc() * 0.2;
   float adc = mdtCollection->adc();
-  if(hardware_name.substr(0,3) == "BMG") adc /= 4.;
+  if(hardware_name.compare(0,3,"BMG") == 0) adc /= 4.;
 
   if (chamber->mdttdc) {
     chamber->mdttdc->Fill(tdc); 
@@ -1576,9 +1576,9 @@ StatusCode MdtRawDataValAlg::fillMDTSummaryHistograms( const Muon::MdtPrepData*
   bool isBIM = (chambername.at(2)=='M');
   float tdc = mdtCollection->tdc()*25.0/32.0;
   // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
-  if(chambername.substr(0,3)=="BMG") tdc = mdtCollection->tdc() * 0.2;
+  if(chambername.compare(0,3,"BMG")==0) tdc = mdtCollection->tdc() * 0.2;
   float adc = mdtCollection->adc();
-  if(chambername.substr(0,3) == "BMG") adc /= 4.;
+  if(chambername.compare(0,3,"BMG") == 0) adc /= 4.;
 
   if( m_mdtChamberHits[iregion][ilayer][stationPhi] && adc > m_ADCCut )
     m_mdtChamberHits[iregion][ilayer][stationPhi]->Fill(std::abs(stationEta));
@@ -1630,7 +1630,7 @@ StatusCode MdtRawDataValAlg::fillMDTSummaryHistograms( const Muon::MdtPrepData*
     
     //correct readout crate info for BEE,BIS7/8
     int crate_region = iregion;
-    if(chambername.substr(0,3)=="BEE" || (chambername.substr(0,3) == "BIS" && (stationEta == 7 || stationEta == 8) )){
+    if(chambername.compare(0,3,"BEE")==0 || (chambername.compare(0,3,"BIS") == 0 && (stationEta == 7 || stationEta == 8) )){
       if(iregion==0) crate_region=2;
       if(iregion==1) crate_region=3;
     }
@@ -1671,9 +1671,9 @@ StatusCode MdtRawDataValAlg::fillMDTOverviewHistograms( const Muon::MdtPrepData*
 
   float tdc = mdtCollection->tdc()*25.0/32.0;
   // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
-  if(hardware_name.substr(0,3)=="BMG") tdc = mdtCollection->tdc() * 0.2;
+  if(hardware_name.compare(0,3,"BMG")==0) tdc = mdtCollection->tdc() * 0.2;
   float adc = mdtCollection->adc();
-  if(hardware_name.substr(0,3) == "BMG") adc /= 4.;
+  if(hardware_name.compare(0,3,"BMG") ==0 ) adc /= 4.;
 
   //Barrel -->Fill MDT Global RZ and YX
   if( adc>m_ADCCut ) {
@@ -1767,14 +1767,14 @@ StatusCode MdtRawDataValAlg::handleEvent_effCalc(const Trk::SegmentCollection* s
         sc = getChamber(idHash, chamber);
         std::string chambername = chamber->getName();
         float adc = mrot->prepRawData()->adc();
-        if(chambername.substr(0,3)=="BMG") adc /= 4. ;
+        if(chambername.compare(0,3,"BMG")==0) adc /= 4. ;
         if(m_overalladc_segm_Lumi) m_overalladc_segm_Lumi->Fill(adc);
         if( store_ROTs.find(tmpid) == store_ROTs.end() ) { // Let's not double-count hits belonging to multiple segments
           store_ROTs.insert(tmpid);   
 
           double tdc = mrot->prepRawData()->tdc()*25.0/32.0;
           // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
-          if(chambername.substr(0,3)=="BMG") tdc = mrot->prepRawData()->tdc() * 0.2;
+          if(chambername.compare(0,3,"BMG")==0) tdc = mrot->prepRawData()->tdc() * 0.2;
               //      double tdc = mrot->driftTime()+500;
               int iregion = chamber->GetRegionEnum();
               int ilayer = chamber->GetLayerEnum();