diff --git a/algo/ca/core/pars/CaParameters.h b/algo/ca/core/pars/CaParameters.h
index de9c472588c1963e2be56ee923d730fb0400882c..a3386d9753bd08c8d22691cff96804ef9a02761c 100644
--- a/algo/ca/core/pars/CaParameters.h
+++ b/algo/ca/core/pars/CaParameters.h
@@ -74,7 +74,9 @@ namespace cbm::algo::ca
     /// \brief Copy constructor with type conversion
     template<typename DataIn>
     Parameters(const Parameters<DataIn>& other)
-      : fMaxDoubletsPerSinglet(other.GetMaxDoubletsPerSinglet())
+      : fGeometrySetup(other.GetGeometrySetup())
+      , fActiveSetup(other.GetActiveSetup())
+      , fMaxDoubletsPerSinglet(other.GetMaxDoubletsPerSinglet())
       , fMaxTripletPerDoublets(other.GetMaxTripletPerDoublets())
       , fCAIterations(other.GetCAIterations())
       , fVertexFieldValue(other.GetVertexFieldValue())
diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt
index 84e5bd1bbeb64541968f1769ea63017e8fbc01a3..4a0da6c73a52643eb24dff5ac87629790ee84c94 100644
--- a/reco/L1/CMakeLists.txt
+++ b/reco/L1/CMakeLists.txt
@@ -26,6 +26,7 @@ set(SRCS
 ###########################################################################
   CbmCaMCModule.cxx
   CbmCaTimeSliceReader.cxx
+  CbmCaParametersHandler.cxx
 
   CbmL1.cxx
   OffLineInterface/CbmL1StsTrackFinder.cxx
@@ -77,6 +78,7 @@ set(HEADERS
   CbmL1Track.h
   CbmL1Vtx.h
   CbmCaTimeSliceReader.h
+  CbmCaParametersHandler.h
   L1Algo/utils/CaUvConverter.h
   catools/CaToolsWindowFinder.h
   catools/CaToolsLinkKey.h
diff --git a/reco/L1/CbmCaMCModule.h b/reco/L1/CbmCaMCModule.h
index ce93b7500ee369bcf3317fbcab01d31351a93a8e..010762ce17aa48fc983adb9d9736ffce777125aa 100644
--- a/reco/L1/CbmCaMCModule.h
+++ b/reco/L1/CbmCaMCModule.h
@@ -147,7 +147,7 @@ namespace cbm::ca
 
     /// @brief Registers CA parameters object
     /// @param pParameters  A shared pointer to the parameters object
-    void RegisterParameters(std::shared_ptr<ca::Parameters<fvec>>& pParameters) { fpParameters = pParameters; }
+    void RegisterParameters(std::shared_ptr<ca::Parameters<float>>& pParameters) { fpParameters = pParameters; }
 
     /// @brief Registers debug hit container
     /// @param vQaHits  Reference to debug hit container
@@ -228,7 +228,7 @@ namespace cbm::ca
     int fVerbose               = 1;          ///< Verbosity level
     int fPerformanceMode       = -1;         ///< Mode of performance
 
-    std::shared_ptr<ca::Parameters<fvec>> fpParameters = nullptr;  ///< Pointer to tracking parameters object
+    std::shared_ptr<ca::Parameters<float>> fpParameters = nullptr;  ///< Pointer to tracking parameters object
     // ------ Input data branches
     const CbmTimeSlice* fpTimeSlice  = nullptr;  ///< Current time slice
     CbmMCEventList* fpMCEventList    = nullptr;  ///< MC event list
diff --git a/reco/L1/CbmCaParametersHandler.cxx b/reco/L1/CbmCaParametersHandler.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..e30d7b53cb9321ecff30d4108b35a9272c1ad844
--- /dev/null
+++ b/reco/L1/CbmCaParametersHandler.cxx
@@ -0,0 +1,60 @@
+/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Sergei Zharko [committer] */
+
+/// \file   CbmCaParametersHandler.cxx
+/// \brief  Handles an instance of the CA-parameters as a shared pointer (implementation)
+/// \since  24.10.2024
+/// \author Sergei Zharko <s.zharko@gsi.de>
+
+#include "CbmCaParametersHandler.h"
+
+#include "CaInitManager.h"
+#include "CbmKfTrackingSetupBuilder.h"
+
+#include <sstream>
+
+namespace cbm::ca
+{
+  // -------------------------------------------------------------------------------------------------------------------
+  //
+  ParametersHandler* ParametersHandler::Instance()
+  {
+    if (fpInstance == nullptr) {
+      std::lock_guard<std::mutex> lock(fMutex);
+      fpInstance = new ParametersHandler{};
+    }
+    return fpInstance;
+  }
+
+  // -------------------------------------------------------------------------------------------------------------------
+  //
+  const ParametersHandler::ParametersPtr_t ParametersHandler::Get(const std::string& name)
+  {
+    if (fsInputName.empty()) {
+      fsInputName = name;
+    }
+    else if (fsInputName != name) {
+      // TODO: More accurate check on the files (the path can be different, but files can be the same)
+      std::stringstream msg;
+      msg << "ParametersHandler::Get: an attempt to re-define an instance of CA-parameters from "
+          << "a different path: \"" << name << "\". The parameters were provided previously from \"" << fsInputName
+          << "\"";
+      throw std::logic_error(msg.str());
+    }
+
+    if (!fpParameters.get()) {
+      using cbm::algo::kf::EFieldMode;
+      using cbm::kf::TrackingSetupBuilder;
+      // TODO: Probably, make a template from the floating-point data-type?
+      //       Point: having setup of double, defined in the parameters.
+      //       But, if the kf-setup will not be a part of the ca::Parameters, it would not be needed;
+      ca::InitManager manager;
+      manager.ReadParametersObject(fsInputName.c_str());
+      manager.SetGeometrySetup(TrackingSetupBuilder::Instance()->MakeSetup<ca::fvec>(EFieldMode::Orig));
+      fpParameters = std::make_shared<ca::Parameters<float>>(ca::Parameters<float>(manager.TakeParameters()));
+    }
+
+    return fpParameters;
+  }
+}  // namespace cbm::ca
diff --git a/reco/L1/CbmCaParametersHandler.h b/reco/L1/CbmCaParametersHandler.h
new file mode 100644
index 0000000000000000000000000000000000000000..c938df632a56398d00b326b561ee4b2af40245fd
--- /dev/null
+++ b/reco/L1/CbmCaParametersHandler.h
@@ -0,0 +1,60 @@
+/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Sergei Zharko [committer] */
+
+/// \file   CbmCaParametersHandler.h
+/// \brief  Handles an instance of the CA-parameters as a shared pointer (header)
+/// \since  24.10.2024
+/// \author Sergei Zharko <s.zharko@gsi.de>
+/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Sergei Zharko [committer] */
+
+/// \file   CbmCaParametersHandler.h
+/// \brief  Handles an instance of the CA-parameters as a shared pointer (header)
+/// \since  24.10.2024
+/// \author Sergei Zharko <s.zharko@gsi.de>
+
+#pragma once
+
+#include "CaParameters.h"
+#include "CbmL1DetectorID.h"
+
+#include <memory>
+
+
+namespace cbm::ca
+{
+  /// \brief Handles an shared pointer of CA parameters
+  class ParametersHandler {
+    using ParametersPtr_t = std::shared_ptr<cbm::algo::ca::Parameters<float>>;
+
+   public:
+    /// \brief Instance access
+    static ParametersHandler* Instance();
+
+    /// \brief Returns an shared pointer to the parameters instance
+    /// \param filename  A name of the file with the parameters
+    /// \note  If the parameters instance was read from different file, an exception will be thrown
+    /// \throw std::logic_err  If there is an attempt to read parameters from two different sources
+    const ParametersPtr_t Get(const std::string& filename);
+
+    // Disable copy and move
+    ParametersHandler(const ParametersHandler&) = delete;
+    ParametersHandler(ParametersHandler&&)      = delete;
+    ParametersHandler& operator=(const ParametersHandler&) = delete;
+    ParametersHandler& operator=(ParametersHandler&&) = delete;
+
+   private:
+    /// \brief Default constructor
+    ParametersHandler() = default;
+
+    /// \brief Destructor
+    ~ParametersHandler() = default;
+
+    inline static ParametersHandler* fpInstance{nullptr};
+    inline static std::mutex fMutex{};
+    std::string fsInputName{""};            ///< Name of the input ca.par file
+    ParametersPtr_t fpParameters{nullptr};  ///< ca::Parameters instance (double precision)
+  };
+}  // namespace cbm::ca
diff --git a/reco/L1/CbmCaTimeSliceReader.h b/reco/L1/CbmCaTimeSliceReader.h
index 908b28f01140b12dc1e0ff6996bd891e674af60b..90fac5141b0a5fd5c2a73290e96f160da4b0f24d 100644
--- a/reco/L1/CbmCaTimeSliceReader.h
+++ b/reco/L1/CbmCaTimeSliceReader.h
@@ -109,7 +109,7 @@ namespace cbm::ca
 
     /// @brief Registers CA parameters object
     /// @param pParameters  A shared pointer to the parameters object
-    void RegisterParameters(std::shared_ptr<ca::Parameters<fvec>>& pParameters) { fpParameters = pParameters; }
+    void RegisterParameters(std::shared_ptr<ca::Parameters<float>>& pParameters) { fpParameters = pParameters; }
 
     /// @brief Registers the CA IO data manager instance
     /// @param pIODataManager  Shared pointer to the IO data manager instance
@@ -185,7 +185,7 @@ namespace cbm::ca
     ca::Vector<CbmL1HitDebugInfo>* fpvQaHits         = nullptr;  ///< Pointer to array of debug hits
     ca::Vector<CbmL1Track>* fpvTracks                = nullptr;  ///< Pointer to array of reconstructed tracks
     std::shared_ptr<ca::DataManager> fpIODataManager = nullptr;  ///< Pointer to input data manager
-    std::shared_ptr<ca::Parameters<fvec>> fpParameters = nullptr;  ///< Pointer to tracking parameters object
+    std::shared_ptr<ca::Parameters<float>> fpParameters = nullptr;  ///< Pointer to tracking parameters object
 
     // Maps of hit indexes: ext -> int
     DetIdArr_t<std::unordered_map<int, int>> fvmHitExtToIntIndexMap;  ///< Hit index map ext -> int
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index e945d5127c5e31abb7d9affe6d357bb41c974d45..0f934b50e9af0a0f06fd153e623d10456f49ded9 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -505,9 +505,10 @@ try {
   //
   // ** Send formed parameters object to ca::Framework instance **
   //
+  std::shared_ptr<ca::Parameters<float>> pParameters{nullptr};
   {
     auto parameters = fInitManager.TakeParameters();
-    fpParameters    = std::make_shared<ca::Parameters<ca::fvec>>(parameters);
+    pParameters     = std::make_shared<ca::Parameters<float>>(parameters);
     fpAlgo->ReceiveParameters(std::move(parameters));
   }
   fpAlgo->Init(fTrackingMode);
@@ -522,7 +523,7 @@ try {
   fpTSReader->SetDetector(ca::EDetectorID::kTrd, fUseTRD);
   fpTSReader->SetDetector(ca::EDetectorID::kTof, fUseTOF);
 
-  fpTSReader->RegisterParameters(fpParameters);
+  fpTSReader->RegisterParameters(pParameters);
   fpTSReader->RegisterHitIndexContainer(fvExternalHits);
   fpTSReader->RegisterIODataManager(fpIODataManager);
   fpTSReader->RegisterQaHitContainer(fvHitDebugInfo);
@@ -541,7 +542,7 @@ try {
     fpMCModule->RegisterMCData(fMCData);
     fpMCModule->RegisterRecoTrackContainer(fvRecoTracks);
     fpMCModule->RegisterHitIndexContainer(fvExternalHits);
-    fpMCModule->RegisterParameters(fpParameters);
+    fpMCModule->RegisterParameters(pParameters);
     fpMCModule->RegisterQaHitContainer(fvHitDebugInfo);
     fpMCModule->RegisterFirstHitIndexes(fpTSReader->GetHitFirstIndexDet());
     if (!fpMCModule->InitRun()) {
@@ -549,23 +550,23 @@ try {
     }
   }
 
-  LOG(info) << fpParameters->ToString(1);
+  LOG(info) << pParameters->ToString(1);
   LOG(info) << "----- Numbers of stations active in tracking -----";
-  LOG(info) << "  MVD:   " << fpParameters->GetNstationsActive(ca::EDetectorID::kMvd);
-  LOG(info) << "  STS:   " << fpParameters->GetNstationsActive(ca::EDetectorID::kSts);
-  LOG(info) << "  MuCh:  " << fpParameters->GetNstationsActive(ca::EDetectorID::kMuch);
-  LOG(info) << "  TRD:   " << fpParameters->GetNstationsActive(ca::EDetectorID::kTrd);
-  LOG(info) << "  TOF:   " << fpParameters->GetNstationsActive(ca::EDetectorID::kTof);
-  LOG(info) << "  Total: " << fpParameters->GetNstationsActive();
+  LOG(info) << "  MVD:   " << pParameters->GetNstationsActive(ca::EDetectorID::kMvd);
+  LOG(info) << "  STS:   " << pParameters->GetNstationsActive(ca::EDetectorID::kSts);
+  LOG(info) << "  MuCh:  " << pParameters->GetNstationsActive(ca::EDetectorID::kMuch);
+  LOG(info) << "  TRD:   " << pParameters->GetNstationsActive(ca::EDetectorID::kTrd);
+  LOG(info) << "  TOF:   " << pParameters->GetNstationsActive(ca::EDetectorID::kTof);
+  LOG(info) << "  Total: " << pParameters->GetNstationsActive();
 
-  fNStations = fpParameters->GetNstationsActive();
+  fNStations = pParameters->GetNstationsActive();
 
   // monitor the material
   {
     LOG(info) << "\033[31;1m-------------------- L1 material -----------------------------\033[0m";
     fMaterialMonitor.clear();
     for (int i = 0; i < fNStations; i++) {
-      ca::MaterialMonitor m(&(fpAlgo->GetParameters().GetThicknessMaps()[i]), Form("station %d", i));
+      ca::MaterialMonitor m(&(pParameters->GetThicknessMaps()[i]), Form("station %d", i));
       LOG(info) << m.ToString();
       fMaterialMonitor.push_back(m);
     }
diff --git a/reco/L1/CbmL1.h b/reco/L1/CbmL1.h
index 5c8c015c45d429c11c07439ff8726ae68f326489..3d85ccf17b47284a22da855663b1a28c524643b3 100644
--- a/reco/L1/CbmL1.h
+++ b/reco/L1/CbmL1.h
@@ -430,7 +430,6 @@ class CbmL1 : public FairTask {
 
   std::unique_ptr<cbm::ca::TimeSliceReader> fpTSReader = nullptr;  ///< event/TS reader
   std::unique_ptr<cbm::ca::MCModule> fpMCModule        = nullptr;  ///< MC module
-  std::shared_ptr<ca::Parameters<fvec>> fpParameters   = nullptr;  ///< External parameters object
   cbm::ca::tools::MCData fMCData;                                  ///< MC Data object
 
   ca::InitManager fInitManager;                                ///< Tracking parameters data manager
diff --git a/reco/L1/qa/CbmCaInputQaSetup.cxx b/reco/L1/qa/CbmCaInputQaSetup.cxx
index 561882768407d0906f1f4e302708a4c32a8999ad..1224bcb0179644fb1a4cf4107f5ec2db017d50ea 100644
--- a/reco/L1/qa/CbmCaInputQaSetup.cxx
+++ b/reco/L1/qa/CbmCaInputQaSetup.cxx
@@ -9,8 +9,7 @@
 
 #include "CbmCaInputQaSetup.h"
 
-#include "CaInitManager.h"
-#include "CbmKfTrackingSetupBuilder.h"
+#include "CbmCaParametersHandler.h"
 #include "CbmL1DetectorID.h"
 #include "CbmMCDataManager.h"
 #include "FairRootManager.h"
@@ -254,22 +253,10 @@ void InputQaSetup::ExecQa()
 InitStatus InputQaSetup::InitQa()
 try {
   LOG(info) << fName << ": initializing... ";
-  auto* pSetupBuilder = cbm::kf::TrackingSetupBuilder::Instance();
-  auto CheckPresence  = [&](ca::EDetectorID detID) { fvbUseDet[detID] = pSetupBuilder->Has(detID); };
-  CheckPresence(ca::EDetectorID::kMvd);
-  CheckPresence(ca::EDetectorID::kSts);
-  CheckPresence(ca::EDetectorID::kMuch);
-  CheckPresence(ca::EDetectorID::kTrd);
-  CheckPresence(ca::EDetectorID::kTof);
 
   // Tracking parameters
-  {
-    using cbm::algo::kf::EFieldMode;
-    ca::InitManager manager;
-    manager.ReadParametersObject(fsParametersFilename.c_str());
-    manager.SetGeometrySetup(pSetupBuilder->MakeSetup<ca::fvec>(EFieldMode::Intrpl));
-    fpParameters = std::make_unique<ca::Parameters<ca::fvec>>(manager.TakeParameters());
-  }
+  fpParameters = cbm::ca::ParametersHandler::Instance()->Get(fsParametersFilename);
+  LOG(info) << fName << ": parameters instance, reference: " << fpParameters.use_count();
 
   auto pFairManager = FairRootManager::Instance();
   assert(pFairManager);
diff --git a/reco/L1/qa/CbmCaInputQaSetup.h b/reco/L1/qa/CbmCaInputQaSetup.h
index fd4d08f7ef5afe4c7a56234bda3ba577f9181b76..2abce4ec5054986187e4826cbc4e89426b6ed871 100644
--- a/reco/L1/qa/CbmCaInputQaSetup.h
+++ b/reco/L1/qa/CbmCaInputQaSetup.h
@@ -84,7 +84,7 @@ namespace cbm::ca
 
     CbmMCDataObject* fpMCEventHeader             = nullptr;  ///< Pointer to MC event header
     CbmMCEventList* fpMCEventList                          = nullptr;  ///< Pointer to MC event list
-    std::unique_ptr<ca::Parameters<ca::fvec>> fpParameters = nullptr;  ///< Pointer to CA parameters object
+    std::shared_ptr<ca::Parameters<float>> fpParameters    = nullptr;  ///< Pointer to CA parameters object
     std::string fsParametersFilename             = "";       ///< Filename for the tracking parameters
 
     DetIdArr_t<std::vector<double>> fvXmin;
diff --git a/reco/L1/qa/CbmCaOutputQa.cxx b/reco/L1/qa/CbmCaOutputQa.cxx
index 5a49b16b6a436bdbd1e1c6590b3450039eb1001d..a78dc04e3d88fb67ba9b62d75431a4f55fc160a3 100644
--- a/reco/L1/qa/CbmCaOutputQa.cxx
+++ b/reco/L1/qa/CbmCaOutputQa.cxx
@@ -9,10 +9,8 @@
 
 #include "CbmCaOutputQa.h"
 
-#include "CaInitManager.h"
 #include "CbmCaMCModule.h"
-#include "CbmKfTrackingSetupBuilder.h"
-#include "CbmQaCanvas.h"
+#include "CbmCaParametersHandler.h"
 #include "FairRootManager.h"
 #include "Logger.h"
 #include "TAttLine.h"
@@ -796,14 +794,8 @@ try {
     throw std::runtime_error(errMsg.str());
   }
 
-  {
-    using cbm::algo::kf::EFieldMode;
-    using cbm::kf::TrackingSetupBuilder;
-    ca::InitManager manager;
-    manager.ReadParametersObject(fsParametersFilename.c_str());
-    manager.SetGeometrySetup(TrackingSetupBuilder::Instance()->MakeSetup<ca::fvec>(EFieldMode::Intrpl));
-    fpParameters = std::make_shared<ca::Parameters<ca::fvec>>(manager.TakeParameters());
-  }
+  fpParameters = cbm::ca::ParametersHandler::Instance()->Get(fsParametersFilename);
+  LOG(info) << fName << ": parameters instance, reference: " << fpParameters.use_count();
 
 
   // Turn off detectors that are not used in the reconstruction setup
diff --git a/reco/L1/qa/CbmCaOutputQa.h b/reco/L1/qa/CbmCaOutputQa.h
index e832104c5255eb49606bc8ed43477b0dcb59df29..5fe0e88bf1ca6ca3b63a0dc8c7598514106e31b3 100644
--- a/reco/L1/qa/CbmCaOutputQa.h
+++ b/reco/L1/qa/CbmCaOutputQa.h
@@ -258,7 +258,7 @@ namespace cbm::ca
     std::shared_ptr<MCModule> fpMCModule           = nullptr;  ///< MC module
     std::shared_ptr<ca::DataManager> fpDataManager = nullptr;  ///< Data manager
     std::shared_ptr<tools::Debugger> fpDebugger    = nullptr;  ///< Debugger
-    std::shared_ptr<ca::Parameters<fvec>> fpParameters = nullptr;  ///< Tracking parameters object
+    std::shared_ptr<ca::Parameters<float>> fpParameters = nullptr;  ///< Tracking parameters object
 
     ca::Vector<CbmL1HitId> fvHitIds{"CbmCaOutputQa::fvHitIds"};
     ca::Vector<CbmL1HitDebugInfo> fvHits{"CbmCaOutputQa::fvHits"};
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx
index f2febcd2693f4f5ea7eb3a2fcdd66b6986e08778..3a8bbe32f0dff2d0bfed6a1a3def36cefca70bd7 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.cxx
+++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx
@@ -239,8 +239,8 @@ void TrackTypeQa::Init()
 
   // Track fitter
   fTrackFit.SetDoFitVelocity(true);  // TODO: set flag to the configuration
-  fTrackFit.SetMask(fmask::One());
-  fFieldRegion = kf::FieldRegion<fvec>(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
+  fTrackFit.SetMask(true);
+  fFieldRegion = kf::FieldRegion<double>(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
@@ -324,15 +324,15 @@ void TrackTypeQa::FillRecoTrack(int iTrkReco, double weight)
       {
         // Create an MC point for track vertex
         MCPoint mcTrkVertex = mcTrack.GetVertexPoint();
-        TrackParamV trPar(recoTrack);
+        kf::TrackParamD trPar(recoTrack);
         fTrackFit.SetTrack(trPar);
 
         // Add material effects
         int iStFst    = (*fpvHits)[recoTrack.GetFirstHitIndex()].GetStationId();
-        double dZ     = mcTrkVertex.GetZ() - fpParameters->GetStation(iStFst).fZ[0];
+        double dZ     = mcTrkVertex.GetZ() - fpParameters->GetStation(iStFst).GetZ();
         int direction = (dZ > 0.) ? 1 : -1;
         for (int iSt = iStFst; (iSt >= 0) && (iSt < fpParameters->GetNstationsActive())
-                               && (direction * (mcTrkVertex.GetZ() - fpParameters->GetStation(iSt).fZ[0]) > 0);
+                               && (direction * (mcTrkVertex.GetZ() - fpParameters->GetStation(iSt).GetZ()) > 0);
              iSt += direction) {
           fTrackFit.Extrapolate(fpParameters->GetStation(iSt).fZ, fFieldRegion);
           auto radThick = fpParameters->GetActiveSetup().GetMaterial(iSt).GetThicknessX0(fTrackFit.Tr().GetX(),
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.h b/reco/L1/qa/CbmCaTrackTypeQa.h
index ef0e0a12d95c312ed72724cb0e1b30b3033d3a79..7f0d0ba8f4b4724d52a3658bbf358319b154a87c 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.h
+++ b/reco/L1/qa/CbmCaTrackTypeQa.h
@@ -160,7 +160,7 @@ namespace cbm::ca
 
     /// @brief Registers CA parameters object
     /// @param pParameters  A shared pointer to the parameters object
-    void RegisterParameters(std::shared_ptr<ca::Parameters<ca::fvec>>& pParameters) { fpParameters = pParameters; }
+    void RegisterParameters(std::shared_ptr<ca::Parameters<float>>& pParameters) { fpParameters = pParameters; }
 
     /// @brief Sets drawing attributes for histograms
     /// @param markerCol  Marker color
@@ -293,8 +293,8 @@ namespace cbm::ca
     TProfile* fph_stations_point = nullptr;  ///< Average number of stations with MC point
     TProfile* fph_stations_hit   = nullptr;  ///< Average number of stations with hit
 
-    cbm::algo::kf::TrackKalmanFilter<ca::fvec> fTrackFit;  ///< Track fitter
-    cbm::algo::kf::FieldRegion<ca::fvec> fFieldRegion;     ///< Magnetic field
+    cbm::algo::kf::TrackKalmanFilter<double> fTrackFit;  ///< Track fitter
+    cbm::algo::kf::FieldRegion<double> fFieldRegion;     ///< Magnetic field
 
     int fCounterMC        = 0;   ///< Counter of MC tracks
     int fCounterClones    = 0;   ///< Counter of clone tracks
@@ -311,7 +311,7 @@ namespace cbm::ca
     ca::Vector<CbmL1Track>* fpvRecoTracks                  = nullptr;  ///< Pointer to vector of reconstructed tracks
     ca::Vector<CbmL1HitDebugInfo>* fpvHits                 = nullptr;  ///< Pointer to vector of reconstructed hits
     tools::MCData* fpMCData                                = nullptr;  ///< Pointer to MC data object
-    std::shared_ptr<ca::Parameters<ca::fvec>> fpParameters = nullptr;  ///< Pointer to parameters object
+    std::shared_ptr<ca::Parameters<float>> fpParameters    = nullptr;  ///< Pointer to parameters object
 
 
     // ** Cuts on tracks for a given track class **
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
index 315065019f71d02829019e30052ebf1df7e30552..356242cbcfea78e67d2780e936c83550ec486347 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
@@ -58,6 +58,18 @@ void TrackingSetupBuilder::CheckDetectorPresence()
   }
 }
 
+// ---------------------------------------------------------------------------------------------------------------------
+//
+const std::shared_ptr<cbm::algo::kf::Setup<double>> TrackingSetupBuilder::GetSharedGeoSetup()
+{
+  using cbm::algo::kf::EFieldMode;
+  using cbm::algo::kf::Setup;
+  if (!fpGeoSetup.get()) {
+    fpGeoSetup = std::make_shared<Setup<double>>(this->MakeSetup<double>(EFieldMode::Orig));
+  }
+  return fpGeoSetup;
+}
+
 // ---------------------------------------------------------------------------------------------------------------------
 //
 void TrackingSetupBuilder::Init()
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.h b/reco/kfnew/CbmKfTrackingSetupBuilder.h
index bc8fabc43ee5ea8b614ed291a47ef05e18501428..72f240b75f10764df6aba8e85eb4a7ddce082808 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.h
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.h
@@ -25,6 +25,11 @@ namespace cbm::kf
     /// \brief Instance access
     static TrackingSetupBuilder* Instance();
 
+    /// \brief Gets a shared pointer to the geometry setup
+    /// \note  The original magnetic field is defined.
+    /// \note  Use-cases: precise fit in physical analyses and QA.
+    const std::shared_ptr<cbm::algo::kf::Setup<double>> GetSharedGeoSetup();
+
     /// \brief Makes setup object
     /// \param fldMode  Field mode (kf::EFiledMode)
     template<typename T>
@@ -79,6 +84,11 @@ namespace cbm::kf
     cbm::algo::kf::SetupBuilder fBuilder{};       ///< KF-setup builder
     DetectorIDArray_t<bool> fvbDetUsed{{false}};  ///< Detector subsystem usage flag
 
+    /// \brief An instance of the tracking KF-setup in a double precision
+    /// \note  The original magnetic field is defined.
+    /// \note  Use-cases: precise fit in physical analyses and QA.
+    std::shared_ptr<cbm::algo::kf::Setup<double>> fpGeoSetup{nullptr};
+
     /// \brief Checks, if the setup was already initialized
     /// \note  Each call of the setup initializer resets the setup builder, so the initialization is called
     ///        in the next MakeSetup call