diff --git a/Trigger/TrigAlgorithms/TrigFastTrackFinder/README.md b/Trigger/TrigAlgorithms/TrigFastTrackFinder/README.md
index 74315bb643a526b05085395abcb0ed8c44cb6d90..6d62e27a023a3b52c457c2981c419c301a05d4c5 100644
--- a/Trigger/TrigAlgorithms/TrigFastTrackFinder/README.md
+++ b/Trigger/TrigAlgorithms/TrigFastTrackFinder/README.md
@@ -1,6 +1,6 @@
 ## Overview
 This Module contains the TrigFastTrackFinder Algorithm that performs Fast Track Reconstruction for the High Level Trigger. More details are given in the [TrigFastTrackFinderOverview](docs/TrigFastTrackFinderOverview.md)
-Configured instances of TrigFastTrackFinder are provided to signatures by the [TrigInDetConfig](../../TrigTools/TrigInDetConfig/python) package. The README in that packackage gives details of how to include TrigFastTrackFinder and other Inner Detector algorithms in signature TriggerMenuMT sequences.
+Configured instances of TrigFastTrackFinder are provided to signatures by the [TrigInDetConfig](../../TrigTools/TrigInDetConfig/python) package. The README in that package gives details of how to include TrigFastTrackFinder and other Inner Detector algorithms in signature TriggerMenuMT sequences.
  
 ## Files in this Module
 * Configuration: [TrigFastTrackFinderConfig.py](python/TrigFastTrackFinderConfig.py)    
diff --git a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/TrigFastTrackFinderConfig.py b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/TrigFastTrackFinderConfig.py
index 558cb91d5b7bd3a2459cb00c0bdab7ccbf2966bf..e018af15999aad002cf900899d356b2866383a4d 100755
--- a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/TrigFastTrackFinderConfig.py
+++ b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/TrigFastTrackFinderConfig.py
@@ -49,6 +49,7 @@ def TrigFastTrackFinderMonitoringArg(flags, name, doResMon):
             montool.defineHistogram('TIME_Total',                path='EXPERT',type='TH1F',title="Total time (ms)",             xbins = 200, xmin=0.0, xmax=2000.0)
             montool.defineHistogram('TIME_PattReco',             path='EXPERT',type='TH1F',title="Pure PattReco time (ms)",     xbins = 200, xmin=0.0, xmax=1000.0)
             montool.defineHistogram('TIME_SpacePointConversion', path='EXPERT',type='TH1F',title="SP Conversion time (ms)",     xbins = 100, xmin=0.0, xmax=100.0)
+            montool.defineHistogram('TIME_ZFinder',              path='EXPERT',type='TH1F',title="ZFinder time (ms)",           xbins = 200, xmin=0.0, xmax=1000.0)
             montool.defineHistogram('TIME_Triplets',             path='EXPERT',type='TH1F',title="Triplets Making time (ms)",   xbins = 200, xmin=0.0, xmax=1000.0)
             montool.defineHistogram('TIME_CmbTrack',             path='EXPERT',type='TH1F',title="Combined Tracking time (ms)", xbins = 200, xmin=0.0, xmax=1000.0)
             montool.defineHistogram('TIME_TrackFitter',          path='EXPERT',type='TH1F',title="Track Fitter time (ms)",      xbins = 200, xmin=0.0, xmax=200.0)
@@ -223,18 +224,26 @@ def TrigZFinderCfg(flags : AthConfigFlags, numberingTool) -> ComponentAccumulato
         'TripletDZ'     : 1,
         'PhiBinSize'    : 0.1,
         'UseOnlyPixels' : True,
-        'MaxLayer'      : 3
+        'MaxLayer'      : 3,
+        'NumberOfPeaks' : 3
     }
-    
-    acc.setPrivateTools(
-        CompFactory.TrigZFinder( name="TrigZFinder",
-                                 NumberOfPeaks = 3,
-                                 LayerNumberTool=numberingTool,
-                                 FullScanMode = True, #TODO: know this from the RoI anyway - should set for every event
-                                 **zfargs
-                                )
-    )
-    return acc                
+  elif flags.Tracking.ActiveConfig.name == "jetSuper" :
+    zfargs = {
+        'TripletMode'   : 1,
+        'TripletDZ'     : 10,
+        'UseOnlyPixels' : True,
+        'MaxLayer'      : 3,  # Uses only barrel pixels
+        'NumberOfPeaks' : 1
+    }
+  
+  acc.setPrivateTools(
+      CompFactory.TrigZFinder( name="TrigZFinder",
+                               LayerNumberTool=numberingTool,
+                               FullScanMode = True, #TODO: know this from the RoI anyway - should set for every event
+                               **zfargs
+                              )
+  )
+  return acc
 
 
 def TrigFastTrackFinderCfg(flags: AthConfigFlags, name: str, slice_name: str, RoIs: str, inputTracksName:str = None) -> ComponentAccumulator:
@@ -301,9 +310,9 @@ def TrigFastTrackFinderCfg(flags: AthConfigFlags, name: str, slice_name: str, Ro
   )
   theTrigInDetTrackFitter = acc.getPublicTool("TrigInDetTrackFitter_"+remapped_type)
   
-  if (config.doZFinder):
+  if (flags.Tracking.ActiveConfig.doZFinder):
     theTrigZFinder = acc.popToolsAndMerge(TrigZFinderCfg(flags,numberingTool))
-      
+  
   if not config.doZFinderOnly:
     
     from TrkConfig.TrkTrackSummaryToolConfig import InDetTrigTrackSummaryToolCfg, InDetTrigFastTrackSummaryToolCfg
@@ -385,7 +394,7 @@ def TrigFastTrackFinderCfg(flags: AthConfigFlags, name: str, slice_name: str, Ro
   if flags.Tracking.ActiveConfig.doZFinder:
     ftf.doZFinderOnly = config.doZFinderOnly
     ftf.trigZFinder = theTrigZFinder
-    ftf.zVertexResolution = 1
+    ftf.zVertexResolution = 20 if flags.Tracking.ActiveConfig.name == "jetSuper" else 1
     ftf.doFastZVertexSeeding = True
 
   if inputTracksName:
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/src/TrigTrackSelector.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/src/TrigTrackSelector.cxx
index 6784f26b312f06dc051153a308a591aa44aac863..4a302fa20d2f3abafc6424d36c3a95df12a41a42 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/src/TrigTrackSelector.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/src/TrigTrackSelector.cxx
@@ -15,8 +15,8 @@
 
 #include <stdexcept>
 
-/// NB: This was 47 for Run 2, but wit the addition of the IBL it should be 32 
-///     It was kept at 47 for all Run 2 and mogration to MT, but for Run 3 we 
+/// NB: This was 47 for Run 2, but with the addition of the IBL it should be 32 
+///     It was kept at 47 for all Run 2 and migration to MT, but for Run 3 we 
 ///     really want it changed to be 32  
 const double TrigTrackSelector::s_default_radius = 47;
 
@@ -30,8 +30,8 @@ TrigTrackSelector::TrigTrackSelector( TrackFilter* selector, double radius, int
 
 
 /// recursive function to identify whether a particle comes from some other 
-/// ancestor particle at any point in it's history - checks it's parents and 
-/// then function calls itself to check their parents etc, until it either 
+/// ancestor particle at any point in its history - checks its parents and 
+/// then function calls itself to check their parents etc., until it either 
 /// finds the pdgid it is looking for, or it has no more ancestors
 /// if it finds an appropriate ancestor it returns the pointer to it, 
 /// otherwise it returns a nullptr 
@@ -259,7 +259,7 @@ bool TrigTrackSelector::selectTrack( const Rec::TrackParticle* track ) {
 
       // Check number of hits
       // NB: a spacepoint is two offline "hits", so a pixel spacepoint is really 
-      // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersetcting
+      // 2 "hits" and an offline SCT "hit" is really a 1D cluster, so two intersecting
       // stereo clusters making a spacepoint are two "hits"
       const Trk::TrackSummary *summary = track->trackSummary();
       int nBlayerHits = 2*summary->get(Trk::numberOfBLayerHits); 
diff --git a/Trigger/TrigTools/IDScanZFinder/doc/packagedoc.h b/Trigger/TrigTools/IDScanZFinder/doc/packagedoc.h
index 6a4dffc8d2733a54135609960c53995c6632afdb..9bfdfbdce9b5e00e84a6ccbf16a39795b72b5891 100644
--- a/Trigger/TrigTools/IDScanZFinder/doc/packagedoc.h
+++ b/Trigger/TrigTools/IDScanZFinder/doc/packagedoc.h
@@ -1,8 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -14,7 +11,7 @@
 This package contains the AlgTool IDScanZfinder that determines the z-position of the primary pp interaction
 before any track reconstruction. Full details about the algorithm used can be found in:
 
-https://twiki.cern.ch/twiki/bin/view/Atlas/IDScanHowTo
+https://twiki.cern.ch/twiki/bin/view/AtlasComputing/IDScanHowTo
 
 Some details of the parameters and how they are set can be found in:
 
@@ -37,9 +34,9 @@ http://indico.cern.ch/getFile.py/access?contribId=1&resId=0&materialId=slides&co
    - nVertexSeparation : minimum number of zbins that any two output vertices should by separated by ( default 0, set to 5 for e & mu slices by IDScan )
    - VrtxMixing : if any two output peaks are too close, use this value as a weight to average the two z-positions ( experimental feature, default 0 )
    - PreferCentralZ : If two peaks have the same height, report the one with lowest |z| first ( default false, set true for e & mu slices by IDScan )
-   - TrustSPProvider : Use all the spacepoints returned by the OnlineSpacePointTool, without apply cuts based on RoI phi width ( default true )
+   - TrustSPProvider : Use all the spacepoints returned by the OnlineSpacePointTool, without applying cuts based on RoI phi width ( default true )
    - FullScanMode : full-scan mode ( default false, used for full-scan slices )
-   - TripletMode : integer to chose triplet mode; if 0 ( default ), do not use the triplets; if 1, triplet mode is only for confirmation of pairs; if 2, each triplet contributes to the zhistos ( slower, possibly more resistant to pileup )
+   - TripletMode : integer to choose triplet mode; if 0 ( default ), do not use the triplets; if 1, triplet mode is only for confirmation of pairs; if 2, each triplet contributes to the zhistos ( slower, possibly more resistant to pileup )
    - TripletDZ, TripletDK, TripletDP : Cuts applied in confirming/creating triplets ( default values 25., 0.005, 0.05 )
 
 
diff --git a/Trigger/TrigTools/IDScanZFinder/src/IDScanZFinderInternal.h b/Trigger/TrigTools/IDScanZFinder/src/IDScanZFinderInternal.h
index 4edd38ef81de725a9d423abfd0032a2da453265e..13ecc83afc4b0cdc7c4e4a181ed8b4b4d5989206 100644
--- a/Trigger/TrigTools/IDScanZFinder/src/IDScanZFinderInternal.h
+++ b/Trigger/TrigTools/IDScanZFinder/src/IDScanZFinderInternal.h
@@ -6,7 +6,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-// filename: IDScanZFinder.h
+// filename: IDScanZFinderInternal.h
 // 
 // author: Nikos Konstantinidis <n.konstantinidis@ucl.ac.uk>
 //         
@@ -148,6 +148,7 @@ protected:  // data members
   int m_tripletMode;
   double m_tripletDZ;
   double m_tripletDK;
+  double m_halfTripletDK; // replaces m_tripletDK internally to avoid unnecessary multiplication by 2 in curvature calculation, without changing the interface
   double m_tripletDP;
   
   /// to apply a hreshold to the found vertex candidates
@@ -198,6 +199,7 @@ IDScanZFinderInternal<SpacePoint>::IDScanZFinderInternal( const std::string& typ
   m_tripletMode      = 0     ;
   m_tripletDZ        = 25.   ;
   m_tripletDK        = 0.005 ;  
+  m_halfTripletDK    = 0.5*m_tripletDK;
   m_tripletDP        = 0.05  ;
   
   //  m_applyWeightThreshold = false;
@@ -223,6 +225,8 @@ IDScanZFinderInternal<SpacePoint>::IDScanZFinderInternal( const std::string& typ
 template<class SpacePoint>
 void IDScanZFinderInternal<SpacePoint>::initializeInternal(long maxLayers, long lastBarrel )
 {
+  m_halfTripletDK = 0.5*m_tripletDK;
+  
   m_IdScan_MaxNumLayers = maxLayers; 
   m_IdScan_LastBrlLayer = lastBarrel; 
   
@@ -370,7 +374,7 @@ template<class SpacePoint> long IDScanZFinderInternal<SpacePoint>::fillVectors (
   else { 
     // If we trust that all the SPs are properly input, we determine the RoI phi width
     //  using the SPs themselves.
-    //  If the RoI phi range is wider than pi) we keep everything as usual.
+    //  If the RoI phi range is wider than pi, we keep everything as usual.
     if ( m_trustSPprovider  &&  m_usedROIphiWidth < M_PI )
       {
   	double roiPhiPosMin( 9.9), roiPhiPosMax(0);
@@ -449,6 +453,7 @@ template<class SpacePoint> long IDScanZFinderInternal<SpacePoint>::fillVectors (
       /// DOES NOT span the phi=pi boundary
       for(long i=0; i<nSPs; ++i, ++SpItr) 
   	{
+      if (m_pixOnly && !(*SpItr)->isPixel()) continue;
   	  double phi2 = (*SpItr)->phi() - roiPhiMin;
   
   	  if ( phi2>=0 && phi2<dphi ) { 
@@ -466,6 +471,7 @@ template<class SpacePoint> long IDScanZFinderInternal<SpacePoint>::fillVectors (
       /// DOES span the phi=pi boundary
       for(long i=0; i<nSPs; ++i, ++SpItr) 
   	{
+      if (m_pixOnly && !(*SpItr)->isPixel()) continue;
   	  double phi2 = (*SpItr)->phi() - roiPhiMin;
   	  if( phi2<0.0) phi2+=2*M_PI;
   
@@ -582,7 +588,7 @@ std::vector<typename IDScanZFinderInternal<SpacePoint>::vertex>* IDScanZFinderIn
   for ( unsigned int sliceIndex = 0; sliceIndex < m_NumPhiSlices; sliceIndex++ )
     {
       allSlices[ sliceIndex ] = new PhiSlice( sliceIndex, ZBinSize, m_invPhiSliceSize,
-					      m_tripletDZ, m_tripletDK, m_tripletDP, zMin, zMax,
+					      m_tripletDZ, m_halfTripletDK, m_tripletDP, zMin, zMax,
 					      m_IdScan_MaxNumLayers, m_IdScan_LastBrlLayer );
     }
     
diff --git a/Trigger/TrigTools/IDScanZFinder/src/PhiSlice.cxx b/Trigger/TrigTools/IDScanZFinder/src/PhiSlice.cxx
index a34dd6f9e9b1f028ca2b4049f67f3c5740a20bc4..b180031e4514efbd9a5ca0dab90d1cf11586fa3b 100644
--- a/Trigger/TrigTools/IDScanZFinder/src/PhiSlice.cxx
+++ b/Trigger/TrigTools/IDScanZFinder/src/PhiSlice.cxx
@@ -265,7 +265,7 @@ void PhiSlice::GetHistogram( std::vector<long>*    HitHistogram,
 						if ( TripletMode )
 						{
 							//Calculate some extra values
-							double kValue = 2.0 * ( outerPointPhi - innerPointPhi ) * invDeltaRho;
+							double kValue = ( outerPointPhi - innerPointPhi ) * invDeltaRho;
 							double pValue = ( outerPointPhi * innerPointRho - innerPointPhi * outerPointRho ) * invDeltaRho;
 
 
@@ -429,7 +429,7 @@ int PhiSlice::FindTriplet( int OuterFilledLayer, int OuterPointIndex,
 			}
 
 			//Calculate the k value using the outer and triplet points
-			double tripletKValue = 2.0 * ( tripletPointPhi - outerPointPhi ) * invDeltaRho;
+			double tripletKValue = ( tripletPointPhi - outerPointPhi ) * invDeltaRho;
 			if ( fabs( tripletKValue - CurrentKValue ) > m_kTolerance )
 			{
 				continue;
diff --git a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinder.cxx b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinder.cxx
index 1e807574d4ea05c521d0df01aa4c52cd8a25fee8..95f27c904dd91299726140ac8a5f0ad0a8272433 100755
--- a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinder.cxx
+++ b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinder.cxx
@@ -148,6 +148,10 @@ StatusCode TrigZFinder::initialize()
 
   ATH_MSG_INFO("TrigZFinder::m_weigthThreshold  = " << m_weightThreshold );
 
+  ATH_MSG_INFO("TrigZFinder::m_tripletDZ  = " << m_tripletDZ );
+  ATH_MSG_INFO("TrigZFinder::m_tripletDK  = " << m_tripletDK );
+  ATH_MSG_INFO("TrigZFinder::m_tripletDP  = " << m_tripletDP );
+
   return StatusCode::SUCCESS;
 }
 
diff --git a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.cxx b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.cxx
index 4341a4076643a9f5f5337e61e60854cc48266fbf..b5bdaeea7eb0cf44e74e54a57a36eee19bd7fddd 100644
--- a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.cxx
+++ b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.cxx
@@ -18,7 +18,6 @@ TrigZFinderInternal::TrigZFinderInternal( const std::string& type, const std::st
   m_usedphiBinSize   = m_phiBinSize   ;
   m_pixOnly          = false ;
   m_ROIphiWidth      = 0.2   ;
-  m_usedROIphiWidth  = m_ROIphiWidth ;
   m_minZBinSize      = 0.2   ;
   m_zBinSizeEtaCoeff = 0.1   ;
   m_dphideta         = -0.02 ;
@@ -35,7 +34,8 @@ TrigZFinderInternal::TrigZFinderInternal( const std::string& type, const std::st
   m_fullScanMode     = false ;
   m_tripletMode      = 0     ;
   m_tripletDZ        = 25.   ;
-  m_tripletDK        = 0.005 ;  
+  m_tripletDK        = 0.005 ;
+  m_halfTripletDK    = 0.5*m_tripletDK; // using this in internals avoids unnecessary multiplications when calculating curvature
   m_tripletDP        = 0.05  ;
 
   m_maxLayer         = 32;
@@ -57,6 +57,7 @@ TrigZFinderInternal::TrigZFinderInternal( const std::string& type, const std::st
 
 void TrigZFinderInternal::initializeInternal(long maxLayers, long lastBarrel )
 {
+  m_halfTripletDK = 0.5*m_tripletDK;
 
   m_IdScan_MaxNumLayers = maxLayers; 
   m_IdScan_LastBrlLayer = lastBarrel; 
@@ -89,9 +90,6 @@ void TrigZFinderInternal::initializeInternal(long maxLayers, long lastBarrel )
 
   m_extraPhi = std::vector< std::vector<long> >( m_IdScan_MaxNumLayers, std::vector<long>(m_IdScan_MaxNumLayers) ); 
 
-  if ( m_fullScanMode ) m_usedROIphiWidth = 2*M_PI;
-  else                  m_usedROIphiWidth = m_ROIphiWidth;
-
   // from TrigZFinder::initialize
   m_usedphiBinSize = m_phiBinSize;
   if ( m_usedphiBinSize < ZFinder_MinPhiSliceSize and ! m_forcePhiBinSize) m_usedphiBinSize = ZFinder_MinPhiSliceSize;
@@ -231,8 +229,8 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
   else { 
     // If we trust that all the SPs are properly input, we determine the RoI phi width
     //  using the SPs themselves.
-    //  If the RoI phi range is wider than pi) we keep everything as usual.
-    if ( m_trustSPprovider  &&  m_usedROIphiWidth < M_PI )
+    //  If the RoI phi range is wider than pi, we keep everything as usual.
+    if ( m_trustSPprovider  &&  m_ROIphiWidth < M_PI )
     {
       double roiPhiPosMin( 9.9), roiPhiPosMax(0);
       double roiPhiNegMin(-9.9), roiPhiNegMax(0);  // least negative and most negative
@@ -276,8 +274,8 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
 
       /// get from roi now
       if ( roi.phiMinus()==roi.phiPlus() ) { 
-        roiPhiMin = roi.phi()-0.5*m_usedROIphiWidth;
-        roiPhiMax = roi.phi()+0.5*m_usedROIphiWidth;
+        roiPhiMin = roi.phi()-0.5*m_ROIphiWidth;
+        roiPhiMax = roi.phi()+0.5*m_ROIphiWidth;
         if(roiPhiMin<-M_PI) roiPhiMin+=2*M_PI;
         if(roiPhiMax>M_PI)  roiPhiMax-=2*M_PI;
       }
@@ -296,10 +294,6 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
 
   if ( dphi<0 ) dphi+=2*M_PI;
 
-  //  m_usedROIphiWidth = dphi;
-
-  //  std::cout << "m_usedROIphiWidth: " << m_usedROIphiWidth << std::endl;
-  //  m_NumPhiSlices = long (ceil( m_usedROIphiWidth*m_invPhiSliceSize ));
   numPhiSlices = long (ceil( dphi*m_invPhiSliceSize ));
 
 
@@ -312,15 +306,15 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
     /// DOES NOT span the phi=pi boundary
     for(long i=0; i<nSPs; ++i, ++SpItr) 
     {
-      if ( SpItr->layer()>m_maxLayer ) continue;
+      if ( SpItr->layer()>m_maxLayer || (m_pixOnly && !SpItr->isPixel()) ) continue;
       double phi2 = SpItr->phi() - roiPhiMin;
 
-      if ( phi2>=0 && phi2<dphi ) { 
-        phi[i] = phi2;
-        rho[i] = SpItr->r();
-        zed[i] = SpItr->z();
-        lyr[i] = m_new2old[SpItr->layer()];
-        lcount[lyr[i]]=true;
+      if ( phi2>=0 && phi2<dphi ) { // ensures space point is in ROI
+        phi[icount] = phi2;
+        rho[icount] = SpItr->r();
+        zed[icount] = SpItr->z();
+        lyr[icount] = m_new2old[SpItr->layer()];
+        lcount[lyr[icount]]=true;
         ++icount;
       }
     }
@@ -330,16 +324,15 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
     /// DOES span the phi=pi boundary
     for(long i=0; i<nSPs; ++i, ++SpItr) 
     {
-
+      if ( SpItr->layer()>m_maxLayer || (m_pixOnly && !SpItr->isPixel()) ) continue;
       double phi2 = SpItr->phi() - roiPhiMin;
       if( phi2<0.0) phi2+=2*M_PI;
-      if ( SpItr->layer()>m_maxLayer ) continue;
-      if ( phi2>=0 && phi2<dphi ) { 
-        phi[i] = phi2;
-        rho[i] = SpItr->r();
-        zed[i] = SpItr->z();
-        lyr[i] = m_new2old[SpItr->layer()];
-        lcount[lyr[i]]=true;
+      if ( phi2>=0 && phi2<dphi ) { // ensures space point is in ROI
+        phi[icount] = phi2;
+        rho[icount] = SpItr->r();
+        zed[icount] = SpItr->z();
+        lyr[icount] = m_new2old[SpItr->layer()];
+        lcount[lyr[icount]]=true;
         ++icount;
       }
     }
@@ -354,8 +347,6 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
     rho.resize(icount);
     zed.resize(icount);
     lyr.resize(icount);
-
-    nSPs = icount;
   }
 
 
@@ -364,7 +355,6 @@ long TrigZFinderInternal::fillVectors(const std::vector<TrigSiSpacePointBase>& s
   //   and filledLayers[2]=8 
   //
   long filled = 0;
-  // filled = 0;
 
   for ( long i=0; i<m_IdScan_MaxNumLayers; ++i ) {
     if ( lcount[i] ) {
@@ -454,7 +444,7 @@ TrigZFinderInternal::findZInternal( const std::vector<TrigSiSpacePointBase>& spV
   for ( unsigned int sliceIndex = 0; sliceIndex < numPhiSlices; sliceIndex++ )
   {
     allSlices[ sliceIndex ] = new PhiSlice( sliceIndex, ZBinSize, m_invPhiSliceSize,
-					    m_tripletDZ, m_tripletDK, m_tripletDP, zMin, zMax,
+					    m_tripletDZ, m_halfTripletDK, m_tripletDP, zMin, zMax,
 					    m_IdScan_MaxNumLayers, m_IdScan_LastBrlLayer );
   }
 
@@ -579,7 +569,7 @@ TrigZFinderInternal::findZInternal( const std::vector<TrigSiSpacePointBase>& spV
       
       std::vector<long>  n3( nHisto[0][0].size()-2, 0);
       
-      for( unsigned i=n.size()-2 ; i-- ;  ) n3[i] = ( n[i+2] + n[i+2] + n[i] );
+      for( unsigned i=n.size()-2 ; i-- ;  ) n3[i] = ( n[i+2] + n[i+1] + n[i] );
       std::sort( n3.begin(), n3.end() );
       
       unsigned nmax = unsigned(n3.size()*m_percentile);
diff --git a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.h b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.h
index 6ac9596e6e2d1e1324c067aa52034a54fb185cb2..20ce917bdf0c02eae5601f83d7785c1b406ba936 100644
--- a/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.h
+++ b/Trigger/TrigTools/IDScanZFinder/src/TrigZFinderInternal.h
@@ -6,7 +6,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-// filename: TrigZFinder.h
+// filename: TrigZFinderInternal.h
 // 
 // author: Nikos Konstantinidis <n.konstantinidis@ucl.ac.uk>
 //         
@@ -94,7 +94,6 @@ protected:  // data members
     bool   m_forcePhiBinSize = false;     // respect the config of phi bin even if below reasonable threshold
     double m_usedphiBinSize;      // the size of the phi slices 
     double m_ROIphiWidth;         // the phi width of the ROI 
-    double m_usedROIphiWidth;     // the phi width of the ROI 
     double m_minZBinSize;         // z-histo bin size: m_minZBinSize+|etaRoI|*m_zBinSizeEtaCoeff (to account for worse resolution in high eta)
     double m_zBinSizeEtaCoeff;    // z-histo bin size: m_minZBinSize+|etaRoI|*m_zBinSizeEtaCoeff (to account for worse resolution in high eta)
 
@@ -131,6 +130,7 @@ protected:  // data members
     int m_tripletMode;
     double m_tripletDZ;
     double m_tripletDK;
+    double m_halfTripletDK; // replaces m_tripletDK internally to avoid unnecessary multiplication by 2 in curvature calculation, without changing the interface
     double m_tripletDP;
 
     int    m_maxLayer;
diff --git a/Trigger/TrigTools/IDScanZFinder/src/ZFinderConstants.h b/Trigger/TrigTools/IDScanZFinder/src/ZFinderConstants.h
index 3db71a5701b919b2baf7b042e30dcaef5fdd14e9..206d8964a2b5f90f1d3e2fa84e32a4f9fa5ebb99 100755
--- a/Trigger/TrigTools/IDScanZFinder/src/ZFinderConstants.h
+++ b/Trigger/TrigTools/IDScanZFinder/src/ZFinderConstants.h
@@ -1,17 +1,17 @@
 // emacs: this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
 */
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-// filename: ZF_Constants.h
+// filename: ZFinderConstants.h
 // 
 // author: Nikos Konstantinidis
 //         nk@hep.ucl.ac.uk
 //		 
-// Description: contains ZFinder constantds
+// Description: contains ZFinder constants
 // 
 // date: 24/07/2003
 //