diff --git a/Projects/Athena/build_externals.sh b/Projects/Athena/build_externals.sh
index 5072f561d131a972689a9b6f145479e2830b5c10..5896722a80c9f7f7c42bf9c18f80d12bd588f3bf 100755
--- a/Projects/Athena/build_externals.sh
+++ b/Projects/Athena/build_externals.sh
@@ -12,7 +12,7 @@ ATLAS_BUILDTYPE="Release"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=106
                         -DLCG_VERSION_POSTFIX="a_ATLAS_5"
                         -DATLAS_GAUDI_SOURCE="URL;https://gitlab.cern.ch/atlas/Gaudi/-/archive/v39r1.001/Gaudi-v39r1.001.tar.gz;URL_MD5;ac2bdcde14c2feb7684e34d6e7879db8"
-                        -DATLAS_ACTS_SOURCE="URL;https://github.com/acts-project/acts/archive/refs/tags/v37.4.0.tar.gz;URL_HASH;SHA256=8f5a035a8c62406550df5e645d144200f956a43a073c45cdf743977162593ebc"
+                        -DATLAS_ACTS_SOURCE="URL;https://github.com/acts-project/acts/archive/refs/tags/v38.0.0.tar.gz;URL_HASH;SHA256=3ac1ff893c46fdb054f290704bdbe845b03e2954e12b1e5ace9a65302fb034b4"
                         -DATLAS_GEOMODEL_SOURCE="URL;https://gitlab.cern.ch/GeoModelDev/GeoModel/-/archive/6.6.0/GeoModel-6.6.0.tar.bz2;URL_MD5;66c32047090b20afb75cd5befefce78a"
                         -DATLAS_VECMEM_SOURCE="URL;http://cern.ch/atlas-software-dist-eos/externals/vecmem/v1.5.0.tar.gz;https://github.com/acts-project/vecmem/archive/refs/tags/v1.5.0.tar.gz;URL_MD5;3cc5a3bb14b93f611513535173a6be28"
                         -DATLAS_GEANT4_USE_LTO=TRUE
diff --git a/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py b/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
index 48b7a2dbcfb85e27e4bc99b42d4dac0ff36fc70d..bf405b3e22d3699e9694c0d62555854b9f0156d4 100644
--- a/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
@@ -265,9 +265,16 @@ def ActsMainScoreBasedAmbiguityResolutionAlgCfg(flags,
     kwargs.setdefault('PhiMax', M_PI)
     kwargs.setdefault('EtaMin', -5.0)
     kwargs.setdefault('EtaMax', 5.0)
-    kwargs.setdefault('UseAmbiguityFunction', False)
+    kwargs.setdefault('UseAmbiguityFunction', True)
     kwargs.setdefault('jsonFileName', 'ActsAmbiguityConfig.json')
 
+    if 'InDetEtaDependentCutsSvc' not in kwargs:
+        from InDetConfig.InDetEtaDependentCutsConfig import (
+            ITkEtaDependentCutsSvcCfg)
+        acc.merge(ITkEtaDependentCutsSvcCfg(flags))
+        kwargs.setdefault("InDetEtaDependentCutsSvc", acc.getService(
+            "ITkEtaDependentCutsSvc"+flags.Tracking.ActiveConfig.extension))
+
     if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
         from ActsConfig.ActsMonitoringConfig import ActsAmbiguityResolutionMonitoringToolCfg
         kwargs.setdefault('MonTool', acc.popToolsAndMerge(
diff --git a/Tracking/Acts/ActsConfig/share/ActsAmbiguityConfig.json b/Tracking/Acts/ActsConfig/share/ActsAmbiguityConfig.json
index 80707bcd9f6447da5cce368504e0748398f11d65..bde1720e1fcb2914ee627f884aaee540dae280c4 100644
--- a/Tracking/Acts/ActsConfig/share/ActsAmbiguityConfig.json
+++ b/Tracking/Acts/ActsConfig/share/ActsAmbiguityConfig.json
@@ -6,7 +6,7 @@
 		"outliersScoreWeight": -2,
 		"otherScoreWeight": 0,
 		"minHits": 0,
-		"maxHits": 24,
+		"maxHits": 8,
 		"maxHoles": 2,
 		"maxOutliers": 10,
 		"maxSharedHits": 3,
@@ -24,7 +24,7 @@
 		"outliersScoreWeight": -2,
 		"otherScoreWeight": 0,
 		"minHits": 0,
-		"maxHits": 24,
+		"maxHits": 8,
 		"maxHoles": 5,
 		"maxOutliers": 10,
 		"maxSharedHits": 3,
diff --git a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCounts.ref b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCounts.ref
index 391db61e81da7793d3254d4d18723eca059dc221..d37f0944353b3d35f14d20946c6d040175e8831e 100644
--- a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCounts.ref
+++ b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCounts.ref
@@ -37,13 +37,13 @@ ActsTrackFindingAlg                                               INFO statistic
 |-----------------------------------|------------|------------|------------|
 | Input seeds                       |     123542 |      24791 |     148333 |
 | No track parameters               |          0 |          0 |          0 |
-| Used   seeds                      |      78109 |      15624 |      93733 |
-| Cannot find track                 |      63304 |      11860 |      75164 |
-| Duplicate seeds                   |      45433 |       9167 |      54600 |
-| CKF tracks                        |      14805 |       3764 |      18569 |
+| Used   seeds                      |      78109 |      15627 |      93736 |
+| Cannot find track                 |      63305 |      11860 |      75165 |
+| Duplicate seeds                   |      45433 |       9164 |      54597 |
+| CKF tracks                        |      14804 |       3767 |      18571 |
 | Rejected refined parameters       |          0 |          0 |          0 |
-| selected tracks                   |      13383 |        831 |      14214 |
-| Stopped tracks reaching max holes |      60890 |      11366 |      72256 |
+| selected tracks                   |      13383 |        832 |      14215 |
+| Stopped tracks reaching max holes |      60891 |      11366 |      72257 |
 | Seeds with more than one branch   |          0 |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |          0 |
 | Stopped tracks below pT cut       |       2414 |        494 |       2908 |
@@ -53,18 +53,18 @@ ActsTrackFindingAlg                                               INFO Ratios
 |------------------------------------------|------------|------------|------------|
 |                                          | PPP        | SSS        | ALL        |
 |------------------------------------------|------------|------------|------------|
-| failed / seeds                           |   0.512409 |   0.478399 |   0.506725 |
-| duplication / seeds                      |   0.367753 |   0.369771 |   0.368091 |
+| failed / seeds                           |   0.512417 |   0.478399 |   0.506731 |
+| duplication / seeds                      |   0.367753 |    0.36965 |    0.36807 |
 | Rejected refined params / seeds          |          0 |          0 |          0 |
-| selected / CKF tracks                    |   0.903951 |   0.220776 |   0.765469 |
-| selected tracks / used seeds             |   0.171337 |  0.0531874 |   0.151643 |
+| selected / CKF tracks                    |   0.904012 |   0.220865 |   0.765441 |
+| selected tracks / used seeds             |   0.171337 |  0.0532412 |   0.151649 |
 | branched tracks / used seeds             |          0 |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |          0 |
 |------------------------------------------|------------|------------|------------|
 | selected / CKF tracks           0.0- 0.5 |   0.890205 |   0.124352 |   0.711259 |
-|                                 0.5- 1.0 |   0.913315 |   0.256262 |   0.739419 |
-|                                 1.0- 1.5 |   0.885971 |   0.216418 |   0.704992 |
-|                                 1.5- 2.0 |    0.79267 |   0.240154 |   0.563561 |
+|                                 0.5- 1.0 |   0.913255 |   0.257692 |   0.739419 |
+|                                 1.0- 1.5 |    0.88605 |   0.216418 |   0.705141 |
+|                                 1.5- 2.0 |   0.793103 |   0.239784 |    0.56338 |
 |                                 2.0- 2.5 |    0.94335 |   0.216926 |    0.69915 |
 |                                 2.5- 3.0 |   0.882987 |          0 |   0.882987 |
 |                                 3.0- 3.5 |   0.942103 |          0 |   0.942103 |
@@ -110,25 +110,25 @@ ActsLargeRadiusTrackFindingAlg                                    INFO statistic
 | Input seeds                       |       9682 |       9682 |
 | No track parameters               |          0 |          0 |
 | Used   seeds                      |       9495 |       9495 |
-| Cannot find track                 |       8549 |       8549 |
+| Cannot find track                 |       8548 |       8548 |
 | Duplicate seeds                   |        187 |        187 |
-| CKF tracks                        |        946 |        946 |
+| CKF tracks                        |        947 |        947 |
 | Rejected refined parameters       |          0 |          0 |
 | selected tracks                   |        113 |        113 |
-| Stopped tracks reaching max holes |       6663 |       6663 |
+| Stopped tracks reaching max holes |       6661 |       6661 |
 | Seeds with more than one branch   |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |
-| Stopped tracks below pT cut       |       1886 |       1886 |
+| Stopped tracks below pT cut       |       1887 |       1887 |
 | Stopped tracks above max eta      |          0 |          0 |
 |-----------------------------------|------------|------------|
 ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 |------------------------------------------|------------|------------|
 |                                          | SSS        | ALL        |
 |------------------------------------------|------------|------------|
-| failed / seeds                           |   0.882979 |   0.882979 |
+| failed / seeds                           |   0.882875 |   0.882875 |
 | duplication / seeds                      |  0.0193142 |  0.0193142 |
 | Rejected refined params / seeds          |          0 |          0 |
-| selected / CKF tracks                    |    0.11945 |    0.11945 |
+| selected / CKF tracks                    |   0.119324 |   0.119324 |
 | selected tracks / used seeds             |   0.011901 |   0.011901 |
 | branched tracks / used seeds             |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |
@@ -136,7 +136,7 @@ ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 | selected / CKF tracks           0.0- 0.5 |   0.169014 |   0.169014 |
 |                                 0.5- 1.0 |   0.214286 |   0.214286 |
 |                                 1.0- 1.5 |   0.228261 |   0.228261 |
-|                                 1.5- 2.0 |   0.102941 |   0.102941 |
+|                                 1.5- 2.0 |   0.102689 |   0.102689 |
 |                                 2.0- 2.5 |  0.0687285 |  0.0687285 |
 |                                 2.5- 3.0 |          0 |          0 |
 |                                 3.0- 3.5 |          0 |          0 |
diff --git a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsCached.ref b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsCached.ref
index e2663623fc5dd5ed7f746d6b7c73724a2a224c5f..6db9e366cfb0c0a6bf88c5c2639ef4fc71f77212 100644
--- a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsCached.ref
+++ b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsCached.ref
@@ -62,13 +62,13 @@ ActsTrackFindingAlg                                               INFO statistic
 |-----------------------------------|------------|------------|------------|
 | Input seeds                       |     123542 |      24791 |     148333 |
 | No track parameters               |          0 |          0 |          0 |
-| Used   seeds                      |      78109 |      15625 |      93734 |
-| Cannot find track                 |      63304 |      11860 |      75164 |
-| Duplicate seeds                   |      45433 |       9166 |      54599 |
-| CKF tracks                        |      14805 |       3765 |      18570 |
+| Used   seeds                      |      78109 |      15628 |      93737 |
+| Cannot find track                 |      63305 |      11860 |      75165 |
+| Duplicate seeds                   |      45433 |       9163 |      54596 |
+| CKF tracks                        |      14804 |       3768 |      18572 |
 | Rejected refined parameters       |          0 |          0 |          0 |
-| selected tracks                   |      13383 |        832 |      14215 |
-| Stopped tracks reaching max holes |      60890 |      11366 |      72256 |
+| selected tracks                   |      13383 |        833 |      14216 |
+| Stopped tracks reaching max holes |      60891 |      11366 |      72257 |
 | Seeds with more than one branch   |          0 |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |          0 |
 | Stopped tracks below pT cut       |       2414 |        494 |       2908 |
@@ -78,18 +78,18 @@ ActsTrackFindingAlg                                               INFO Ratios
 |------------------------------------------|------------|------------|------------|
 |                                          | PPP        | SSS        | ALL        |
 |------------------------------------------|------------|------------|------------|
-| failed / seeds                           |   0.512409 |   0.478399 |   0.506725 |
-| duplication / seeds                      |   0.367753 |   0.369731 |   0.368084 |
+| failed / seeds                           |   0.512417 |   0.478399 |   0.506731 |
+| duplication / seeds                      |   0.367753 |    0.36961 |   0.368064 |
 | Rejected refined params / seeds          |          0 |          0 |          0 |
-| selected / CKF tracks                    |   0.903951 |   0.220983 |   0.765482 |
-| selected tracks / used seeds             |   0.171337 |   0.053248 |   0.151653 |
+| selected / CKF tracks                    |   0.904012 |   0.221072 |   0.765453 |
+| selected tracks / used seeds             |   0.171337 |  0.0533018 |   0.151658 |
 | branched tracks / used seeds             |          0 |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |          0 |
 |------------------------------------------|------------|------------|------------|
 | selected / CKF tracks           0.0- 0.5 |   0.890205 |   0.124352 |   0.711259 |
-|                                 0.5- 1.0 |   0.913315 |   0.256262 |   0.739419 |
-|                                 1.0- 1.5 |   0.885971 |   0.216418 |   0.704992 |
-|                                 1.5- 2.0 |    0.79267 |   0.240154 |   0.563561 |
+|                                 0.5- 1.0 |   0.913255 |   0.257692 |   0.739419 |
+|                                 1.0- 1.5 |    0.88605 |   0.216418 |   0.705141 |
+|                                 1.5- 2.0 |   0.793103 |   0.239784 |    0.56338 |
 |                                 2.0- 2.5 |    0.94335 |   0.217687 |   0.699248 |
 |                                 2.5- 3.0 |   0.882987 |          0 |   0.882987 |
 |                                 3.0- 3.5 |   0.942103 |          0 |   0.942103 |
@@ -151,25 +151,25 @@ ActsLargeRadiusTrackFindingAlg                                    INFO statistic
 | Input seeds                       |       9682 |       9682 |
 | No track parameters               |          0 |          0 |
 | Used   seeds                      |       9495 |       9495 |
-| Cannot find track                 |       8549 |       8549 |
+| Cannot find track                 |       8548 |       8548 |
 | Duplicate seeds                   |        187 |        187 |
-| CKF tracks                        |        946 |        946 |
+| CKF tracks                        |        947 |        947 |
 | Rejected refined parameters       |          0 |          0 |
 | selected tracks                   |        113 |        113 |
-| Stopped tracks reaching max holes |       6663 |       6663 |
+| Stopped tracks reaching max holes |       6661 |       6661 |
 | Seeds with more than one branch   |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |
-| Stopped tracks below pT cut       |       1886 |       1886 |
+| Stopped tracks below pT cut       |       1887 |       1887 |
 | Stopped tracks above max eta      |          0 |          0 |
 |-----------------------------------|------------|------------|
 ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 |------------------------------------------|------------|------------|
 |                                          | SSS        | ALL        |
 |------------------------------------------|------------|------------|
-| failed / seeds                           |   0.882979 |   0.882979 |
+| failed / seeds                           |   0.882875 |   0.882875 |
 | duplication / seeds                      |  0.0193142 |  0.0193142 |
 | Rejected refined params / seeds          |          0 |          0 |
-| selected / CKF tracks                    |    0.11945 |    0.11945 |
+| selected / CKF tracks                    |   0.119324 |   0.119324 |
 | selected tracks / used seeds             |   0.011901 |   0.011901 |
 | branched tracks / used seeds             |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |
@@ -177,7 +177,7 @@ ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 | selected / CKF tracks           0.0- 0.5 |   0.169014 |   0.169014 |
 |                                 0.5- 1.0 |   0.214286 |   0.214286 |
 |                                 1.0- 1.5 |   0.228261 |   0.228261 |
-|                                 1.5- 2.0 |   0.102941 |   0.102941 |
+|                                 1.5- 2.0 |   0.102689 |   0.102689 |
 |                                 2.0- 2.5 |  0.0687285 |  0.0687285 |
 |                                 2.5- 3.0 |          0 |          0 |
 |                                 3.0- 3.5 |          0 |          0 |
diff --git a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsHgtd.ref b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsHgtd.ref
index 41cb9558acaaf250e649bd73f9a94cbbe7173f72..8d9bdd9144760e2f230c19497dace9dc9f3f3e6a 100644
--- a/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsHgtd.ref
+++ b/Tracking/Acts/ActsConfig/share/ActsCheckObjectCountsHgtd.ref
@@ -42,13 +42,13 @@ ActsTrackFindingAlg                                               INFO statistic
 |-----------------------------------|------------|------------|------------|
 | Input seeds                       |     123542 |      24791 |     148333 |
 | No track parameters               |          0 |          0 |          0 |
-| Used   seeds                      |      78100 |      15624 |      93724 |
-| Cannot find track                 |      63275 |      11851 |      75126 |
-| Duplicate seeds                   |      45442 |       9167 |      54609 |
-| CKF tracks                        |      14825 |       3773 |      18598 |
+| Used   seeds                      |      78100 |      15627 |      93727 |
+| Cannot find track                 |      63276 |      11851 |      75127 |
+| Duplicate seeds                   |      45442 |       9164 |      54606 |
+| CKF tracks                        |      14824 |       3776 |      18600 |
 | Rejected refined parameters       |          0 |          0 |          0 |
-| selected tracks                   |      13389 |        831 |      14220 |
-| Stopped tracks reaching max holes |      60861 |      11356 |      72217 |
+| selected tracks                   |      13389 |        832 |      14221 |
+| Stopped tracks reaching max holes |      60862 |      11356 |      72218 |
 | Seeds with more than one branch   |          0 |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |          0 |
 | Stopped tracks below pT cut       |       2414 |        495 |       2909 |
@@ -58,18 +58,18 @@ ActsTrackFindingAlg                                               INFO Ratios
 |------------------------------------------|------------|------------|------------|
 |                                          | PPP        | SSS        | ALL        |
 |------------------------------------------|------------|------------|------------|
-| failed / seeds                           |   0.512174 |   0.478036 |   0.506469 |
-| duplication / seeds                      |   0.367826 |   0.369771 |   0.368151 |
+| failed / seeds                           |   0.512182 |   0.478036 |   0.506475 |
+| duplication / seeds                      |   0.367826 |    0.36965 |   0.368131 |
 | Rejected refined params / seeds          |          0 |          0 |          0 |
-| selected / CKF tracks                    |   0.903137 |   0.220249 |   0.764598 |
-| selected tracks / used seeds             |   0.171434 |  0.0531874 |   0.151722 |
+| selected / CKF tracks                    |   0.903198 |   0.220339 |    0.76457 |
+| selected tracks / used seeds             |   0.171434 |  0.0532412 |   0.151728 |
 | branched tracks / used seeds             |          0 |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |          0 |
 |------------------------------------------|------------|------------|------------|
 | selected / CKF tracks           0.0- 0.5 |   0.890205 |   0.124352 |   0.711259 |
-|                                 0.5- 1.0 |   0.913315 |   0.256262 |   0.739419 |
-|                                 1.0- 1.5 |   0.885971 |   0.216418 |   0.704992 |
-|                                 1.5- 2.0 |    0.79267 |   0.240154 |   0.563561 |
+|                                 0.5- 1.0 |   0.913255 |   0.257692 |   0.739419 |
+|                                 1.0- 1.5 |    0.88605 |   0.216418 |   0.705141 |
+|                                 1.5- 2.0 |   0.793103 |   0.239784 |    0.56338 |
 |                                 2.0- 2.5 |    0.94335 |   0.215251 |   0.697326 |
 |                                 2.5- 3.0 |   0.882635 |          0 |   0.882282 |
 |                                 3.0- 3.5 |   0.936117 |          0 |   0.936117 |
@@ -120,25 +120,25 @@ ActsLargeRadiusTrackFindingAlg                                    INFO statistic
 | Input seeds                       |       9681 |       9681 |
 | No track parameters               |          0 |          0 |
 | Used   seeds                      |       9494 |       9494 |
-| Cannot find track                 |       8540 |       8540 |
+| Cannot find track                 |       8539 |       8539 |
 | Duplicate seeds                   |        187 |        187 |
-| CKF tracks                        |        954 |        954 |
+| CKF tracks                        |        955 |        955 |
 | Rejected refined parameters       |          0 |          0 |
 | selected tracks                   |        113 |        113 |
-| Stopped tracks reaching max holes |       6655 |       6655 |
+| Stopped tracks reaching max holes |       6653 |       6653 |
 | Seeds with more than one branch   |          0 |          0 |
 | Tracks failing second CKF         |          0 |          0 |
-| Stopped tracks below pT cut       |       1885 |       1885 |
+| Stopped tracks below pT cut       |       1886 |       1886 |
 | Stopped tracks above max eta      |          0 |          0 |
 |-----------------------------------|------------|------------|
 ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 |------------------------------------------|------------|------------|
 |                                          | SSS        | ALL        |
 |------------------------------------------|------------|------------|
-| failed / seeds                           |    0.88214 |    0.88214 |
+| failed / seeds                           |   0.882037 |   0.882037 |
 | duplication / seeds                      |  0.0193162 |  0.0193162 |
 | Rejected refined params / seeds          |          0 |          0 |
-| selected / CKF tracks                    |   0.118449 |   0.118449 |
+| selected / CKF tracks                    |   0.118325 |   0.118325 |
 | selected tracks / used seeds             |  0.0119023 |  0.0119023 |
 | branched tracks / used seeds             |          0 |          0 |
 | no 2nd CKF / CKF tracks                  |          0 |          0 |
@@ -146,7 +146,7 @@ ActsLargeRadiusTrackFindingAlg                                    INFO Ratios
 | selected / CKF tracks           0.0- 0.5 |   0.169014 |   0.169014 |
 |                                 0.5- 1.0 |   0.214286 |   0.214286 |
 |                                 1.0- 1.5 |   0.228261 |   0.228261 |
-|                                 1.5- 2.0 |   0.102941 |   0.102941 |
+|                                 1.5- 2.0 |   0.102689 |   0.102689 |
 |                                 2.0- 2.5 |  0.0668896 |  0.0668896 |
 |                                 2.5- 3.0 |          0 |          0 |
 |                                 3.0- 3.5 |          0 |          0 |
diff --git a/Tracking/Acts/ActsEvent/ActsEvent/Decoration.h b/Tracking/Acts/ActsEvent/ActsEvent/Decoration.h
index 72737cb62b08ded1cb9fcfc6a1b449c30d334d1d..c25306ceee3cefc0b3d628158bccb5417aec5aa1 100644
--- a/Tracking/Acts/ActsEvent/ActsEvent/Decoration.h
+++ b/Tracking/Acts/ActsEvent/ActsEvent/Decoration.h
@@ -74,7 +74,7 @@ static Decoration decoration(std::string_view n, GetterType g, CopierType c,
                           SetterType s = static_cast<SetterType>(nullptr)) {
   Decoration dec;
   dec.name = n;
-  dec.hash = Acts::hashString(n);
+  dec.hash = Acts::hashStringDynamic(n);
   dec.auxid = SG::AuxTypeRegistry::instance().getAuxID<T>(dec.name);
   if (dec.auxid == SG::null_auxid)
     throw std::runtime_error("ActsTrk::Decoration Aux ID for " + dec.name +
diff --git a/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.h b/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.h
index 463e3cdded56a31182f1fa313e09fd0b4dbf96dc..a045237c68abb9b99d858562df43db6029c91ae9 100644
--- a/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.h
+++ b/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.h
@@ -306,7 +306,16 @@ class MutableMultiTrajectory final
   /**
    * Implementation of allocation of calibrated measurements
    */
-  void allocateCalibrated_impl(ActsTrk::IndexType istate, std::size_t measdim);
+  template <typename val_t, typename cov_t>
+  void allocateCalibrated_impl(IndexType istate,
+                               const Eigen::DenseBase<val_t>& val,
+                               const Eigen::DenseBase<cov_t>& cov)
+    requires(Eigen::PlainObjectBase<val_t>::RowsAtCompileTime > 0 &&
+             Eigen::PlainObjectBase<val_t>::RowsAtCompileTime <= Acts::eBoundSize &&
+             Eigen::PlainObjectBase<val_t>::RowsAtCompileTime ==
+                 Eigen::PlainObjectBase<cov_t>::RowsAtCompileTime &&
+             Eigen::PlainObjectBase<cov_t>::RowsAtCompileTime ==
+                 Eigen::PlainObjectBase<cov_t>::ColsAtCompileTime);
 
   /**
    * Implementation of calibrated size
diff --git a/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.icc b/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.icc
index b1afa3328767809ba385ca717038ec8b2717fd33..02b97f11144da714b536322700e13e66922d6018 100644
--- a/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.icc
+++ b/Tracking/Acts/ActsEvent/ActsEvent/MultiTrajectory.icc
@@ -121,3 +121,32 @@ void ActsTrk::MutableMultiTrajectory::addColumn_impl(std::string_view name) {
     throw std::runtime_error("Can't add decoration of this type to MutableMultiTrajectory");
   }
 }
+
+template <typename val_t, typename cov_t>
+void ActsTrk::MutableMultiTrajectory::allocateCalibrated_impl(IndexType istate,
+                              const Eigen::DenseBase<val_t>& val,
+                              const Eigen::DenseBase<cov_t>& cov)
+
+  requires(Eigen::PlainObjectBase<val_t>::RowsAtCompileTime > 0 &&
+            Eigen::PlainObjectBase<val_t>::RowsAtCompileTime <= Acts::eBoundSize &&
+            Eigen::PlainObjectBase<val_t>::RowsAtCompileTime ==
+                Eigen::PlainObjectBase<cov_t>::RowsAtCompileTime &&
+            Eigen::PlainObjectBase<cov_t>::RowsAtCompileTime ==
+                Eigen::PlainObjectBase<cov_t>::ColsAtCompileTime)
+{
+  constexpr std::size_t measdim = val_t::RowsAtCompileTime;
+
+  m_trackStatesAux->measDim[istate] = measdim;
+  auto idx = m_trackStatesAux->calibrated[istate];
+  m_trackMeasurementsAux->meas[idx].resize(measdim);
+  m_trackMeasurementsAux->covMatrix[idx].resize(measdim*measdim);
+
+  double* measPtr = m_trackMeasurementsAux->meas[idx].data();
+  Eigen::Map<Acts::ActsVector<measdim>> valMap(measPtr);
+  valMap = val;
+
+  double* covPtr = m_trackMeasurementsAux->covMatrix[idx].data();
+  Eigen::Map<Acts::ActsSquareMatrix<measdim>> covMap(covPtr);
+  covMap = cov;
+}
+
diff --git a/Tracking/Acts/ActsEvent/Root/MultiTrajectory.cxx b/Tracking/Acts/ActsEvent/Root/MultiTrajectory.cxx
index 2c94bf5f48dc8f83dfb9196b1f4107d200c07c6a..0c77bd629821f4d03bdd823c319733d5f9ccfb45 100644
--- a/Tracking/Acts/ActsEvent/Root/MultiTrajectory.cxx
+++ b/Tracking/Acts/ActsEvent/Root/MultiTrajectory.cxx
@@ -496,14 +496,6 @@ void ActsTrk::MutableMultiTrajectory::clear_impl() {
 }
 
 
-void ActsTrk::MutableMultiTrajectory::allocateCalibrated_impl(ActsTrk::IndexType istate, std::size_t measdim) {
-  m_trackStatesAux->measDim[istate] = measdim;
-  auto idx = m_trackStatesAux->calibrated[istate];
-  m_trackMeasurementsAux->meas[idx].resize(measdim);
-  m_trackMeasurementsAux->covMatrix[idx].resize(measdim*measdim);
-}
-
-
 ActsTrk::IndexType ActsTrk::MutableMultiTrajectory::calibratedSize_impl(ActsTrk::IndexType istate) const {
   // Retrieve the calibrated measurement size
   // INSPECTCALL(istate << " " << trackMeasurements().size());
diff --git a/Tracking/Acts/ActsEvent/Root/TrackSummaryContainer.cxx b/Tracking/Acts/ActsEvent/Root/TrackSummaryContainer.cxx
index 569b565b0249db92d7a55eb118b2a64004aac0fb..3c8a3e94e2163a4b982e6695f3abc7bb7947c934 100644
--- a/Tracking/Acts/ActsEvent/Root/TrackSummaryContainer.cxx
+++ b/Tracking/Acts/ActsEvent/Root/TrackSummaryContainer.cxx
@@ -18,7 +18,7 @@ using namespace Acts::HashedStringLiteral;
 const std::set<Acts::HashedString> ActsTrk::TrackSummaryContainer::staticVariableHashes = [](){
   std::set<Acts::HashedString> result;
   for (const auto& s: ActsTrk::TrackSummaryContainer::staticVariables) {
-    result.insert(Acts::hashString(s));
+    result.insert(Acts::hashStringDynamic(s));
   }
   return result;
 }();
diff --git a/Tracking/Acts/ActsEvent/test/MultiTrajectoryACTS_test.cxx b/Tracking/Acts/ActsEvent/test/MultiTrajectoryACTS_test.cxx
index 22741b9245d6436a807a39956c6c3db5d40bd4c1..c38da6af34c5f00b6b40ab25b4100a1139daf28a 100644
--- a/Tracking/Acts/ActsEvent/test/MultiTrajectoryACTS_test.cxx
+++ b/Tracking/Acts/ActsEvent/test/MultiTrajectoryACTS_test.cxx
@@ -180,6 +180,10 @@ BOOST_AUTO_TEST_CASE(MultiTrajectoryExtraColumnsRuntime) {
   ct.testMultiTrajectoryExtraColumnsRuntime();
 }
 
+BOOST_AUTO_TEST_CASE(MultiTrajectoryAllocateCalibratedInit) {
+  CommonTests ct;
+  ct.testMultiTrajectoryAllocateCalibratedInit(rng);
+}
 
 
 BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
diff --git a/Tracking/Acts/ActsEvent/test/MultiTrajectoryBasic_test.cxx b/Tracking/Acts/ActsEvent/test/MultiTrajectoryBasic_test.cxx
index 8a270eb8265593938d80963827b9afc2de66598b..16dc8177b83878b5f4b7687d25ad53b203af9e72 100644
--- a/Tracking/Acts/ActsEvent/test/MultiTrajectoryBasic_test.cxx
+++ b/Tracking/Acts/ActsEvent/test/MultiTrajectoryBasic_test.cxx
@@ -810,9 +810,9 @@ BOOST_FIXTURE_TEST_CASE(TrackStateProjector, EmptyMTJ) {
   // Set and test subspace
   Acts::BoundSubspaceIndices subspace = {Acts::eBoundLoc0, Acts::eBoundLoc0, Acts::eBoundPhi, 
                                          Acts::eBoundTheta, Acts::eBoundQOverP, Acts::eBoundTime};
-  ts.setBoundSubspaceIndices(subspace);
+  ts.setProjectorSubspaceIndices(subspace);
 
-  BOOST_CHECK(ts.boundSubspaceIndices() == subspace);
+  BOOST_CHECK(ts.projectorSubspaceIndices() == subspace);
 }
 
 BOOST_FIXTURE_TEST_CASE(TrackStateProxyStorage, EmptyMTJ) {
diff --git a/Tracking/Acts/ActsObjectDecoration/src/MeasurementToTrackParticleDecoration.cxx b/Tracking/Acts/ActsObjectDecoration/src/MeasurementToTrackParticleDecoration.cxx
index effd7fc0431e870173a430d82a28fc56cd32c7b7..321c28fb835381bad5397cbe59a101dc5f6b9e51 100644
--- a/Tracking/Acts/ActsObjectDecoration/src/MeasurementToTrackParticleDecoration.cxx
+++ b/Tracking/Acts/ActsObjectDecoration/src/MeasurementToTrackParticleDecoration.cxx
@@ -11,6 +11,7 @@
 #include "xAODInDetMeasurement/StripCluster.h"
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 #include "Acts/Surfaces/AnnulusBounds.hpp"
+#include "Acts/Utilities/TrackHelpers.hpp"
 
 
 namespace ActsTrk {
@@ -281,7 +282,7 @@ namespace ActsTrk {
 		  }
 		  
 		  const auto& [unbiasedParameters, unbiasedCovariance] =
-		    evaluateUnbiased ? getUnbiasedTrackParameters(state,true) :  std::make_pair(state.parameters(), state.covariance());
+		    evaluateUnbiased ? Acts::calculateUnbiasedParametersCovariance(state) : std::make_pair(state.parameters(), state.covariance());
 		  
 		  measurementLocX = calibratedParameters[Acts::eBoundLoc0];
 		  measurementLocCovX = calibratedCovariance(Acts::eBoundLoc0, Acts::eBoundLoc0);
@@ -367,51 +368,31 @@ namespace ActsTrk {
   float MeasurementToTrackParticleDecoration::getChi2Contribution(const typename ActsTrk::TrackStateBackend::ConstTrackStateProxy &state) const {
     
     auto pred  = state.predicted();
-    auto H = state.effectiveProjector();
     auto predC = state.predictedCovariance();
 
-    const auto calibrated    = state.effectiveCalibrated();
-    const auto calibratedCov = state.effectiveCalibratedCovariance();
-    
-    auto residual = (H * pred - calibrated).eval();
-    auto rescov   = (H * predC * H.transpose() + calibratedCov).eval();
+    return Acts::visit_measurement(
+      state.calibratedSize(),
+      [&]<std::size_t measdim>(std::integral_constant<std::size_t, measdim>) {
+        Acts::FixedBoundSubspaceHelper<measdim> subspaceHelper =
+            state.template projectorSubspaceHelper<measdim>();
+
+        // TODO use subspace helper for projection instead
+        auto H = subspaceHelper.projector();
 
-    return ((residual.transpose() * rescov.inverse() * residual).eval())(0,0);
+        const auto calibrated    = state.template calibrated<measdim>();
+        const auto calibratedCov = state.template calibratedCovariance<measdim>();
         
-  }
+        auto residual = (H * pred - calibrated).eval();
+        auto rescov   = (H * predC * H.transpose() + calibratedCov).eval();
 
-  
-  std::pair<Acts::BoundVector, Acts::BoundMatrix>
-  MeasurementToTrackParticleDecoration::getUnbiasedTrackParameters(const typename ActsTrk::TrackStateBackend::ConstTrackStateProxy &state,
-								   bool useSmoothed) const {
-    // calculate the unbiased track parameters (i.e. fitted track
-    // parameters with this measurement removed) using Eq.(12a)-Eq.(12c)
-    // of NIMA 262, 444 (1987)
-    
-    Acts::BoundVector tp = useSmoothed ? state.smoothed() : state.filtered();
-    Acts::BoundMatrix C  = useSmoothed ? state.smoothedCovariance() : state.filteredCovariance();
+        return ((residual.transpose() * rescov.inverse() * residual).eval())(0,0);
+    });
 
-    const auto calibratedParameters = state.effectiveCalibrated();
-    const auto calibratedCovariance = state.effectiveCalibratedCovariance();
-    
-    ATH_MSG_DEBUG( "--- Getting effectiveCalibrated...");
-    auto m = calibratedParameters;
-    ATH_MSG_DEBUG( "--- Getting effectiveProjector...");
-    auto H = state.effectiveProjector();
-    ATH_MSG_DEBUG( "--- Getting effectiveCalibratedCovariance...");
-    auto V = calibratedCovariance;
-    
-    ATH_MSG_DEBUG( "--- Evaluating K... ");
-    auto K = (C * H.transpose() *
-	      (H * C * H.transpose() - V).inverse()).eval();
-    
-    ATH_MSG_DEBUG( "--- Evaluating unbiased parameters... ");
-    Acts::BoundVector unbiasedParameters = tp + K * (m - H * tp);
-    ATH_MSG_DEBUG( "--- Evaluating unbiased covariance... ");
-    Acts::BoundMatrix unbiasedCovariance = C - K * H * C;
-    return std::make_pair(unbiasedParameters, unbiasedCovariance);
+
+        
   }
 
+  
   float MeasurementToTrackParticleDecoration::evaluatePull(const float residual,
 							   const float measurementCovariance,
 							   const float trackParameterCovariance,
diff --git a/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.cxx b/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.cxx
index 2db3613518c5282251962d216e9f186952da53cf..535ee88f85d248d58d6ceab5d5628f5fb1a37391 100644
--- a/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.cxx
+++ b/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.cxx
@@ -19,7 +19,6 @@ namespace ActsTrk {
     ATH_MSG_INFO( "Initializing " << name() << "..." );
 
     ATH_MSG_DEBUG( "Properties Summary:" );
-    ATH_MSG_DEBUG( "   " << m_bFieldMin );
     ATH_MSG_DEBUG( "   " << m_sigmaLoc0 );
     ATH_MSG_DEBUG( "   " << m_sigmaLoc1 );
     ATH_MSG_DEBUG( "   " << m_sigmaPhi );
@@ -58,8 +57,7 @@ namespace ActsTrk {
 				   seed,
 				   geoContext,
 				   surface,
-				   bField,
-				   m_bFieldMin);
+				   bField);
   }
 
   std::optional<Acts::BoundTrackParameters>
@@ -67,35 +65,28 @@ namespace ActsTrk {
 						     const ActsTrk::Seed& seed,
 						     const Acts::GeometryContext& geoContext,
 						     const Acts::Surface& surface,
-						     const Acts::Vector3& bField,
-						     double bFieldMin) const 
+						     const Acts::Vector3& bField) const 
   {
     // Get SPs
     const auto& sp_collection = seed.sp();
     if ( sp_collection.size() < 3 ) return std::nullopt;
     
     // Compute Bound parameters at surface
-    std::optional<Acts::BoundVector> params_opt = m_useTopSp ?
+    auto params_result = m_useTopSp ?
       Acts::estimateTrackParamsFromSeed(geoContext,
-                                        sp_collection.rbegin(),
-                                        sp_collection.rend(),
+                                        std::ranges::views::reverse(sp_collection),
                                         surface,
-                                        bField,
-                                        bFieldMin,
-					logger()) :
+                                        bField) :
       Acts::estimateTrackParamsFromSeed(geoContext,
-                                        sp_collection.begin(),
-                                        sp_collection.end(),
+                                        sp_collection,
                                         surface,
-                                        bField,
-                                        bFieldMin,
-					logger());
+                                        bField);
     
-    if ( not params_opt.has_value() ) {
+    if ( not params_result.ok() ) {
       return std::nullopt;
     }
 
-    auto& params = params_opt.value();
+    auto& params = params_result.value();
 
     if (m_useTopSp) {
       // reverse direction so momentum vector pointing outwards
diff --git a/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.h b/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.h
index 7fdb741fe676ff1ff767d0be194ad502a3dd40fa..2293cbae4ef6a99d7b5520985ddf6738014e86e1 100644
--- a/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.h
+++ b/Tracking/Acts/ActsPatternRecognition/src/TrackParamsEstimationTool.h
@@ -37,16 +37,13 @@ namespace ActsTrk {
 			      const ActsTrk::Seed& seed,
 			      const Acts::GeometryContext& geoContext,
 			      const Acts::Surface& surface,
-			      const Acts::Vector3& bField,
-			      double bFieldMin) const override;
+			      const Acts::Vector3& bField) const override;
     
     // *********************************************************************
     // *********************************************************************
 
   private:
     // Properties
-    Gaudi::Property< double > m_bFieldMin {this, "bFieldMin", 0.1 * Acts::UnitConstants::T,
-        "The minimum magnetic field to trigger the track parameters estimation"};
     Gaudi::Property< double > m_sigmaLoc0 {this, "sigmaLoc0", 1 * Acts::UnitConstants::mm,
         "Constant term of the loc0 resolution"};
     Gaudi::Property< double > m_sigmaLoc1 {this, "sigmaLoc1", 1 * Acts::UnitConstants::mm,
diff --git a/Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/ITrackParamsEstimationTool.h b/Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/ITrackParamsEstimationTool.h
index 7c83e3fc0ca935fdfc57b89f575c6cc09be482aa..54445bbc2f5a08c177dc83c33c88787384b451b6 100644
--- a/Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/ITrackParamsEstimationTool.h
+++ b/Tracking/Acts/ActsToolInterfaces/ActsToolInterfaces/ITrackParamsEstimationTool.h
@@ -37,8 +37,7 @@ namespace ActsTrk {
                               const ActsTrk::Seed& seed,
                               const Acts::GeometryContext& geoContext,
                               const Acts::Surface& surface,
-                              const Acts::Vector3& bField,
-                              double bFieldMin) const = 0;
+                              const Acts::Vector3& bField) const = 0;
   };
   
 } // namespace 
diff --git a/Tracking/Acts/ActsTrackReconstruction/CMakeLists.txt b/Tracking/Acts/ActsTrackReconstruction/CMakeLists.txt
index f304095f245daead3301e923bb9a4bf80d2c4779..0288330b53170a4aa5a66763100d9569c798a700 100644
--- a/Tracking/Acts/ActsTrackReconstruction/CMakeLists.txt
+++ b/Tracking/Acts/ActsTrackReconstruction/CMakeLists.txt
@@ -33,6 +33,7 @@ atlas_add_component( ActsTrackReconstruction
 		       InDetPrepRawData
 		       InDetRIO_OnTrack
 		       InDetReadoutGeometry
+		       InDetRecToolInterfaces
 		       MagFieldConditions
 		       MagFieldElements
 		       PixelConditionsData
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/GlobalChiSquareFitterTool.cxx b/Tracking/Acts/ActsTrackReconstruction/src/GlobalChiSquareFitterTool.cxx
index df17574386143e9056b22a8b4c62c2b9676fbaba..d9b7dc7697a15a47c3e6d60ff53351f23f48ce3c 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/GlobalChiSquareFitterTool.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/GlobalChiSquareFitterTool.cxx
@@ -133,7 +133,7 @@ void PRDSourceLinkCalibratorGX2F::calibrate(
     } else {
       subspaceIndices = {Acts::eBoundLoc0};  // x coordinate is l0
     }
-    trackState.setBoundSubspaceIndices(subspaceIndices);
+    trackState.setProjectorSubspaceIndices(subspaceIndices);
   } else if (dim == 2) {
     trackState.template calibrated<2>() =
         (*rot).localParameters().template head<2>();
@@ -141,7 +141,7 @@ void PRDSourceLinkCalibratorGX2F::calibrate(
         (*rot).localCovariance().template topLeftCorner<2, 2>();
     Acts::BoundSubspaceIndices subspaceIndices = {Acts::eBoundLoc0,
                                                   Acts::eBoundLoc1};
-    trackState.setBoundSubspaceIndices(subspaceIndices);
+    trackState.setProjectorSubspaceIndices(subspaceIndices);
   } else {
     throw std::runtime_error("Dim " + std::to_string(dim) +
                              " currently not supported.");
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/KalmanFitterTool.cxx b/Tracking/Acts/ActsTrackReconstruction/src/KalmanFitterTool.cxx
index 614610b7c30c884fe457e70c4e0b1b1b2dfe4755..1ff1dab6e12b561783c0094319e547045e450aa0 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/KalmanFitterTool.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/KalmanFitterTool.cxx
@@ -141,14 +141,14 @@ void PRDSourceLinkCalibrator::calibrate(const Acts::GeometryContext& gctx,
         } else {
           subspaceIndices = {Acts::eBoundLoc0}; // x coordinate is l0
         }
-        trackState.setBoundSubspaceIndices(subspaceIndices);
+        trackState.setProjectorSubspaceIndices(subspaceIndices);
       }
       else if (dim == 2)
         {
           trackState.template calibrated<2>() = (*rot).localParameters().template head<2>();
           trackState.template calibratedCovariance<2>() = (*rot).localCovariance().template topLeftCorner<2, 2>();
           Acts::BoundSubspaceIndices subspaceIndices = {Acts::eBoundLoc0, Acts::eBoundLoc1};
-          trackState.setBoundSubspaceIndices(subspaceIndices);
+          trackState.setProjectorSubspaceIndices(subspaceIndices);
         }
       else
       {
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.cxx b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.cxx
index a551dca5d2b2840971c70137aada8c287ed5b8cd..a30ac0cbce38fdba8930df6433b12bbbdabf8bca 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.cxx
@@ -4,24 +4,25 @@
 
 #include "ScoreBasedAmbiguityResolutionAlg.h"
 
+#include "ScoreBasedSolverCutsImpl.h"
+
 // Athena
 #include "AthenaMonitoringKernel/Monitored.h"
 #include "PathResolver/PathResolver.h"
 
 // ACTS
+#include <fstream>
+#include <iostream>
+#include <vector>
+
 #include "Acts/AmbiguityResolution/ScoreBasedAmbiguityResolution.hpp"
 #include "Acts/Definitions/Units.hpp"
 #include "Acts/EventData/VectorMultiTrajectory.hpp"
 #include "Acts/EventData/VectorTrackContainer.hpp"
+#include "Acts/Plugins/Json/AmbiguityConfigJsonConverter.hpp"
 #include "Acts/Utilities/Logger.hpp"
 #include "ActsGeometry/ATLASSourceLink.h"
 #include "ActsInterop/Logger.h"
-#include "Acts/Plugins/Json/AmbiguityConfigJsonConverter.hpp"
-
-#include <fstream> 
-#include <iostream>
-#include <vector>
-
 
 namespace {
 std::size_t sourceLinkHash(const Acts::SourceLink &slink) {
@@ -42,6 +43,7 @@ bool sourceLinkEquality(const Acts::SourceLink &a, const Acts::SourceLink &b) {
 
   return uncalibMeas_a.identifier() == uncalibMeas_b.identifier();
 }
+
 }  // namespace
 
 namespace ActsTrk {
@@ -56,7 +58,8 @@ StatusCode ScoreBasedAmbiguityResolutionAlg::initialize() {
     Acts::ConfigPair configPair;
     nlohmann::json json_file;
 
-    std::string fileName = PathResolver::find_file( "ActsConfig/ActsAmbiguityConfig.json", "DATAPATH" );
+    std::string fileName = PathResolver::find_file(
+        "ActsConfig/ActsAmbiguityConfig.json", "DATAPATH");
 
     std::ifstream file(fileName.c_str());
     if (!file.is_open()) {
@@ -81,7 +84,7 @@ StatusCode ScoreBasedAmbiguityResolutionAlg::initialize() {
     cfg.etaMin = m_etaMin;
     cfg.etaMax = m_etaMax;
     cfg.useAmbiguityFunction = m_useAmbiguityFunction;
-    
+
     m_ambi = std::make_unique<Acts::ScoreBasedAmbiguityResolution>(
         std::move(cfg), makeActsAthenaLogger(this, "Acts"));
     assert(m_ambi);
@@ -107,27 +110,51 @@ StatusCode ScoreBasedAmbiguityResolutionAlg::execute(
       SG::makeHandle(m_tracksKey, ctx);
   ATH_CHECK(trackHandle.isValid());
 
-  std::vector<std::vector<Acts::ScoreBasedAmbiguityResolution::MeasurementInfo>>
-      measurementsPerTracks;
-
-  std::vector<std::vector<Acts::ScoreBasedAmbiguityResolution::TrackFeatures>>
-      trackFeaturesVectors;
-      
-  measurementsPerTracks = m_ambi->computeInitialState(*trackHandle, &sourceLinkHash,
-                              &sourceLinkEquality, trackFeaturesVectors);
-
+  // creates mutable tracks from the input tracks to add summary information
+  // NOTE: this operation likely needs to moved outside ambiguity resolution
+  ActsTrk::MutableTrackContainer updatedTracks =
+      ScoreBasedSolverCutsImpl::addSummaryInformation(*trackHandle);
+
+  // create the optional cuts for the ambiguity resolution
+  Acts::ScoreBasedAmbiguityResolution::OptionalCuts<
+      ActsTrk::MutableTrackContainer::ConstTrackProxy>
+      optionalCuts;
+
+  using TrackProxyType = Acts::TrackProxy<ActsTrk::MutableTrackSummaryContainer,
+                                          ActsTrk::MutableMultiTrajectory,
+                                          Acts::detail::ValueHolder, true>;
+
+  // Eta based optional cuts is added as a lambda function inorder to access the
+  // m_etaDependentCutsSvc private variable
+  optionalCuts.cuts.push_back([this](const TrackProxyType &track) {
+    // Access m_etaDependentCutsSvc through this
+    return ScoreBasedSolverCutsImpl::etaDependentCuts(
+        track, this->m_etaDependentCutsSvc);
+  });
+
+  // Add other optional cuts and scores
+  optionalCuts.cuts.push_back(ScoreBasedSolverCutsImpl::doubleHolesFilter);
+  optionalCuts.scores.push_back(
+      ScoreBasedSolverCutsImpl::innermostPixelLayerHitsScore);
+  optionalCuts.scores.push_back(
+      ScoreBasedSolverCutsImpl::ContribPixelLayersScore);
+  optionalCuts.hitSelections.push_back(
+      ScoreBasedSolverCutsImpl::patternTrackHitSelection);
+
+  // Call the ambiguity resolution algorithm with the optional cuts on the
+  // updated tracks
   std::vector<int> goodTracks = m_ambi->solveAmbiguity(
-      *trackHandle, measurementsPerTracks, trackFeaturesVectors);
+      updatedTracks, &sourceLinkHash, &sourceLinkEquality, optionalCuts);
 
   ATH_MSG_DEBUG("Resolved to " << goodTracks.size() << " tracks from "
-                               << trackHandle->size());
+                               << updatedTracks.size());
 
   ActsTrk::MutableTrackContainer solvedTracks;
-  solvedTracks.ensureDynamicColumns(*trackHandle);
+  solvedTracks.ensureDynamicColumns(updatedTracks);
 
   for (auto iTrack : goodTracks) {
     auto destProxy = solvedTracks.getTrack(solvedTracks.addTrack());
-    destProxy.copyFrom(trackHandle->getTrack(iTrack));
+    destProxy.copyFrom(updatedTracks.getTrack(iTrack));
   }
   std::unique_ptr<ActsTrk::TrackContainer> outputTracks =
       m_resolvedTracksBackendHandles.moveToConst(
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.h b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.h
index b890ddd179f54caffa8b887aad8834695446a88f..fcc84ca85f633945033c0fd38aed228d81b2b27b 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedAmbiguityResolutionAlg.h
@@ -24,6 +24,8 @@
 #include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 #include "xAODInDetMeasurement/PixelClusterContainer.h"
 #include "xAODInDetMeasurement/StripClusterContainer.h"
+#include "InDetRecToolInterfaces/IInDetEtaDependentCutsSvc.h"
+
 
 // Handle Keys
 #include <memory>
@@ -92,7 +94,11 @@ class ScoreBasedAmbiguityResolutionAlg : public AthReentrantAlgorithm {
       this, "jsonFileName", "ScoreBasedAmbiguity_Config.json",
       "Name of the JSON file that contains the config file."};
 
-  std::unique_ptr<Acts::ScoreBasedAmbiguityResolution> m_ambi {nullptr};
+  std::unique_ptr<Acts::ScoreBasedAmbiguityResolution> m_ambi{nullptr};
+
+  /** ITk eta-dependent cuts*/
+  ServiceHandle<InDet::IInDetEtaDependentCutsSvc> m_etaDependentCutsSvc{
+      this, "InDetEtaDependentCutsSvc", ""};
 };
 
 }  // namespace ActsTrk
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.cxx b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..dde8f305c920f5eaff9d510026fa43251080a301
--- /dev/null
+++ b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.cxx
@@ -0,0 +1,231 @@
+/*
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "ScoreBasedSolverCutsImpl.h"
+
+#include "ScoreBasedAmbiguityResolutionAlg.h"
+
+// ACTS
+#include "Acts/AmbiguityResolution/ScoreBasedAmbiguityResolution.hpp"
+#include "Acts/Definitions/Units.hpp"
+#include "Acts/EventData/VectorMultiTrajectory.hpp"
+#include "Acts/EventData/VectorTrackContainer.hpp"
+#include "Acts/Utilities/HashedString.hpp"
+#include "Acts/Utilities/Logger.hpp"
+#include "ActsEvent/TrackContainer.h"
+#include "ActsEvent/TrackSummaryContainer.h"
+#include "ActsInterop/Logger.h"
+
+// Athena
+#include "AthenaMonitoringKernel/GenericMonitoringTool.h"
+#include "AthenaMonitoringKernel/Monitored.h"
+
+// Gaudi
+#include "GaudiKernel/ServiceHandle.h"
+#include "GaudiKernel/ToolHandle.h"
+namespace ActsTrk {
+
+namespace ScoreBasedSolverCutsImpl {
+// Add the summary information to the track container for OptionalCuts, This likely needs to be moved outside ambiguity resolution
+ActsTrk::MutableTrackContainer addSummaryInformation(
+    ActsTrk::TrackContainer trackContainer) {
+
+  ActsTrk::MutableTrackContainer updatedTracks;
+  updatedTracks.ensureDynamicColumns(trackContainer);
+
+  updatedTracks.addColumn<unsigned int>("nInnermostPixelLayerHits");
+  updatedTracks.addColumn<unsigned int>("nSCTDoubleHoles");
+  updatedTracks.addColumn<unsigned int>("nContribPixelLayers");
+
+  for (auto track : trackContainer) {
+    auto iTrack = track.index();
+    auto destProxy = updatedTracks.getTrack(updatedTracks.addTrack());
+    destProxy.copyFrom(trackContainer.getTrack(iTrack));
+  }
+
+  unsigned int pixelVoulmeIds[] = {8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20};
+
+  for (auto track : updatedTracks) {
+    bool doubleFlag = false;
+    int nDoubleHoles = 0;
+    int nInnermostPixelLayerHits = 0;
+    int nContribPixelLayers = 0;
+    for (const auto &ts : track.trackStatesReversed()) {
+      if (!ts.hasReferenceSurface()) {
+        continue;
+      }
+      // Check if the volume is the innermost pixel layer
+      // Compute the number of hits in the innermost pixel layer
+      auto iVolume = ts.referenceSurface().geometryId().volume();
+      if (iVolume == 8) {
+        nInnermostPixelLayerHits++;
+      }
+      if (std::find(std::begin(pixelVoulmeIds), std::end(pixelVoulmeIds),
+                    iVolume) != std::end(pixelVoulmeIds)) {
+        nContribPixelLayers++;
+      }
+
+      // Check if the track state has a hole flag
+      // Compute the number of double holes
+      auto iTypeFlags = ts.typeFlags();
+      if (!iTypeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
+        doubleFlag = false;
+      }
+      if (iTypeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
+        if (doubleFlag) {
+          nDoubleHoles++;
+          doubleFlag = false;
+        } else {
+          doubleFlag = true;
+        }
+      }
+    }
+    track.template component<unsigned int>(Acts::hashString(
+        "nInnermostPixelLayerHits")) = nInnermostPixelLayerHits;
+    track.template component<unsigned int>(
+        Acts::hashString("nSCTDoubleHoles")) = nDoubleHoles;
+    track.template component<unsigned int>(
+        Acts::hashString("nContribPixelLayers")) = nContribPixelLayers;
+  }
+
+  return updatedTracks;
+}
+
+// This optionalCut removes tracks that have a number of SCT double holes greater than 2
+bool doubleHolesFilter(const trackProxy_t &track) {
+
+  int n_doubleHoles = 0;
+  int max_doubleHoles = 2;
+  Acts::HashedString hash_nMeasSubDet =
+      Acts::hashString("nSCTDoubleHoles");
+  if (track.container().hasColumn(hash_nMeasSubDet)) {
+    n_doubleHoles = track.component<unsigned int>(hash_nMeasSubDet);
+  } else {
+    return false;
+  }
+  if (n_doubleHoles > max_doubleHoles) {
+    return true;
+  }
+  return false;
+}
+
+// This optional score modifies the score based on the number of hits in the innermost pixel layer
+void innermostPixelLayerHitsScore(const trackProxy_t &track, double &score) {
+  int bLayerHits = 0;
+  const int maxB_LayerHitsITk = 8;
+  auto maxB_LayerHits = maxB_LayerHitsITk;
+  const double blayModi[maxB_LayerHitsITk + 1] = {0.25, 4.0, 4.5, 5.0, 5.5,
+                                                  6.0,  6.5, 7.0, 7.5};
+
+  std::vector<double> factorB_LayerHits;
+
+  for (int i = 0; i <= maxB_LayerHits; ++i)
+    factorB_LayerHits.push_back(blayModi[i]);
+  Acts::HashedString hash_nMeasSubDet =
+      Acts::hashString("nInnermostPixelLayerHits");
+  if (track.container().hasColumn(hash_nMeasSubDet)) {
+    bLayerHits = track.component<unsigned int>(hash_nMeasSubDet);
+  } else {
+    return;
+  }
+
+  if (bLayerHits > -1 && maxB_LayerHits > 0) {
+    if (bLayerHits > maxB_LayerHits) {
+      score *= (bLayerHits - maxB_LayerHits + 1);  // hits are good !
+      bLayerHits = maxB_LayerHits;
+    }
+    score *= factorB_LayerHits[bLayerHits];
+  }
+}
+
+// This optional score modifies the score based on the number of contributing pixel layers
+void ContribPixelLayersScore(const trackProxy_t &track, double &score) {
+
+  const int maxPixelLayITk = 16;
+  auto maxPixLay = maxPixelLayITk;
+  double maxScore = 30.0;
+  double minScore = 5.00;
+  int maxBarrel = 10;
+  int minBarrel = 3;
+  int minEnd = 5;
+
+  double step[2] = {(maxScore - minScore) / (maxBarrel - minBarrel),
+                    (maxScore - minScore) / (maxPixelLayITk - minEnd)};
+
+  std::vector<double> factorPixLay;
+  for (int i = 0; i <= maxPixelLayITk; i++) {
+    if (i < minEnd)
+      factorPixLay.push_back(0.01 + (i * 0.33));
+    else
+      factorPixLay.push_back(minScore + ((i - minEnd) * step[1]));
+  }
+
+  int iPixLay = 0;
+  Acts::HashedString hash_nMeasSubDet =
+      Acts::hashString("nContribPixelLayers");
+  if (track.container().hasColumn(hash_nMeasSubDet)) {
+    iPixLay = track.component<unsigned int>(hash_nMeasSubDet);
+  } else {
+    return;
+  }
+
+  if (iPixLay > -1 && maxPixLay > 0) {
+    if (iPixLay > maxPixLay) {
+      score *= (iPixLay - maxPixLay + 1);  // layers are good !
+      iPixLay = maxPixLay;
+    }
+    score *= factorPixLay[iPixLay];
+  }
+}
+
+// This optional cut removes tracks based on the eta dependent cuts
+// The eta dependent cuts are defined in the InDet::InDetEtaDependentCutsSvc
+bool etaDependentCuts(const trackProxy_t &track,ServiceHandle<InDet::IInDetEtaDependentCutsSvc> etaDependentCutsSvc) {
+  auto trackEta = Acts::VectorHelpers::eta(track.momentum());
+  auto parm = track.parameters();
+
+  double maxEta = etaDependentCutsSvc->getMaxEta();
+  if (std::abs(trackEta) > maxEta) {
+    return true;
+  }
+
+  double maxZ0 = etaDependentCutsSvc->getMaxZImpactAtEta(trackEta);
+  if (std::abs(parm[Acts::BoundIndices::eBoundLoc1]) > maxZ0) {
+    return true;
+  }
+
+  double maxD0 = etaDependentCutsSvc->getMaxPrimaryImpactAtEta(trackEta);
+
+  if (std::abs(parm[Acts::BoundIndices::eBoundLoc0]) > maxD0) {
+    return true;
+  }
+
+  return false;
+}
+
+// This optional cut removes hits from the track based on the pattern track hits
+// NOTE: this operation will not be used until the pattern track hits are implemented in ActsTrk
+void patternTrackHitSelection(
+    const trackProxy_t &track, const trackProxy_t::ConstTrackStateProxy &ts,
+    Acts::ScoreBasedAmbiguityResolution::TrackStateTypes &trackStateType) {
+  bool ispatternTrack = false;
+  Acts::HashedString hash_nMeasSubDet = Acts::hashString("ispatternTrack");
+  if (track.container().hasColumn(hash_nMeasSubDet)) {
+    ispatternTrack = track.component<unsigned int>(hash_nMeasSubDet);
+  }
+  if (ts.typeFlags().test(Acts::TrackStateFlag::OutlierFlag) &&
+      ispatternTrack) {
+    trackStateType =
+        Acts::ScoreBasedAmbiguityResolution::TrackStateTypes::RejectedHit;
+  } else if (ts.typeFlags().test(Acts::TrackStateFlag::OutlierFlag) &&
+             !ispatternTrack) {
+    // Copy the hit to the track
+    trackStateType =
+        Acts::ScoreBasedAmbiguityResolution::TrackStateTypes::Outlier;
+  }
+}
+
+}  // namespace ScoreBasedSolverCutsImpl
+
+}  // namespace ActsTrk
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.h b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.h
new file mode 100644
index 0000000000000000000000000000000000000000..ff50adb1bc44b599d99752e2ad0e96723e1267b9
--- /dev/null
+++ b/Tracking/Acts/ActsTrackReconstruction/src/ScoreBasedSolverCutsImpl.h
@@ -0,0 +1,51 @@
+/*
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ACTSTRKFINDING_SCOREBASEDSOLVERCUTSIMPL_H
+#define ACTSTRKFINDING_SCOREBASEDSOLVERCUTSIMPL_H 1
+
+#include "Acts/AmbiguityResolution/ScoreBasedAmbiguityResolution.hpp"
+#include "Acts/EventData/VectorMultiTrajectory.hpp"
+#include "Acts/EventData/VectorTrackContainer.hpp"
+#include "ActsEvent/TrackContainer.h"
+
+// Athena
+#include "AthenaMonitoringKernel/GenericMonitoringTool.h"
+#include "AthenaMonitoringKernel/Monitored.h"
+#include "InDetRecToolInterfaces/IInDetEtaDependentCutsSvc.h"
+
+
+// Gaudi includes
+#include "Gaudi/Property.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+namespace ActsTrk {
+namespace ScoreBasedSolverCutsImpl {
+
+using trackProxy_t = ActsTrk::MutableTrackContainer::ConstTrackProxy;
+/** Adds summary information to the track container */
+ActsTrk::MutableTrackContainer addSummaryInformation(
+    ActsTrk::TrackContainer trackContainer);
+
+/** Filter for tracks based on double holes */    
+bool doubleHolesFilter(const trackProxy_t &track);
+
+/** Score modifier for tracks based on innermost pixel layer hits */
+void innermostPixelLayerHitsScore(const trackProxy_t &track, double &score);
+
+/** Score modifier for tracks based on contributing pixel layers */
+void ContribPixelLayersScore(const trackProxy_t &track, double &score);
+
+/** Filter for tracks based on eta dependent cuts */
+bool etaDependentCuts(const trackProxy_t &track, ServiceHandle<InDet::IInDetEtaDependentCutsSvc> etaDependentCutsSvc);
+
+/** Hit selection for tracks based on pattern track hits */
+void patternTrackHitSelection(
+    const trackProxy_t &track, const trackProxy_t::ConstTrackStateProxy &ts,
+    Acts::ScoreBasedAmbiguityResolution::TrackStateTypes &trackStateType);
+
+}  // namespace ScoreBasedSolverCutsImpl
+}  // namespace ActsTrk
+#endif  // ACTSTRKFINDING_SCOREBASEDSOLVERCUTSIMPL_H
\ No newline at end of file
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/detail/FitterHelperFunctions.h b/Tracking/Acts/ActsTrackReconstruction/src/detail/FitterHelperFunctions.h
index 2f138f8b7bd419d0811f46ae58d2b66e96ae3826..931c5bca719dfd0cf97e130b02b52721ac0d1a84 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/detail/FitterHelperFunctions.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/detail/FitterHelperFunctions.h
@@ -65,6 +65,8 @@ namespace ActsTrk::detail::FitterHelperFunctions {
     [&] (auto N) -> bool {
       constexpr size_t kMeasurementSize = decltype(N)::value;
 
+      auto subspaceHelper = state.template projectorSubspaceHelper<kMeasurementSize>();
+
       typename Acts::TrackStateTraits<kMeasurementSize, true>::Calibrated calibrated{
         state.template calibrated<Acts::MultiTrajectoryTraits::MeasurementSizeMax>().data()};
       
@@ -72,10 +74,8 @@ namespace ActsTrk::detail::FitterHelperFunctions {
         calibratedCovariance{state.template calibratedCovariance<Acts::MultiTrajectoryTraits::MeasurementSizeMax>().data()};
       
       // Take the projector (measurement mapping function)
-            const auto H =
-                state.projector()
-                    .template topLeftCorner<kMeasurementSize, Acts::BoundIndices::eBoundSize>()
-                    .eval();
+      // TODO use the subspace helper directly
+      const auto H = subspaceHelper.projector();
       
       const auto residual = calibrated - H * state.predicted();
       double chi2 = (residual.transpose() * (calibratedCovariance + H * state.predictedCovariance() * H.transpose()).inverse() * residual).value();     
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementCalibratorBase.icc b/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementCalibratorBase.icc
index 0bee6ccc35accf93e46c87c8e37513a2c1833057..d223c24f62e9682af1f7f4d93762e478bdd963b8 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementCalibratorBase.icc
+++ b/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementCalibratorBase.icc
@@ -13,15 +13,15 @@ namespace ActsTrk::detail {
     switch (measType) {
     case xAOD::UncalibMeasType::StripClusterType: {
       const std::size_t projector_idx  = boundType == Acts::SurfaceBounds::eAnnulus;
-      trackState.setBoundSubspaceIndices(s_stripSubspaceIndices[projector_idx]);
+      trackState.setProjectorSubspaceIndices(s_stripSubspaceIndices[projector_idx]);
       break;
     }
     case xAOD::UncalibMeasType::PixelClusterType: {
-      trackState.setBoundSubspaceIndices(s_pixelSubspaceIndices);
+      trackState.setProjectorSubspaceIndices(s_pixelSubspaceIndices);
       break;
     }
     case xAOD::UncalibMeasType::HGTDClusterType: {
-      trackState.setBoundSubspaceIndices(s_hgtdSubspaceIndices);
+      trackState.setProjectorSubspaceIndices(s_hgtdSubspaceIndices);
       break;
        }
     default:
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementSelector.h b/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementSelector.h
index e532d349dbc40a21fa9e52d32c5525bcafbde6f8..bad6e8a1ee42f5b950261e8d08184b4653358b98 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementSelector.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/detail/MeasurementSelector.h
@@ -388,7 +388,7 @@ protected:
 
          trackState.setReferenceSurface(boundParams.referenceSurface().getSharedPtr());
 
-         trackState.setBoundSubspaceIndices(subspaceIndices);
+         trackState.setProjectorSubspaceIndices(subspaceIndices);
 
          Acts::TrackStateType typeFlags = trackState.typeFlags();
          if (trackState.referenceSurface().surfaceMaterial() != nullptr) {
diff --git a/Tracking/Acts/ActsTrackReconstruction/test/MeasurementCalibratorBaseTest.cxx b/Tracking/Acts/ActsTrackReconstruction/test/MeasurementCalibratorBaseTest.cxx
index f972054065044334a8771be67438709248a4b101..6638338431cbea77c4ff54f60846dfb6089cbab2 100644
--- a/Tracking/Acts/ActsTrackReconstruction/test/MeasurementCalibratorBaseTest.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/test/MeasurementCalibratorBaseTest.cxx
@@ -33,7 +33,7 @@ void checkList(const typename Acts::MultiTrajectory<trajectory_t>::TrackStatePro
   assert( trackState.effectiveCalibratedCovariance().size() == expectedLocCov.size() );
   assert( trackState.effectiveCalibratedCovariance() == expectedLocCov.template cast<double>() );
   std::cout << "- checking BoundSubspaceIndices" << std::endl;
-  assert( trackState.boundSubspaceIndices() == expectedBoundSpaceIndices );
+  assert( trackState.projectorSubspaceIndices() == expectedBoundSpaceIndices );
 }
 
 
diff --git a/Tracking/Acts/ActsTrackReconstruction/test/TrkMeasurementCalibratorTest.cxx b/Tracking/Acts/ActsTrackReconstruction/test/TrkMeasurementCalibratorTest.cxx
index f238240104d055ef4458d551a5be9fc0c03186d0..61c22a13875639208b0992efef4ef595fd6ca6e6 100644
--- a/Tracking/Acts/ActsTrackReconstruction/test/TrkMeasurementCalibratorTest.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/test/TrkMeasurementCalibratorTest.cxx
@@ -196,5 +196,5 @@ int main() {
   assert( trackStateBackend.getTrackState(0).effectiveCalibratedCovariance().size() == 4 );
   std::cout << "- checking BoundSubspaceIndices" << std::endl;
   Acts::BoundSubspaceIndices expectedBoundSpaceIndices{ Acts::eBoundLoc0, Acts::eBoundLoc1 };
-  assert( trackStateBackend.getTrackState(0).boundSubspaceIndices() == expectedBoundSpaceIndices );
+  assert( trackStateBackend.getTrackState(0).projectorSubspaceIndices() == expectedBoundSpaceIndices );
 }