diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h
index 5c783ca162731df979df4548774fb2894f347a83..e1c5af03accab6dffe821db749936b77de9321d9 100644
--- a/algo/ca/core/tracking/CaFramework.h
+++ b/algo/ca/core/tracking/CaFramework.h
@@ -47,7 +47,6 @@ namespace cbm::algo::ca
   // *******************************
 
   using CaStationsArray_t = std::array<ca::Station<fvec>, constants::size::MaxNstations>;
-  using CaMaterialArray_t = std::array<ca::MaterialMap, constants::size::MaxNstations>;
   using Tindex            = int;  // TODO: Replace with ca::HitIndex_t, if suitable
 
   /// Main class of CA track finder algorithm
diff --git a/algo/ca/core/tracking/CaTrackExtender.cxx b/algo/ca/core/tracking/CaTrackExtender.cxx
index 7ce4d5565a515ff1aaee9091af2f5026a5449367..30e19df12ba888da2cfa91b95088a17d40960d20 100644
--- a/algo/ca/core/tracking/CaTrackExtender.cxx
+++ b/algo/ca/core/tracking/CaTrackExtender.cxx
@@ -25,7 +25,10 @@ using namespace cbm::algo::ca;
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass) : fParameters(pars), fDefaultMass(mass)
+TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass)
+  : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
+  , fDefaultMass(mass)
 {
 }
 
@@ -120,7 +123,7 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const
 
     fit.Extrapolate(hit.Z(), fld);
     ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo));
-    auto radThick = fParameters.GetMaterialThickness(ista, T.X(), T.Y());
+    auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(T.X(), T.Y());
     fit.MultipleScattering(radThick);
     fit.EnergyLossCorrection(radThick, direction);
 
@@ -272,7 +275,7 @@ void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const kf::Fit
 
     fit.Extrapolate(hit.Z(), fld);
     ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo));
-    auto radThick = fParameters.GetMaterialThickness(ista, tr.X(), tr.Y());
+    auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
     fit.MultipleScattering(radThick);
     fit.EnergyLossCorrection(radThick, direction);
 
diff --git a/algo/ca/core/tracking/CaTrackExtender.h b/algo/ca/core/tracking/CaTrackExtender.h
index 0fa6f0562fa3dced3aa2d7c470cb6fa64d7dd0cc..9554ba51c869c18bcc41bb029f3fab043b644c4b 100644
--- a/algo/ca/core/tracking/CaTrackExtender.h
+++ b/algo/ca/core/tracking/CaTrackExtender.h
@@ -88,6 +88,7 @@ namespace cbm::algo::ca
     /// Data members
 
     const Parameters<fvec>& fParameters;  ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;
     WindowData* frWData;
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
   };
diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx
index 1a2005d68318861e68c828ae519d89fd115985f2..4f6d2e089ce2259b01d7835d45e4b8a3acc7deff 100644
--- a/algo/ca/core/tracking/CaTrackFitter.cxx
+++ b/algo/ca/core/tracking/CaTrackFitter.cxx
@@ -22,6 +22,7 @@ using namespace cbm::algo;
 //
 TrackFitter::TrackFitter(const ca::Parameters<fvec>& pars, const fscal mass, const ca::TrackingMode& mode)
   : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
   , fDefaultMass(mass)
   , fTrackingMode(mode)
 {
@@ -262,8 +263,9 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
 
         fit.SetMask(initialised);
         fit.Extrapolate(z[ista], fld1);
-        fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()));
-        fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kUpstream);
+        auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
+        fit.MultipleScattering(radThick);
+        fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
 
         fit.SetMask(initialised && w[ista]);
         fit.FilterXY(mxy[ista]);
@@ -365,8 +367,9 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
 
         fit.SetMask(initialised);
         fit.Extrapolate(z[ista], fld);
-        fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()));
-        fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kDownstream);
+        auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
+        fit.MultipleScattering(radThick);
+        fit.EnergyLossCorrection(radThick, kf::FitDirection::kDownstream);
         fit.SetMask(initialised && w[ista]);
         fit.FilterXY(mxy[ista]);
         fit.FilterTime(time[ista], dt2[ista], fmask(sta[ista].timeInfo));
diff --git a/algo/ca/core/tracking/CaTrackFitter.h b/algo/ca/core/tracking/CaTrackFitter.h
index 75d79c10cac96367edcda56c55bf4a4855a339f1..b67cc572c00a0a750e3ae3d22f94eb486d39f74f 100644
--- a/algo/ca/core/tracking/CaTrackFitter.h
+++ b/algo/ca/core/tracking/CaTrackFitter.h
@@ -53,6 +53,7 @@ namespace cbm::algo::ca
     /// Data members
 
     const Parameters<fvec>& fParameters;            ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;       ///< Setup instance
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
     ca::TrackingMode fTrackingMode;
   };
diff --git a/algo/ca/core/tracking/CaTripletConstructor.cxx b/algo/ca/core/tracking/CaTripletConstructor.cxx
index cc1b935b8640cca7c0d13bfd1660a143b6b26605..a0c0aae26a8bcb2e07bef5fe9c8f1c347e229e7d 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.cxx
+++ b/algo/ca/core/tracking/CaTripletConstructor.cxx
@@ -22,6 +22,7 @@ using namespace cbm::algo::ca;
 TripletConstructor::TripletConstructor(const ca::Parameters<fvec>& pars, WindowData& wData, const fscal mass,
                                        const ca::TrackingMode& mode)
   : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
   , frWData(wData)
   , fDefaultMass(mass)
   , fTrackingMode(mode)
@@ -157,7 +158,7 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut,
 
     // add the target constraint
     fit.FilterWithTargetAtLine(fParameters.GetTargetPositionZ(), frWData.TargetMeasurement(), fld0);
-    fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaL, T.GetX(), T.GetY()));
+    fit.MultipleScattering(fSetup.GetMaterial(fIstaL).GetThicknessX0(T.GetX(), T.GetY()));
 
     // extrapolate to the middle hit
     fit.ExtrapolateLine(fStaM->fZ, fFldL);
@@ -227,7 +228,7 @@ void TripletConstructor::FindDoublets(kf::TrackKalmanFilter<fvec>& fit)
     fit.FilterXY(m_2);
     fit.FilterTime(t_2, dt2_2, fmask(fStaM->timeInfo));
     fit.SetQp0(isMomentumFitted ? fit.Tr().GetQp() : frWData.CurrentIteration()->GetMaxQp());
-    fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaM, T2.GetX(), T2.Y()));
+    fit.MultipleScattering(fSetup.GetMaterial(fIstaM).GetThicknessX0(T2.GetX(), T2.Y()));
     fit.SetQp0(fit.Tr().Qp());
 
     // check if there are other hits close to the doublet on the same station
@@ -536,7 +537,7 @@ void TripletConstructor::FindTriplets()
 
         for (int ih = startIdx + step; ih != endIdx; ih += step) {
           fit.Extrapolate(z[ih], fld);
-          auto radThick = fParameters.GetMaterialThickness(ista[ih], T.X(), T.Y());
+          auto radThick = fSetup.GetMaterial(ista[ih]).GetThicknessX0(T.X(), T.Y());
           fit.MultipleScattering(radThick);
           fit.EnergyLossCorrection(radThick, direction);
           fit.FilterXY(mxy[ih]);
diff --git a/algo/ca/core/tracking/CaTripletConstructor.h b/algo/ca/core/tracking/CaTripletConstructor.h
index eddba821f1c1c7a66ed2210d3f40c87917fb1459..5aae7fef03c527fee3c4681393bf3e30cb6055ec 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.h
+++ b/algo/ca/core/tracking/CaTripletConstructor.h
@@ -15,6 +15,7 @@
 #include "CaVector.h"
 #include "CaWindowData.h"
 #include "KfFieldRegion.h"
+#include "KfSetup.h"
 #include "KfSimd.h"
 #include "KfTrackKalmanFilter.h"
 #include "KfTrackParam.h"
@@ -75,7 +76,8 @@ namespace cbm::algo::ca
                      const double chi2Cut, const int iMC, const int maxNhits);
 
    private:
-    const Parameters<fvec>& fParameters;  ///< Object of Framework parameters class
+    const Parameters<fvec>& fParameters;       ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;  ///< Reference to the setup
     WindowData& frWData;
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
     ca::TrackingMode fTrackingMode;
diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
index 7b5d1929840cffe49c455b9e6f1dad0859fbffce..3d653e0d95b4e2c7b0cdc8a5b1635e62c26a3f54 100644
--- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
+++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
@@ -123,6 +123,10 @@ inline void CbmL1PFFitter::Initialize()
   }
 
   using cbm::algo::ca::EDetectorID;
+  // TODO: Remove CbmL1::Instance with itterations:
+  //  1) replace material with active setup
+  //  2) replace field with active setup
+  //  3) provide proper initialization of the setup
   fNmvdStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kMvd);
   fNstsStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kSts);
 
diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx
index 8d012fc01da836a996667b8103c4ac5adf3ff4e1..85575678d05f433dbbeba1ef4322a24c5183f7fd 100644
--- a/reco/L1/CbmL1Performance.cxx
+++ b/reco/L1/CbmL1Performance.cxx
@@ -1323,7 +1323,8 @@ void CbmL1::TrackFitPerformance()
                && (dir * (mc.GetStartZ() - fpAlgo->GetParameters().GetStation(iSta).fZ[0]) > 0);
                iSta += dir) {
             //           LOG(info) << iSta << " " << dir;
-            auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY());
+            auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(),
+                                                                                                      fit.Tr().GetY());
             fit.MultipleScattering(radThick);
             fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
           }
@@ -1392,7 +1393,8 @@ void CbmL1::TrackFitPerformance()
                iSta += dir) {
 
             fit.Extrapolate(fpAlgo->GetParameters().GetStation(iSta).fZ, fld);
-            auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY());
+            auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(),
+                                                                                                      fit.Tr().GetY());
             fit.MultipleScattering(radThick);
             fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
           }
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx
index 9b408bda74f73e0536cbafca77b7c04b70bee35d..f2febcd2693f4f5ea7eb3a2fcdd66b6986e08778 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.cxx
+++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx
@@ -335,9 +335,10 @@ void TrackTypeQa::FillRecoTrack(int iTrkReco, double weight)
                                && (direction * (mcTrkVertex.GetZ() - fpParameters->GetStation(iSt).fZ[0]) > 0);
              iSt += direction) {
           fTrackFit.Extrapolate(fpParameters->GetStation(iSt).fZ, fFieldRegion);
-          auto radLength = fpParameters->GetMaterialThickness(iSt, fTrackFit.Tr().GetX(), fTrackFit.Tr().GetY());
-          fTrackFit.MultipleScattering(radLength);
-          fTrackFit.EnergyLossCorrection(radLength,
+          auto radThick = fpParameters->GetActiveSetup().GetMaterial(iSt).GetThicknessX0(fTrackFit.Tr().GetX(),
+                                                                                         fTrackFit.Tr().GetY());
+          fTrackFit.MultipleScattering(radThick);
+          fTrackFit.EnergyLossCorrection(radThick,
                                          (direction > 0) ? kf::FitDirection::kDownstream : kf::FitDirection::kUpstream);
         }
         fTrackFit.Extrapolate(mcTrkVertex.GetZ(), fFieldRegion);