diff --git a/InnerDetector/InDetConfig/python/ITkConfigFlags.py b/InnerDetector/InDetConfig/python/ITkConfigFlags.py
index 10c525b346bbc08f9ce4aa501e91d07cdb6f7120..352b6b8d41be015cdab50d065f8d259938b68513 100644
--- a/InnerDetector/InDetConfig/python/ITkConfigFlags.py
+++ b/InnerDetector/InDetConfig/python/ITkConfigFlags.py
@@ -61,6 +61,7 @@ def createITkConfigFlags():
   itkcf.addFlag("ITk.Tracking.writeExtendedPRDInfo", False)
   # Turn running of doLowPt second pass on and off
   itkcf.addFlag("ITk.Tracking.doLowPt", False)
+  itkcf.addFlag("ITk.Tracking.useFTF", False) # Allows TrigFastTrackFinder to be run as an offline algorithm by replacing SiSPSeededTrackFinder
 
   
   # config flags for tracking geometry configuration
diff --git a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
index 155a27ef36a739fa9e07345c501041c62708a185..04aaad855f144aabdefedfd5d6ec0e371835bb1d 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
@@ -17,7 +17,10 @@ def CombinedTrackingPassFlagSets(flags):
     flags_set = []
 
     # Primary Pass
-    if flags.ITk.Tracking.doFastTracking:
+    if flags.ITk.Tracking.useFTF:
+        flags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig", 
+                                      "ITk.Tracking.FTFPass")
+    elif flags.ITk.Tracking.doFastTracking:
         flags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig",
                                       "ITk.Tracking.FastPass")
     else:
diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
index 7a34fea7ef293c452ddf7ccc22cbaec9ad6932ae..868264e5b8515afb5c8e244133186e1069b50529 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
@@ -24,55 +24,69 @@ def ITkTrackingSiPatternCfg(flags,
             flags.ITk.Tracking.ActiveConfig.extension,
             TracksName = list(InputCollections)))
 
-    # ------------------------------------------------------------
-    #
-    # ----------- SiSPSeededTrackFinder
-    #
-    # ------------------------------------------------------------
+    if flags.ITk.Tracking.useFTF: # Can use FastTrackFinder instead of SiSPSeededTrackFinder
 
-    #
-    # --- Deducing configuration from the flags 
-    #
-    from ActsInterop.TrackingComponentConfigurer import (
-        TrackingComponentConfigurer)
-    configuration_settings = TrackingComponentConfigurer(flags)
+        # ------------------------------------------------------------
+        #
+        # ----------- FastTrackFinder
+        #
+        # ------------------------------------------------------------
 
-    # Athena Track
-    if configuration_settings.doAthenaTrack:
+        from TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig import(
+            ITkFastTrackFinderStandaloneCfg)
+        acc.merge(ITkFastTrackFinderStandaloneCfg(flags, SiSPSeededTrackCollectionKey))
 
-        from InDetConfig.SiSPSeededTrackFinderConfig import (
-            ITkSiSPSeededTrackFinderCfg)
-        SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderCfg
-        if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding":
-            from InDetConfig.SiSPSeededTrackFinderConfig import ITkSiSPSeededTrackFinderROIConvCfg
-            SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderROIConvCfg
+    else:
 
-        acc.merge(SiSPSeededTrackFinderCfg(
-            flags,
-            TracksLocation = SiSPSeededTrackCollectionKey))
+        # ------------------------------------------------------------
+        #
+        # ----------- SiSPSeededTrackFinder
+        #
+        # ------------------------------------------------------------
 
-    # ACTS seed
-    if configuration_settings.doActsSeed:
+        #
+        # --- Deducing configuration from the flags 
+        #
+        from ActsInterop.TrackingComponentConfigurer import (
+            TrackingComponentConfigurer)
+        configuration_settings = TrackingComponentConfigurer(flags)
 
-        from ActsTrkSeeding.ActsTrkSeedingConfig import (
-            ActsTrkSeedingCfg)
-        acc.merge(ActsTrkSeedingCfg(flags))
-        
-        if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding":
-            from AthenaCommon.Logging import logging 
-            log = logging.getLogger( 'ITkTrackingSiPattern' )
-            log.warning('ROI-based track-finding is not available yet in ACTS, so the default one is used')
+        # Athena Track
+        if configuration_settings.doAthenaTrack:
 
-    # ACTS track
-    if configuration_settings.doActsTrack:
+            from InDetConfig.SiSPSeededTrackFinderConfig import (
+                ITkSiSPSeededTrackFinderCfg)
+            SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderCfg
+            if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding":
+                from InDetConfig.SiSPSeededTrackFinderConfig import ITkSiSPSeededTrackFinderROIConvCfg
+                SiSPSeededTrackFinderCfg = ITkSiSPSeededTrackFinderROIConvCfg
 
-        from ActsTrkFinding.ActsTrkFindingConfig import ActsTrkFindingCfg
-        if configuration_settings.doAthenaTrack:
-            acc.merge(ActsTrkFindingCfg(flags))
-        else: # send output TrackCollection to Athena ambiguity scorer etc
-            acc.merge(ActsTrkFindingCfg(
+            acc.merge(SiSPSeededTrackFinderCfg(
                 flags,
-                TracksLocation=SiSPSeededTrackCollectionKey))
+                TracksLocation = SiSPSeededTrackCollectionKey))
+
+        # ACTS seed
+        if configuration_settings.doActsSeed:
+
+            from ActsTrkSeeding.ActsTrkSeedingConfig import (
+                ActsTrkSeedingCfg)
+            acc.merge(ActsTrkSeedingCfg(flags))
+            
+            if flags.ITk.Tracking.ActiveConfig.extension == "ConversionFinding":
+                from AthenaCommon.Logging import logging 
+                log = logging.getLogger( 'ITkTrackingSiPattern' )
+                log.warning('ROI-based track-finding is not available yet in ACTS, so the default one is used')
+
+        # ACTS track
+        if configuration_settings.doActsTrack:
+
+            from ActsTrkFinding.ActsTrkFindingConfig import ActsTrkFindingCfg
+            if configuration_settings.doAthenaTrack:
+                acc.merge(ActsTrkFindingCfg(flags))
+            else: # send output TrackCollection to Athena ambiguity scorer etc
+                acc.merge(ActsTrkFindingCfg(
+                    flags,
+                    TracksLocation=SiSPSeededTrackCollectionKey))
 
     from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
     if flags.Tracking.doTruth:
@@ -118,4 +132,3 @@ def ITkTrackingSiPatternCfg(flags,
             TracksTruth = ResolvedTrackCollectionKey+"TruthCollection"))
 
     return acc
-
diff --git a/InnerDetector/InDetConfig/python/TrackingPassFlags.py b/InnerDetector/InDetConfig/python/TrackingPassFlags.py
index 1f536331e99449191e3a72790885349c8c77180f..9d850b021017c2e09fd73ec0e2c2f24035dd1f87 100644
--- a/InnerDetector/InDetConfig/python/TrackingPassFlags.py
+++ b/InnerDetector/InDetConfig/python/TrackingPassFlags.py
@@ -452,9 +452,10 @@ def createITkFastTrackingPassFlags():
 ### ITk with FTF standalone mode ####
 def createITkFTFPassFlags():
 
-    icf = createITkTrackingPassFlags()
-
-    icf.extension = "_FTF"
+    icf = createITkFastTrackingPassFlags()
+    
+    icf.minPT                 = [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV]
+    icf.minPTSeed             = 0.9 * Units.GeV
 
     return icf
 
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh
index d4cbca51c0bb9f7a09f6b4e3cc58d3a2dcee6f9d..c8ba8cf49e56ef91574d90f2bf7c2ffc82d71b1a 100755
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_mu100_FTF.sh
@@ -60,8 +60,7 @@ run "Reconstruction" \
     --outputAODFile AOD.root \
     --steering doRAWtoALL \
     --preInclude InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude \
-    --postInclude TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig.ITkFastTrackFinderStandaloneCfg \
-    --preExec "ConfigFlags.ITk.Tracking.doFastTracking=True"
+    --preExec "ConfigFlags.ITk.Tracking.useFTF=True"
 
 run "IDPVM" \
     runIDPVM.py \
@@ -69,8 +68,7 @@ run "IDPVM" \
     --outputFile idpvm.root \
     --doHitLevelPlots \
     --doExpertPlots \
-    --truthMinPt=1000 \
-    --validateExtraTrackCollections {'TrigFastTrackFinder_FTF_','TrigFastTrackFinder_IDTrig_'}
+    --truthMinPt=1000
 
 reco_rc=$?
 if [ $reco_rc != 0 ]; then
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh
index 05ebb1be7f8f3da3708ded84b4ea02c273cd6917..4a10d01a630c63065775d82220ee694575ddfb5c 100755
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/test/test_run4_ttbar_PU200_FTF.sh
@@ -31,8 +31,7 @@ run "Reconstruction" \
     --outputAODFile AOD.root \
     --steering doRAWtoALL \
     --preInclude InDetConfig.ConfigurationHelpers.OnlyTrackingPreInclude \
-    --postInclude TrigFastTrackFinder.ITkFastTrackFinderStandaloneConfig.ITkFastTrackFinderStandaloneCfg \
-    --preExec "ConfigFlags.ITk.Tracking.doFastTracking=True"
+    --preExec "ConfigFlags.ITk.Tracking.useFTF=True"
 
 
 run "IDPVM" \
@@ -42,7 +41,7 @@ run "IDPVM" \
     --doHitLevelPlots \
     --doExpertPlots \
     --truthMinPt=1000 \
-    --validateExtraTrackCollections {'TrigFastTrackFinder_FTF_','TrigFastTrackFinder_IDTrig_'}
+    --doMuonMatchedTracks
 
 reco_rc=$?
 if [ $reco_rc != 0 ]; then
diff --git a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py
index c3876e3cc7478d1818594ac3a26918350f183108..5f1e326a3f114aae900c479d405bf7c83aec2428 100644
--- a/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py
+++ b/Trigger/TrigAlgorithms/TrigFastTrackFinder/python/ITkFastTrackFinderStandaloneConfig.py
@@ -2,27 +2,22 @@
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 
-def ITkFastTrackFinderStandaloneCfg(flags):
+def ITkFastTrackFinderStandaloneCfg(flags, SiSPSeededTrackCollectionKey = None):
     acc = ComponentAccumulator()
 
-    newflags = flags.cloneAndReplace("ITk.Tracking.ActiveConfig", "ITk.Tracking.FTFPass")
-    
-    ResolvedTrackCollectionKey = 'TrigFastTrackFinder_IDTrig_Tracks'
-    SiSPSeededTrackCollectionKey = 'TrigFastTrackFinder_FTF_Tracks'
-
-    from TrkConfig.TrkTrackSummaryToolConfig import ITkTrackSummaryToolCfg
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(newflags, name = "ITkTrackSummaryTool_FTF", doHolesInDet = False))
+    from TrkConfig.TrkTrackSummaryToolConfig import ITkTrackSummaryToolNoHoleSearchCfg
+    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolNoHoleSearchCfg(flags))
     acc.addPublicTool(ITkTrackSummaryTool)
-    
+
     from InDetConfig.SiTrackMakerConfig import ITkSiTrackMaker_xkCfg
-    ITkSiTrackMakerTool = acc.popToolsAndMerge( ITkSiTrackMaker_xkCfg( newflags, name = "ITkTrigSiTrackMaker_FTF" ) )
+    ITkSiTrackMakerTool = acc.popToolsAndMerge(ITkSiTrackMaker_xkCfg(flags))
     acc.addPublicTool(ITkSiTrackMakerTool)
 
     acc.addPublicTool( CompFactory.TrigInDetTrackFitter( "TrigInDetTrackFitter" ) )
 
     from RegionSelector.RegSelToolConfig import (regSelTool_ITkStrip_Cfg, regSelTool_ITkPixel_Cfg)
-    pixRegSelTool = acc.popToolsAndMerge( regSelTool_ITkPixel_Cfg( newflags) )
-    sctRegSelTool = acc.popToolsAndMerge( regSelTool_ITkStrip_Cfg( newflags) )
+    pixRegSelTool = acc.popToolsAndMerge( regSelTool_ITkPixel_Cfg(flags) )
+    sctRegSelTool = acc.popToolsAndMerge( regSelTool_ITkStrip_Cfg(flags) )
     
     acc.addPublicTool( CompFactory.TrigL2LayerNumberToolITk( name = "TrigL2LayerNumberTool_FTF",UseNewLayerScheme = True) )
 
@@ -38,7 +33,7 @@ def ITkFastTrackFinderStandaloneCfg(flags):
 
     from TrigFastTrackFinder.TrigFastTrackFinderConfig import TrigFastTrackFinderMonitoringArg
     from TriggerJobOpts.TriggerHistSvcConfig import TriggerHistSvcConfig
-    acc.merge(TriggerHistSvcConfig(newflags))
+    acc.merge(TriggerHistSvcConfig(flags))
     monTool = TrigFastTrackFinderMonitoringArg(flags, name = "FullScan", doResMon=False)
     
     ftf = CompFactory.TrigFastTrackFinder( name = "TrigFastTrackFinder_",
@@ -52,90 +47,22 @@ def ITkFastTrackFinderStandaloneCfg(flags):
                                             SeedRadBinWidth          = 10,
                                             TrackInitialD0Max        = 20.0,
                                             TracksName               = SiSPSeededTrackCollectionKey,
-                                            TripletDoPSS             = False,
                                             Triplet_D0Max            = 4,
-                                            Triplet_D0_PPS_Max       = 1.7,
                                             Triplet_MaxBufferLength  = 1,
                                             Triplet_MinPtFrac        = 0.7,
-                                            Triplet_nMaxPhiSlice     = 53,
-                                            doCloneRemoval           = True,
                                             UseTrigSeedML            = 1,
                                             doResMon                 = False,
                                             doSeedRedundancyCheck    = True,
-                                            pTmin                    = 1000.0,
+                                            pTmin                    = flags.ITk.Tracking.ActiveConfig.minPT[0],
                                             useNewLayerNumberScheme  = True,
-                                            UseEtaBinning            = True,
-                                            MinHits                  = 5,
-                                            useGPU                   = False,
-                                            DoubletDR_Max            = 270,
+                                            MinHits                  = 3,
                                             ITkMode                  = True, # Allows ftf to use the new TrigTrackSeedGenerator for ITk
-                                            StandaloneMode           = True,
+                                            StandaloneMode           = True, # Allows ftf to be run as an offline algorithm with reco_tf
                                             doTrackRefit             = False,
-                                            MonTool                  = monTool) # Allows ftf to be run as an offline algorithm with reco_tf
+                                            FreeClustersCut          = 1,
+                                            MonTool                  = monTool)
 
     acc.addEventAlgo( ftf, primary=True )
-
-    if newflags.Tracking.doTruth:
-        from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
-        acc.merge(ITkTrackTruthCfg(newflags,
-                                        Tracks=SiSPSeededTrackCollectionKey,
-                                        DetailedTruth = SiSPSeededTrackCollectionKey+"DetailedTruth",
-                                        TracksTruth = SiSPSeededTrackCollectionKey+"TruthCollection"))
-
-    from xAODTrackingCnv.xAODTrackingCnvConfig import ITkTrackParticleCnvAlgCfg
-    acc.merge(ITkTrackParticleCnvAlgCfg(newflags,
-                                        name = "ITkTrackParticleCnvAlg_FTF",
-                                        TrackContainerName = SiSPSeededTrackCollectionKey,
-                                        xAODTrackParticlesFromTracksContainerName = 'TrigFastTrackFinder_FTF_TrackParticles'))
-
-    # ------------------------------------------------------------
-    #
-    # ---------- Ambiguity solving
-    #
-    # ------------------------------------------------------------
-    
-    from TrkConfig.TrkAmbiguitySolverConfig import ITkTrkAmbiguityScoreCfg
-
-    acc.merge(ITkTrkAmbiguityScoreCfg( newflags,
-                                       name = "ITkTrkAmbiguityScore_FTF",
-                                       SiSPSeededTrackCollectionKey = SiSPSeededTrackCollectionKey))
-
-    from TrkConfig.TrkAmbiguitySolverConfig import ITkTrkAmbiguitySolverCfg
-    acc.merge(ITkTrkAmbiguitySolverCfg(newflags,
-                                        name = "ITkTrkAmbiguitySolver_FTF",
-                                        ResolvedTrackCollectionKey = ResolvedTrackCollectionKey))
-
-    # ------------------------------------------------------------
-    #
-    # ---------- Selecting associated truth tracks
-    #
-    # ------------------------------------------------------------
-
-    if newflags.Tracking.doTruth:
-        from InDetConfig.ITkTrackTruthConfig import ITkTrackTruthCfg
-        acc.merge(ITkTrackTruthCfg(newflags,
-                                        Tracks=ResolvedTrackCollectionKey,
-                                        DetailedTruth = ResolvedTrackCollectionKey+"DetailedTruth",
-                                        TracksTruth = ResolvedTrackCollectionKey+"TruthCollection"))
-
-    acc.merge(ITkTrackParticleCnvAlgCfg(newflags,
-                                        name = "ITkTrackParticleCnvAlg_IDTrig",
-                                        TrackContainerName = ResolvedTrackCollectionKey,
-                                        xAODTrackParticlesFromTracksContainerName = 'TrigFastTrackFinder_IDTrig_TrackParticles'))
-
-    # ------------------------------------------------------------
-    #
-    # ---------- Save tracks to AOD
-    #
-    # ------------------------------------------------------------
-
-    from OutputStreamAthenaPool.OutputStreamConfig import addToESD,addToAOD
-    toAOD = ["xAOD::TrackParticleContainer#TrigFastTrackFinder_FTF_TrackParticles"]
-    toAOD += ["xAOD::TrackParticleAuxContainer#TrigFastTrackFinder_FTF_TrackParticlesAux."]
-    toAOD += ["xAOD::TrackParticleContainer#TrigFastTrackFinder_IDTrig_TrackParticles"]
-    toAOD += ["xAOD::TrackParticleAuxContainer#TrigFastTrackFinder_IDTrig_TrackParticlesAux."]
-    acc.merge(addToAOD(newflags, toAOD))
-    acc.merge(addToESD(newflags, toAOD))
     
     return acc