diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 2af4efb1b63902970564aa7b943a245759dafa77..0147239fcc97ee7591729cb14d13475358cefb51 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -34,3 +34,7 @@ set(CBMDETECTORBASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/detectors PARENT_SCOPE)
 If(GTEST_FOUND)
   add_subdirectory(data/test)
 EndIf()
+
+Install(FILES  ${CMAKE_CURRENT_SOURCE_DIR}/config/CbmConfigBase.h
+        DESTINATION include
+       )
diff --git a/core/config/CbmConfigBase.h b/core/config/CbmConfigBase.h
index 870816027ae38a107694a37f96ff80375a59dc3d..9dc07e2658a1dbdf0ff0ff233080e52ab51f7d46 100644
--- a/core/config/CbmConfigBase.h
+++ b/core/config/CbmConfigBase.h
@@ -37,7 +37,7 @@ public:
     SetLogLevel(tree);
     auto moduleTree {tree.get_child_optional(Config_t::GetModuleTag())};
     if (!moduleTree) {
-      LOG(error) << "CbmConfig: module tag is not correct!\n";
+      LOG(error) << "CbmConfig: module tag not found:" << Config_t::GetModuleTag();
       return false;
     }
     if (!Validate(moduleTree.get())) return false;
diff --git a/macro/run/config.json b/macro/run/config.json
index 373b69fe6d1416fc6040b5ee7cb94a5093562df1..67b33835202c66b6d621d5d707b3b572a8457bff 100644
--- a/macro/run/config.json
+++ b/macro/run/config.json
@@ -72,6 +72,11 @@
         "psd":      "v20a",
         "platform": "v13a"
       }
+    },
+    "stackFilter": {
+      "storeAllPrimaries": true,
+      "storeAllMothers": true,
+      "storeAllDecays": true
     }
   },
   
diff --git a/sim/transport/steer/CbmTransportConfig.cxx b/sim/transport/steer/CbmTransportConfig.cxx
index 4042f16c0437b3780a630e81d6c0c483cd597cee..d7471ac7e11e884806ce2a265ac31ccb9fd0ba1f 100644
--- a/sim/transport/steer/CbmTransportConfig.cxx
+++ b/sim/transport/steer/CbmTransportConfig.cxx
@@ -64,7 +64,10 @@ CbmTransportConfig::TagSet_t CbmTransportConfig::GetValidationTags()
           "geometry.subsystems.psd",
           "geometry.subsystems.hodo",
           "geometry.subsystems.shield",
-          "geometry.subsystems.platform"};
+          "geometry.subsystems.platform",
+          "stackFilter.storeAllPrimaries",
+          "stackFilter.storeAllMothers",
+          "stackFilter.storeAllDecays"};
 }
 
 CbmTransportConfig::TagSet_t CbmTransportConfig::GetAcceptedGenerators() { return {"unigen", "pluto", "beam"}; }
@@ -259,6 +262,11 @@ bool CbmTransportConfig::SetTransportParameters(CbmTransport& obj, const pt::ptr
 }
 
 bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleTree)
+{
+  return SetGeometry(obj.GetSetup(), moduleTree);
+};
+
+bool CbmTransportConfig::SetGeometry(CbmSetup* setup, const pt::ptree& moduleTree)
 {
   auto geometry = moduleTree.get_child_optional("geometry");
   if (!geometry) {
@@ -267,9 +275,8 @@ bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleT
   }
   auto geometryTree = geometry.get();
   auto baseSetup    = geometryTree.get_optional<string>("baseSetup");
-  if (baseSetup) obj.LoadSetup(baseSetup.get().c_str());
+  if (baseSetup) setup->LoadSetup(baseSetup.get().c_str());
 
-  auto setup      = obj.GetSetup();
   auto fieldTag   = geometryTree.get_optional<string>("magneticField.tag");
   auto fieldScale = geometryTree.get_optional<float>("magneticField.scale");
   auto fieldX     = geometryTree.get_optional<float>("magneticField.position.x");
@@ -297,10 +304,25 @@ bool CbmTransportConfig::SetGeometry(CbmTransport& obj, const pt::ptree& moduleT
   return true;
 }
 
+bool CbmTransportConfig::SetStackFilter(CbmTransport& obj, const pt::ptree& moduleTree)
+{
+  auto stackFilterSettings = moduleTree.get_child_optional("stackFilter");
+  if (!stackFilterSettings) return true;
+  auto settingsTree      = stackFilterSettings.get();
+  auto& filter           = obj.GetStackFilter();
+  auto storeAllPrimaries = settingsTree.get_optional<bool>("storeAllPrimaries");
+  auto storeAllMothers   = settingsTree.get_optional<bool>("storeAllMothers");
+  auto storeAllDecays    = settingsTree.get_optional<bool>("storeAllDecays");
+  if (storeAllPrimaries) filter->SetStoreAllPrimaries(storeAllPrimaries.get());
+  if (storeAllMothers) filter->SetStoreAllPrimaries(storeAllMothers.get());
+  if (storeAllDecays) filter->SetStoreAllPrimaries(storeAllDecays.get());
+  return true;
+}
+
 bool CbmTransportConfig::LoadImpl(CbmTransport& obj, const pt::ptree& moduleTree)
 {
   return SetIO(obj, moduleTree) && SetTarget(obj, moduleTree) && SetBeamProfile(obj, moduleTree)
-         && SetTransportParameters(obj, moduleTree) && SetGeometry(obj, moduleTree);
+         && SetTransportParameters(obj, moduleTree) && SetGeometry(obj, moduleTree) && SetStackFilter(obj, moduleTree);
 }
 
 ClassImp(CbmTransportConfig)
diff --git a/sim/transport/steer/CbmTransportConfig.h b/sim/transport/steer/CbmTransportConfig.h
index 8c15558b683427ade4d63b9430c281a7b69af6c6..ba7cea807bdc10ed61248fb74a46a91a1d332f2d 100644
--- a/sim/transport/steer/CbmTransportConfig.h
+++ b/sim/transport/steer/CbmTransportConfig.h
@@ -3,6 +3,7 @@
 #include "CbmConfigBase.h"
 
 class CbmTransport;
+class CbmSetup;
 
 class CbmTransportConfig : public CbmConfigBase<CbmTransportConfig, CbmTransport> {
 
@@ -18,6 +19,8 @@ public:
   static bool SetBeamProfile(CbmTransport& obj, const pt::ptree& moduleTree);
   static bool SetTransportParameters(CbmTransport& obj, const pt::ptree& moduleTree);
   static bool SetGeometry(CbmTransport& obj, const pt::ptree& moduleTree);
+  static bool SetGeometry(CbmSetup* setup, const pt::ptree& moduleTree);
+  static bool SetStackFilter(CbmTransport& obj, const pt::ptree& moduleTree);
 
   ClassDef(CbmTransportConfig, 1);
 };