diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.cxx
index 8ad41171aeb081c02a64dce82e9c4e814a3bef18..99cc4192131240eb8c59359ea581c8ff78ad969e 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.cxx
@@ -6,7 +6,6 @@
 #include "MuonSegment/MuonSegment.h"
 #include "TrkTrack/Track.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkTruthData/PRD_MultiTruthCollection.h"
 #include "HepMC/GenParticle.h"
 #include <iostream>
 #include "TTree.h"
@@ -29,16 +28,11 @@ namespace Muon {
     m_level(0)
   {
     declareInterface<IMuonTruthSummaryTool>(this);
-    declareProperty("CSC_TruthName",    m_CSC_TruthName = "CSC_TruthMap");
-    declareProperty("RPC_TruthName",    m_RPC_TruthName = "RPC_TruthMap");
-    declareProperty("TGC_TruthName",    m_TGC_TruthName = "TGC_TruthMap");
-    declareProperty("MDT_TruthName",    m_MDT_TruthName = "MDT_TruthMap");
-    declareProperty("MM_TruthName",     m_MM_TruthName  = "MM_TruthMap");
-    declareProperty("STGC_TruthName",   m_STGC_TruthName = "STGC_TruthMap");
     declareProperty("WriteNtuple",      m_writeTree);
     declareProperty("NtupleTreeName",   m_treeName = "MuonTruthSummaryTree");
     declareProperty("HistStream",       m_histStream = "Summary");
     declareProperty("SelectedPdgId",    m_selectedPdgId = 13, "Should be positive as absolute value is used" );
+    declareProperty("UseNSW",           m_useNSW=false);
   }
 
   StatusCode  MuonTruthSummaryTool::initialize()
@@ -93,6 +87,13 @@ namespace Muon {
       ATH_MSG_WARNING("SelectedPdgId should be positive, taking the absolute value");
       m_selectedPdgId = abs(m_selectedPdgId);
     }
+
+    if(m_useNSW){
+      m_TruthNames.emplace_back("MM_TruthMap");
+      m_TruthNames.emplace_back("STGC_TruthMap");
+    }
+    else m_TruthNames.emplace_back("CSC_TruthMap");
+    ATH_CHECK(m_TruthNames.initialize());
     return StatusCode::SUCCESS;
   }
 
@@ -113,35 +114,26 @@ namespace Muon {
   }
 
   void MuonTruthSummaryTool::init() const {
-    getTruth(m_CSC_TruthName);
-    getTruth(m_RPC_TruthName);
-    getTruth(m_TGC_TruthName);
-    getTruth(m_MDT_TruthName);
-    getTruth(m_MM_TruthName);
-    getTruth(m_STGC_TruthName);
+    getTruth();
     
     m_wasInit = true;
     ATH_MSG_DEBUG(" Total collected muon truth hits " << m_truthHits.size() ); 
   }
 
-  void MuonTruthSummaryTool::getTruth(std::string name ) const {
-    const PRD_MultiTruthCollection* col = 0;
-
-    if( !evtStore()->contains<PRD_MultiTruthCollection>(name) ) return; 
+  void MuonTruthSummaryTool::getTruth() const {
 
-    if( evtStore()->retrieve(col, name).isFailure() || !col ) {
-      ATH_MSG_WARNING(  "PRD_MultiTruthCollection " << name << " NOT found");
-      return;
-    }
-    ATH_MSG_DEBUG(  "PRD_MultiTruthCollection " << name << " found");
-    PRD_MultiTruthCollection::const_iterator it = col->begin();
-    PRD_MultiTruthCollection::const_iterator it_end = col->end();
-    for( ;it!=it_end;++it ){
-      const HepMcParticleLink& link = it->second;
-      if( link.cptr() && 
-          (abs(link.cptr()->pdg_id()) ==  m_selectedPdgId || abs(link.cptr()->pdg_id()) == 13 ) ) {
-        m_truthHits[it->first] = link.cptr()->barcode();
-        m_pdgIdLookupFromBarcode[link.cptr()->barcode()]=link.cptr()->pdg_id();
+    for(SG::ReadHandle<PRD_MultiTruthCollection>& col : m_TruthNames.makeHandles()){
+      if(!col.isValid() || !col.isPresent()) continue;
+      ATH_MSG_DEBUG(  "PRD_MultiTruthCollection " << col.key() << " found");
+      PRD_MultiTruthCollection::const_iterator it = col->begin();
+      PRD_MultiTruthCollection::const_iterator it_end = col->end();
+      for( ;it!=it_end;++it ){
+	const HepMcParticleLink& link = it->second;
+	if( link.cptr() && 
+	    (abs(link.cptr()->pdg_id()) ==  m_selectedPdgId || abs(link.cptr()->pdg_id()) == 13 ) ) {
+	  m_truthHits[it->first] = link.cptr()->barcode();
+	  m_pdgIdLookupFromBarcode[link.cptr()->barcode()]=link.cptr()->pdg_id();
+	}
       }
     }
   }
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.h
index d7f5b3143d7a8d6fdb50a31d3b67cd75164a4551..2b3b4a689dc60cd887947d438dc77c5dfe12dd33 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTruthTools/src/MuonTruthSummaryTool.h
@@ -11,7 +11,9 @@
 #include "MuonIdHelpers/MuonIdHelperTool.h"
 #include "MuonRecHelperTools/MuonEDMPrinterTool.h"
 #include "MuonRecHelperTools/MuonEDMHelperTool.h"
+#include "TrkTruthData/PRD_MultiTruthCollection.h"
 #include "GaudiKernel/IIncidentListener.h"
+#include "StoreGate/ReadHandleKeyArray.h"
 #include <string>
 #include <set>
 #include <map>
@@ -69,7 +71,7 @@ namespace Muon {
 
     /** add measurements */
     void add( const std::vector<const Trk::MeasurementBase*>& measurements, int level );
-    void getTruth(std::string name ) const;
+    void getTruth() const;
     std::string printSummary( const std::set<Identifier>& truth, const std::set<Identifier>& found );
 
     ToolHandle<MuonIdHelperTool>                m_idHelper;
@@ -77,13 +79,9 @@ namespace Muon {
     ToolHandle<MuonEDMPrinterTool>              m_printer;
     ServiceHandle< IIncidentSvc >               m_incidentSvc;
     mutable bool m_wasInit;
+    bool m_useNSW;
 
-    std::string m_CSC_TruthName;
-    std::string m_RPC_TruthName;
-    std::string m_TGC_TruthName;
-    std::string m_MDT_TruthName;
-    std::string m_MM_TruthName;
-    std::string m_STGC_TruthName;
+    SG::ReadHandleKeyArray<PRD_MultiTruthCollection> m_TruthNames{this,"TruthNames",{"RPC_TruthMap","TGC_TruthMap","MDT_TruthMap"},"truth names"};
 
     mutable std::map<int,int>                           m_pdgIdLookupFromBarcode;
     mutable std::map<Identifier,int>                    m_truthHits; // map containing truth hits associated with muons, stores barcode as second element
diff --git a/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.cxx b/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.cxx
index e07f109542040eaf44a04446746520e6ff51dbaa..bf65ff876729321a3528bb8618839b66468c5da8 100644
--- a/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.cxx
@@ -63,7 +63,8 @@ namespace Muon {
     declareProperty("Extrapolator",m_extrapolator );    
     declareProperty("MatchTool",m_matchingTool );    
     declareProperty("MuonHitTimingTool",m_hitTimingTool );    
-    declareProperty("IncidentSvc",m_incidentSvc );    
+    declareProperty("IncidentSvc",m_incidentSvc );
+    declareProperty("isMC",m_isMC=false);
   }
     
   MuonRecoValidationTool::~MuonRecoValidationTool() {
@@ -76,7 +77,12 @@ namespace Muon {
     ATH_CHECK(m_edmHelper.retrieve());
     ATH_CHECK(m_segmentHitSummaryTool.retrieve());
     ATH_CHECK(m_hitSummaryTool.retrieve());
-    ATH_CHECK(m_truthSummaryTool.retrieve());
+    if(m_isMC){
+      ATH_CHECK(m_truthSummaryTool.retrieve());
+    }
+    else{
+      m_truthSummaryTool.disable();
+    }
     ATH_CHECK(m_extrapolator.retrieve());
     ATH_CHECK(m_matchingTool.retrieve());
     ATH_CHECK(m_hitTimingTool.retrieve());
@@ -164,6 +170,8 @@ namespace Muon {
   
   int MuonRecoValidationTool::getBarcode( const std::set<Identifier>& ids ) const {
 
+    if(!m_isMC) return -1;
+
     // count how often a barcode occurs 
     std::map<int,int> counters;
     for( std::set<Identifier>::const_iterator it=ids.begin();it!=ids.end();++it ){
@@ -211,8 +219,11 @@ namespace Muon {
                               stauHit.propagationTime, stauHit.e, tof, 0., stauHit.shift, 1000 * m_candidateCounter);
       
       // barcode + pdg
-      int barcode = m_truthSummaryTool->getBarcode(id);
-      int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+      int barcode=-1,pdg=0;
+      if(m_isMC){
+	barcode = m_truthSummaryTool->getBarcode(id);
+	pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+      }
       m_ntuple.timeBlock.truth.fill(pdg,barcode);
     }    
     ++m_candidateCounter;
@@ -232,8 +243,11 @@ namespace Muon {
     m_ntuple.timeBlock.fill(2,m_idHelper->gasGapId(id).get_identifier32().get_compact(),gpos.perp(),gpos.z(),time,errorTime);
 
     // barcode + pdg
-    int barcode = m_truthSummaryTool->getBarcode(id);
-    int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    int barcode=-1,pdg=0;
+    if(m_isMC){
+      barcode = m_truthSummaryTool->getBarcode(id);
+      pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    }
     m_ntuple.timeBlock.truth.fill(pdg,barcode);
     
     return true;
@@ -261,7 +275,8 @@ namespace Muon {
       std::vector<const MuonClusterOnTrack*> clusters;
       extract(*seg,ids,clusters);
       int barcode = getBarcode(ids);
-      int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+      int pdg=0;
+      if(m_isMC) pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
       m_ntuple.timeBlock.truth.fill(pdg,barcode);
       
       return true;
@@ -277,8 +292,11 @@ namespace Muon {
 
 
       // barcode + pdg
-      int barcode = m_truthSummaryTool->getBarcode(id);
-      int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+      int barcode=-1,pdg=0;
+      if(m_isMC){
+	barcode = m_truthSummaryTool->getBarcode(id);
+	pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+      }
       m_ntuple.timeBlock.truth.fill(pdg,barcode);
       
       bool measphi = m_idHelper->measuresPhi(id);
@@ -352,7 +370,8 @@ namespace Muon {
 
     // barcode + pdg
     int barcode = getBarcode(ids);
-    int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    int pdg=0;
+    if(m_isMC) pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
     m_ntuple.segmentBlock.truth.fill(pdg,barcode);
 
     m_ntuple.segmentBlock.track.fill(getIndex(intersection));
@@ -425,8 +444,11 @@ namespace Muon {
         ids.insert((*hit)->prd->identify());
       }
     }
-    int barcode = getBarcode(ids);
-    int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    int barcode=-1,pdg=0;
+    if(m_isMC){
+      barcode = getBarcode(ids);
+      pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    }
     m_ntuple.houghBlock.truth.fill(pdg,barcode);
 
     ATH_MSG_DEBUG(" Adding Hough maximum to ntuple ");
@@ -441,8 +463,11 @@ namespace Muon {
     m_ntuple.hitBlock.id.fill(m_idHelper->sector(id),m_idHelper->chamberIndex(id));
     m_ntuple.hitBlock.track.fill(getIndex(intersection));
     
-    int barcode = m_truthSummaryTool->getBarcode(id);
-    int pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    int barcode=-1,pdg=0;
+    if(m_isMC){
+      barcode = m_truthSummaryTool->getBarcode(id);
+      pdg = barcode != -1 ? m_truthSummaryTool->getPdgId(barcode) : 0;
+    }
     m_ntuple.hitBlock.truth.fill(pdg,barcode);
 
     float sign = expos < 0 ? -1. : 1.;
diff --git a/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.h b/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.h
index 54eb3dcd28e82443a7c91233ce91a6bda87a3bc0..ad783a294987e0462f65e7ce4cee3b2f1deb067e 100644
--- a/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.h
+++ b/MuonSpectrometer/MuonValidation/MuonRecValidation/MuonTrackPerformance/src/MuonRecoValidationTool.h
@@ -119,6 +119,8 @@ namespace Muon {
     TTree* m_tree;
 
     unsigned int m_candidateCounter;
+
+    bool m_isMC;
   };
   
 }
diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py
index 62e0b6fb2705371e08359f351296fd272729fb0c..8cf4920ee27ea5b22ac9304e8013c0581c26a606 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py
+++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuGirlTagTool.py
@@ -4,6 +4,7 @@
 
 from AthenaCommon import CfgMgr
 from AthenaCommon.CfgGetter import getPublicTool,getService
+from AthenaCommon.GlobalFlags import globalflags
 
 from RecExConfig.RecFlags import rec
 
@@ -48,6 +49,8 @@ def MuonLayerAmbiguitySolverTool( name="MuonLayerAmbiguitySolverTool",**kwargs):
    return CfgMgr.Muon__MuonLayerAmbiguitySolverTool(name,**kwargs)
 
 def MuonRecoValidationTool( name="MuonRecoValidationTool",**kwargs):
+   if globalflags.DataSource() != 'data':
+      kwargs.setdefault("isMC",True)
    return CfgMgr.Muon__MuonRecoValidationTool(name,**kwargs)
 
 def DCMathStauSegmentMaker( name="DCMathStauSegmentMaker", **kwargs ):