diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
index c216278fe058fb8e37312c3df18aab58fadaaf2d..4a8efdd4a4162b4b3e36338da0ac9a494d853961 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
@@ -291,6 +291,7 @@ def MuonChi2TrackFitter(name='MuonChi2TrackFitter',**kwargs):
     kwargs.setdefault("StraightLine"         , False)
     kwargs.setdefault("OutlierCut"           , 3.0)
     kwargs.setdefault("GetMaterialFromTrack" , False)
+    kwargs.setdefault("RejectLargeNScat"     , True)
 
     # take propagator and navigator from the extrapolator
     Extrapolator = getPublicTool(kwargs["ExtrapolationTool"])
diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h
index e35eef1e441aa0dccf445e4c306f2ae7e8b6b7d2..7a39417723c73e48b05bd30faf43a927f54159c9 100755
--- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h
+++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/TrkGlobalChi2Fitter/GlobalChi2Fitter.h
@@ -255,7 +255,7 @@ private:
 
   bool m_useCaloTG;
   ToolHandle<Trk::ITrkMaterialProviderTool> m_caloMaterialProvider;
-
+  bool m_rejectLargeNScat;
 
 #ifdef GXFDEBUGCODE
   
diff --git a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
index 4482c9689a96ac2043d8ac5077dd20565570c47b..2cc6df2927f8e337fe1872df95d96ba7675f51e6 100755
--- a/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
+++ b/Tracking/TrkFitter/TrkGlobalChi2Fitter/src/GlobalChi2Fitter.cxx
@@ -147,7 +147,8 @@ namespace Trk {
     m_residuals{},
     m_updatescat{},
     m_useCaloTG(false),
-    m_caloMaterialProvider("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool") {
+    m_caloMaterialProvider("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool"),
+    m_rejectLargeNScat(false){
     // tools and services
     declareProperty("ExtrapolationTool", m_extrapolator);
     declareProperty("MeasurementUpdateTool", m_updator);
@@ -207,6 +208,7 @@ namespace Trk {
 #endif
 
     declareProperty("FixBrem", m_fixbrem = -1);
+    declareProperty("RejectLargeNScat", m_rejectLargeNScat=false);
 
     declareInterface<IGlobalTrackFitter>(this);
     // m_miniter=1;
@@ -1269,7 +1271,6 @@ namespace Trk {
          else secondpseudostate=trajectory.trackStates().back();
          }*/
     }
-
     Track *track = myfit(trajectory, *startPar, false,
                          (m_fieldService->toroidOn() || m_fieldService->solenoidOn()) ? muon : nonInteracting);
     if (startPar != lastidpar && startPar != indettrack->perigeeParameters()) {
@@ -1710,7 +1711,6 @@ namespace Trk {
       trajectory.reset();
       trajectory.setPrefit(0);
       trajectory.setNumberOfPerigeeParameters(5);
-
       track = myfit(trajectory, *firstidpar, false, muon);
       m_matfilled = false;
     }
@@ -1944,7 +1944,6 @@ namespace Trk {
     }
 
     ATH_MSG_DEBUG("call myfit(GXFTrajectory,TP,,)");
-
     Track *track = myfit(trajectory, *minpar, runOutlier, matEffects);
     if (deleteminpar) {
       delete minpar;
@@ -3733,6 +3732,10 @@ public:
                                                               *states.back()->surface(), alongMomentum, false,
                                                               Trk::nonInteractingMuon);
         matvec = m_matvecmuondownstream;
+	if(matvec->size()>1000 && m_rejectLargeNScat){
+	  ATH_MSG_DEBUG("too many scatterers: "<<matvec->size());
+	  return;
+	}
         if (matvec && !matvec->empty()) {
           for (int j = 0; j < (int) matvec->size(); j++) {
             const MaterialEffectsBase *meb = (*matvec)[j]->materialEffectsOnTrack();
@@ -3859,6 +3862,7 @@ public:
       bool addlayer = true;
       while (addlayer && layerno < (int) matstates.size()) {
         addlayer = false;
+	//std::cout<<"add "<<matstates.size()<<" states"<<std::endl;
         const TrackParameters *layerpar = matstates[layerno]->trackParameters();
 
 
@@ -3921,6 +3925,7 @@ public:
             const MaterialProperties *matprop = lay ? lay->fullUpdateMaterialProperties(*layerpar) : 0;
             meff->setMaterialProperties(matprop);
           }
+	  /*
           if (msgLvl(MSG::DEBUG)) {
             msg(MSG::DEBUG) << "X0: " << meff->x0();
             if (layerpar) {
@@ -3930,6 +3935,7 @@ public:
             msg(MSG::DEBUG) << " eloss: " << meff->deltaE() << " sigma eloss: " << meff->sigmaDeltaE();
             msg(MSG::DEBUG) << endmsg;
           }
+	  */
           layerno++;
         }
       }