diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index 02c7fcacd2852103decb12bdf415befca3310208..f09ec98a1d742334367e69578a0656e0dcc64174 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -121,7 +121,6 @@ install(
     base/ChainContext.h
     base/Definitions.h
     base/Options.h
-    base/Prelude.h
     base/RecoParams.h
     base/SubChain.h
     ca/simd/CaSimd.h
diff --git a/algo/base/Definitions.h b/algo/base/Definitions.h
index 3a3cb83e1b166f1f15f575351fedf959be98a319..274c2e8e051c5d2927ec9a876f494bed55e8efc5 100644
--- a/algo/base/Definitions.h
+++ b/algo/base/Definitions.h
@@ -6,11 +6,31 @@
 
 #include "MicrosliceDescriptor.hpp"  // For fles::Subsystem
 
+#include <cstdint>
+
 #include "util/EnumDict.h"
 
 namespace cbm::algo
 {
 
+  // typealias for Rust-like fixed size integer types
+  using i8  = std::int8_t;
+  using u8  = std::uint8_t;
+  using i16 = std::int16_t;
+  using u16 = std::uint16_t;
+  using i32 = std::int32_t;
+  using u32 = std::uint32_t;
+  using i64 = std::int64_t;
+  using u64 = std::uint64_t;
+  using f32 = float;
+  using f64 = double;
+
+#ifdef CBM_ALGO_REAL64
+  using real = f64;
+#else
+  using real = f32;
+#endif
+
   enum class Step
   {
     Unpack,
diff --git a/algo/base/Prelude.h b/algo/base/Prelude.h
deleted file mode 100644
index 31a5f5a5eaa992ca19241736331bba2e070ec619..0000000000000000000000000000000000000000
--- a/algo/base/Prelude.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Felix Weiglhofer [committer] */
-#ifndef CBM_ALGO_BASE_PRELUDE_H
-#define CBM_ALGO_BASE_PRELUDE_H
-
-#include <cstdint>
-
-namespace cbm::algo
-{
-
-  // typealias for Rust-like fixed size integer types
-  using i8  = std::int8_t;
-  using u8  = std::uint8_t;
-  using i16 = std::int16_t;
-  using u16 = std::uint16_t;
-  using i32 = std::int32_t;
-  using u32 = std::uint32_t;
-  using i64 = std::int64_t;
-  using u64 = std::uint64_t;
-  using f32 = float;
-  using f64 = double;
-
-#ifdef CBM_ALGO_REAL64
-  using real = f64;
-#else
-  using real = f32;
-#endif
-
-}  // namespace cbm::algo
-
-#endif  // CBM_ALGO_BASE_PRELUDE_H
diff --git a/algo/base/RecoParams.h b/algo/base/RecoParams.h
index b1f08da263c03c2842e8dcda501f528901c07a50..45c845a50e55b97792bb0a4be07ba92e0c451dc1 100644
--- a/algo/base/RecoParams.h
+++ b/algo/base/RecoParams.h
@@ -6,7 +6,7 @@
 
 #include <xpu/defines.h>
 
-#include "Prelude.h"
+#include "Definitions.h"
 #include "config/Property.h"
 #include "util/EnumDict.h"
 
diff --git a/algo/base/config/BaseTypes.h b/algo/base/config/BaseTypes.h
index b69620abcde029914f5515a190dcc3887c9b4c5c..5cb598dd7f5b77df65a48c10de4d9966a487996a 100644
--- a/algo/base/config/BaseTypes.h
+++ b/algo/base/config/BaseTypes.h
@@ -8,7 +8,7 @@
 #include <tuple>
 #include <vector>
 
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace cbm::algo::config
 {
diff --git a/algo/base/config/Property.h b/algo/base/config/Property.h
index baddbd9755e22dff031fd8120c43d72f2c49374b..b099498b118e5fb7042eaea1dca2626c2121d7ea 100644
--- a/algo/base/config/Property.h
+++ b/algo/base/config/Property.h
@@ -10,7 +10,7 @@
 
 #include <yaml-cpp/emittermanip.h>
 
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace cbm::algo::config
 {
diff --git a/algo/base/config/Yaml.h b/algo/base/config/Yaml.h
index cb836b0465c89f329fd9fc2054991dd3d7f19721..71895d38ce8b208bc997c99d632eab084f38467d 100644
--- a/algo/base/config/Yaml.h
+++ b/algo/base/config/Yaml.h
@@ -11,7 +11,7 @@
 #include <yaml-cpp/yaml.h>
 
 #include "BaseTypes.h"
-#include "Prelude.h"
+#include "Definitions.h"
 #include "Property.h"
 #include "util/EnumDict.h"
 
diff --git a/algo/base/gpu/Params.h b/algo/base/gpu/Params.h
index b5e3beb259c79bb2032795a72acc56d72a251e97..86a4a407981b463f9d2fb87592933cfa5a43d706 100644
--- a/algo/base/gpu/Params.h
+++ b/algo/base/gpu/Params.h
@@ -7,7 +7,6 @@
 #include <xpu/device.h>
 
 #include "DeviceImage.h"
-#include "Prelude.h"
 #include "RecoParams.h"
 
 namespace cbm::algo
diff --git a/algo/base/util/TimingsFormat.h b/algo/base/util/TimingsFormat.h
index 593c8cae3a0ed13198176d49aeaa1da578d2291b..d01cda44806fb19e50e3d5c16870859010d48157 100644
--- a/algo/base/util/TimingsFormat.h
+++ b/algo/base/util/TimingsFormat.h
@@ -7,7 +7,7 @@
 #include <string>
 #include <string_view>
 
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace xpu
 {
diff --git a/algo/data/sts/Cluster.h b/algo/data/sts/Cluster.h
index 0cd4fd86361233dc06acd2d4e2aeafcad0401fed..1e102b32e45fc6e85844515578068db3d05ba195 100644
--- a/algo/data/sts/Cluster.h
+++ b/algo/data/sts/Cluster.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_DATA_STS_CLUSTER_H
 #define CBM_ALGO_DATA_STS_CLUSTER_H
 
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace cbm::algo::sts
 {
diff --git a/algo/data/sts/Hit.h b/algo/data/sts/Hit.h
index 1a1aa6d9e098feda0c985b05198ba909d3361a79..8446e6e1fc7beebe323f738001528a534221681d 100644
--- a/algo/data/sts/Hit.h
+++ b/algo/data/sts/Hit.h
@@ -5,7 +5,7 @@
 #ifndef CBM_ALGO_DATA_STS_HIT_H
 #define CBM_ALGO_DATA_STS_HIT_H
 
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace cbm::algo::sts
 {
diff --git a/algo/data/sts/HitfinderPars.h b/algo/data/sts/HitfinderPars.h
index b89cf25a4b6d6b156aa24fc8652faee7a9fd2c8c..84e99607ed189a6dd419cb19b0d37173431086e1 100644
--- a/algo/data/sts/HitfinderPars.h
+++ b/algo/data/sts/HitfinderPars.h
@@ -4,8 +4,8 @@
 #ifndef CBM_ALGO_DATA_STS_HITFINDERPARS_H
 #define CBM_ALGO_DATA_STS_HITFINDERPARS_H
 
+#include "Definitions.h"
 #include "LandauTable.h"
-#include "Prelude.h"
 #include "config/Property.h"
 
 namespace cbm::algo::sts
diff --git a/algo/data/sts/LandauTable.h b/algo/data/sts/LandauTable.h
index 06ca3546925440779f42945d51e0a4570d612a8e..df976a44bb8ca6e4a227848dc268c8e97bb86c1f 100644
--- a/algo/data/sts/LandauTable.h
+++ b/algo/data/sts/LandauTable.h
@@ -6,7 +6,7 @@
 
 #include <vector>
 
-#include "Prelude.h"
+#include "Definitions.h"
 #include "compat/Filesystem.h"
 
 namespace cbm::algo::sts
diff --git a/algo/detectors/sts/ReadoutConfig.h b/algo/detectors/sts/ReadoutConfig.h
index 38e3239f08e1a08ecaf7db44c6575a976ca2ba85..7328fd32b604f64acb4e1a7b834c16a5ce4cc03a 100644
--- a/algo/detectors/sts/ReadoutConfig.h
+++ b/algo/detectors/sts/ReadoutConfig.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "Prelude.h"
+#include "Definitions.h"
 #include "config/Property.h"
 
 namespace cbm::algo::sts
diff --git a/algo/detectors/sts/StsHitfinder.h b/algo/detectors/sts/StsHitfinder.h
index 07c0cd2bd67f4f9ee6fd2476e35a691a8219afa4..f41ce3354cfdff4d0dd86d865e9f560759441f22 100644
--- a/algo/detectors/sts/StsHitfinder.h
+++ b/algo/detectors/sts/StsHitfinder.h
@@ -9,7 +9,7 @@
 
 #include <xpu/device.h>
 
-#include "Prelude.h"
+#include "Definitions.h"
 #include "gpu/DeviceImage.h"
 #include "gpu/Params.h"
 #include "sts/Cluster.h"
diff --git a/algo/detectors/sts/StsUnpackChain.h b/algo/detectors/sts/StsUnpackChain.h
new file mode 100644
index 0000000000000000000000000000000000000000..c004363b2b08b5a24cc2aeebbfb1c5af53865294
--- /dev/null
+++ b/algo/detectors/sts/StsUnpackChain.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2022 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Felix Weiglhofer [committer]*/
+#ifndef CBM_ALGO_DETECTORS_STS_UNPACKCHAIN_H
+#define CBM_ALGO_DETECTORS_STS_UNPACKCHAIN_H
+
+#include <optional>
+#include <unordered_map>
+#include <vector>
+
+#include <xpu/defines.h>
+#include <yaml-cpp/yaml.h>
+
+#include "Definitions.h"
+#include "ReadoutConfig.h"
+#include "SubChain.h"
+#include "UnpackSts.h"
+
+class CbmStsDigi;
+namespace fles
+{
+  class Timeslice;
+}
+
+namespace cbm::algo::sts
+{
+
+  class UnpackChain : public SubChain {
+
+  public:
+    void Init(sts::ReadoutConfig config);
+    std::vector<CbmStsDigi> Run(const fles::Timeslice& ts);
+
+  private:
+    std::unordered_map<u16, UnpackSts> fAlgoSts;
+    std::optional<sts::ReadoutConfig> fConfig;
+  };
+
+}  // namespace cbm::algo::sts
+
+#endif  // CBM_ALGO_DETECTORS_STS_UNPACKCHAIN_H
diff --git a/algo/detectors/sts/UnpackSts.h b/algo/detectors/sts/UnpackSts.h
index d06db8877a899396eddcb1789a738b758a48d800..0be3abda746250c9fe495e6e817d2293daf04b0c 100644
--- a/algo/detectors/sts/UnpackSts.h
+++ b/algo/detectors/sts/UnpackSts.h
@@ -16,7 +16,7 @@
 #include <memory>
 #include <vector>
 
-#include "Prelude.h"
+#include "Definitions.h"
 #include "StsXyterMessage.h"
 
 namespace cbm::algo
diff --git a/algo/detectors/tof/UnpackTof.h b/algo/detectors/tof/UnpackTof.h
index 0b4457c56f0b2b5d99b7cdbd87985c59b4fc51f1..b6e9ff1a7f163d7a90a289738f31941db09e8d98 100644
--- a/algo/detectors/tof/UnpackTof.h
+++ b/algo/detectors/tof/UnpackTof.h
@@ -19,7 +19,7 @@
 #include <vector>
 
 #include "CriGet4Mess001.h"
-#include "Prelude.h"
+#include "Definitions.h"
 
 namespace cbm::algo
 {