diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
index 0e88d1e46f6d84ed87bda1b669c9f4ca35aa3ea6..8e540ca737aac8eb8e5f0b10ef9464e26322ee6e 100644
--- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
+++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx
@@ -931,8 +931,19 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const
     m_hitSet.push_back(hitSet.to_ulong());
     if (stationMap.count(1) == 0 || stationMap.count(2) == 0 || stationMap.count(3) == 0) continue;
 
-    const Trk::TrackParameters* upstreamParameters = track->trackParameters()->front();
-    const Trk::TrackParameters* downstreamParameters = track->trackParameters()->back();
+    const DataVector<const Trk::TrackParameters> *trackParameters = track->trackParameters();
+    const Trk::TrackParameters* upstreamParameters = *std::min_element(
+      trackParameters->begin(), trackParameters->end(),
+      [](const Trk::TrackParameters *lhs, const Trk::TrackParameters *rhs) {
+          return lhs->position().z() < rhs->position().z();
+      }
+    );
+    const Trk::TrackParameters* downstreamParameters = *std::max_element(
+      trackParameters->begin(), trackParameters->end(),
+      [](const Trk::TrackParameters *lhs, const Trk::TrackParameters *rhs) {
+          return lhs->position().z() < rhs->position().z();
+      }
+    );
 
     if ((upstreamParameters == nullptr) || (downstreamParameters == nullptr)) continue;
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/CMakeLists.txt b/Tracking/Acts/FaserActsKalmanFilter/CMakeLists.txt
index 874d604249142448e76634c8dac9a8d0ef1db8f5..143f819de580f72b2d390e78390a90e10bd28cb5 100755
--- a/Tracking/Acts/FaserActsKalmanFilter/CMakeLists.txt
+++ b/Tracking/Acts/FaserActsKalmanFilter/CMakeLists.txt
@@ -29,7 +29,7 @@ atlas_add_component(FaserActsKalmanFilter
     CircleFit.h
     CircleFitTrackSeedTool.h
     CKF2.h
-    CKF2Alignment.h
+    # CKF2Alignment.h
     CombinatorialKalmanFilterAlg.h
     EffPlotTool.h
     FASERSourceLink.h
@@ -74,7 +74,7 @@ atlas_add_component(FaserActsKalmanFilter
     src/CircleFit.cxx
     src/CircleFitTrackSeedTool.cxx
     src/CKF2.cxx
-    src/CKF2Alignment.cxx
+    # src/CKF2Alignment.cxx
     src/CreateTrkTrackTool.h
     src/CreateTrkTrackTool.cxx
 #    src/ClusterTrackSeedTool.cxx
diff --git a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/ITrackSeedTool.h b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/ITrackSeedTool.h
index 1ef1a7921bdaa55381ee9487c32b7f58bca3e05c..7a429b3e280d4ae811fcbbee416dc781fa386eb6 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/ITrackSeedTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/FaserActsKalmanFilter/ITrackSeedTool.h
@@ -20,7 +20,7 @@ class ITrackSeedTool : virtual public IAlgTool {
 public:
   DeclareInterfaceID(ITrackSeedTool, 1, 0);
 
-  virtual StatusCode run(std::vector<int> maskedLayers = {}) = 0;
+  virtual StatusCode run(std::vector<int> maskedLayers = {}, bool backward = false) = 0;
   virtual const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const = 0;
   virtual const std::shared_ptr<const Acts::Surface> initialSurface() const = 0;
   virtual const std::shared_ptr<std::vector<IndexSourceLink>> sourceLinks() const = 0;
diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py
index 5d6ed5c4f3170cfc57b058d6bc9432329c1da561..259a665572129d37b359bf51da6ce1ac584fdd28 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py
+++ b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py
@@ -60,16 +60,16 @@ def CKF2Cfg(flags, **kwargs):
     track_seed_tool.TrackCollection = "Segments"
 
     trajectory_states_writer_tool = CompFactory.RootTrajectoryStatesWriterTool()
-    trajectory_states_writer_tool.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    trajectory_states_writer_tool.noDiagnostics = kwargs.get("noDiagnostics", True)
     trajectory_states_writer_tool1 = CompFactory.RootTrajectoryStatesWriterTool()
-    trajectory_states_writer_tool1.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    trajectory_states_writer_tool1.noDiagnostics = kwargs.get("noDiagnostics", True)
     trajectory_states_writer_tool1.FilePath = "track_states_ckf1.root"
 
     trajectory_summary_writer_tool = CompFactory.RootTrajectorySummaryWriterTool()
-    trajectory_summary_writer_tool.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    trajectory_summary_writer_tool.noDiagnostics = kwargs.get("noDiagnostics", True)
     trajectory_summary_writer_tool1 = CompFactory.RootTrajectorySummaryWriterTool()
     trajectory_summary_writer_tool1.FilePath = "track_summary_ckf1.root"
-    trajectory_summary_writer_tool1.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    trajectory_summary_writer_tool1.noDiagnostics = kwargs.get("noDiagnostics", True)
 
     actsExtrapolationTool = CompFactory.FaserActsExtrapolationTool("FaserActsExtrapolationTool")
     actsExtrapolationTool.MaxSteps = 1000
@@ -81,11 +81,11 @@ def CKF2Cfg(flags, **kwargs):
 
     trajectory_performance_writer_tool = CompFactory.PerformanceWriterTool("PerformanceWriterTool")
     trajectory_performance_writer_tool.ExtrapolationTool = actsExtrapolationTool
-    trajectory_performance_writer_tool.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    trajectory_performance_writer_tool.noDiagnostics = kwargs.get("noDiagnostics", True)
 
     ckf = CompFactory.CKF2(**kwargs)
     kalman_fitter1 = CompFactory.KalmanFitterTool(name="fitterTool1")
-    kalman_fitter1.noDiagnostics = kwargs.pop("noDiagnostics", True)
+    kalman_fitter1.noDiagnostics = kwargs.get("noDiagnostics", True)
     kalman_fitter1.ActsLogging = "INFO"
     kalman_fitter1.SummaryWriter = True
     kalman_fitter1.StatesWriter = False
@@ -102,6 +102,7 @@ def CKF2Cfg(flags, **kwargs):
     ckf.PerformanceWriterTool = trajectory_performance_writer_tool
     ckf.TrackingGeometryTool=actsTrackingGeometryTool
     ckf.isMC = flags.Input.isMC
+    ckf.noDiagnostics = kwargs.get("noDiagnostics", True)
     ckf.SummaryWriter = True
     ckf.StatesWriter = False
     ckf.PerformanceWriter = False
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.cxx
index 817fcfea171e76d70d75f49a540e0604f2f52984..0f41f2d91b103980e77494e31d3a4c46530bf1d9 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.cxx
@@ -27,7 +27,7 @@ StatusCode ActsTrackSeedTool::initialize() {
 }
 
 
-StatusCode ActsTrackSeedTool::run(std::vector<int> /*maskedLayers*/) {
+StatusCode ActsTrackSeedTool::run(std::vector<int> /*maskedLayers*/, bool /*backward*/) {
   SG::ReadHandle<TrackCollection> trackCollection {m_trackCollection};
   ATH_CHECK(trackCollection.isValid());
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.h
index 41aebd49ff0c7caf5f5615a47af1641b804b45fb..e957fa8f201ccc095ffed42b2fd78e5e0fb0fce2 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/ActsTrackSeedTool.h
@@ -18,7 +18,7 @@ public:
   virtual ~ActsTrackSeedTool() = default;
   virtual StatusCode initialize() override;
   virtual StatusCode finalize() override;
-  virtual StatusCode run(std::vector<int> /*maskedLayers*/) override;
+  virtual StatusCode run(std::vector<int> /*maskedLayers*/, bool /*backward*/) override;
 
   const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const override;
   const std::shared_ptr<const Acts::Surface> initialSurface() const override;
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
index 14616c6f42dd0e60df67c5b73358da599093130c..81f7a97806ae6df40d8082c18ed9c8d3a63a52a2 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
@@ -97,7 +97,7 @@ StatusCode CKF2::execute() {
   Acts::MagneticFieldContext magFieldContext = getMagneticFieldContext(ctx);
   Acts::CalibrationContext calibContext;
 
-  CHECK(m_trackSeedTool->run(m_maskedLayers));
+  CHECK(m_trackSeedTool->run(m_maskedLayers, m_backwardPropagation));
   std::shared_ptr<const Acts::Surface> initialSurface =
       m_trackSeedTool->initialSurface();
   std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialParameters =
@@ -117,6 +117,11 @@ StatusCode CKF2::execute() {
 
   Acts::PropagatorPlainOptions pOptions;
   pOptions.maxSteps = m_maxSteps;
+  if (m_backwardPropagation) {
+    pOptions.direction = Acts::backward;
+  } else {
+    pOptions.direction = Acts::forward;
+  }
 
   Acts::MeasurementSelector::Config measurementSelectorCfg = {
       {Acts::GeometryIdentifier(), {m_chi2Max, m_nMax}},
@@ -242,7 +247,8 @@ StatusCode CKF2::execute() {
     std::unique_ptr<Trk::Track> track = m_createTrkTrackTool->createTrack(gctx, traj);
     if (track != nullptr) {
       m_numberOfSelectedTracks++;
-      std::unique_ptr<Trk::Track> track2 = m_kalmanFitterTool1->fit(ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC, origin);
+      std::unique_ptr<Trk::Track> track2 = m_kalmanFitterTool1->fit(
+        ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC, origin, m_backwardPropagation);
       if (track2) {
         outputTracks->push_back(std::move(track2));
       } else {
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx
index bbae70e3b10be38ff5de9675796bbe509c8f2483..4fe45004c4e6975069513efd9681b1d9017f4c10 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx
@@ -34,7 +34,8 @@ StatusCode CircleFitTrackSeedTool::initialize() {
 }
 
 
-StatusCode CircleFitTrackSeedTool::run(std::vector<int> maskedLayers) {
+StatusCode CircleFitTrackSeedTool::run(std::vector<int> maskedLayers, bool backward) {
+
   SG::ReadHandle<Tracker::FaserSCT_ClusterContainer> clusterContainer {m_clusterContainerKey};
       ATH_CHECK(clusterContainer.isValid());
 
@@ -114,17 +115,17 @@ StatusCode CircleFitTrackSeedTool::run(std::vector<int> maskedLayers) {
   std::vector<Segment> combination {};
   std::vector<Seed> seeds {};
   // create seeds from four stations
-  go(segments, combination, seeds, 0, 4);
+  go(segments, combination, seeds, 0, 4, backward);
   if (seeds.size() < 2) {
     // create seeds from three stations
-    go(segments, combination, seeds, 0, 3);
+    go(segments, combination, seeds, 0, 3, backward);
   }
   // create seeds from two stations
   if (seeds.size() < 2) {
-    go(segments, combination, seeds, 0, 2);
+    go(segments, combination, seeds, 0, 2, backward);
   }
   if (seeds.size() < 2) {
-    go(segments, combination, seeds, 0, 1);
+    go(segments, combination, seeds, 0, 1, backward);
   }
 
   std::list<Seed> allSeeds;
@@ -163,17 +164,22 @@ StatusCode CircleFitTrackSeedTool::run(std::vector<int> maskedLayers) {
   cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = m_covQOverP;
   cov(Acts::eBoundTime, Acts::eBoundTime) = m_covTime;
 
-  auto minSeed = std::min_element(
-      selectedSeeds.begin(), selectedSeeds.end(), [](const Seed &lhs, const Seed &rhs) {
-        return lhs.minZ < rhs.minZ;
-      });
-  double origin = !selectedSeeds.empty() ? minSeed->minZ - 10 : 0;
+  double origin;
+  if (!backward) {
+    auto minSeed = std::min_element(
+        selectedSeeds.begin(), selectedSeeds.end(), [](const Seed &lhs, const Seed &rhs) {
+          return lhs.minZ < rhs.minZ;
+        });
+    origin = !selectedSeeds.empty() ? minSeed->minZ - 10 : 0;
+  } else {
+    origin = 2470;
+  }
   m_targetZPosition = origin;
   std::vector<Acts::CurvilinearTrackParameters> initParams {};
   ATH_MSG_DEBUG("Sorted seed properties:");
   for (const Seed &seed : selectedSeeds) {
     ATH_MSG_DEBUG("seed size: " << seed.size << ", chi2: " << seed.chi2);
-    initParams.push_back(seed.get_params(origin, cov));
+    initParams.push_back(seed.get_params(origin, cov, backward));
   }
 
   m_initialTrackParameters = std::make_shared<std::vector<Acts::CurvilinearTrackParameters>>(initParams);
@@ -198,15 +204,16 @@ StatusCode CircleFitTrackSeedTool::finalize() {
 void CircleFitTrackSeedTool::go(const std::array<std::vector<Segment>, 4> &v,
                                 std::vector<Segment> &combination,
                                 std::vector<Seed> &seeds,
-                                int offset, int k) {
+                                int offset, int k,
+                                bool backward) {
   if (k == 0) {
-    seeds.push_back(Seed(combination));
+    seeds.push_back(Seed(combination, backward));
     return;
   }
   for (std::size_t i = offset; i < v.size() + 1 - k; ++i) {
     for (const auto& ve : v[i]) {
       combination.push_back(ve);
-      go(v, combination, seeds, i+1, k-1);
+      go(v, combination, seeds, i+1, k-1, backward);
       combination.pop_back();
     }
   }
@@ -242,7 +249,7 @@ CircleFitTrackSeedTool::Segment::Segment(const Trk::Track* track, const FaserSCT
   fakePositions.push_back(position + 30 * momentum.normalized());
 }
 
-CircleFitTrackSeedTool::Seed::Seed(const std::vector<Segment> &segments) :
+CircleFitTrackSeedTool::Seed::Seed(const std::vector<Segment> &segments, bool backward) :
     clusterSet(CircleFitTrackSeedTool::s_indexMap.size()) {
   for (const Segment &seg : segments) {
     clusters.insert(clusters.end(), seg.clusters.begin(), seg.clusters.end());
@@ -261,8 +268,11 @@ CircleFitTrackSeedTool::Seed::Seed(const std::vector<Segment> &segments) :
       } );
   minZ = (*minCluster)->globalPosition().z();
 
-  if (segments.size() > 1) {
+  if ((segments.size() > 1) && (!backward)) {
     direction = positions[1] - positions[0];
+  } else if ((segments.size() > 1) && (backward)) {
+    size_t size = segments.size();
+    direction = positions[size-1] - positions[size-2];
   } else {
     direction = segments[0].momentum;
   }
@@ -324,19 +334,26 @@ double CircleFitTrackSeedTool::Seed::getX(double z) {
 
 void CircleFitTrackSeedTool::Seed::getChi2() {
   chi2 = 0;
-  for (const Acts::Vector3 &pos : fakePositions) {
+  for (const Acts::Vector3 &pos : positions) {
     m_dy = pos.y() - getY(pos.z());
     chi2 += (m_dy * m_dy) / (m_sigma_y * m_sigma_y);
   }
 
   for (const Acts::Vector3 &pos : positions) {
-    m_dx = pos.x() - getX(pos.x());
+    m_dx = pos.x() - getX(pos.z());
     chi2 += (m_dx * m_dx) / (m_sigma_x * m_sigma_x);
   }
 }
 
-Acts::CurvilinearTrackParameters CircleFitTrackSeedTool::Seed::get_params(double origin, Acts::BoundSymMatrix cov) const {
-  Acts::Vector3 pos = positions[0] - (positions[0].z() - origin)/direction.z() * direction;
-  Acts::Vector4 pos4 {pos.x(), pos.y(), pos.z(), 0};
-  return Acts::CurvilinearTrackParameters(pos4, direction.normalized(), momentum, charge, cov);
+Acts::CurvilinearTrackParameters CircleFitTrackSeedTool::Seed::get_params(double origin, Acts::BoundSymMatrix cov, bool backward) const {
+  if (!backward) {
+    Acts::Vector3 pos = positions[0] - (positions[0].z() - origin)/direction.z() * direction;
+    Acts::Vector4 pos4 {pos.x(), pos.y(), pos.z(), 0};
+    return Acts::CurvilinearTrackParameters(pos4, direction.normalized(), momentum, charge, cov);
+  } else {
+    size_t size = positions.size();
+    Acts::Vector3 pos = positions[size-1] + (origin - positions[size-1].z())/direction.z() * direction;
+    Acts::Vector4 pos4 {pos.x(), pos.y(), pos.z(), 0};
+    return Acts::CurvilinearTrackParameters(pos4, direction.normalized(), momentum, charge, cov);
+  }
 }
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.h
index a4d53c629c24f53e1dfe4488ca7524755f117ad3..ea3d0263ac99cd2656c6c6c206de83a16d68b2d0 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.h
@@ -30,7 +30,7 @@ public:
   virtual ~CircleFitTrackSeedTool() = default;
   virtual StatusCode initialize() override;
   virtual StatusCode finalize() override;
-  virtual StatusCode run(std::vector<int> maskedLayers = {}) override;
+  virtual StatusCode run(std::vector<int> maskedLayers = {}, bool backward=false) override;
 
   const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const override;
   const std::shared_ptr<const Acts::Surface> initialSurface() const override;
@@ -56,7 +56,7 @@ private:
   };
 
   struct Seed {
-    Seed(const std::vector<Segment> &segments);
+    Seed(const std::vector<Segment> &segments, bool backward=false);
 
     ClusterSet clusterSet;
     std::vector<const Tracker::FaserSCT_Cluster*> clusters;
@@ -67,7 +67,7 @@ private:
     double c0, c1, cx, cy, r, chi2, momentum, charge, minZ;
     Acts::Vector3 direction;
     size_t size, stations, constraints;
-    Acts::CurvilinearTrackParameters get_params(double origin, Acts::BoundSymMatrix cov) const;
+    Acts::CurvilinearTrackParameters get_params(double origin, Acts::BoundSymMatrix cov, bool backward=false) const;
 
   private:
     void getChi2();
@@ -83,7 +83,7 @@ private:
   };
 
   void go(const std::array<std::vector<Segment>, 4> &v, std::vector<Segment> &combination,
-          std::vector<Seed> &seeds, int offset, int k);
+          std::vector<Seed> &seeds, int offset, int k, bool backward=false);
 
   static std::map<Identifier, Index> s_indexMap;
   static std::map<Identifier, const Tracker::FaserSCT_SpacePoint*> s_spacePointMap;
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx
index c0d02183f5616df5b624152fee61d4c1bf6bba37..a1afd00211b2dd11be9926eb3505690aa65a3561 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx
@@ -365,7 +365,7 @@ resi.push_back({local.x(),local.y(),parameter.position(gctx).x(), parameter.posi
 std::unique_ptr<Trk::Track>
 KalmanFitterTool::fit(const EventContext &ctx, const Acts::GeometryContext &gctx,
                       Trk::Track* inputTrack, const Acts::BoundVector& inputVector,
-                      bool isMC, double origin) const {
+                      bool isMC, double origin, bool backwardPropagation) const {
   std::unique_ptr<Trk::Track> newTrack = nullptr;
   std::vector<FaserActsRecMultiTrajectory> myTrajectories;
 
@@ -396,10 +396,16 @@ KalmanFitterTool::fit(const EventContext &ctx, const Acts::GeometryContext &gctx
   FaserActsOutlierFinder faserActsOutlierFinder{0};
   faserActsOutlierFinder.cluster_z=-1000000.;
   faserActsOutlierFinder.StateChiSquaredPerNumberDoFCut=10000.;
+  Acts::PropagatorPlainOptions pOptions;
+  if (backwardPropagation) {
+    pOptions.direction = Acts::backward;
+  } else {
+    pOptions.direction = Acts::forward;
+  }
   Acts::KalmanFitterOptions<MeasurementCalibrator, FaserActsOutlierFinder, Acts::VoidReverseFilteringLogic>
       kfOptions(gctx, mfContext, calibContext, MeasurementCalibrator(measurements),
                 faserActsOutlierFinder, Acts::VoidReverseFilteringLogic(), Acts::LoggerWrapper{*m_logger},
-                Acts::PropagatorPlainOptions(), &(*pSurface));
+                pOptions, &(*pSurface));
   kfOptions.multipleScattering = false;
   kfOptions.energyLoss = false;
 
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h
index 584cda2c98bf32d7050150a690a0926439e11f91..759a456be7da12fbab592220f661a8dba769d6a8 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h
@@ -90,7 +90,7 @@ public:
   std::unique_ptr<Trk::Track> fit(const EventContext &ctx, const Acts::GeometryContext &gctx,
                                   Trk::Track *inputTrack,
                                   const Acts::BoundVector& inputVector = Acts::BoundVector::Zero(),
-                                  bool isMC=false, double origin=0) const;
+                                  bool isMC=false, double origin=0, bool backwardPropagation=false) const;
   std::vector<TSOS4Residual> getUnbiasedResidual(const EventContext &ctx, const Acts::GeometryContext &gctx,
                                   Trk::Track *inputTrack,
                                   const Acts::BoundVector& inputVector = Acts::BoundVector::Zero(),
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.cxx
index b5a5e04895ed443cb4e868c4ce722ac45fe65f2f..4477735faf87c0132a1453430c1e35b9553bb81e 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.cxx
@@ -26,7 +26,7 @@ StatusCode MyTrackSeedTool::initialize() {
 }
 
 
-StatusCode MyTrackSeedTool::run(std::vector<int> /*maskedLayers*/) {
+StatusCode MyTrackSeedTool::run(std::vector<int> /*maskedLayers*/, bool /*backward*/) {
 
   // create track seeds for multiple tracks
   SG::ReadHandle<TrackCollection> trackCollection {m_trackCollection};
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.h
index df545c34abfd37e8b778a0c0be5b23852dbb7b7b..26e857b7b48648a6cc5557c5d5001a3d059242cb 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/MyTrackSeedTool.h
@@ -25,7 +25,7 @@ public:
   virtual ~MyTrackSeedTool() = default;
   virtual StatusCode initialize() override;
   virtual StatusCode finalize() override;
-  virtual StatusCode run(std::vector<int> /*maskedLayers*/) override;
+  virtual StatusCode run(std::vector<int> /*maskedLayers*/, bool /*backward*/) override;
 
   const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const override;
   const std::shared_ptr<const Acts::Surface> initialSurface() const override;
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.cxx
index 15db300108f9090ba35c6b09ddc66a9b6cf7513a..65d15e723a54427eb35fdfbc330458cd29279cee 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.cxx
@@ -23,7 +23,7 @@ StatusCode ThreeStationTrackSeedTool::initialize() {
 }
 
 
-StatusCode ThreeStationTrackSeedTool::run(std::vector<int> /*maskedLayers*/) {
+StatusCode ThreeStationTrackSeedTool::run(std::vector<int> /*maskedLayers*/, bool /*backward*/) {
   // create track seeds for multiple tracks
   SG::ReadHandle<TrackCollection> trackCollection {m_trackCollection};
   ATH_CHECK(trackCollection.isValid());
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.h
index deab07bb12c5b061376975ba5d984f95b15da71e..7c4c521b8eedd6bdd753b95e45ae98cde6176b73 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/ThreeStationTrackSeedTool.h
@@ -23,7 +23,7 @@ public:
   virtual ~ThreeStationTrackSeedTool() = default;
   virtual StatusCode initialize() override;
   virtual StatusCode finalize() override;
-  virtual StatusCode run(std::vector<int> /*maskedLayers*/) override;
+  virtual StatusCode run(std::vector<int> /*maskedLayers*/, bool /*backward*/) override;
 
   const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const override;
   const std::shared_ptr<const Acts::Surface> initialSurface() const override;
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/components/FaserActsKalmanFilter_entries.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/components/FaserActsKalmanFilter_entries.cxx
index be32f4959409c57903c674bf7fd5d28209ad295d..41fd700702bd99ab6bf8322e511ae86bbb9370ae 100755
--- a/Tracking/Acts/FaserActsKalmanFilter/src/components/FaserActsKalmanFilter_entries.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/components/FaserActsKalmanFilter_entries.cxx
@@ -23,7 +23,7 @@
 #include "../TrackSeedWriterTool.h"
 #include "../ActsTrackSeedTool.h"
 #include "../CKF2.h"
-#include "../CKF2Alignment.h"
+// #include "../CKF2Alignment.h"
 #include "../KalmanFitterTool.h"
 #include "../MyTrackSeedTool.h"
 #include "../SeedingAlg.h"
@@ -54,7 +54,7 @@ DECLARE_COMPONENT(PerformanceWriterTool)
 DECLARE_COMPONENT(TrackSeedWriterTool)
 DECLARE_COMPONENT(ActsTrackSeedTool)
 DECLARE_COMPONENT(CKF2)
-DECLARE_COMPONENT(CKF2Alignment)
+// DECLARE_COMPONENT(CKF2Alignment)
 DECLARE_COMPONENT(KalmanFitterTool)
 DECLARE_COMPONENT(MyTrackSeedTool)
 DECLARE_COMPONENT(SeedingAlg)