diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
index 585811d38cdc4f8eb607a8602c8820d69762319f..b7cc7e14257d5e5e75f2616e6678e1501a3eeb6b 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
@@ -239,8 +239,7 @@ namespace Rec
 	ServiceHandle<MagField::IMagFieldSvc>		m_magFieldSvc;
 	ToolHandle<Trk::IMaterialAllocator>		m_materialAllocator;
 	ToolHandle<Muon::IMdtDriftCircleOnTrackCreator>	m_mdtRotCreator;
-	ToolHandle<Muon::IMuonErrorOptimisationTool>	m_muonScaledErrorOptimizer;
-	ToolHandle<Muon::IMuonErrorOptimisationTool>	m_muonAlignmentErrorOptimizer;
+	ToolHandle<Muon::IMuonErrorOptimisationTool>	m_muonErrorOptimizer;
 	ToolHandle<Muon::IMuonHoleRecoveryTool>		m_muonHoleRecovery;
 	ToolHandle<Trk::IPropagator>        		m_propagator;
 	ToolHandle<Trk::IPropagator>        		m_propagatorSL;
diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
index 7b33e9734bf4057c38976c73b059ab7edcc9380a..9f19a9c891d59ce09276debfcf1e2669f3fc04df 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
@@ -86,8 +86,7 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder (const std::string&type,
 	m_magFieldSvc			("AtlasFieldSvc",name),
 	m_materialAllocator		(""),
 	m_mdtRotCreator			(""),
-  	m_muonScaledErrorOptimizer	("Muon::MuonErrorOptimisationTool/MuidScaledErrorOptimisationTool"), // overwritten 
-	m_muonAlignmentErrorOptimizer	("Muon::MuonErrorOptimisationTool/MuidAlignmentErrorOptimisationTool"),
+  	m_muonErrorOptimizer    	("Muon::MuonErrorOptimisationTool/MuidErrorOptimisationTool"),
 	m_muonHoleRecovery		("Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool"),
 	m_propagator            	("Trk::IntersectorWrapper/IntersectorWrapper"),
 	m_propagatorSL			("Trk::StraightLinePropagator/MuonStraightLinePropagator"),
@@ -161,8 +160,7 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder (const std::string&type,
     declareProperty("Intersector",			m_intersector);
     declareProperty("MaterialAllocator",		m_materialAllocator);
     declareProperty("MdtRotCreator",			m_mdtRotCreator);
-    declareProperty("MuonScaledErrorOptimizer",		m_muonScaledErrorOptimizer); // overwritten
-    declareProperty("MuonAlignmentErrorOptimizer",	m_muonAlignmentErrorOptimizer);
+    declareProperty("MuonErrorOptimizer",		m_muonErrorOptimizer);
     declareProperty("MuonHoleRecovery",			m_muonHoleRecovery);
     declareProperty("Propagator",			m_propagator);
     declareProperty("SLPropagator",			m_propagatorSL);
@@ -217,9 +215,6 @@ StatusCode
 CombinedMuonTrackBuilder::initialize()
 {
 
-// use only m_muonAlignmentErrorOptimizer 
-  m_muonScaledErrorOptimizer = m_muonAlignmentErrorOptimizer;
- 
   if( !AthAlgTool::initialize() ) return StatusCode::FAILURE;
 
     ATH_MSG_DEBUG( "Initializing CombinedMuonTrackBuilder"
@@ -232,8 +227,7 @@ CombinedMuonTrackBuilder::initialize()
     if (m_reallocateMaterial)		msg(MSG::DEBUG) << " ReallocateMaterial";
     if (! m_cscRotCreator.empty())	msg(MSG::DEBUG) << " RedoCscRots";
     if (! m_mdtRotCreator.empty())	msg(MSG::DEBUG) << " RedoMdtRots";
-    if (! m_muonScaledErrorOptimizer.empty())	msg(MSG::DEBUG) << " ScaledErrorOptimisation";
-    if (! m_muonAlignmentErrorOptimizer.empty())	msg(MSG::DEBUG) << " AlignmentErrorOptimisation";
+    if (! m_muonErrorOptimizer.empty())	msg(MSG::DEBUG) << " ErrorOptimisation";
     if (! m_muonHoleRecovery.empty())	msg(MSG::DEBUG) << " HoleRecovery";
     msg(MSG::DEBUG) << endmsg;
 
@@ -463,28 +457,16 @@ CombinedMuonTrackBuilder::initialize()
 	    ATH_MSG_DEBUG( "Retrieved tool " << m_mdtRotCreator );
 	}
     }
-    if (! m_muonScaledErrorOptimizer.empty())
+    if (! m_muonErrorOptimizer.empty())
     {
-	if (m_muonScaledErrorOptimizer.retrieve().isFailure())
+	if (m_muonErrorOptimizer.retrieve().isFailure())
 	{
-	    ATH_MSG_FATAL( "Failed to retrieve tool " << m_muonScaledErrorOptimizer );
+	    ATH_MSG_FATAL( "Failed to retrieve tool " << m_muonErrorOptimizer );
 	    return StatusCode::FAILURE;
 	}
 	else
 	{
-	    ATH_MSG_DEBUG( "Retrieved tool " << m_muonScaledErrorOptimizer );
-	}
-    }
-    if (! m_muonAlignmentErrorOptimizer.empty())
-    {
-	if (m_muonAlignmentErrorOptimizer.retrieve().isFailure())
-	{
-	    ATH_MSG_FATAL( "Failed to retrieve tool " << m_muonAlignmentErrorOptimizer );
-	    return StatusCode::FAILURE;
-	}
-	else
-	{
-	    ATH_MSG_DEBUG( "Retrieved tool " << m_muonAlignmentErrorOptimizer );
+	    ATH_MSG_DEBUG( "Retrieved tool " << m_muonErrorOptimizer );
 	}
     }
     if (! m_muonHoleRecovery.empty())
@@ -2519,9 +2501,9 @@ CombinedMuonTrackBuilder::standaloneRefit (const Trk::Track&	combinedTrack,
 	
 	// fit with optimized spectrometer errors
 	//this should also be inside the "if(refittedTrack) statement	
-	if (! m_muonAlignmentErrorOptimizer.empty() && ! refittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && countAEOTs(refittedTrack, " before optimize ") == 0 ) {
+	if (! m_muonErrorOptimizer.empty() && ! refittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && countAEOTs(refittedTrack, " before optimize ") == 0 ) {
 	  ATH_MSG_VERBOSE( " perform spectrometer error optimization after cleaning " );
-	  Trk::Track* optimizedTrack = m_muonAlignmentErrorOptimizer->optimiseErrors(*refittedTrack);
+	  Trk::Track* optimizedTrack = m_muonErrorOptimizer->optimiseErrors(*refittedTrack);
 	  if (optimizedTrack) {
             if(checkTrack("standaloneRefitOpt",optimizedTrack, refittedTrack)) {
 	      delete refittedTrack;
@@ -2673,9 +2655,9 @@ CombinedMuonTrackBuilder::fit (const Trk::Track&		track,
  
     // fit with optimized spectrometer errors
 
-        if (! m_muonScaledErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
+        if (! m_muonErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
 	  ATH_MSG_VERBOSE( " perform spectrometer error optimization after cleaning " );
-	  Trk::Track* optimizedTrack = m_muonScaledErrorOptimizer->optimiseErrors(*fittedTrack);
+	  Trk::Track* optimizedTrack = m_muonErrorOptimizer->optimiseErrors(*fittedTrack);
 	  if (optimizedTrack) {
             if(checkTrack("fitInterface1Opt",optimizedTrack, fittedTrack)) {
                delete fittedTrack;
@@ -2807,9 +2789,9 @@ CombinedMuonTrackBuilder::fit (const Trk::MeasurementSet&	measurementSet,
 
 // fit with optimized spectrometer errors
 
-        if (! m_muonScaledErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
+        if (! m_muonErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
 	  ATH_MSG_VERBOSE( " perform spectrometer error optimization after cleaning " );
-	  Trk::Track* optimizedTrack = m_muonScaledErrorOptimizer->optimiseErrors(*fittedTrack);
+	  Trk::Track* optimizedTrack = m_muonErrorOptimizer->optimiseErrors(*fittedTrack);
 	  if (optimizedTrack) {
             if(checkTrack("fitInterface2Opt",optimizedTrack, fittedTrack)) {
               delete fittedTrack;
@@ -2928,9 +2910,9 @@ CombinedMuonTrackBuilder::fit (const Trk::Track&		indetTrack,
     {
     // fit with optimized spectrometer errors
 
-        if (! m_muonScaledErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
+        if (! m_muonErrorOptimizer.empty() && ! fittedTrack->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrack)) {
 	  ATH_MSG_VERBOSE( " perform spectrometer error optimization after cleaning " );
-	  Trk::Track* optimizedTrack = m_muonScaledErrorOptimizer->optimiseErrors(*fittedTrack);
+	  Trk::Track* optimizedTrack = m_muonErrorOptimizer->optimiseErrors(*fittedTrack);
 	  if (optimizedTrack) {
 	    delete fittedTrack;
 	    fittedTrack = optimizedTrack;
@@ -3314,16 +3296,27 @@ CombinedMuonTrackBuilder::createExtrapolatedTrack(
 	const Trk::TrackParameters* leadingParameters		= &parameters;
 	if (particleHypothesis == Trk::muon)
 	{
-	    bool haveMaterial	= false;
+	    bool haveMaterial			= false;
+            bool haveLeadingMaterial            = false;
+            bool firstMSHit                     = false;
+ 
 	    for (s = spectrometerTSOS.begin(); s != spectrometerTSOS.end(); ++s)
 	    {
 		if ((**s).materialEffectsOnTrack())
 		{
-		    haveMaterial	= true;
-		    break;
+		    			haveMaterial	= true;
+                    if(!firstMSHit)     haveLeadingMaterial = true;
 		}
+                if ((**s).measurementOnTrack()&&!firstMSHit) 
+                {
+                     firstMSHit = true;
+                }
+                if(haveMaterial&&firstMSHit) break;
 	    }
-	    if (! m_materialAllocator.empty() && haveMaterial)
+
+// only add leading material if there is no material in fron of first muon measurement 
+
+	    if (! m_materialAllocator.empty() && haveMaterial && ! haveLeadingMaterial)
 	    {
 		leadingTSOS	       	= m_materialAllocator->leadingSpectrometerTSOS(parameters);
 		if (leadingTSOS && leadingTSOS->size() && leadingTSOS->front()->trackParameters())
@@ -4467,10 +4460,10 @@ CombinedMuonTrackBuilder::finalTrackBuild(Trk::Track*& track) const
     }
 
     // final fit with optimized spectrometer errors
-    if (! m_muonAlignmentErrorOptimizer.empty() && ! track->info().trackProperties(Trk::TrackInfo::StraightTrack) && countAEOTs(track, " before optimize ") == 0)
+    if (! m_muonErrorOptimizer.empty() && ! track->info().trackProperties(Trk::TrackInfo::StraightTrack) && countAEOTs(track, " before optimize ") == 0)
     {
 	ATH_MSG_VERBOSE( " perform spectrometer error optimization... " );
-	Trk::Track* optimizedTrack = m_muonAlignmentErrorOptimizer->optimiseErrors(*track);
+	Trk::Track* optimizedTrack = m_muonErrorOptimizer->optimiseErrors(*track);
 	if (optimizedTrack&&checkTrack("finalTrackBuild2",optimizedTrack,track))
 	{
 	    delete track;