diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TruthSeededTrackFinderTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TruthSeededTrackFinderTool.cxx
index 26319ebf37a4b7eff98ec784c9031c3eee945a29..4a574ee970e5dc9ccc67dcdd94143b2df20d1114 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/TruthSeededTrackFinderTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/TruthSeededTrackFinderTool.cxx
@@ -67,7 +67,9 @@ StatusCode TruthSeededTrackFinderTool::run() {
     // const Acts::Surface *surface = m_trackingGeometryTool->trackingGeometry()->findSurface(geoId);
 
     auto par = spacePoint->localParameters();
+    ATH_MSG_DEBUG("par " << par);
     auto cov = spacePoint->localCovariance();
+    ATH_MSG_DEBUG("cov " << cov);
     ATH_MSG_DEBUG(cov(0, 0) << ", " << cov(0, 1) << ", " << cov(1, 0) << ", " << cov(1, 1));
     Acts::ActsSymMatrix<2> myCov = Acts::ActsSymMatrix<2>::Zero();
     myCov(0, 0) = m_covMeas00;
@@ -99,6 +101,12 @@ StatusCode TruthSeededTrackFinderTool::run() {
     }
   }
 
+  // check if there is atleast one space point in each station
+
+  if (map2vector(spacePoints, 1).empty() || map2vector(spacePoints, 2).empty() || map2vector(spacePoints, 0).empty()) {
+    return StatusCode::RECOVERABLE;
+  }
+
   Acts::Vector4 smearedPosition4;
   Acts::Vector3 smearedDirection;
   double smearedAbsoluteMomentum;
@@ -131,15 +139,10 @@ StatusCode TruthSeededTrackFinderTool::run() {
         smearedAbsoluteMomentum = abs_momentum * (1 + m_sigmaP * norm(rng));
 
         smearedPosition4 = Acts::Vector4(vertex.x() + m_sigmaLoc0 * norm(rng), vertex.y() + m_sigmaLoc1 * norm(rng), vertex.z(), 0);
-        ATH_MSG_DEBUG("?? position: x=" << vertex.x() << ", y=" << vertex.y() << ", z=" << vertex.z());
-        ATH_MSG_DEBUG("?? smeared position: x=" << smearedDirection.x() << ", y=" << smearedDirection.y() << ", z=" << smearedDirection.z());
-        ATH_MSG_DEBUG("?? direction: x=" << direction.x() << ", y=" << direction.y() << ", z=" << direction.z());
-        ATH_MSG_DEBUG("?? smeared direction: x=" << smearedDirection.x() << ", y=" << smearedDirection.y() << ", z=" << smearedDirection.z());
       }
     }
   } else {
     // get initial parameters from track seed
-    // TODO convert momentum to GeV?
     auto [p, q] = momentum2(spacePoints);
     double abs_momentum = p;
     charge = q;
@@ -150,8 +153,12 @@ StatusCode TruthSeededTrackFinderTool::run() {
       ATH_MSG_ERROR("Could not find space point on first layer");
     }
     smearedPosition4 = Acts::Vector4(initPos.x(), initPos.y(), initPos.z(), 0);
-    auto [pos, dir] = linear_fit(map2vector(spacePoints, 1));
-    smearedDirection = dir;
+
+    auto [pos1, dir1] = linear_fit(map2vector(spacePoints, 1));
+    auto [pos2, dir2] = linear_fit(map2vector(spacePoints, 2));
+    smearedDirection = pos2 - pos1;
+//    smearedDirection = dir;
+    smearedAbsoluteMomentum = p;
   }
 
   Acts::BoundSymMatrix cov = Acts::BoundSymMatrix::Zero();
@@ -193,7 +200,7 @@ Acts::Vector3 TruthSeededTrackFinderTool::average(const std::vector<Acts::Vector
     for (const Acts::Vector3& spacePoint : spacePoints) {
       ret += spacePoint;
     }
-    ret / spacePoints.size();
+    ret /= spacePoints.size();
   }
   return ret;
 }
@@ -227,19 +234,19 @@ TruthSeededTrackFinderTool::map2vector(const std::map<int, Acts::Vector3>& map,
 
 
 std::pair<double, double> TruthSeededTrackFinderTool::momentum2(const std::map<int, Acts::Vector3>& hits, double B) {
-  Acts::Vector3 pos1 = average(map2vector(hits, 1));
-  Acts::Vector3 pos2 = average(map2vector(hits, 2));
-  Acts::Vector3 pos3 = average(map2vector(hits, 3));
+  Acts::Vector3 pos1 = average(map2vector(hits, 0));
+  Acts::Vector3 pos2 = average(map2vector(hits, 1));
+  Acts::Vector3 pos3 = average(map2vector(hits, 2));
 
   Acts::Vector3 vec_l = pos3 - pos1;
   double abs_l = std::sqrt(vec_l.y() * vec_l.y() + vec_l.z() * vec_l.z());
-  double t = double (pos2.z() - pos1.z()) / (pos3.z() - pos1.z());
-  Amg::Vector3D vec_m = pos1 + t * vec_l;
-  Amg::Vector3D vec_s = pos2 - vec_m;
-
+  double t = (pos2.z() - pos1.z()) / (pos3.z() - pos1.z());
+  Acts::Vector3 vec_m = pos1 + t * vec_l;
+  Acts::Vector3 vec_s = pos2 - vec_m;
   double abs_s = std::sqrt(vec_s.y() * vec_s.y() + vec_s.z() * vec_s.z());
-  double p_yz = 0.3 * abs_l * abs_l * B / (8 * abs_s);
-  double charge = vec_s.y() < 0 ? 1 : -1;
+  double p_yz = 0.3 * abs_l * abs_l * B / (8 * abs_s * 1000); // in GeV
+  // double charge = vec_s.y() < 0 ? 1 : -1;
+  double charge = 1;
 
   return std::make_pair(p_yz, charge);
 }