diff --git a/Tracking/Acts/ActsConfig/python/ActsTrkSeedingConfig.py b/Tracking/Acts/ActsConfig/python/ActsTrkSeedingConfig.py
index 95ca32850e5045b736a3161f0b895effcf7f5773..cde2149ac8982e34ddf3ba82d704b3e375a5d8dd 100644
--- a/Tracking/Acts/ActsConfig/python/ActsTrkSeedingConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsTrkSeedingConfig.py
@@ -19,6 +19,19 @@ def ActsTrkITkPixelSeedingToolCfg(flags,
     acc.setPrivateTools(CompFactory.ActsTrk.SeedingTool(name = "ActsSeedingTool_ITkPixel", **kwargs))
     return acc
 
+def ActsTrkITkFastPixelSeedingToolCfg(flags,
+                                  **kwargs) -> ComponentAccumulator:
+    acc = ComponentAccumulator()
+    ## For ITkPixel
+    kwargs.setdefault("numSeedIncrement" , float("inf"))
+    kwargs.setdefault("deltaZMax" , float("inf"))
+    kwargs.setdefault("maxPtScattering", float("inf"))
+
+    ## Additional cuts for fast seed configuration
+
+    acc.setPrivateTools(CompFactory.ActsTrk.SeedingTool(name = "ActsFastSeedingTool_ITkPixel", **kwargs))
+    return acc
+
 def ActsTrkITkStripSeedingToolCfg(flags,
                                   **kwargs) -> ComponentAccumulator:
     acc = ComponentAccumulator()
@@ -134,7 +147,11 @@ def  ActsTrkSiSpacePointsSeedMakerCfg(flags,
         if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
             seedTool_pixel = acc.popToolsAndMerge(ActsTrkITkPixelOrthogonalSeedingToolCfg(flags))
         else:
-            seedTool_pixel = acc.popToolsAndMerge(ActsTrkITkPixelSeedingToolCfg(flags))
+            if flags.Tracking.doITkFastTracking:
+                kwargs.setdefault("useFastTracking", True)
+                seedTool_pixel = acc.popToolsAndMerge(ActsTrkITkFastPixelSeedingToolCfg(flags))
+            else:
+                seedTool_pixel = acc.popToolsAndMerge(ActsTrkITkPixelSeedingToolCfg(flags))
 
     seedTool_strip = None
     if 'SeedToolStrip' not in kwargs:
@@ -178,7 +195,11 @@ def ActsTrkITkPixelSeedingCfg(flags,
         if flags.Acts.SeedingStrategy is SeedingStrategy.Orthogonal:
             seedTool = acc.popToolsAndMerge(ActsTrkITkPixelOrthogonalSeedingToolCfg(flags))
         else:
-            seedTool = acc.popToolsAndMerge(ActsTrkITkPixelSeedingToolCfg(flags))
+            if flags.Tracking.doITkFastTracking:
+                kwargs.setdefault("useFastTracking", True)
+                seedTool = acc.popToolsAndMerge(ActsTrkITkFastPixelSeedingToolCfg(flags))
+            else:
+                seedTool = acc.popToolsAndMerge(ActsTrkITkPixelSeedingToolCfg(flags))
 
     kwargs.setdefault('InputSpacePoints', ['ITkPixelSpacePoints'])
     kwargs.setdefault('OutputSeeds', 'ITkPixelSeeds')
@@ -187,7 +208,6 @@ def ActsTrkITkPixelSeedingCfg(flags,
     kwargs.setdefault('ATLASConverterTool', converterTool)
     kwargs.setdefault('TrackParamsEstimationTool', trackEstimationTool)
     kwargs.setdefault('OutputEstimatedTrackParameters', 'ITkPixelEstimatedTrackParams')
-    kwargs.setdefault('UsePixel', True)
     kwargs.setdefault('DetectorElements', 'ITkPixelDetectorElementCollection')
 
     if flags.Acts.doMonitoring:
@@ -228,7 +248,6 @@ def ActsTrkITkStripSeedingCfg(flags,
     kwargs.setdefault('ATLASConverterTool', converterTool)
     kwargs.setdefault('TrackParamsEstimationTool', trackEstimationTool)
     kwargs.setdefault('OutputEstimatedTrackParameters', 'ITkStripEstimatedTrackParams')
-    kwargs.setdefault('UsePixel', False)
     kwargs.setdefault('DetectorElements', 'ITkStripDetectorElementCollection')
 
     if flags.Acts.doMonitoring:
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.cxx b/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.cxx
index c242c28e0ae9d44ce56a5ebbd86a26b5ea514231..52b716cdff9d717c09ea47a4977c0c5f0c20aa66 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.cxx
@@ -31,6 +31,8 @@ namespace ActsTrk {
   
   StatusCode SeedingAlg::initialize() {
     ATH_MSG_INFO( "Initializing " << name() << " ... " );
+    if (m_fastTracking)
+      ATH_MSG_INFO( "   using fast tracking configuration.");
     
     // Retrieve seed tool
     ATH_CHECK( m_seedsTool.retrieve() );
@@ -115,14 +117,15 @@ namespace ActsTrk {
       number_input_space_points += handle->size();
     }
 
-    // TODO: Write some lines to check which SPs you want to use from the input container
-    // At the time being we fill a vector with all SPs available.
+    // Apply selection on which SPs you want to use from the input container
     std::vector<const xAOD::SpacePoint*> selectedSpacePoints;
     selectedSpacePoints.reserve(number_input_space_points);
 
     for (const auto* collection : all_input_collections) {
       for (const auto* sp : *collection) {
-	selectedSpacePoints.push_back( sp );
+        if (m_fastTracking and skipSpacePoint(sp->x()-beamPos.x(), sp->y()-beamPos.y(), sp->z()-beamPos.z()))
+          continue;
+        selectedSpacePoints.push_back( sp );
       }
     }
 	
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.h b/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.h
index eb6dfcc3a568b9348a6fac52f3a16114f469b570..95721fee8cc11871134a41e7c3f66e0bcd29f37f 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/SeedingAlg.h
@@ -65,8 +65,22 @@ namespace ActsTrk {
     SG::WriteHandleKey< ActsTrk::SeedContainer > m_seedKey {this,"OutputSeeds","","Output Seeds"};    
     SG::WriteHandleKey< ActsTrk::BoundTrackParametersContainer > m_actsTrackParamsKey {this, "OutputEstimatedTrackParameters", "", ""};
 
-    Gaudi::Property< bool > m_usePixel {this, "UsePixel", true};
+    Gaudi::Property< bool > m_fastTracking {this, "useFastTracking", false};
+    bool skipSpacePoint(float x, float y, float z) const;
   };
+
+  inline bool SeedingAlg::skipSpacePoint(float x, float y, float z) const {
+    float R = std::hypotf(x,y);
+    // At small R, we remove space points beyond |z|=200
+    if (std::abs(z) > 200. && R < 50.)
+      return true;
+    // We also remove space points beyond eta=4. if their z is larger
+    // than the max seed z0 (150.)
+    float cotTheta = 27.2899;  // (4.0 eta) --> 27.2899 = 1/tan(2*arctan(exp(-4)))
+    if (std::abs(z) - 150. > cotTheta * R)
+      return true;
+    return false;
+  }
   
 } // namespace
 
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.cxx b/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.cxx
index 763264d63a31c521723b4472daad575edf0ed47e..9e715747a25cf2d4bc8ed387582ee67ee44d23e9 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.cxx
@@ -28,6 +28,7 @@
 
 #include "TTree.h"
 
+#include <cmath>
 
 
 namespace ActsTrk {
@@ -45,6 +46,7 @@ namespace ActsTrk {
     ATH_MSG_DEBUG( "   " << m_strip );
     ATH_MSG_DEBUG( "   " << m_useOverlap );
     ATH_MSG_DEBUG( "   " << m_writeNtuple );
+    ATH_MSG_DEBUG( "   " << m_fastTracking );
 
     if (not m_pixel and not m_strip) {
       ATH_MSG_ERROR("Activate seeding on at least one between Pixel and Strip space point collections!");
@@ -133,6 +135,9 @@ namespace ActsTrk {
     r[1] = static_cast<float>(globPos.y());
     r[2] = static_cast<float>(globPos.z());
 
+    if (m_fastTracking and skipSpacePoint(r[0]-data.xbeam[0], r[1]-data.ybeam[0], r[2]-data.zbeam[0]))
+      return;
+
     // adding additional information from strip or pixel
     if (not sp->clusterList().second)
       pixInform(sp, r);
@@ -148,11 +153,27 @@ namespace ActsTrk {
   SiSpacePointsSeedMaker::newSpacePoint(InDet::SiSpacePointsSeedMakerEventData& data,
                                         const xAOD::SpacePoint* const& sp) const
   {
+    if (m_fastTracking and skipSpacePoint(sp->x()-data.xbeam[0], sp->y()-data.ybeam[0], sp->z()-data.zbeam[0]))
+      return;
+
     data.v_ActsSpacePointForSeed.emplace_back(sp);
     data.ns++;
     data.nsaz++;
   }
 
+  bool SiSpacePointsSeedMaker::skipSpacePoint(float x, float y, float z) const {
+    float R = std::hypotf(x,y);
+    // At small R, we remove space points beyond |z|=200
+    if (std::abs(z) > 200. && R < 50.)
+      return true;
+    // We also remove space points beyond eta=4. if their z is larger
+    // than the max seed z0 (150.)
+    float cotTheta = 27.2899;  // (4.0 eta) --> 27.2899 = 1/tan(2*arctan(exp(-4)))
+    if (std::abs(z) - 150. > cotTheta * R)
+      return true;
+    return false;
+  }
+
   void SiSpacePointsSeedMaker::pixInform(const Trk::SpacePoint* const& sp,
 					     float *r)
   {
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.h b/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.h
index be8a046dfe92287e9a6954ad19af4430457bc2c8..253d998ca69c7d03dd8d21b059caa8d70b69175f 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/SiSpacePointsSeedMaker.h
@@ -150,6 +150,7 @@ namespace ActsTrk {
     void
       newSpacePoint(InDet::SiSpacePointsSeedMakerEventData& data,
 		    const xAOD::SpacePoint* const& sp) const;
+    bool skipSpacePoint(float x, float y, float z) const;
     static void pixInform(const Trk::SpacePoint* const& sp,
 			  float* r) ;
     static void stripInform(InDet::SiSpacePointsSeedMakerEventData& data,
@@ -200,7 +201,6 @@ namespace ActsTrk {
     Gaudi::Property< bool > m_doSpacePointConversion {this, "doSpacePointConversion", true, "Convert Trk::SpacePoint container into xAOD::SpacePoint container"};
     Gaudi::Property< bool > m_doSeedConversion {this, "doSeedConversion", true, "Convert ActsTrk::Seed into ITk::SiSpacePointsProSeed"};
 
-
   private:
     // Validation
     Gaudi::Property< bool > m_writeNtuple {this, "WriteNtuple", false};