diff --git a/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx b/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx
index eb6225a1cdb429bb3123c733efa0899f0047cb41..63eee31608c8889d77e28716b5d9c1a9ce60a88e 100644
--- a/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx
+++ b/InnerDetector/InDetRecTools/TRT_ToT_Tools/src/TRT_ToT_dEdx.cxx
@@ -699,16 +699,15 @@ bool TRT_ToT_dEdx::isGood_Hit(const Trk::TrackStateOnSurface *itr, bool divideBy
   double Trt_RHit = fabs(driftcircle->localParameters()[Trk::driftRadius]);
   double Trt_HitTheta = trkP->parameters()[Trk::theta];
   double Trt_HitPhi = trkP->parameters()[Trk::phi];
-  double error2 = 2*driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius);
-  double distance2 = (Trt_Rtrack - Trt_RHit)*(Trt_Rtrack - Trt_RHit);
+  double error = sqrt(driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius));
   Identifier DCId = driftcircle->identify();
   int HitPart =  m_trtId->barrel_ec(DCId);
   const InDetDD::TRT_BaseElement* element = m_trtman->getElement(DCId);
   double strawphi = element->center(DCId).phi();
 
-  if ( m_useZeroRHitCut && Trt_RHit==0) return false;                                     // tube hit
+  if ( itr->type(Trk::TrackStateOnSurface::Outlier)  ) return false; //Outliers
+  if ( m_useZeroRHitCut && Trt_RHit==0 && error>1.) return false;    //Select precision hits only
   if ( (Trt_Rtrack >= m_trackConfig_maxRtrack) || (Trt_Rtrack <= m_trackConfig_minRtrack) )return false;    // drift radius close to wire or wall
-  if (distance2 > error2) return false; // Select precision hit only
 
   if (std::abs(HitPart)==1) { //Barrel
     m_L = 2*sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./fabs(sin(Trt_HitTheta));
@@ -888,8 +887,14 @@ double TRT_ToT_dEdx::dEdx(const Trk::Track* track, bool divideByL, bool useHThit
               {
                 int trunkGas = kUnset;
                 double maxToT = 0.;
-                if(nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) trunkGas = kXenon;
-                if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT) trunkGas = kArgon;
+		if(nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT){
+		  trunkGas = kXenon;
+		  maxToT = vecToT_Xe.at(nhitsXe-1);
+		}
+		if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT){
+		  trunkGas = kArgon;
+		  maxToT = vecToT_Ar.at(nhitsAr-1);
+		}
                 if(nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) trunkGas = kKrypton;
 
                 if(trunkGas==kXenon)   nhitsXe-=ntrunk;
@@ -1741,9 +1746,13 @@ double TRT_ToT_dEdx::getToTlargerIsland(unsigned int BitPattern) const
   unsigned int current_length = 0;
   unsigned int k = 0;
 
+  //Set 4 last bits to zero (to match data and MC bitmasks)
+  unsigned int mask_last_bits=0xFFFFFF0;  // 1 1 11111111 1 11111111 1 11110000
+  unsigned int BitPattern0 =BitPattern & mask_last_bits;
+
   //shift bitmask to the right until end;
   while (true) {
-    if (BitPattern & mask) {
+    if (BitPattern0 & mask) {
       ++current_length;
     }
     else {