diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonAmbiTrackSelectionTool/src/MuonAmbiTrackSelectionTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonAmbiTrackSelectionTool/src/MuonAmbiTrackSelectionTool.cxx
index 01410abf0ea916aabbab162c4b5e29d3096122e2..16e55ebeb29a387ee1c0c3faef1b4e198ce878e4 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonAmbiTrackSelectionTool/src/MuonAmbiTrackSelectionTool.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonAmbiTrackSelectionTool/src/MuonAmbiTrackSelectionTool.cxx
@@ -102,11 +102,7 @@ const Trk::Track* Muon::MuonAmbiTrackSelectionTool::getCleanedOutTrack(const Trk
   ATH_MSG_VERBOSE("New Track " << m_printer->print(*ptrTrack));
 
   std::map<Muon::MuonStationIndex::StIndex,int> sharedPrecisionPerLayer;
-  std::map<Muon::MuonStationIndex::StIndex,int> sharedTriggerEtaPerLayer;
-  std::map<Muon::MuonStationIndex::StIndex,int> sharedPhiPerLayer;
   std::map<Muon::MuonStationIndex::StIndex,int> precisionPerLayer;
-  std::map<Muon::MuonStationIndex::StIndex,int> triggerEtaPerLayer;
-  std::map<Muon::MuonStationIndex::StIndex,int> phiPerLayer;
   
   // loop over TSOS
   DataVector<const Trk::TrackStateOnSurface>::const_iterator iTsos    = tsos->begin();
@@ -123,63 +119,39 @@ const Trk::Track* Muon::MuonAmbiTrackSelectionTool::getCleanedOutTrack(const Trk
 
     const Trk::RIO_OnTrack* rot = dynamic_cast <const Trk::RIO_OnTrack*> (meas);
     if (!rot) {
-      // could be a Pseudo-Measurement
+      // we are only interested in precision hits since only they have the resolution to distinguish between close-by tracks
+      // so we only take competing ROTs if they are CSC eta hits
       const Trk::CompetingRIOsOnTrack* competingROT = dynamic_cast <const Trk::CompetingRIOsOnTrack*> (meas);
-      if (competingROT) {
-	bool measPhi = false;
-	++numhits;
-	const unsigned int numROTs = competingROT->numberOfContainedROTs();
-	bool overlap = false;
-	Muon::MuonStationIndex::StIndex stIndex = Muon::MuonStationIndex::StUnknown;
-	for( unsigned int i=0;i<numROTs;++i ){
-	  const Trk::RIO_OnTrack* rot = &competingROT->rioOnTrack(i);
-	  if( !rot || !rot->prepRawData() || !m_idHelperTool->isMuon(rot->identify()) ) continue;
-	  stIndex = m_idHelperTool->stationIndex(rot->identify());
-	  measPhi = m_idHelperTool->measuresPhi(rot->identify());
-
+      if(competingROT){
+        const unsigned int numROTs = competingROT->numberOfContainedROTs();
+        for( unsigned int i=0;i<numROTs;++i ){
+          const Trk::RIO_OnTrack* rot = &competingROT->rioOnTrack(i);
+          if( !rot || !rot->prepRawData() || !m_idHelperTool->isMuon(rot->identify()) ) continue;
+          //only use precision hits for muon track overlap
+          if(!m_idHelperTool->isMdt(rot->identify()) && !(m_idHelperTool->isCsc(rot->identify()) && !m_idHelperTool->measuresPhi(rot->identify()))) continue;
+	  Muon::MuonStationIndex::StIndex stIndex = m_idHelperTool->stationIndex(rot->identify());
+	  ++precisionPerLayer[stIndex];
 	  if ( m_assoTool->isUsed(*(rot->prepRawData()))) {
 	    ATH_MSG_VERBOSE("Track overlap found! " << m_idHelperTool->toString(rot->identify()));
-	    overlap = true;
-	    break;
+	    ++numshared;
+	    ++sharedPrecisionPerLayer[stIndex];
 	  }
 	}
-	
-	if( overlap ){
-	  ++numshared;
-	  if( measPhi ) ++sharedPhiPerLayer[stIndex];
-	  else          ++sharedTriggerEtaPerLayer[stIndex];
-	}else{
-	  if( measPhi ) ++phiPerLayer[stIndex];
-	  else          ++triggerEtaPerLayer[stIndex];
-	}
-
       }
     }else{
 
       if(!m_idHelperTool->isMuon(rot->identify())) continue;
+      if(!m_idHelperTool->isMdt(rot->identify()) && !(m_idHelperTool->isCsc(rot->identify()) && !m_idHelperTool->measuresPhi(rot->identify()))) continue; //only precision hits used for overlap
 
       ++numhits;
 
       Muon::MuonStationIndex::StIndex stIndex = m_idHelperTool->stationIndex(rot->identify());
-      bool measPhi = m_idHelperTool->measuresPhi(rot->identify());
-      bool isTrigger = m_idHelperTool->isTrigger(rot->identify());
-      if( measPhi ) {
-	++phiPerLayer[stIndex];
-      }else{
-	if( isTrigger ) ++triggerEtaPerLayer[stIndex];
-	else            ++precisionPerLayer[stIndex];
-      }
+      ++precisionPerLayer[stIndex];
       // allow no overlap
       if ( m_assoTool->isUsed(*(rot->prepRawData()))) {
 	ATH_MSG_VERBOSE("Track overlap found! " << m_idHelperTool->toString(rot->identify()));
 	++numshared;
-
-	if( measPhi ) {
-	  ++sharedPhiPerLayer[stIndex];
-	}else{
-	  if( isTrigger ) ++sharedTriggerEtaPerLayer[stIndex];
-	  else            ++sharedPrecisionPerLayer[stIndex];
-	}
+	++sharedPrecisionPerLayer[stIndex];
       }
     }
   }
diff --git a/Tracking/TrkTools/TrkAssociationTools/CMakeLists.txt b/Tracking/TrkTools/TrkAssociationTools/CMakeLists.txt
index ac69f30dab06a23010685ab2d601d60c2ceef552..cbb84046b900dc5270abdb4d90e3133adcec08e2 100644
--- a/Tracking/TrkTools/TrkAssociationTools/CMakeLists.txt
+++ b/Tracking/TrkTools/TrkAssociationTools/CMakeLists.txt
@@ -16,13 +16,15 @@ atlas_depends_on_subdirs( PUBLIC
                           Tracking/TrkDetDescr/TrkDetElementBase
                           Tracking/TrkEvent/TrkEventUtils
                           Tracking/TrkEvent/TrkRIO_OnTrack
-                          Tracking/TrkEvent/TrkTrack )
+			  Tracking/TrkEvent/TrkCompetingRIOsOnTrack
+                          Tracking/TrkEvent/TrkTrack 
+			  MuonSpectrometer/MuonIdHelpers)
 
 # Component(s) in the package:
 atlas_add_component( TrkAssociationTools
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps TrkToolInterfaces AtlasDetDescr Identifier GaudiKernel TrkDetElementBase TrkEventUtils TrkRIO_OnTrack TrkTrack )
+                     LINK_LIBRARIES AthenaBaseComps TrkToolInterfaces AtlasDetDescr Identifier GaudiKernel TrkDetElementBase TrkEventUtils TrkRIO_OnTrack TrkCompetingRIOsOnTrack TrkTrack MuonIdHelpersLib)
 
 # Install files from the package:
 atlas_install_headers( TrkAssociationTools )
diff --git a/Tracking/TrkTools/TrkAssociationTools/TrkAssociationTools/PRD_AssociationTool.h b/Tracking/TrkTools/TrkAssociationTools/TrkAssociationTools/PRD_AssociationTool.h
index 5e0be28f8acf7f72e5c91813d375524632029005..c09f25938db8d87728ce95526803f795df284c3e 100755
--- a/Tracking/TrkTools/TrkAssociationTools/TrkAssociationTools/PRD_AssociationTool.h
+++ b/Tracking/TrkTools/TrkAssociationTools/TrkAssociationTools/PRD_AssociationTool.h
@@ -14,6 +14,10 @@
 class AtlasDetectorID;
 class Identifier;
 
+namespace Muon{
+  class MuonIdHelperTool;
+}
+
 namespace Trk {
 
   class Track;
@@ -80,6 +84,9 @@ namespace Trk {
 
     /**holds the PRDs associated with each Track (i.e. the Track* is the key)*/
     IPRD_AssociationTool::TrackPrepRawDataMap m_trackPrepRawDataMap;
+
+    ToolHandle<Muon::MuonIdHelperTool>    m_idHelperTool;
+
 };
 
   inline bool Trk::PRD_AssociationTool::isUsed(const PrepRawData& prd) const
diff --git a/Tracking/TrkTools/TrkAssociationTools/src/PRD_AssociationTool.cxx b/Tracking/TrkTools/TrkAssociationTools/src/PRD_AssociationTool.cxx
index 27fd62672f112c5ea86c24155b634fe299e75416..6faa9c12e6fcc6e21999301e2eb92cbe595fb9c8 100755
--- a/Tracking/TrkTools/TrkAssociationTools/src/PRD_AssociationTool.cxx
+++ b/Tracking/TrkTools/TrkAssociationTools/src/PRD_AssociationTool.cxx
@@ -6,12 +6,16 @@
 #include "TrkDetElementBase/TrkDetElementBase.h"
 #include "TrkTrack/Track.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
+#include "TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h"
+#include "TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h"
 #include "TrkEventUtils/CreatePRD_MapPairFromTrack.h"
 #include "TrkEventUtils/CreatePRD_VectorFromTrack.h"
 
 #include "Identifier/Identifier.h"
 #include "AtlasDetDescr/AtlasDetectorID.h"
 
+#include "MuonIdHelpers/MuonIdHelperTool.h"
+
 #include <cassert>
 #include <vector>
 //#include <functional>
@@ -22,7 +26,8 @@ Trk::PRD_AssociationTool::PRD_AssociationTool(const std::string& t,
   const std::string& n,
   const IInterface*  p )
   :
-  AthAlgTool(t,n,p)
+  AthAlgTool(t,n,p),
+  m_idHelperTool("Muon::MuonIdHelperTool/MuonIdHelperTool")
 {
   declareInterface<IPRD_AssociationTool>(this);
 }
@@ -203,8 +208,26 @@ std::vector< const Trk::PrepRawData* > Trk::PRD_AssociationTool::getPrdsOnTrack(
   for (;it!=itEnd;it++)
   {
     const RIO_OnTrack* rot = dynamic_cast<const RIO_OnTrack*>(*it);
-    if (0!=rot)
+    if (rot){
+      if(m_idHelperTool->isMuon(rot->identify())){
+	//only use precision hits for muon track overlap
+	if(!m_idHelperTool->isMdt(rot->identify()) && !(m_idHelperTool->isCsc(rot->identify()) && !m_idHelperTool->measuresPhi(rot->identify()))) continue;
+      }
       vec.push_back(rot->prepRawData());
+    }
+    else{
+      const Trk::CompetingRIOsOnTrack* competingROT = dynamic_cast <const Trk::CompetingRIOsOnTrack*> (*it);
+      if(competingROT){
+	const unsigned int numROTs = competingROT->numberOfContainedROTs();
+	for( unsigned int i=0;i<numROTs;++i ){
+	  const Trk::RIO_OnTrack* rot = &competingROT->rioOnTrack(i);
+	  if( !rot || !rot->prepRawData() || !m_idHelperTool->isMuon(rot->identify()) ) continue;
+	  //only use precision hits for muon track overlap
+	  if(!m_idHelperTool->isMdt(rot->identify()) && !(m_idHelperTool->isCsc(rot->identify()) && !m_idHelperTool->measuresPhi(rot->identify()))) continue;
+	  vec.push_back(rot->prepRawData());
+	}
+      }
+    }
   }
   ATH_MSG_DEBUG (" Getting "<<vec.size()<<" PRDs from track at:"<<&track);