diff --git a/reco/detectors/sts/CMakeLists.txt b/reco/detectors/sts/CMakeLists.txt
index 7b28844bb09c3232716bc95f5779809897a5f9b8..07203f6f8881eef4c6d4fee7e1742a97da414e3d 100644
--- a/reco/detectors/sts/CMakeLists.txt
+++ b/reco/detectors/sts/CMakeLists.txt
@@ -21,6 +21,7 @@ CbmStsRecoModule.cxx
 CbmStsTrackFinderIdeal.cxx
 
 unpack/CbmStsUnpackAlgo.cxx
+unpack/CbmStsUnpackAlgoBase.cxx
 unpack/CbmStsUnpackAlgoLegacy.cxx
 unpack/CbmStsUnpackConfig.cxx
 unpack/CbmStsUnpackMonitor.cxx
diff --git a/reco/detectors/sts/CbmRecoStsLinkDef.h b/reco/detectors/sts/CbmRecoStsLinkDef.h
index 4ea941a18e7194fcb3e522a9a42f349a44b5b040..7e7281d5ad8d84fa51d517f3c49b322489642790 100644
--- a/reco/detectors/sts/CbmRecoStsLinkDef.h
+++ b/reco/detectors/sts/CbmRecoStsLinkDef.h
@@ -20,6 +20,7 @@
 #pragma link C++ class CbmStsTrackFinderIdeal + ;
 
 #pragma link C++ class CbmStsUnpackAlgo + ;
+#pragma link C++ class CbmStsUnpackAlgoBase + ;
 #pragma link C++ class CbmStsUnpackAlgoLegacy + ;
 #pragma link C++ class CbmStsUnpackConfig + ;
 #pragma link C++ class CbmStsUnpackMonitor + ;
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
index e738045445779a8cee446e8c049e1dd0b0494cbf..f9992f794ad3cebcad198198b654af452e2b892b 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
@@ -13,7 +13,7 @@
 #include <cstdint>
 #include <iomanip>
 
-CbmStsUnpackAlgo::CbmStsUnpackAlgo() : CbmRecoUnpackAlgo("CbmStsUnpackAlgo") {}
+CbmStsUnpackAlgo::CbmStsUnpackAlgo() : CbmStsUnpackAlgoBase("CbmStsUnpackAlgo") {}
 
 CbmStsUnpackAlgo::~CbmStsUnpackAlgo() {}
 
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
index 9f5ffb1d27f9b13f231a5948d39e32bf67295f63..b59acc51392576084ca67cea889dba49a1054aea 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
@@ -21,23 +21,11 @@
 #ifndef CbmStsUnpackAlgo_H
 #define CbmStsUnpackAlgo_H
 
-#include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
 #include "CbmMcbm2018StsPar.h"
-#include "CbmRecoUnpackAlgo.tmpl"
-#include "CbmStsDigi.h"
-#include "CbmStsUnpackMonitor.h"
+#include "CbmStsUnpackAlgoBase.h"
 
-#include "Timeslice.hpp"  // timeslice
 
-#include <Rtypes.h>  // for types
-#include <RtypesCore.h>
-
-#include <cstddef>
-#include <cstdint>
-#include <memory>
-#include <utility>
-
-class CbmStsUnpackAlgo : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+class CbmStsUnpackAlgo : public CbmStsUnpackAlgoBase {
 public:
   /** @brief Create the Cbm Trd Unpack AlgoBase object */
   CbmStsUnpackAlgo();
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..a4af6daa95486c2cee81273db0019ea92aae3eaa
--- /dev/null
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx
@@ -0,0 +1,12 @@
+/* Copyright (C) 2010 - 2021 Fair GmbH 
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Dominik Smith */
+
+#include "CbmStsUnpackAlgoBase.h"
+
+CbmStsUnpackAlgoBase::CbmStsUnpackAlgoBase(std::string name) : CbmRecoUnpackAlgo(name) {}
+
+CbmStsUnpackAlgoBase::~CbmStsUnpackAlgoBase() {}
+
+
+ClassImp(CbmStsUnpackAlgoBase)
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h
new file mode 100644
index 0000000000000000000000000000000000000000..32634cff69e7f94eb308d1c93a45783eb8f0895a
--- /dev/null
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h
@@ -0,0 +1,70 @@
+/* Copyright (C) 2010 - 2021 Fair GmbH 
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Dominik Smith */
+
+/**
+ * @file CbmStsUnpackAlgoBase.h
+ * @author Dominik Smith (d.smith@gsi.de)
+ * @brief Baseclass for the Sts unpacker algorithms
+ * @version 0.1
+ * @date 2021-04-21
+ * 
+ * @copyright Copyright (c) 2021
+ * 
+ * This is the base class for the algorithmic part of the tsa data unpacking 
+ * processes of the CbmSts.
+ * The actual translation from tsa to digi happens in the derived classes. 
+ * 
+ * 
+*/
+
+#ifndef CbmStsUnpackAlgoBase_H
+#define CbmStsUnpackAlgoBase_H
+
+#include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
+#include "CbmRecoUnpackAlgo.tmpl"
+#include "CbmStsDigi.h"
+#include "CbmStsUnpackMonitor.h"
+
+#include "Timeslice.hpp"  // timeslice
+
+#include <FairTask.h>  // for InitStatus
+
+#include <Rtypes.h>  // for types
+#include <RtypesCore.h>
+
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+#include <utility>
+
+class CbmStsUnpackAlgoBase : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+public:
+  /** @brief Create the Cbm Sts Unpack AlgoBase object */
+  CbmStsUnpackAlgoBase(std::string name);
+
+  /** @brief Destroy the Cbm Sts Unpack Task object */
+  virtual ~CbmStsUnpackAlgoBase();
+
+  /** @brief Copy constructor - not implemented **/
+  CbmStsUnpackAlgoBase(const CbmStsUnpackAlgoBase&) = delete;
+
+  /** @brief Assignment operator - not implemented **/
+  CbmStsUnpackAlgoBase& operator=(const CbmStsUnpackAlgoBase&) = delete;
+
+  // Setters
+  /** @brief Set a predefined monitor @param monitor predefined unpacking monitor */
+  void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> monitor) { fMonitor = monitor; }
+
+
+protected:
+  // Monitoring
+  /** @brief Potential (online) monitor for the unpacking process */
+  std::shared_ptr<CbmStsUnpackMonitor> fMonitor = nullptr;
+
+
+private:
+  ClassDef(CbmStsUnpackAlgoBase, 2)
+};
+
+#endif  // CbmStsUnpackAlgoBase_H
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
index cf90af171dc084793c901d02a728993993c60a31..0561a7295b8a35633fb5f182ce9a808c0949bd27 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
@@ -30,7 +30,7 @@
 // -------------------------------------------------------------------------
 
 CbmStsUnpackAlgoLegacy::CbmStsUnpackAlgoLegacy()
-  : CbmRecoUnpackAlgo("CbmStsUnpackAlgoLegacy")
+  : CbmStsUnpackAlgoBase("CbmStsUnpackAlgoLegacy")
   ,
   /// From the class itself
   fbMonitorMode(false)
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
index d097121527a90d6c185cbc7d2b780e7246ec0b59..34c1af708468d649bc34173ab8d3c0f539925029 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
@@ -9,10 +9,7 @@
 #define CbmStsUnpackAlgoLegacy_H
 
 #include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
-#include "CbmRecoUnpackAlgo.tmpl"
-
-// Data
-#include "CbmStsDigi.h"
+#include "CbmStsUnpackAlgoBase.h"
 
 #include "StsXyterFinalHit.h"
 #include "StsXyterMessage.h"
@@ -29,7 +26,7 @@
 class CbmMcbm2018StsPar;
 class CbmStsUnpackMonitor;
 
-class CbmStsUnpackAlgoLegacy : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+class CbmStsUnpackAlgoLegacy : public CbmStsUnpackAlgoBase {
 public:
   CbmStsUnpackAlgoLegacy();
   ~CbmStsUnpackAlgoLegacy();