diff --git a/algo/ca/core/pars/CaInitManager.cxx b/algo/ca/core/pars/CaInitManager.cxx
index c02199999cbca27f31934e4fa51aac70b50a4331..47562e049149410c8f2f5c1565a23b34822b40db 100644
--- a/algo/ca/core/pars/CaInitManager.cxx
+++ b/algo/ca/core/pars/CaInitManager.cxx
@@ -164,8 +164,12 @@ bool InitManager::FormParametersContainer()
   {
     fParameters.fActiveSetup = fParameters.fGeometrySetup;
     for (const auto& station : fvStationInfo) {
-      fParameters.fActiveSetup.DisableLayer(station.GetDetectorID(), station.GetStationID());
+      if (!station.GetTrackingStatus()) {
+        fParameters.fActiveSetup.DisableLayer(station.GetDetectorID(), station.GetStationID());
+      }
     }
+    LOG(info) << "CA: Geometry setup\n" << fParameters.fGeometrySetup.ToString(3);
+    LOG(info) << "CA: Active setup\n" << fParameters.fActiveSetup.ToString(3);
   }
 
 
diff --git a/algo/kf/core/geo/KfField.cxx b/algo/kf/core/geo/KfField.cxx
index a1c6632af73e8be960216f9a6fd241f39f04cd47..48417db0e37599e49c6d0b8445582a99951f6fc3 100644
--- a/algo/kf/core/geo/KfField.cxx
+++ b/algo/kf/core/geo/KfField.cxx
@@ -29,7 +29,7 @@ std::string FieldBase<T, EFieldMode::Intrpl>::ToString(int indentLevel, int verb
   msg << indent << "Field slices:";
   for (int iSlice = 0; iSlice < GetNofFieldSlices(); ++iSlice) {
     const auto& fldSlice = fvFieldSlices[iSlice];
-    msg << indent << "\n - " << fldSlice.ToString(indentLevel + 1, verbose);
+    msg << '\n' << indent << iSlice << ") " << fldSlice.ToString(0, verbose);
   }
   return msg.str();
 }
@@ -45,7 +45,7 @@ std::string FieldBase<T, EFieldMode::Orig>::ToString(int indentLevel, int /*verb
   msg << indent << "Original field function";
   msg << indent << "Field slice z-positions: ";
   for (int iSlice = 0; iSlice < GetNofFieldSlices(); ++iSlice) {
-    msg << indent << "\n " << iSlice << ") " << fvFieldSliceZ[iSlice];
+    msg << "\n " << indent << iSlice << ") " << fvFieldSliceZ[iSlice];
   }
   return msg.str();
 }
diff --git a/algo/kf/core/geo/KfMaterialMap.cxx b/algo/kf/core/geo/KfMaterialMap.cxx
index c4024ef5823c0fd43fae21953b99a2e0a6441c8d..2307b2bcec769e0c40dd1a38721a03c88481f120 100644
--- a/algo/kf/core/geo/KfMaterialMap.cxx
+++ b/algo/kf/core/geo/KfMaterialMap.cxx
@@ -151,8 +151,7 @@ std::string MaterialMap::ToString(int indentLevel, int verbose) const
   if (verbose > 0) {
     constexpr char indentCh = '\t';
     std::string indent(indentLevel, indentCh);
-    msg << indent
-        << format("zRef = {:<12} cm, range [{:<12}, {:<12}] cm, nBins = {:<8}, XYmax = {:<12} cm", fZref, fZmin, fZmax,
+    msg << format("zRef = {:<12} cm, range [{:<12}, {:<12}] cm, nBins = {:<8}, XYmax = {:<12} cm", fZref, fZmin, fZmax,
                   fNbins, fXYmax);
     if (verbose > 1) {
       msg << indent << indentCh << "\nContent(rebinned to 10 bins):\n";
@@ -162,14 +161,14 @@ std::string MaterialMap::ToString(int indentLevel, int verbose) const
       msg << indent << indentCh << setw(15) << "y [cm] \\ x [cm]" << ' ';
       for (int iX{0}; iX < mapTmp.fNbins; ++iX) {
         float xRef{-mapTmp.fXYmax + (mapTmp.fXYmax * (2 * iX + 1)) / mapTmp.fNbins};
-        msg << indent << indentCh << setw(8) << xRef << ' ';
+        msg << setw(10) << xRef << ' ';
       }
       msg << '\n';
       for (int iY{0}; iY < mapTmp.fNbins; ++iY) {
         float yRef{-mapTmp.fXYmax + (mapTmp.fXYmax * (2 * iY + 1)) / mapTmp.fNbins};
         msg << indent << indentCh << setw(15) << yRef << ' ';
         for (int iX{0}; iX < mapTmp.fNbins; ++iX) {
-          msg << indent << indentCh << setw(8) << mapTmp.fTable[iX + mapTmp.fNbins * iY] << ' ';
+          msg << setw(10) << mapTmp.fTable[iX + mapTmp.fNbins * iY] << ' ';
         }
         msg << '\n';
       }
diff --git a/algo/kf/core/geo/KfModuleIndexMap.cxx b/algo/kf/core/geo/KfModuleIndexMap.cxx
index 20754d86702686815d77870411c5af7565c63361..300f688760be8ed83f355c3ce1dd0be4ad44158a 100644
--- a/algo/kf/core/geo/KfModuleIndexMap.cxx
+++ b/algo/kf/core/geo/KfModuleIndexMap.cxx
@@ -30,32 +30,10 @@ namespace cbm::algo::kf
     constexpr char IndentCh = '\t';
     std::string indent(indentLevel, IndentCh);
     std::stringstream msg;
-    if constexpr (0) {
-      msg << '\n' << indent << format("{:<50} ", "Detector internal to external index map: ");
-      for (auto id : fvDetIntToExt) {
-        msg << format("{:>8} ", id);
-      }
-      msg << '\n' << indent << format("{:<50} ", "Detector external to internal index map: ");
-      for (auto id : fvDetExtToInt) {
-        msg << format("{:>8} ", id);
-      }
-      msg << '\n' << indent << format("{:<50} ", "First global ID vs. internal detector: ");
-      for (auto id : fvDetLocOffset) {
-        msg << format("{:>8} ", id);
-      }
-      msg << '\n' << indent << format("{:<50} ", "Local ID to global ID: ");
-      for (auto id : fvLocToGlb) {
-        msg << format("{:>8} ", id);
-      }
-      msg << '\n' << indent << format("{:<50} ", "Geo ID to (detID:locID): ");
-      for (const auto& [iDetExt, iLoc] : fvGlbToLoc) {
-        msg << format("{:>3}:{:<3}", iDetExt, iLoc);
-      }
-    }
-
+    msg << indent << format("{:>8} {:>8} {:>8}\n", "det.ID", "loc.ID", "glob.ID");
     for (int iGlb = 0; iGlb < GetNofLayers(); ++iGlb) {
       const auto& [iDetExt, iLoc] = fvGlbToLoc[iGlb];
-      msg << indent << format("- ({:>3}, {:>3}) -- {:>3}\n", iDetExt, iLoc, iGlb);
+      msg << indent << format("{:>8} {:>8} {:>8}\n", iDetExt, iLoc, iGlb);
     }
 
     return msg.str();
diff --git a/algo/kf/core/geo/KfModuleIndexMap.h b/algo/kf/core/geo/KfModuleIndexMap.h
index ad7d5a446deed3aa5465a7a07999d113141f0393..68917257c6d67420cd70023d1450037a45f29883 100644
--- a/algo/kf/core/geo/KfModuleIndexMap.h
+++ b/algo/kf/core/geo/KfModuleIndexMap.h
@@ -144,23 +144,22 @@ namespace cbm::algo::kf
   {
     // Check, if the detector id is there
     auto iDetExtDsbl{static_cast<int>(detIdDisable)};
-    if (iDetExtDsbl >= static_cast<int>(fvDetExtToInt.size())) {
+    if (iDetExtDsbl >= static_cast<int>(fvDetIntToExt.size())) {
       return;  // Nothing to disable, detector is already not in the map
     }
 
-    auto iDetIntDsbl{fvDetExtToInt[iDetExtDsbl]};
-    if (fvDetLocOffset[iDetIntDsbl + 1] <= locIdDisable) {
-      return;  // Nothing to disable, component is already not in the map
-    }
-
-    auto& iGlbDsbl = fvLocToGlb[fvDetLocOffset[iDetIntDsbl] + locIdDisable];
+    auto& iGlbDsbl = fvLocToGlb[fvDetLocOffset[fvDetExtToInt[iDetExtDsbl]] + locIdDisable];
     if (iGlbDsbl == -1) {
       return;  // Nothing to disable, component is already inactive
     }
 
     fvGlbToLoc.erase(fvGlbToLoc.begin() + iGlbDsbl);  // Removing component from glob->(det, loc) map
+    for (auto& val : fvLocToGlb) {
+      if (val > iGlbDsbl) {
+        --val;
+      }
+    }
     iGlbDsbl = -1;
-    // NOTE: information on disabled detectors stays there, probably we should remove it
   }
 
   // -------------------------------------------------------------------------------------------------------------------
diff --git a/algo/kf/core/geo/KfSetupBuilder.h b/algo/kf/core/geo/KfSetupBuilder.h
index b67338ea5be80de96182af24224e51d85e469b0e..a9bb0375d766d553973f62e233023972db31e710 100644
--- a/algo/kf/core/geo/KfSetupBuilder.h
+++ b/algo/kf/core/geo/KfSetupBuilder.h
@@ -79,6 +79,7 @@ namespace cbm::algo::kf
 
     /// \brief  Initializes, validates and cashes the parameters
     /// \throw  std::runtime_error If pre-initialization was incomplete
+    /// \note   Does not touch the field function and field type/mode
     void Init();
 
     /// \brief Creates a setup instance
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 0cfd9c1d121e0f54e7cb8f064cf947e8e9cf8b3e..cebb1bc4df1015b8af02099504bba903da6e1a22 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -38,7 +38,7 @@
 #include "CaToolsDebugger.h"
 #include "CaToolsField.h"
 #include "CbmEvent.h"
-#include "CbmKfTrackingSetupInitializer.h"
+#include "CbmKfTrackingSetupBuilder.h"
 #include "CbmMCDataObject.h"
 #include "CbmStsFindTracks.h"
 #include "CbmStsHit.h"
@@ -74,7 +74,7 @@ using cbm::algo::ca::Parameters;
 using cbm::ca::MCModule;
 using cbm::ca::TimeSliceReader;
 using cbm::ca::tools::MaterialHelper;
-using cbm::kf::TrackingSetupInitializer;
+using cbm::kf::TrackingSetupBuilder;
 
 ClassImp(CbmL1);
 
@@ -497,10 +497,10 @@ try {
     // ** Initialize KF-setup **
     // *************************
     {
-      auto pSetupInitializer = std::make_unique<TrackingSetupInitializer>();
-      pSetupInitializer->Use(fUseMVD, fUseSTS, fUseMUCH, fUseTRD, fUseTOF);
-      pSetupInitializer->Init(cbm::algo::kf::EFieldMode::Intrpl);
-      auto trackerSetup  = pSetupInitializer->MakeSetup<float>();
+      auto* pSetupBuilder = TrackingSetupBuilder::Instance();
+      pSetupBuilder->Use(fUseMVD, fUseSTS, fUseMUCH, fUseTRD, fUseTOF);
+      pSetupBuilder->SetFieldMode(cbm::algo::kf::EFieldMode::Intrpl);
+      auto trackerSetup  = pSetupBuilder->MakeSetup<float>();
       TString outputFile = fSTAPDataDir + "/" + fSTAPDataPrefix + "." + TString(kSTAPSetupSuffix.data());
       cbm::algo::kf::SetupBuilder::Store(trackerSetup, outputFile.Data());
       fInitManager.SetGeometrySetup(trackerSetup);
@@ -552,24 +552,6 @@ try {
   }
   fpAlgo->Init(fTrackingMode);
 
-
-  if constexpr (1) {
-    // **** FEATURE: KF-SETUP INITIALIZATION *****
-    // Creating a setup
-    auto pSetupInitializer = std::make_unique<TrackingSetupInitializer>();
-    pSetupInitializer->Use(fUseMVD, fUseSTS, fUseMUCH, fUseTRD, fUseTOF);
-    pSetupInitializer->Init(cbm::algo::kf::EFieldMode::Intrpl);
-    auto trackerSetup = pSetupInitializer->MakeSetup<double>();
-    LOG(info) << "!!!!\n!!!!\n!!!!\n!!!! KF SETUP:\n"
-              << trackerSetup.ToString(0) << "\nsize: " << sizeof(trackerSetup) << "\n!!!!\n!!!!\n!!!!";
-
-    // Storing setup
-    cbm::algo::kf::SetupBuilder::Store(trackerSetup, "./trackerSetup.geo.kf.bin");
-
-    // Reading setup (now in fvec):
-  }
-
-
   // Initialize time-slice reader
   fpTSReader = std::make_unique<TimeSliceReader>();
   fpTSReader->SetDetector(ca::EDetectorID::kMvd, fUseMVD);
diff --git a/reco/kfnew/CMakeLists.txt b/reco/kfnew/CMakeLists.txt
index 2b02e92bc89ed9400d3d03274768aec3163fa6be..98e15d274ba0589da563d42f72a04b0f1946ca0a 100644
--- a/reco/kfnew/CMakeLists.txt
+++ b/reco/kfnew/CMakeLists.txt
@@ -6,7 +6,7 @@ set(INCLUDE_DIRECTORIES
 
 set(SRCS 
   ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTarget.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTrackingSetupInitializer.cxx
+  ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTrackingSetupBuilder.cxx
 )
 
 SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS "-O3")
@@ -73,7 +73,7 @@ install(
   FILES
     CbmKfOriginalField.h
     CbmKfTarget.h
-    CbmKfTrackingSetupInitializer.h
+    CbmKfTrackingSetupBuilder.h
   DESTINATION
     include/
 )
diff --git a/reco/kfnew/CbmKfTarget.h b/reco/kfnew/CbmKfTarget.h
index f9106f4c2c9af3651539ebe2ce57925f21827359..a1a6af8c8bccbd10757691c4ce2b2a915cd4d1a9 100644
--- a/reco/kfnew/CbmKfTarget.h
+++ b/reco/kfnew/CbmKfTarget.h
@@ -52,6 +52,7 @@ namespace cbm::kf
     /// \brief Default constructor
     Target() = default;
 
+
     /// \brief Destructor
     ~Target() = default;
 
diff --git a/reco/kfnew/CbmKfTrackingSetupInitializer.cxx b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
similarity index 62%
rename from reco/kfnew/CbmKfTrackingSetupInitializer.cxx
rename to reco/kfnew/CbmKfTrackingSetupBuilder.cxx
index f2cd0fe495d1ec34b94e22fb5946d1b76be492f6..c19f97ed5789921ba4ffabbba07b5a1960d1532b 100644
--- a/reco/kfnew/CbmKfTrackingSetupInitializer.cxx
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
@@ -2,12 +2,12 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Sergei Zharko [committer] */
 
-/// \file   CbmKfTrackingSetupInitializer.cxx
+/// \file   CbmKfTrackingSetupBuilder.cxx
 /// \brief  Tracking setup initializer in CBM (source)
 /// \since  28.08.2024
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "CbmKfTrackingSetupInitializer.h"
+#include "CbmKfTrackingSetupBuilder.h"
 
 #include "CbmKfOriginalField.h"
 #include "CbmKfTarget.h"
@@ -25,15 +25,17 @@
 
 #include <functional>
 
-using cbm::kf::TrackingSetupInitializer;
+using cbm::kf::TrackingSetupBuilder;
 using kf::tools::MaterialMapFactory;
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-bool TrackingSetupInitializer::Init(cbm::algo::kf::EFieldMode fldMode)
+// TODO: Provide separate initialization steps for geo layers and field
+bool TrackingSetupBuilder::Init()
 try {
   using cbm::algo::kf::EFieldType;
   using cbm::algo::kf::GeoLayer;
+  using cbm::algo::kf::defs::MinField;
   fBuilder.Reset();
 
   // Check, if a subsystem exists in the setup
@@ -44,11 +46,21 @@ try {
   fbUseTof &= CbmSetup::Instance()->IsActive(ECbmModuleId::kTof);
 
   // Magnetic field initialization
-  if (FairRunAna::Instance()->GetField()) {
-    fBuilder.SetFieldProperty(fldMode, OriginalField(), EFieldType::Normal);
+  if (auto* pField = FairRunAna::Instance()->GetField()) {
+    LOG(info) << fabs(pField->GetBx(0., 0., 0.)) << ", " << fabs(pField->GetBy(0., 0., 0.)) << ", "
+              << fabs(pField->GetBz(0., 0., 0.)) << ", " << pField->GetType();
+    if (
+      pField->GetType() == 0
+      && fabs(pField->GetBx(0., 0., 0.)) < MinField<
+           double> && fabs(pField->GetBy(0., 0., 0.)) < MinField<double> && fabs(pField->GetBz(0., 0., 0.)) < MinField<double>) {
+      fBuilder.SetFieldProperty(fFieldMode, ZeroField(), EFieldType::Null);
+    }
+    else {
+      fBuilder.SetFieldProperty(fFieldMode, OriginalField(), EFieldType::Normal);
+    }
   }
   else {
-    fBuilder.SetFieldProperty(fldMode, ZeroField(), EFieldType::Null);
+    fBuilder.SetFieldProperty(fFieldMode, ZeroField(), EFieldType::Null);
   }
 
   // Tracking station property initialization
@@ -73,7 +85,7 @@ try {
   CollectStations(fbUseTrd ? CbmTrdTrackingInterface::Instance() : nullptr, ETrackingDetID::Trd);
   CollectStations(fbUseTof ? CbmTofTrackingInterface::Instance() : nullptr, ETrackingDetID::Tof);
 
-  // Retriev target properties
+  // Retrieve target properties
   const auto* pTarget = Target::Instance();
   fBuilder.SetTargetProperty(pTarget->GetX(), pTarget->GetY(), pTarget->GetZ(), pTarget->GetDz(), pTarget->GetRmax());
 
@@ -83,25 +95,46 @@ try {
   pMaterialFactory->SetDoRadialProjection(pTarget->GetZ());
   pMaterialFactory->SetNraysPerDim(kMatCreatorNrays);
   fBuilder.SetMaterialMapFactory(pMaterialFactory);
-
-
   fBuilder.Init();
 
-  LOG(info) << "kf::TrackingSetupInitializer: Tracking setup was initialized successfully";
+  // Set the initialization flags back
+  fbInitialized = true;
+
+  LOG(info) << "kf::TrackingSetupBuilder: Tracking setup was initialized successfully";
   return true;
 }
 catch (const std::exception& err) {
-  LOG(error) << "kf::TrackingSetupInitializer: Tracking setup was not initialized. Reason: " << err.what();
+  LOG(error) << "kf::TrackingSetupBuilder: Tracking setup was not initialized. Reason: " << err.what();
   return false;
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-void TrackingSetupInitializer::Use(bool mvd, bool sts, bool much, bool trd, bool tof)
+TrackingSetupBuilder* TrackingSetupBuilder::Instance()
+{
+  if (fpInstance == nullptr) {
+    std::lock_guard<std::mutex> lock(fMutex);
+    fpInstance = new TrackingSetupBuilder{};
+  }
+  return fpInstance;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+//
+void TrackingSetupBuilder::SetFieldMode(cbm::algo::kf::EFieldMode fldMode)
+{
+  fFieldMode    = fldMode;
+  fbInitialized = false;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+//
+void TrackingSetupBuilder::Use(bool mvd, bool sts, bool much, bool trd, bool tof)
 {
-  fbUseMvd  = mvd;
-  fbUseSts  = sts;
-  fbUseMuch = much;
-  fbUseTrd  = trd;
-  fbUseTof  = tof;
+  fbUseMvd      = mvd;
+  fbUseSts      = sts;
+  fbUseMuch     = much;
+  fbUseTrd      = trd;
+  fbUseTof      = tof;
+  fbInitialized = false;
 }
diff --git a/reco/kfnew/CbmKfTrackingSetupInitializer.h b/reco/kfnew/CbmKfTrackingSetupBuilder.h
similarity index 67%
rename from reco/kfnew/CbmKfTrackingSetupInitializer.h
rename to reco/kfnew/CbmKfTrackingSetupBuilder.h
index 66e5838d6b80204ba2891ab0620ce43e0578b35c..5aadffec75a97627ce09d026ef94400fb448f5ea 100644
--- a/reco/kfnew/CbmKfTrackingSetupInitializer.h
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.h
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Sergei Zharko [committer] */
 
-/// \file   CbmKfTrackingSetupInitializer.h
+/// \file   CbmKfTrackingSetupBuilder.h
 /// \brief  Tracking setup initializer in CBM (source)
 /// \since  28.08.2024
 /// \author Sergei Zharko <s.zharko@gsi.de>
@@ -32,13 +32,26 @@ namespace cbm::kf
     END
   };
 
-  /// \class TrackingSetupInitializer
+  /// \class TrackingSetupBuilder
   /// \brief Encapsulation of the kf::Setup initialization routines for CBM
-  class TrackingSetupInitializer {
+  class TrackingSetupBuilder {
    public:
-    /// \brief  Initializes the instance
+    /// \brief Instance access
+    static TrackingSetupBuilder* Instance();
+
+    /// \brief Makes setup object
+    template<typename T>
+    cbm::algo::kf::Setup<T> MakeSetup()
+    {
+      if (!fbInitialized) {
+        this->Init();
+      }
+      return fBuilder.MakeSetup<T>();
+    }
+
+    /// \brief  Sets field mode
     /// \param  fldMode  Field mode
-    bool Init(cbm::algo::kf::EFieldMode fldMode);
+    void SetFieldMode(cbm::algo::kf::EFieldMode fldMode);
 
     /// \brief  Enables/disables detector subsystems in the setup
     /// \param  mvd   Is MVD used
@@ -48,14 +61,26 @@ namespace cbm::kf
     /// \param  tof   Is TOF used
     void Use(bool mvd, bool sts, bool much, bool trd, bool tof);
 
-    /// \brief Makes setup object
-    template<typename T>
-    cbm::algo::kf::Setup<T> MakeSetup()
-    {
-      return fBuilder.MakeSetup<T>();
-    }
+    // Disable copy and move
+    TrackingSetupBuilder(const TrackingSetupBuilder&) = delete;
+    TrackingSetupBuilder(TrackingSetupBuilder&&)      = delete;
+    TrackingSetupBuilder& operator=(const TrackingSetupBuilder&) = delete;
+    TrackingSetupBuilder& operator=(TrackingSetupBuilder&&) = delete;
 
    private:
+    /// \brief Default constructor
+    TrackingSetupBuilder() = default;
+
+    /// \brief Destructor
+    ~TrackingSetupBuilder() = default;
+
+    inline static TrackingSetupBuilder* fpInstance{nullptr};
+    inline static std::mutex fMutex{};
+
+    /// \brief  Initializes the instance
+    /// \param  fldMode  Field mode
+    bool Init();
+
     cbm::algo::kf::SetupBuilder fBuilder{};
 
     // Material map creator properties (TODO: Provide setters, if needed)
@@ -66,11 +91,18 @@ namespace cbm::kf
     static constexpr double kTargFieldInitStep{2.5};  ///< Step between nodes in the target field initialization [cm]
     static constexpr double kTargMaterialOffset{1};   ///< Offset between target upper limit and its material zMax [cm]
 
+    cbm::algo::kf::EFieldMode fFieldMode{cbm::algo::kf::EFieldMode::Intrpl};
+
     bool fbUseMvd{false};   ///< Are MVD stations included in the tracking setup
     bool fbUseSts{false};   ///< Are STS stations included in the tracking setup
     bool fbUseMuch{false};  ///< Are MuCh stations included in the tracking setup
     bool fbUseTrd{false};   ///< Are TRD stations included in the tracking setup
     bool fbUseTof{false};   ///< Are TOF stations included in the tracking setup
+
+    /// \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
+    bool fbInitialized{false};  ///< Check, if the setup builder initialized
   };