diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index 612c11a1a5f537f078177f538ff91be607a8aa03..6bdea89fa675d96224651ea9fda40b58ca87c50a 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -50,15 +50,14 @@ if (CBM_ONLINE_STANDALONE)
   include(CbmMacros) # for 'download_project_if_needed', 'Gen_Exe_Script' macro
 
   add_subdirectory(../external external)
+  add_subdirectory(../core/utility utility)
 endif()
 
-add_subdirectory(kfp)
 add_subdirectory(log)
-add_subdirectory(data)
-add_subdirectory(kf)
 add_subdirectory(ca)
-add_subdirectory(base)
-#add_subdirectory(kfp) # For KFParticleOnline
+add_subdirectory(online)
+add_subdirectory(kf)
+add_subdirectory(kfp)
 
 # exclude unittests from being build inside the container
 if (NOT CBM_ONLINE_STANDALONE)
@@ -82,7 +81,6 @@ set(SRCS
   base/compat/Algorithm.cxx
   base/util/MemoryLogger.cxx
   base/util/StlUtils.cxx
-  base/util/EnumDict.cxx
   base/util/TimingsFormat.cxx
   data/sts/HitfinderPars.cxx
   data/sts/LandauTable.cxx
@@ -192,31 +190,16 @@ add_custom_target(generateBuildInfo
 add_library(Algo SHARED ${SRCS})
 
 target_include_directories(Algo
-  PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/data
-         ${CMAKE_CURRENT_SOURCE_DIR}/base
-         ${CMAKE_CURRENT_SOURCE_DIR}/evbuild
-         ${CMAKE_CURRENT_SOURCE_DIR}/global
-         ${CMAKE_CURRENT_SOURCE_DIR}/trigger
-         ${CMAKE_CURRENT_SOURCE_DIR}/evselector
-         ${CMAKE_CURRENT_SOURCE_DIR}/unpack
-         ${CMAKE_CURRENT_SOURCE_DIR}/detectors
-         ${CMAKE_CURRENT_SOURCE_DIR}/qa
-         ${CMAKE_CURRENT_SOURCE_DIR}/qa/unpack
-         ${CMAKE_CURRENT_SOURCE_DIR}/qa/hitfind
-         ${CMAKE_CURRENT_SOURCE_DIR}/qa/trigger
-         ${CMAKE_CURRENT_SOURCE_DIR}/kf
-         ${CMAKE_CURRENT_SOURCE_DIR}/kf/core
-         ${CMAKE_CURRENT_SOURCE_DIR}/kf/core/utils
-         ${CMAKE_CURRENT_SOURCE_DIR}/kfp
-         ${CMAKE_CURRENT_SOURCE_DIR}/ca
-         ${CMAKE_CURRENT_SOURCE_DIR}/ca/qa
-         ${CMAKE_CURRENT_SOURCE_DIR}/ca/core/data
-         ${CMAKE_CURRENT_SOURCE_DIR}
+  PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..
          ${CMAKE_SOURCE_DIR}/core/data/global
 )
 
 target_link_libraries(Algo
   PUBLIC    OnlineData
+            CbmUtility
+            CbmYamlInterface
+            OnlineContainers
+            CbmYamlInterface
             KfCore
             CaCore
             ROOT::GenVector
@@ -234,7 +217,6 @@ target_link_libraries(Algo
             cppzmq
             poolstl
   PRIVATE   CbmKFParticleOnlineInterface
-  INTERFACE CbmYamlInterface
 )
 target_compile_definitions(Algo PUBLIC NO_ROOT)
 xpu_attach(Algo ${DEVICE_SRCS})
@@ -269,31 +251,16 @@ if (NOT CBM_ONLINE_STANDALONE)
   add_library(AlgoOffline SHARED ${SRCS})
 
   target_include_directories(AlgoOffline
-    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/data
-           ${CMAKE_CURRENT_SOURCE_DIR}/base
-           ${CMAKE_CURRENT_SOURCE_DIR}/evbuild
-           ${CMAKE_CURRENT_SOURCE_DIR}/global
-           ${CMAKE_CURRENT_SOURCE_DIR}/trigger
-           ${CMAKE_CURRENT_SOURCE_DIR}/evselector
-           ${CMAKE_CURRENT_SOURCE_DIR}/unpack
-           ${CMAKE_CURRENT_SOURCE_DIR}/detectors
-           ${CMAKE_CURRENT_SOURCE_DIR}/qa
-           ${CMAKE_CURRENT_SOURCE_DIR}/qa/unpack
-           ${CMAKE_CURRENT_SOURCE_DIR}/qa/hitfind
-           ${CMAKE_CURRENT_SOURCE_DIR}/qa/trigger
-           ${CMAKE_CURRENT_SOURCE_DIR}/kf
-           ${CMAKE_CURRENT_SOURCE_DIR}/kf/core
-           ${CMAKE_CURRENT_SOURCE_DIR}/kf/core/utils
-           ${CMAKE_CURRENT_SOURCE_DIR}/kfp
-           ${CMAKE_CURRENT_SOURCE_DIR}/ca
-           ${CMAKE_CURRENT_SOURCE_DIR}/ca/qa
-           ${CMAKE_CURRENT_SOURCE_DIR}/ca/core/data
-           ${CMAKE_CURRENT_SOURCE_DIR}
+    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..
            ${CMAKE_SOURCE_DIR}/core/data/global
   )
 
   target_link_libraries(AlgoOffline
     PUBLIC    CbmData
+              CbmYamlInterface
+              CbmUtility
+              CbmContainers
+              CbmYamlInterface
               KfCoreOffline
               CaCoreOffline
               ROOT::GenVector
@@ -311,7 +278,6 @@ if (NOT CBM_ONLINE_STANDALONE)
               cppzmq
               poolstl
     PRIVATE   CbmKFParticleOnlineInterface
-    INTERFACE CbmYamlInterface
   )
   xpu_attach(AlgoOffline ${DEVICE_SRCS})
 
@@ -339,68 +305,21 @@ endif()
 ########################################################################################################################
 
 install(TARGETS Algo DESTINATION lib)
-install(DIRECTORY base/compat TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-#install(DIRECTORY base/yaml TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY base/util TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY base/gpu TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY data/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/bmon TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/much TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/tof TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/trd TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/trd2d TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY detectors/rich TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY ca/qa TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY qa TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY qa/unpack TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY ca TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY kfp TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-install(DIRECTORY evbuild TYPE INCLUDE FILES_MATCHING PATTERN "*.h")
-
-
-install(
-  FILES
-    base/ChainContext.h
-    base/Definitions.h
-    base/HistogramSender.h
-    base/Options.h
-    base/RecoParams.h
-    base/SubChain.h
-    base/System.h
-    base/PartitionedVector.h
-    base/PartitionedSpan.h
-    base/DigiData.h
-    base/PODVector.h
-    base/AlgoTraits.h
-    base/AuxDigiData.h
-    base/BuildInfo.h
-    base/Exceptions.h
-    base/MainConfig.h
-    evselector/DigiEventSelector.h
-    evselector/DigiEventSelectorConfig.h
-    trigger/DigiTriggerConfig.h
-    trigger/HitMultTrigger.h
-    trigger/TimeClusterTrigger.h
-    trigger/V0Trigger.h
-    trigger/V0TriggerConfig.h
-    unpack/CommonUnpacker.h
-    unpack/UnpackMSBase.h
-    global/ParFiles.h
-    global/Reco.h
-    global/RecoResults.h
-    global/RecoResultsInputArchive.h
-    global/RecoResultsOutputArchive.h
-    global/StorableRecoResults.h
-    qa/Accumulators.h
-    qa/Histogram.h
-    ca/TrackingChain.h
-    ca/TrackingChainConfig.h
-    ca/TrackingDefs.h
-    ca/TrackingSetup.h
-    # NOTE: SZh 20.11.2023:
-    #       The ca/qa directory depends on the online qa classes, so for now it has to be a part of the Algo library.
-    ca/qa/CaQa.h
-  DESTINATION
-    include/
-)
+
+install(DIRECTORY base DESTINATION include/algo PATTERN "*.h")
+install(DIRECTORY ca 
+        DESTINATION include/algo
+        FILES_MATCHING 
+        PATTERN "ca/core" EXCLUDE  # NOTE: installed from another library
+        PATTERN "*.h")
+install(DIRECTORY data        DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY detectors   DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY evbuild     DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY evselector  DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY global      DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY qa          DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY kfp         DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY trigger     DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+install(DIRECTORY unpack      DESTINATION include/algo FILES_MATCHING PATTERN "*.h")
+
+
diff --git a/algo/base/AuxDigiData.h b/algo/base/AuxDigiData.h
index e464da7e281fbb57a33557ccf43ff98947fd2767..7e24979c5c54926afd6f3439255434ea61a0e54c 100644
--- a/algo/base/AuxDigiData.h
+++ b/algo/base/AuxDigiData.h
@@ -9,14 +9,14 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "bmon/UnpackMS.h"
-#include "much/UnpackMS.h"
-#include "rich/UnpackMS.h"
-#include "sts/UnpackMS.h"
-#include "tof/UnpackMS.h"
-#include "trd/UnpackMS.h"
-#include "trd2d/UnpackMS.h"
+#include "algo/detectors/bmon/UnpackMS.h"
+#include "algo/detectors/much/UnpackMS.h"
+#include "algo/detectors/rich/UnpackMS.h"
+#include "algo/detectors/sts/UnpackMS.h"
+#include "algo/detectors/tof/UnpackMS.h"
+#include "algo/detectors/trd/UnpackMS.h"
+#include "algo/detectors/trd2d/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 #include <vector>
 
diff --git a/algo/base/BuildInfo.cxx.in b/algo/base/BuildInfo.cxx.in
index 22cc1d2ec91982b3ea3d77972664d6fb1efd5bf6..2b9151f1e775839880cc556be5f7435bfea8a2c4 100644
--- a/algo/base/BuildInfo.cxx.in
+++ b/algo/base/BuildInfo.cxx.in
@@ -1,7 +1,7 @@
 /* Copyright (C) 2022 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer]*/
-#include "BuildInfo.h"
+#include "algo/base/BuildInfo.h"
 
 // GENERATED BY CMAKE.
 // DON'T CHANGE BY HAND. MODIFY .in-File INSTEAD.
diff --git a/algo/base/CMakeLists.txt b/algo/base/CMakeLists.txt
deleted file mode 100644
index 93b295fe0a83615d30852967c9754863bd3cd2d8..0000000000000000000000000000000000000000
--- a/algo/base/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-add_subdirectory(yaml)
diff --git a/algo/base/ChainContext.cxx b/algo/base/ChainContext.cxx
index 9e75e9d8077048b3c21a9d9ee9b2db542fe34cea..8050aa07e20448c03dd586ae21a09ae6fdc6cd82 100644
--- a/algo/base/ChainContext.cxx
+++ b/algo/base/ChainContext.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "ChainContext.h"
+#include "algo/base/ChainContext.h"
 
 #include <Monitor.hpp>
 
diff --git a/algo/base/ChainContext.h b/algo/base/ChainContext.h
index 6f8ae590c9812400be0a91e6c45d5a55c7fddab5..fa9f1c094701199e4ea39d17487c40597c15c6d5 100644
--- a/algo/base/ChainContext.h
+++ b/algo/base/ChainContext.h
@@ -4,8 +4,8 @@
 #ifndef CBM_ALGO_BASE_CHAINCONTEXT_H
 #define CBM_ALGO_BASE_CHAINCONTEXT_H
 
-#include "Options.h"
-#include "RecoParams.h"
+#include "algo/base/Options.h"
+#include "algo/base/RecoParams.h"
 
 #include <memory>
 #include <optional>
diff --git a/algo/base/Definitions.h b/algo/base/Definitions.h
index c9cac7a917126b96499a3c8ede8824f1ee9bb5ca..73cc85bf7769c911f885ab59b8340a0ac352f721 100644
--- a/algo/base/Definitions.h
+++ b/algo/base/Definitions.h
@@ -4,8 +4,8 @@
 #ifndef CBM_BASE_TYPES_H
 #define CBM_BASE_TYPES_H
 
+#include "CbmEnumDict.h"
 #include "MicrosliceDescriptor.hpp"  // For fles::Subsystem
-#include "util/EnumDict.h"
 
 #include <cstdint>
 
@@ -108,18 +108,18 @@ CBM_ENUM_DICT(fles::Subsystem,
 );
 
 CBM_ENUM_DICT(cbm::algo::Step,
-  {"Unpack", Step::Unpack},
-  {"DigiTrigger", Step::DigiTrigger},
-  {"LocalReco", Step::LocalReco},
-  {"Tracking", Step::Tracking}
+  {"Unpack", cbm::algo::Step::Unpack},
+  {"DigiTrigger", cbm::algo::Step::DigiTrigger},
+  {"LocalReco", cbm::algo::Step::LocalReco},
+  {"Tracking", cbm::algo::Step::Tracking}
 );
 
 CBM_ENUM_DICT(cbm::algo::RecoData,
-  {"DigiTimeslice", RecoData::DigiTimeslice},
-  {"DigiEvent", RecoData::DigiEvent},
-  {"Cluster", RecoData::Cluster},
-  {"Hit", RecoData::Hit},
-  {"Track", RecoData::Track}
+  {"DigiTimeslice", cbm::algo::RecoData::DigiTimeslice},
+  {"DigiEvent", cbm::algo::RecoData::DigiEvent},
+  {"Cluster", cbm::algo::RecoData::Cluster},
+  {"Hit", cbm::algo::RecoData::Hit},
+  {"Track", cbm::algo::RecoData::Track}
 );
 
 CBM_ENUM_DICT(cbm::algo::Setup,
diff --git a/algo/base/DigiData.cxx b/algo/base/DigiData.cxx
index 79fd5a4836022d2caae819e0715f3fcf0a1ecfe7..6f67e43530d383537214ec3b58b9345dc290453f 100644
--- a/algo/base/DigiData.cxx
+++ b/algo/base/DigiData.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "DigiData.h"
+#include "algo/base/DigiData.h"
 
 using namespace cbm::algo;
 
diff --git a/algo/base/MainConfig.cxx b/algo/base/MainConfig.cxx
index 4039d89f8b6e73503fa7a2d0911999f5c719d134..87e99da08e9e885b54cae88cedd9cdc35d9a6091 100644
--- a/algo/base/MainConfig.cxx
+++ b/algo/base/MainConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "MainConfig.h"
+#include "algo/base/MainConfig.h"
 
 #include <fstream>
 
diff --git a/algo/base/Options.cxx b/algo/base/Options.cxx
index abce4f27d969904068407a2022446d9cc36946c4..6702b4e4c892ba305359358c54173a7073b02bfb 100644
--- a/algo/base/Options.cxx
+++ b/algo/base/Options.cxx
@@ -1,9 +1,9 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "Options.h"
+#include "algo/base/Options.h"
 
-#include "util/StlUtils.h"
+#include "algo/base/util/StlUtils.h"
 
 #include <boost/program_options.hpp>
 
diff --git a/algo/base/Options.h b/algo/base/Options.h
index f1b508a0699f5839a0b1f5b0e764f0d6a29f8e34..7eaea4aa3869799510fdbca0c7abac3a42673595 100644
--- a/algo/base/Options.h
+++ b/algo/base/Options.h
@@ -5,9 +5,9 @@
 #define CBM_ALGO_BASE_OPTIONS_H
 
 #include "AlgoFairloggerCompat.h"
-#include "Definitions.h"
-#include "compat/Filesystem.h"
-#include "util/ProfilingLevel.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/compat/Filesystem.h"
+#include "algo/base/util/ProfilingLevel.h"
 
 #include <set>
 #include <string>
diff --git a/algo/base/RecoParams.cxx b/algo/base/RecoParams.cxx
index 851df115fa80ce0a11cc589f403a6c75ee38ae8f..41b06a908f563524a2777ef79721b80e70452d96 100644
--- a/algo/base/RecoParams.cxx
+++ b/algo/base/RecoParams.cxx
@@ -1,6 +1,6 @@
 /* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "RecoParams.h"
+#include "algo/base/RecoParams.h"
 
 CBM_YAML_INSTANTIATE(cbm::algo::RecoParams);
diff --git a/algo/base/RecoParams.h b/algo/base/RecoParams.h
index db747f189c96263f8dd7bc9fa1be3466c408c47e..c933c63de14bf7e90579b777b89e13a832d7a7ba 100644
--- a/algo/base/RecoParams.h
+++ b/algo/base/RecoParams.h
@@ -5,7 +5,6 @@
 #define CBM_ALGO_BASE_RECOPARAMS_H
 
 #include "Definitions.h"
-#include "util/EnumDict.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
@@ -106,14 +105,14 @@ namespace cbm::algo
 CBM_YAML_EXTERN_DECL(cbm::algo::RecoParams);
 
 CBM_ENUM_DICT(cbm::algo::RecoParams::SortMode,
-  {"BlockSort", RecoParams::SortMode::BlockSort},
-  {"CUBSegmentedSort", RecoParams::SortMode::CUBSegmentedSort}
+  {"BlockSort", cbm::algo::RecoParams::SortMode::BlockSort},
+  {"CUBSegmentedSort", cbm::algo::RecoParams::SortMode::CUBSegmentedSort}
 );
 
 CBM_ENUM_DICT(cbm::algo::RecoParams::AllocationMode,
-  {"Auto", RecoParams::AllocationMode::Auto},
-  {"Static", RecoParams::AllocationMode::Static},
-  {"Dynamic", RecoParams::AllocationMode::Dynamic}
+  {"Auto", cbm::algo::RecoParams::AllocationMode::Auto},
+  {"Static", cbm::algo::RecoParams::AllocationMode::Static},
+  {"Dynamic", cbm::algo::RecoParams::AllocationMode::Dynamic}
 );
 
 #endif  // CBM_ALGO_BASE_RECOPARAMS_H
diff --git a/algo/base/SubChain.h b/algo/base/SubChain.h
index 63599cd9d42d0ab9fddb3c73630cee0df0b02406..2ee0abe48238767e834192b6e6f94597705e5d37 100644
--- a/algo/base/SubChain.h
+++ b/algo/base/SubChain.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_BASE_SUBCHAIN_H
 #define CBM_ALGO_BASE_SUBCHAIN_H
 
-#include "ChainContext.h"
+#include "algo/base/ChainContext.h"
 
 #include <gsl/pointers>
 
diff --git a/algo/base/System.cxx b/algo/base/System.cxx
index 88bf1ac51644322c1423ce8f01f502e95e0d56cb..4863ac537e0cf109c10e5b1e917f0ed84e2ee8cb 100644
--- a/algo/base/System.cxx
+++ b/algo/base/System.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "System.h"
+#include "algo/base/System.h"
 
 #include <cstdio>
 
diff --git a/algo/base/compat/Algorithm.h b/algo/base/compat/Algorithm.h
index 7c02acaaf8a2bfcb2a1b93275d4858191e3f59e5..2d6068e9cefea6603bc91c0c91075e629c483daf 100644
--- a/algo/base/compat/Algorithm.h
+++ b/algo/base/compat/Algorithm.h
@@ -15,7 +15,7 @@
  * If TBB is not available, we also falls back to sequential algorithms.
 **/
 
-#include "BuildInfo.h"
+#include "algo/base/BuildInfo.h"
 
 #include <algorithm>
 #include <poolstl/algorithm>
diff --git a/algo/base/compat/OpenMP.h b/algo/base/compat/OpenMP.h
index b535e43b37525438c8bc1b7defde529cd23a19c9..249f08606277f47b5dcd8e465b38ba81d1846417 100644
--- a/algo/base/compat/OpenMP.h
+++ b/algo/base/compat/OpenMP.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_BASE_COMPAT_OPENMP_H
 #define CBM_ALGO_BASE_COMPAT_OPENMP_H
 
-#include "BuildInfo.h"
+#include "algo/base/BuildInfo.h"
 
 #ifdef HAVE_OMP
 #include <omp.h>
diff --git a/algo/base/gpu/DeviceImage.cxx b/algo/base/gpu/DeviceImage.cxx
index c54939a1cbc4eacaf05869eeb348847f4d5c0fff..a3a9b40eb6f4e04b3f060b2cb47017ebdbecdf1c 100644
--- a/algo/base/gpu/DeviceImage.cxx
+++ b/algo/base/gpu/DeviceImage.cxx
@@ -1,6 +1,6 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "DeviceImage.h"
+#include "algo/base/gpu/DeviceImage.h"
 
 XPU_IMAGE(cbm::algo::GPUReco);
diff --git a/algo/base/gpu/Params.cxx b/algo/base/gpu/Params.cxx
index 7dacbf36d7e13c0bf836840474df323ca2950efe..500f9aada49170d96bb33f0f6f99943f6de2ed39 100644
--- a/algo/base/gpu/Params.cxx
+++ b/algo/base/gpu/Params.cxx
@@ -1,6 +1,6 @@
 /* Copyright (C) 2022 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer]*/
-#include "Params.h"
+#include "algo/base/gpu/Params.h"
 
 XPU_EXPORT(cbm::algo::Params);
diff --git a/algo/base/gpu/Params.h b/algo/base/gpu/Params.h
index d14f15ec9b7d53965de4e83e1c9f74f651a5f29c..2ed36f21d9d0ff5640698f0bfbf9d01336758a97 100644
--- a/algo/base/gpu/Params.h
+++ b/algo/base/gpu/Params.h
@@ -4,8 +4,8 @@
 #ifndef CBM_ALGO_GPU_CONFIG_H
 #define CBM_ALGO_GPU_CONFIG_H
 
-#include "DeviceImage.h"
-#include "RecoParams.h"
+#include "algo/base/RecoParams.h"
+#include "algo/base/gpu/DeviceImage.h"
 
 #include <xpu/device.h>
 
diff --git a/algo/base/util/MemoryLogger.cxx b/algo/base/util/MemoryLogger.cxx
index ac50ef9f8bcbfd7a467c31ccf73329c4cfb74247..efd6f8c1717ef0d7854bff47436fcd07c60ac82c 100644
--- a/algo/base/util/MemoryLogger.cxx
+++ b/algo/base/util/MemoryLogger.cxx
@@ -2,10 +2,10 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "MemoryLogger.h"
+#include "algo/base/util/MemoryLogger.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "System.h"
+#include "algo/base/System.h"
 
 using namespace cbm::algo;
 
diff --git a/algo/base/util/ProfilingLevel.h b/algo/base/util/ProfilingLevel.h
index d358bd36c9c6f5c3575981271ba59fa14c44c8d8..5d9469359ed8d41c3038bb40b7a4a84c1e85def0 100644
--- a/algo/base/util/ProfilingLevel.h
+++ b/algo/base/util/ProfilingLevel.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "EnumDict.h"
+#include "CbmEnumDict.h"
 
 namespace cbm::algo
 {
diff --git a/algo/base/util/StlUtils.cxx b/algo/base/util/StlUtils.cxx
index e8db142cc35e418609999a2cb94a1d3a546685f9..b4025dda5745fe3c4723c691653ea9637ead15d4 100644
--- a/algo/base/util/StlUtils.cxx
+++ b/algo/base/util/StlUtils.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "StlUtils.h"
+#include "algo/base/util/StlUtils.h"
 
 using namespace cbm;
 
diff --git a/algo/base/util/TimingsFormat.cxx b/algo/base/util/TimingsFormat.cxx
index 0733bd6bf8ce3985fc5794a3917e8fed5beceec1..2955d7c0301ad9c0b21419c362631628ac5982c2 100644
--- a/algo/base/util/TimingsFormat.cxx
+++ b/algo/base/util/TimingsFormat.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2023-2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "TimingsFormat.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <iomanip>
 #include <sstream>
diff --git a/algo/base/util/TimingsFormat.h b/algo/base/util/TimingsFormat.h
index 4c8ca275afb372258ce8aa1d664241a6b5fb5a11..bc435991e1bab0fb36ae79d7c6fcf954a0def691 100644
--- a/algo/base/util/TimingsFormat.h
+++ b/algo/base/util/TimingsFormat.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_BASE_UTIL_TIMINGSFORMAT_H
 #define CBM_ALGO_BASE_UTIL_TIMINGSFORMAT_H
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <string>
 #include <string_view>
diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index 374c23bb1e053d132dda601a4049746b910c90e7..3d5aab5f3a1466e79a605ed18ecb7ad201fb64ea 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -7,15 +7,16 @@
 /// \brief  A chain class to execute CA tracking algorithm in online reconstruction (implementation)
 /// \author S.Zharko <s.zharko@gsi.de>
 
-#include "TrackingChain.h"
+#include "algo/ca/TrackingChain.h"
 
 #include "CaDefs.h"
 #include "CaHit.h"
 #include "CaInitManager.h"
 #include "CaParameters.h"
 #include "KfSetupBuilder.h"
-#include "ParFiles.h"
-#include "compat/OpenMP.h"
+#include "PODVector.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/global/ParFiles.h"
 #include "yaml/Yaml.h"
 
 #include <boost/archive/binary_oarchive.hpp>
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 39ba48e26fca9cea0cfa295408eb14345a856918..71a58b12449283ed0195598746b1cd1339942699 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -11,18 +11,16 @@
 
 #include "CaDataManager.h"
 #include "CaFramework.h"
-#include "CaQa.h"
 #include "CaTrack.h"
 #include "CaTrackingMonitor.h"
 #include "CaVector.h"
 #include "PartitionedSpan.h"
-#include "RecoResults.h"
-#include "SubChain.h"
-#include "TrackingChainConfig.h"
-#include "TrackingDefs.h"
-#include "TrackingSetup.h"
-#include "sts/Hit.h"
-#include "tof/Hit.h"
+#include "algo/base/SubChain.h"
+#include "algo/ca/TrackingChainConfig.h"
+#include "algo/ca/TrackingDefs.h"
+#include "algo/ca/TrackingSetup.h"
+#include "algo/ca/qa/CaQa.h"
+#include "algo/global/RecoResults.h"
 
 #include <memory>
 #include <vector>
diff --git a/algo/ca/TrackingSetup.cxx b/algo/ca/TrackingSetup.cxx
index 109390a1f2b1b31c9e600fe2d7c05d1c6b5334f5..45142e21192312e124438b961caaf51b91f598f9 100644
--- a/algo/ca/TrackingSetup.cxx
+++ b/algo/ca/TrackingSetup.cxx
@@ -9,7 +9,7 @@
 
 #include "TrackingSetup.h"
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 using cbm::algo::TrackingSetup;
 using fles::Subsystem;
diff --git a/algo/ca/TrackingSetup.h b/algo/ca/TrackingSetup.h
index ba678c4e3bc8429c8aeb40d53faf664b23262b07..b3d726526baa558b04112b0e4592aa15681ea622 100644
--- a/algo/ca/TrackingSetup.h
+++ b/algo/ca/TrackingSetup.h
@@ -9,10 +9,10 @@
 
 #pragma once
 
-#include "SubChain.h"
-#include "sts/TrackingInterface.h"
-#include "tof/TrackingInterface.h"
-#include "trd/TrackingInterface.h"
+#include "algo/base/SubChain.h"
+#include "algo/detectors/sts/TrackingInterface.h"
+#include "algo/detectors/tof/TrackingInterface.h"
+#include "algo/detectors/trd/TrackingInterface.h"
 
 #include <type_traits>
 
diff --git a/algo/ca/qa/CaQa.cxx b/algo/ca/qa/CaQa.cxx
index b921d16813e9bae3f93e871810e3ea04c4272400..f8d9181ac5787bfb343aa281c47b9c7091bec94e 100644
--- a/algo/ca/qa/CaQa.cxx
+++ b/algo/ca/qa/CaQa.cxx
@@ -13,7 +13,7 @@
 #include "CaInputData.h"
 #include "CaParameters.h"
 #include "CaTrack.h"
-#include "TrackingDefs.h"
+#include "algo/ca/TrackingDefs.h"
 
 #include <algorithm>
 #include <fstream>
diff --git a/algo/ca/qa/CaQa.h b/algo/ca/qa/CaQa.h
index 90b7a9db01aeb61a7967fff564984901d2c376e6..7fe797745c9ffc5b1c4562b51a88154d290130b6 100644
--- a/algo/ca/qa/CaQa.h
+++ b/algo/ca/qa/CaQa.h
@@ -13,7 +13,7 @@
 #include "CaHit.h"  // for HitIndex_t
 #include "CaTimesliceHeader.h"
 #include "CaVector.h"
-#include "qa/QaTaskHeader.h"
+#include "algo/qa/QaTaskHeader.h"
 
 namespace cbm::algo
 {
diff --git a/algo/data/sts/Cluster.h b/algo/data/sts/Cluster.h
index 927d787e30640529dab5d9eeabc567945648c4ab..23bdd523a2b8863ccd02bac6d587f40ba39f8101 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 "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <boost/serialization/access.hpp>
 
diff --git a/algo/data/sts/Hit.h b/algo/data/sts/Hit.h
index 2df0d8370f9f0eb1edead87114bbaae959a8021e..ff3c3bf04be2b6623723d4fdc54416c3eb21bfbe 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 "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <boost/serialization/access.hpp>
 
diff --git a/algo/data/sts/HitfinderPars.cxx b/algo/data/sts/HitfinderPars.cxx
index ac6fe3baca23ba494fd720cc113209b1914451d2..dcacb5149f46a89f536b7486c9e588418ba92811 100644
--- a/algo/data/sts/HitfinderPars.cxx
+++ b/algo/data/sts/HitfinderPars.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "HitfinderPars.h"
+#include "algo/data/sts/HitfinderPars.h"
 
 using namespace cbm::algo;
 CBM_YAML_INSTANTIATE(sts::HitfinderPars);
diff --git a/algo/data/sts/HitfinderPars.h b/algo/data/sts/HitfinderPars.h
index 3e58fa30e0d46d0649f23572d61d7ffee11db8f8..865e94884cb5243af6dc6fa66fa331e3a31c1200 100644
--- a/algo/data/sts/HitfinderPars.h
+++ b/algo/data/sts/HitfinderPars.h
@@ -3,8 +3,8 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
-#include "Definitions.h"
-#include "LandauTable.h"
+#include "algo/base/Definitions.h"
+#include "algo/data/sts/LandauTable.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/data/sts/LandauTable.cxx b/algo/data/sts/LandauTable.cxx
index 7d466c38ee9e0417585b1a85bf53f02ec528d64f..38fcc138c6b39a5a2ea584a8f9f1af5465b550e9 100644
--- a/algo/data/sts/LandauTable.cxx
+++ b/algo/data/sts/LandauTable.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "LandauTable.h"
+#include "algo/data/sts/LandauTable.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/data/sts/LandauTable.h b/algo/data/sts/LandauTable.h
index 639e6b0044b80f5d8619f16a7502484797ff5c0c..04329dc6473cf0d66eabc1383b505577fade67f6 100644
--- a/algo/data/sts/LandauTable.h
+++ b/algo/data/sts/LandauTable.h
@@ -4,8 +4,8 @@
 #ifndef CBM_ALGO_DATA_STS_LANDAUTABLE_H
 #define CBM_ALGO_DATA_STS_LANDAUTABLE_H
 
-#include "Definitions.h"
-#include "compat/Filesystem.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/compat/Filesystem.h"
 
 #include <vector>
 
diff --git a/algo/detectors/bmon/Calibrate.cxx b/algo/detectors/bmon/Calibrate.cxx
index fc2a17f29cfcf6ca0cef2b159f0bf6da3eb795b8..631c1412c628e0397cc49437f23bfbaf3d0fd427 100644
--- a/algo/detectors/bmon/Calibrate.cxx
+++ b/algo/detectors/bmon/Calibrate.cxx
@@ -11,7 +11,7 @@
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
-#include "util/TimingsFormat.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <bitset>
 #include <chrono>
diff --git a/algo/detectors/bmon/Calibrate.h b/algo/detectors/bmon/Calibrate.h
index 644fd203200dbceeac0402248b5cf3a2943be3c3..b7cb7ff0ac48b2682418b207f7e9d556ab981102 100644
--- a/algo/detectors/bmon/Calibrate.h
+++ b/algo/detectors/bmon/Calibrate.h
@@ -11,8 +11,8 @@
 
 #include "CbmBmonDigi.h"
 #include "PartitionedVector.h"
-#include "bmon/CalibrateSetup.h"
-#include "tof/Calibrate.h"  // for the monitor data
+#include "algo/detectors/bmon/CalibrateSetup.h"
+#include "algo/detectors/tof/Calibrate.h"  // for the monitor data
 
 #include <gsl/span>
 #include <optional>
diff --git a/algo/detectors/bmon/CalibrateSetup.h b/algo/detectors/bmon/CalibrateSetup.h
index 975175a10e60f3a16140a9459c16c3a6097769df..02d58bb70d79faee6b2b2faf07b9128535508676 100644
--- a/algo/detectors/bmon/CalibrateSetup.h
+++ b/algo/detectors/bmon/CalibrateSetup.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <array>
diff --git a/algo/detectors/bmon/Clusterizer.cxx b/algo/detectors/bmon/Clusterizer.cxx
index d3a8e3d4abf18a8a9e1e727606fd08a187afdf88..b69164419240586f362d7928d4acc7f072f4b31e 100644
--- a/algo/detectors/bmon/Clusterizer.cxx
+++ b/algo/detectors/bmon/Clusterizer.cxx
@@ -8,7 +8,7 @@
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
 
-#include "bmon/Clusterizer.h"
+#include "algo/detectors/bmon/Clusterizer.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmBmonDigi.h"
diff --git a/algo/detectors/bmon/Clusterizer.h b/algo/detectors/bmon/Clusterizer.h
index 86b3c76e3ba74d1595e7ae0282ac1f10e0e22a09..247f96ed41f4d74a17ce64b032078678268622fa 100644
--- a/algo/detectors/bmon/Clusterizer.h
+++ b/algo/detectors/bmon/Clusterizer.h
@@ -9,9 +9,9 @@
 
 #pragma once
 
-#include "base/PODVector.h"
-#include "bmon/ClusterizerPars.h"
-#include "bmon/Hit.h"
+#include "PODVector.h"
+#include "algo/detectors/bmon/ClusterizerPars.h"
+#include "algo/detectors/bmon/Hit.h"
 
 #include <cmath>
 #include <cstdint>
diff --git a/algo/detectors/bmon/Hitfind.cxx b/algo/detectors/bmon/Hitfind.cxx
index d39a46f6c4bf9faf4bfbe2425557ef85ba02664a..430968efab174095efb8f4e024801e9f85de3f42 100644
--- a/algo/detectors/bmon/Hitfind.cxx
+++ b/algo/detectors/bmon/Hitfind.cxx
@@ -8,11 +8,11 @@
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
 
-#include "Hitfind.h"
+#include "algo/detectors/bmon/Hitfind.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "compat/OpenMP.h"
-#include "util/TimingsFormat.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <chrono>
 
diff --git a/algo/detectors/bmon/Hitfind.h b/algo/detectors/bmon/Hitfind.h
index 0257a9b7483a588e0f06b89f54de477d08a1445a..420b3396f20147b540f2140981217e751a6789c9 100644
--- a/algo/detectors/bmon/Hitfind.h
+++ b/algo/detectors/bmon/Hitfind.h
@@ -12,9 +12,9 @@
 #include "CbmBmonDigi.h"
 #include "PODVector.h"
 #include "PartitionedVector.h"
-#include "bmon/Clusterizer.h"
-#include "bmon/HitfindSetup.h"
-#include "tof/Hitfind.h"  // for tof::HitfindMonitorData
+#include "algo/detectors/bmon/Clusterizer.h"
+#include "algo/detectors/bmon/HitfindSetup.h"
+#include "algo/detectors/tof/Hitfind.h"  // for tof::HitfindMonitorData
 
 #include <gsl/span>
 #include <optional>
diff --git a/algo/detectors/bmon/HitfindSetup.h b/algo/detectors/bmon/HitfindSetup.h
index 96431fb0268c67883093e873ddaa06e80ed6c575..04e60047b99de0424b6cf26495b7efaf0a1b2de6 100644
--- a/algo/detectors/bmon/HitfindSetup.h
+++ b/algo/detectors/bmon/HitfindSetup.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <string>
diff --git a/algo/detectors/bmon/ReadoutConfig.cxx b/algo/detectors/bmon/ReadoutConfig.cxx
index 99d4c4a3b53eedabf1c0064fa71d7c4d02044d7f..81d2cf4c44a9f55b5362fb692a7bba44c744bddc 100644
--- a/algo/detectors/bmon/ReadoutConfig.cxx
+++ b/algo/detectors/bmon/ReadoutConfig.cxx
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/bmon/ReadoutConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
-#include "Exceptions.h"
+#include "algo/base/Exceptions.h"
 #include "gDpbMessv100.h"
 
 #include <bitset>
diff --git a/algo/detectors/bmon/ReadoutConfig.h b/algo/detectors/bmon/ReadoutConfig.h
index 88e0361d38e02a88289282b194f2878d63de1231..9ffdc3aec2db6dcae8f037b606d1a7067dfaab77 100644
--- a/algo/detectors/bmon/ReadoutConfig.h
+++ b/algo/detectors/bmon/ReadoutConfig.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/bmon/Unpack.cxx b/algo/detectors/bmon/Unpack.cxx
index f7eaae2d5b6097bb94490ff7348bace0ac704ede..2ed13c45ddcb355719ad42895813b4d29debacf2 100644
--- a/algo/detectors/bmon/Unpack.cxx
+++ b/algo/detectors/bmon/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/bmon/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/bmon/Unpack.h b/algo/detectors/bmon/Unpack.h
index 0a35e0cd1b6a8e4b13a78f9f2a2a70abb6c84a5b..6061acf7574ebbc2f519f7881bc917f9ec7956fe 100644
--- a/algo/detectors/bmon/Unpack.h
+++ b/algo/detectors/bmon/Unpack.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
+#include "algo/detectors/bmon/ReadoutConfig.h"
+#include "algo/detectors/bmon/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::bmon
 {
diff --git a/algo/detectors/bmon/UnpackMS.cxx b/algo/detectors/bmon/UnpackMS.cxx
index 275ea3cb0dbe9e8587d06864a1c78d9a073c12f6..9f792f94971d334aef1bdbf748c6f384bab5284e 100644
--- a/algo/detectors/bmon/UnpackMS.cxx
+++ b/algo/detectors/bmon/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/bmon/UnpackMS.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
diff --git a/algo/detectors/bmon/UnpackMS.h b/algo/detectors/bmon/UnpackMS.h
index 4930ab2ac340a1433f182dccba9aeac8d9cca3ba..97917035a08ed00318430ef9efbb2811196b61a6 100644
--- a/algo/detectors/bmon/UnpackMS.h
+++ b/algo/detectors/bmon/UnpackMS.h
@@ -7,7 +7,7 @@
 #include "CriGet4Mess001.h"
 #include "MicrosliceDescriptor.hpp"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cassert>
 #include <cstddef>
diff --git a/algo/detectors/much/ReadoutConfig.cxx b/algo/detectors/much/ReadoutConfig.cxx
index ccf994cc2f28aa57812d7e72ef53bb45c20880bd..5bb51832daa0d554c72d30490d930da87be3bad9 100644
--- a/algo/detectors/much/ReadoutConfig.cxx
+++ b/algo/detectors/much/ReadoutConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau, Ajit Kumar, Florian Uhlig [committer] */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/much/ReadoutConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmMuchAddress.h"
diff --git a/algo/detectors/much/Unpack.cxx b/algo/detectors/much/Unpack.cxx
index 4cc5efd443e1d8d433d5714406c47ab8a65bfe1f..4ad7fc4c660ad119de96225d86616cf444faee39 100644
--- a/algo/detectors/much/Unpack.cxx
+++ b/algo/detectors/much/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/much/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/much/Unpack.h b/algo/detectors/much/Unpack.h
index b89719afb70dc9ce5ee9f456be2567baf8284459..5ee9be6aeb231ac15a40838b9383f2c2645bdbb1 100644
--- a/algo/detectors/much/Unpack.h
+++ b/algo/detectors/much/Unpack.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
+#include "algo/detectors/much/ReadoutConfig.h"
+#include "algo/detectors/much/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::much
 {
diff --git a/algo/detectors/much/UnpackMS.cxx b/algo/detectors/much/UnpackMS.cxx
index 01ded68f85899f2302a59d6cc1629ae362eec536..7267b3ade2ec345a22d2aa6397d297254f71131e 100644
--- a/algo/detectors/much/UnpackMS.cxx
+++ b/algo/detectors/much/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau, Volker Friese [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/much/UnpackMS.h"
 
 #include "StsXyterMessage.h"
 
diff --git a/algo/detectors/much/UnpackMS.h b/algo/detectors/much/UnpackMS.h
index c34b9e90b6564675498382d86c9ccf23dad9a6cf..c9b6de285f3cd33fcca0e0188f9d4a4e69b6f864 100644
--- a/algo/detectors/much/UnpackMS.h
+++ b/algo/detectors/much/UnpackMS.h
@@ -7,7 +7,7 @@
 #include "MicrosliceDescriptor.hpp"
 #include "StsXyterMessage.h"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cassert>
 #include <cstddef>
diff --git a/algo/detectors/rich/ReadoutConfig.cxx b/algo/detectors/rich/ReadoutConfig.cxx
index cddc2ed1cd7da9b05650381257b185372b702f34..ccaa347b6a835f794507230dbdf1fa095e6e86ad 100644
--- a/algo/detectors/rich/ReadoutConfig.cxx
+++ b/algo/detectors/rich/ReadoutConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese, Dominik Smith [committer], Martin Beyer */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/rich/ReadoutConfig.h"
 
 #include <cassert>
 #include <iomanip>
diff --git a/algo/detectors/rich/Unpack.cxx b/algo/detectors/rich/Unpack.cxx
index 3fb2dd4f502c4c3a5a3fbc063ec28bae6d2548ab..40acb945da49ba4f7804f2bcb965d1ded23dab57 100644
--- a/algo/detectors/rich/Unpack.cxx
+++ b/algo/detectors/rich/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/rich/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/rich/Unpack.h b/algo/detectors/rich/Unpack.h
index 93f414f51a925d52a78977ec26b139931350693d..40d749a93cd0e2e8ef3d85bb9c73c076910d0a14 100644
--- a/algo/detectors/rich/Unpack.h
+++ b/algo/detectors/rich/Unpack.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
+#include "algo/detectors/rich/ReadoutConfig.h"
+#include "algo/detectors/rich/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::rich
 {
diff --git a/algo/detectors/rich/UnpackMS.cxx b/algo/detectors/rich/UnpackMS.cxx
index 0fa5bb9d794a08e3b46a3fce4d7c6fcfa0363b1b..14a3d4b9e0ed7e22edb17f31ae27abcc8721fb53 100644
--- a/algo/detectors/rich/UnpackMS.cxx
+++ b/algo/detectors/rich/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pascal Raisig, Dominik Smith [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/rich/UnpackMS.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/rich/UnpackMS.h b/algo/detectors/rich/UnpackMS.h
index 30e66555ab020f55102fd981cfa0637b0e0e5666..d925134ed6f5356d3fa3e73354837263151540df 100644
--- a/algo/detectors/rich/UnpackMS.h
+++ b/algo/detectors/rich/UnpackMS.h
@@ -4,9 +4,9 @@
 #pragma once
 
 #include "CbmRichDigi.h"
-#include "Definitions.h"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
+#include "algo/base/Definitions.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cstddef>
 #include <cstdint>
diff --git a/algo/detectors/sts/ChannelMaskSet.cxx b/algo/detectors/sts/ChannelMaskSet.cxx
index 10dce9224e8fbcaeb057922940e4a31f22ff67d6..c33516a472952fc9bf066a5ac464da0c6f45da12 100644
--- a/algo/detectors/sts/ChannelMaskSet.cxx
+++ b/algo/detectors/sts/ChannelMaskSet.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "ChannelMaskSet.h"
+#include "algo/detectors/sts/ChannelMaskSet.h"
 
 using namespace cbm::algo;
 CBM_YAML_INSTANTIATE(sts::ChannelMaskSet);
diff --git a/algo/detectors/sts/ChannelMaskSet.h b/algo/detectors/sts/ChannelMaskSet.h
index bc0c0b83ad125cbc9d5028d2420ad9e81f94d042..efc5e022e0f45af559201e17a712c851ffd86299 100644
--- a/algo/detectors/sts/ChannelMaskSet.h
+++ b/algo/detectors/sts/ChannelMaskSet.h
@@ -4,8 +4,8 @@
 
 #pragma once
 
-#include "Definitions.h"
-#include "compat/Filesystem.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/compat/Filesystem.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/sts/Hitfinder.cxx b/algo/detectors/sts/Hitfinder.cxx
index 3ddf2df2d6ed3c0d9e54d5e3616ee2e836ec77bb..a831e583881aff3df461cd1836bba2f7eb35ab27 100644
--- a/algo/detectors/sts/Hitfinder.cxx
+++ b/algo/detectors/sts/Hitfinder.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Kilian Hunold */
 
-#include "Hitfinder.h"
+#include "algo/detectors/sts/Hitfinder.h"
 
 using namespace cbm::algo;
 
diff --git a/algo/detectors/sts/Hitfinder.h b/algo/detectors/sts/Hitfinder.h
index c0accf7499ef5aa7405d1fa5d094a2358c70a634..3bcd9716216ce676856619cf7877fc69412e2544 100644
--- a/algo/detectors/sts/Hitfinder.h
+++ b/algo/detectors/sts/Hitfinder.h
@@ -6,13 +6,13 @@
 #define CBM_ALGO_STS_HITFINDER_H
 
 #include "CbmStsDigi.h"
-#include "Definitions.h"
-#include "gpu/DeviceImage.h"
-#include "gpu/PaddedValue.h"
-#include "gpu/Params.h"
-#include "sts/Cluster.h"
-#include "sts/Hit.h"
-#include "sts/HitfinderPars.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/gpu/DeviceImage.h"
+#include "algo/base/gpu/PaddedValue.h"
+#include "algo/base/gpu/Params.h"
+#include "algo/data/sts/Cluster.h"
+#include "algo/data/sts/Hit.h"
+#include "algo/data/sts/HitfinderPars.h"
 
 #include <xpu/device.h>
 
diff --git a/algo/detectors/sts/HitfinderChain.cxx b/algo/detectors/sts/HitfinderChain.cxx
index 6f65f4621226d13ed49c230d14bb5fe4958712ea..d9345d86ff90c92ee2bba323b02ae7d701385824 100644
--- a/algo/detectors/sts/HitfinderChain.cxx
+++ b/algo/detectors/sts/HitfinderChain.cxx
@@ -2,16 +2,18 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Kilian Hunold */
 
-#include "HitfinderChain.h"
+#include "algo/detectors/sts/HitfinderChain.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "Exceptions.h"
 #include "PODVector.h"
-#include "compat/OpenMP.h"
+#include "algo/base/Exceptions.h"
+#include "algo/base/compat/OpenMP.h"
 
 #include <numeric>
 
 using namespace cbm::algo;
+using cbm::PartitionedSpan;
+using cbm::PartitionedVector;
 
 void sts::HitfinderChain::SetParameters(const HitfinderChainPars& parameters)
 {
@@ -30,7 +32,7 @@ void sts::HitfinderChain::SetParameters(const HitfinderChainPars& parameters)
 
   if (!memoryPars.IsDynamic() && !memoryPars.IsStatic()) {
     throw std::runtime_error(
-      fmt::format("STS Hitfinder Chain: Unknown allocation mode: {}", ToString(memoryPars.allocationMode)));
+      fmt::format("STS Hitfinder Chain: Unknown allocation mode: {}", util::ToString(memoryPars.allocationMode)));
   }
 
   if (memoryPars.IsStatic()) {
diff --git a/algo/detectors/sts/HitfinderChain.h b/algo/detectors/sts/HitfinderChain.h
index 78f7b2c5c6af58e3ac613d49dd0c3a97bfc33eab..23417f37876464e71cbaed2a79ee53b2fe540fd9 100644
--- a/algo/detectors/sts/HitfinderChain.h
+++ b/algo/detectors/sts/HitfinderChain.h
@@ -8,10 +8,10 @@
 #include "CbmStsDigi.h"
 #include "PartitionedSpan.h"
 #include "PartitionedVector.h"
-#include "SubChain.h"
-#include "sts/Hitfinder.h"
-#include "sts/HitfinderPars.h"
-#include "sts/LandauTable.h"
+#include "algo/base/SubChain.h"
+#include "algo/data/sts/HitfinderPars.h"
+#include "algo/data/sts/LandauTable.h"
+#include "algo/detectors/sts/Hitfinder.h"
 
 #include <array>
 #include <cstdint>
diff --git a/algo/detectors/sts/ReadoutConfig.cxx b/algo/detectors/sts/ReadoutConfig.cxx
index b9728265044ca0bc97bc8a00789975e3f79c6855..f0534af855244a5c02101da6e30ae7cb245f7f1d 100644
--- a/algo/detectors/sts/ReadoutConfig.cxx
+++ b/algo/detectors/sts/ReadoutConfig.cxx
@@ -1,12 +1,12 @@
 /* Copyright (C) 2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer], Felix Weiglhofer */
-#include "ReadoutConfig.h"
+#include "algo/detectors/sts/ReadoutConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmStsAddress.h"
-#include "ChannelMaskSet.h"
-#include "Exceptions.h"
+#include "algo/base/Exceptions.h"
+#include "algo/detectors/sts/ChannelMaskSet.h"
 
 #include <cassert>
 #include <iomanip>
diff --git a/algo/detectors/sts/ReadoutConfig.h b/algo/detectors/sts/ReadoutConfig.h
index b3db24c21975cfc0b28623368c171bdbe69bb826..20dd01db827bcc378d16db89740078136be14aa3 100644
--- a/algo/detectors/sts/ReadoutConfig.h
+++ b/algo/detectors/sts/ReadoutConfig.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_DETECTOR_STS_READOUT_CONFIG_H
 #define CBM_ALGO_DETECTOR_STS_READOUT_CONFIG_H
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/sts/StsRecoUtils.h b/algo/detectors/sts/StsRecoUtils.h
index bc5fc07ba9fdd5a86dd21f7f559ce1d325c3f054..92446e7680f70028078c1d336e70d749d54e0d10 100644
--- a/algo/detectors/sts/StsRecoUtils.h
+++ b/algo/detectors/sts/StsRecoUtils.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <cassert>
 #include <cstdlib>
diff --git a/algo/detectors/sts/TrackingInterface.cxx b/algo/detectors/sts/TrackingInterface.cxx
index 0aedb2b958eaa0936406b503d80607b642ca8f4d..660f5192f23bf11f42107e14cf40e2064771f07e 100644
--- a/algo/detectors/sts/TrackingInterface.cxx
+++ b/algo/detectors/sts/TrackingInterface.cxx
@@ -7,7 +7,7 @@
 /// \brief  A TOF-parameter and geometry interface used for tracking input data initialization (source)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "TrackingInterface.h"
+#include "algo/detectors/sts/TrackingInterface.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmStsAddress.h"
diff --git a/algo/detectors/sts/TrackingInterface.h b/algo/detectors/sts/TrackingInterface.h
index 472863eef1ae472ae62f66416d9b1f1cf90853de..9d0d7cc467929f211b20311b03441092369d2924 100644
--- a/algo/detectors/sts/TrackingInterface.h
+++ b/algo/detectors/sts/TrackingInterface.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "SubChain.h"
+#include "algo/base/SubChain.h"
 
 namespace cbm::algo::sts
 {
diff --git a/algo/detectors/sts/Unpack.cxx b/algo/detectors/sts/Unpack.cxx
index e1ddecff1922a65f5d241ced8a6722e16db699ae..2f5670ee0a9453bdfa150483ad1bfb43d00a4657 100644
--- a/algo/detectors/sts/Unpack.cxx
+++ b/algo/detectors/sts/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/sts/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/sts/Unpack.h b/algo/detectors/sts/Unpack.h
index f8c09d6686260b52cff5c0a7ed9f6675e59bc39e..5aeefbce175f36c9a1f44acac493ca2c71a0a3af 100644
--- a/algo/detectors/sts/Unpack.h
+++ b/algo/detectors/sts/Unpack.h
@@ -4,10 +4,10 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
-#include "WalkMap.h"
+#include "algo/detectors/sts/ReadoutConfig.h"
+#include "algo/detectors/sts/UnpackMS.h"
+#include "algo/detectors/sts/WalkMap.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::sts
 {
diff --git a/algo/detectors/sts/UnpackMS.cxx b/algo/detectors/sts/UnpackMS.cxx
index 9c8af375eda05a8bd817c11835b074425d65e1e5..bc298c8c33f6c68648748e2e2cbfd67e37aad920 100644
--- a/algo/detectors/sts/UnpackMS.cxx
+++ b/algo/detectors/sts/UnpackMS.cxx
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau, Volker Friese [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/sts/UnpackMS.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "StsRecoUtils.h"
 #include "StsXyterMessage.h"
+#include "algo/detectors/sts/StsRecoUtils.h"
 
 #include <cassert>
 #include <cmath>
diff --git a/algo/detectors/sts/UnpackMS.h b/algo/detectors/sts/UnpackMS.h
index bee256ae62edf98ba6ccbc1dc6362988efd4c4ba..447b876af267035ad92a03f755f425f0b0d32823 100644
--- a/algo/detectors/sts/UnpackMS.h
+++ b/algo/detectors/sts/UnpackMS.h
@@ -4,10 +4,10 @@
 #pragma once
 
 #include "CbmStsDigi.h"
-#include "Definitions.h"
 #include "MicrosliceDescriptor.hpp"
 #include "StsXyterMessage.h"
-#include "UnpackMSBase.h"
+#include "algo/base/Definitions.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cassert>
 #include <cstddef>
diff --git a/algo/detectors/sts/WalkMap.cxx b/algo/detectors/sts/WalkMap.cxx
index e97620a5d679afc29cd34e5c6ea9bf9917745a55..dd3e9e4109e1fadaa11a4e6ba23e6e4f1acc0551 100644
--- a/algo/detectors/sts/WalkMap.cxx
+++ b/algo/detectors/sts/WalkMap.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "WalkMap.h"
+#include "algo/detectors/sts/WalkMap.h"
 
 using namespace cbm::algo::sts;
 
diff --git a/algo/detectors/sts/WalkMap.h b/algo/detectors/sts/WalkMap.h
index 57a23d54a0c1f3ccc2fe397cb7d52d5733ef5185..5f2411ae2be4db4387e39114b95daf489071e0e3 100644
--- a/algo/detectors/sts/WalkMap.h
+++ b/algo/detectors/sts/WalkMap.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/tof/Calibrate.cxx b/algo/detectors/tof/Calibrate.cxx
index 382ead10819368ba80bc91caac8246e75f2d30a4..e99135bb839e53f227d83637af0f5649542aa679 100644
--- a/algo/detectors/tof/Calibrate.cxx
+++ b/algo/detectors/tof/Calibrate.cxx
@@ -2,10 +2,10 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "Calibrate.h"
+#include "algo/detectors/tof/Calibrate.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "util/TimingsFormat.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <chrono>
 
diff --git a/algo/detectors/tof/Calibrate.h b/algo/detectors/tof/Calibrate.h
index 03b27a34bda51b647c8e1f10fb48bbf83c09641b..480380e8f770e0d24ec97a2b06964f4c2a3f2fc1 100644
--- a/algo/detectors/tof/Calibrate.h
+++ b/algo/detectors/tof/Calibrate.h
@@ -7,8 +7,8 @@
 
 #include "CbmTofDigi.h"
 #include "PartitionedVector.h"
-#include "tof/CalibrateSetup.h"
-#include "tof/Clusterizer.h"
+#include "algo/detectors/tof/CalibrateSetup.h"
+#include "algo/detectors/tof/Clusterizer.h"
 
 #include <gsl/span>
 #include <optional>
diff --git a/algo/detectors/tof/CalibrateSetup.h b/algo/detectors/tof/CalibrateSetup.h
index 89d806312b18b78ae2754dd8d1fed1db57ed2eb4..4da2d68c6e8ebb57962305012d80b9a285aca846 100644
--- a/algo/detectors/tof/CalibrateSetup.h
+++ b/algo/detectors/tof/CalibrateSetup.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_DETECTOR_TOF_CALIBRATE_SETUP_H
 #define CBM_ALGO_DETECTOR_TOF_CALIBRATE_SETUP_H
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <array>
diff --git a/algo/detectors/tof/Clusterizer.cxx b/algo/detectors/tof/Clusterizer.cxx
index fb36f7d47f3e924ac238574166128c4cf338b4dd..9ca25e6830393b7e8aeaec38a780bd35fe597155 100644
--- a/algo/detectors/tof/Clusterizer.cxx
+++ b/algo/detectors/tof/Clusterizer.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Pierre-Alain Loizeau */
 
-#include "Clusterizer.h"
+#include "algo/detectors/tof/Clusterizer.h"
 
 // TOF Classes and includes
 #include "CbmTofDigi.h"
diff --git a/algo/detectors/tof/Clusterizer.h b/algo/detectors/tof/Clusterizer.h
index 98942ee4a15d27e1d0ff1b63a7a701988074f9aa..c2019c7992f05ee853009745b5b75eab44a74957 100644
--- a/algo/detectors/tof/Clusterizer.h
+++ b/algo/detectors/tof/Clusterizer.h
@@ -12,8 +12,8 @@
 // TOF Classes and includes
 class CbmTofDigi;
 
-#include "ClusterizerPars.h"
-#include "Hit.h"
+#include "algo/detectors/tof/ClusterizerPars.h"
+#include "algo/detectors/tof/Hit.h"
 
 // C++ Classes and includes
 #include <cmath>
diff --git a/algo/detectors/tof/Hit.h b/algo/detectors/tof/Hit.h
index 8e3a1a068531b531625f5118b2300643f0f3fc6d..adceab18fa9e47e8e725e25361145940c58b1ca2 100644
--- a/algo/detectors/tof/Hit.h
+++ b/algo/detectors/tof/Hit.h
@@ -3,10 +3,10 @@
    Authors: Dominik Smith [committer], Pierre-Alain Loizeau, Felix Weiglhofer */
 #pragma once
 
-#include "ClusterizerPars.h"
-#include "Definitions.h"
 #include "Math/Rotation3D.h"
 #include "Math/Vector3Dfwd.h"
+#include "algo/base/Definitions.h"
+#include "algo/detectors/tof/ClusterizerPars.h"
 
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/split_member.hpp>
diff --git a/algo/detectors/tof/HitFinder.cxx b/algo/detectors/tof/HitFinder.cxx
index caca727cca08c6261d36b22818edcb01435a0ac0..c171aa1d33f2b8a2181ed53d8e3e87aff04a1ebb 100644
--- a/algo/detectors/tof/HitFinder.cxx
+++ b/algo/detectors/tof/HitFinder.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Pierre-Alain Loizeau */
 
-#include "HitFinder.h"
+#include "algo/detectors/tof/HitFinder.h"
 
 // TOF Classes and includes
 #include "CbmTofDigi.h"
diff --git a/algo/detectors/tof/Hitfind.cxx b/algo/detectors/tof/Hitfind.cxx
index 5abf282f3aecabec76ed6b541cd8f2877962360a..d6fdee35c3924b0638eadb1b585d4ae6f05a1094 100644
--- a/algo/detectors/tof/Hitfind.cxx
+++ b/algo/detectors/tof/Hitfind.cxx
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "Hitfind.h"
+#include "algo/detectors/tof/Hitfind.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "compat/OpenMP.h"
-#include "util/TimingsFormat.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <chrono>
 
diff --git a/algo/detectors/tof/Hitfind.h b/algo/detectors/tof/Hitfind.h
index 5cd1c669ac25d6bf4a2df303ddee479d55327368..02f784a6f69191380eb3d9867cf123027099347c 100644
--- a/algo/detectors/tof/Hitfind.h
+++ b/algo/detectors/tof/Hitfind.h
@@ -8,8 +8,8 @@
 #include "CbmTofDigi.h"
 #include "PODVector.h"
 #include "PartitionedVector.h"
-#include "tof/Clusterizer.h"
-#include "tof/HitfindSetup.h"
+#include "algo/detectors/tof/Clusterizer.h"
+#include "algo/detectors/tof/HitfindSetup.h"
 
 #include <gsl/span>
 #include <optional>
diff --git a/algo/detectors/tof/HitfindSetup.h b/algo/detectors/tof/HitfindSetup.h
index c3138ad7d3ab63213a70eb9c83754772bc3a3f6e..f23dce5bf23c257dad1367bcb716ce310b593072 100644
--- a/algo/detectors/tof/HitfindSetup.h
+++ b/algo/detectors/tof/HitfindSetup.h
@@ -4,7 +4,7 @@
 #ifndef CBM_ALGO_DETECTOR_TOF_HITFIND_SETUP_H
 #define CBM_ALGO_DETECTOR_TOF_HITFIND_SETUP_H
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <array>
diff --git a/algo/detectors/tof/ReadoutConfig.cxx b/algo/detectors/tof/ReadoutConfig.cxx
index 36310a9d4b3ea667023d853026ae6f64652d76f7..58e149361710e92d280e627c8af30813e3b43625 100644
--- a/algo/detectors/tof/ReadoutConfig.cxx
+++ b/algo/detectors/tof/ReadoutConfig.cxx
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/tof/ReadoutConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
-#include "Exceptions.h"
+#include "algo/base/Exceptions.h"
 #include "gDpbMessv100.h"
 
 #include <bitset>
diff --git a/algo/detectors/tof/ReadoutConfig.h b/algo/detectors/tof/ReadoutConfig.h
index 6b9ac632faef7de47e026881348a91e3ef750fd0..6d75ecd3b0e91371247d7b22b8ebe188c201fc91 100644
--- a/algo/detectors/tof/ReadoutConfig.h
+++ b/algo/detectors/tof/ReadoutConfig.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/tof/TrackingInterface.cxx b/algo/detectors/tof/TrackingInterface.cxx
index 0ed55e50960946c34f359d1b6401ecce0038caca..b72a02c099c20edec95e53a51afbab090cc11436 100644
--- a/algo/detectors/tof/TrackingInterface.cxx
+++ b/algo/detectors/tof/TrackingInterface.cxx
@@ -7,13 +7,14 @@
 /// \brief  A TOF-parameter and geometry interface used for tracking input data initialization (source)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "TrackingInterface.h"
+#include "algo/detectors/tof/TrackingInterface.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
-#include "HitfindSetup.h"
-#include "ParFiles.h"
-#include "fmt/format.h"
+#include "algo/detectors/tof/HitfindSetup.h"
+#include "algo/global/ParFiles.h"
+
+#include <fmt/format.h>
 
 using cbm::algo::tof::HitfindSetup;
 using cbm::algo::tof::TrackingInterface;
diff --git a/algo/detectors/tof/TrackingInterface.h b/algo/detectors/tof/TrackingInterface.h
index c6ce0f937b2b53b5168e518d96463c0c2bfacbbc..ca12e8e6cf034c582257606da56731f3b0dd5597 100644
--- a/algo/detectors/tof/TrackingInterface.h
+++ b/algo/detectors/tof/TrackingInterface.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "SubChain.h"
+#include "algo/base/SubChain.h"
 
 namespace cbm::algo::tof
 {
diff --git a/algo/detectors/tof/Unpack.cxx b/algo/detectors/tof/Unpack.cxx
index 2409c772a22b41d53e5a678505099b0a3ded17da..fe89c377c7e4df16be18946323de6df9651288af 100644
--- a/algo/detectors/tof/Unpack.cxx
+++ b/algo/detectors/tof/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/tof/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/tof/Unpack.h b/algo/detectors/tof/Unpack.h
index a78ff079abccd9cff129bc68f27e40617a671afb..1e2ecb7009d81755e352eb604b521daa3e96eb66 100644
--- a/algo/detectors/tof/Unpack.h
+++ b/algo/detectors/tof/Unpack.h
@@ -3,9 +3,9 @@
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "tof/ReadoutConfig.h"
-#include "tof/UnpackMS.h"
+#include "algo/detectors/tof/ReadoutConfig.h"
+#include "algo/detectors/tof/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::tof
 {
diff --git a/algo/detectors/tof/UnpackMS.cxx b/algo/detectors/tof/UnpackMS.cxx
index ae0a4d37caf02c70c4023041b2df327e1313615f..37afaf0afad834a8def00c38c5f43b9b15560c12 100644
--- a/algo/detectors/tof/UnpackMS.cxx
+++ b/algo/detectors/tof/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/tof/UnpackMS.h"
 
 #include <cassert>
 #include <cmath>
diff --git a/algo/detectors/tof/UnpackMS.h b/algo/detectors/tof/UnpackMS.h
index 6f41bd674e43d481ffc0c6af0f5b8a33564996d4..b8a65f54d1eefa78d03818ac212262e26a4bf07b 100644
--- a/algo/detectors/tof/UnpackMS.h
+++ b/algo/detectors/tof/UnpackMS.h
@@ -5,10 +5,10 @@
 
 #include "CbmTofDigi.h"
 #include "CriGet4Mess001.h"
-#include "Definitions.h"
 #include "MicrosliceDescriptor.hpp"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
+#include "algo/base/Definitions.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cassert>
 #include <cstddef>
diff --git a/algo/detectors/trd/Cluster.cxx b/algo/detectors/trd/Cluster.cxx
index 867cfe1ef93e8557c5a9be09df49586e67e8ce28..6c9a0fa4947faea04de0e66201430319b5ff8802 100644
--- a/algo/detectors/trd/Cluster.cxx
+++ b/algo/detectors/trd/Cluster.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "Cluster.h"
+#include "algo/detectors/trd/Cluster.h"
 
 #include "CbmTrdDigi.h"
 
diff --git a/algo/detectors/trd/Cluster2D.cxx b/algo/detectors/trd/Cluster2D.cxx
index b6285317197eabe6ef6bfb3eae7b16a165e75e79..929ffe71000a80df4e46abf8273b512f628f6aa9 100644
--- a/algo/detectors/trd/Cluster2D.cxx
+++ b/algo/detectors/trd/Cluster2D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "Cluster2D.h"
+#include "algo/detectors/trd/Cluster2D.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTrdDigi.h"
diff --git a/algo/detectors/trd/Cluster2D.h b/algo/detectors/trd/Cluster2D.h
index 40cf184475fcd5447d783710872fbd8eaafedd4c..493d4389c4158b3fa49e567c32f5408b8c721257 100644
--- a/algo/detectors/trd/Cluster2D.h
+++ b/algo/detectors/trd/Cluster2D.h
@@ -4,8 +4,8 @@
 
 #pragma once
 
-#include "DigiRec.h"
-#include "compat/RTypes.h"
+#include "algo/base/compat/RTypes.h"
+#include "algo/detectors/trd/DigiRec.h"
 
 #include <cstdint>
 #include <vector>  // for vector
diff --git a/algo/detectors/trd/Clusterizer.cxx b/algo/detectors/trd/Clusterizer.cxx
index dff15aa23eab38e215402fcf86449d1e28acd1de..a07dbcf72f71e9d274dd01db7029e0770ce3e152 100644
--- a/algo/detectors/trd/Clusterizer.cxx
+++ b/algo/detectors/trd/Clusterizer.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Etienne Bechtel, Florian Uhlig */
 
-#include "Clusterizer.h"
+#include "algo/detectors/trd/Clusterizer.h"
 
 #include <algorithm>
 #include <unordered_map>
diff --git a/algo/detectors/trd/Clusterizer.h b/algo/detectors/trd/Clusterizer.h
index 35a203b740e9f6b85c3fbd1b19a39b3e930b3610..5d6bdfa67d5c7190193629e81f3cde6e3eeaab48 100644
--- a/algo/detectors/trd/Clusterizer.h
+++ b/algo/detectors/trd/Clusterizer.h
@@ -5,8 +5,8 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "Cluster.h"
-#include "HitFinderPars.h"
+#include "algo/detectors/trd/Cluster.h"
+#include "algo/detectors/trd/HitFinderPars.h"
 
 #include <tuple>
 #include <vector>
diff --git a/algo/detectors/trd/Clusterizer2D.cxx b/algo/detectors/trd/Clusterizer2D.cxx
index e222a452bad1dbe0a26b1e6b6b6786803ed6ab11..54587bad1722dfcad8bfbb59bbbc00d453523d83 100644
--- a/algo/detectors/trd/Clusterizer2D.cxx
+++ b/algo/detectors/trd/Clusterizer2D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "Clusterizer2D.h"
+#include "algo/detectors/trd/Clusterizer2D.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/Clusterizer2D.h b/algo/detectors/trd/Clusterizer2D.h
index 1fcf3134ed1eb7eb17629e68fa5229c41ff2c3b4..e54205bee026153d158c6a5342e3679c950d34e1 100644
--- a/algo/detectors/trd/Clusterizer2D.h
+++ b/algo/detectors/trd/Clusterizer2D.h
@@ -5,8 +5,8 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "Cluster2D.h"
-#include "HitFinder2DPars.h"
+#include "algo/detectors/trd/Cluster2D.h"
+#include "algo/detectors/trd/HitFinder2DPars.h"
 
 #include <tuple>
 #include <vector>
diff --git a/algo/detectors/trd/DigiRec.cxx b/algo/detectors/trd/DigiRec.cxx
index f74ccbce31bc1721fa060ecb0768ac8d34a930cb..98191ba8b70611d8b7e24335184e5800b2f8d33e 100644
--- a/algo/detectors/trd/DigiRec.cxx
+++ b/algo/detectors/trd/DigiRec.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Alexandru Bercuci[committer] */
 
-#include "DigiRec.h"
+#include "algo/detectors/trd/DigiRec.h"
 
 #include <cstring>
 
diff --git a/algo/detectors/trd/DigiRec.h b/algo/detectors/trd/DigiRec.h
index 135171e26d8d84627597c05f053e25cf8567a6ef..95b0764e50f4bb0e62eb3861a32d4f9aaf1cc69e 100644
--- a/algo/detectors/trd/DigiRec.h
+++ b/algo/detectors/trd/DigiRec.h
@@ -5,7 +5,7 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "compat/RTypes.h"
+#include "algo/base/compat/RTypes.h"
 
 /** @class DigiRec
  ** @brief Extend the TRD(2D) digi class to incorporate FEE calibration.
diff --git a/algo/detectors/trd/HitFactory2D.cxx b/algo/detectors/trd/HitFactory2D.cxx
index 2c93cc1ad7a60ebf918a489ed21997b8c3aa1cb7..a9b5c13ec24a261925c725b8907ec51436c37684 100644
--- a/algo/detectors/trd/HitFactory2D.cxx
+++ b/algo/detectors/trd/HitFactory2D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "HitFactory2D.h"
+#include "algo/detectors/trd/HitFactory2D.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/HitFactory2D.h b/algo/detectors/trd/HitFactory2D.h
index 4efed555300b7767c1275cd22277972af8be692f..f00ff846a72275a349a45ca1eef0867bf7e37e17 100644
--- a/algo/detectors/trd/HitFactory2D.h
+++ b/algo/detectors/trd/HitFactory2D.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "compat/RTypes.h"
+#include "algo/base/compat/RTypes.h"
 
 #include <cstdint>
 #include <vector>
diff --git a/algo/detectors/trd/HitFinder.cxx b/algo/detectors/trd/HitFinder.cxx
index 7ae1c39ad0b24fef659748f313b369709d3a0cac..91b94466d2adbbaabf3dfd1ca1214d993d296cd9 100644
--- a/algo/detectors/trd/HitFinder.cxx
+++ b/algo/detectors/trd/HitFinder.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Etienne Bechtel, Florian Uhlig */
 
-#include "HitFinder.h"
+#include "algo/detectors/trd/HitFinder.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTrdDigi.h"
diff --git a/algo/detectors/trd/HitFinder.h b/algo/detectors/trd/HitFinder.h
index db5503c2db01fa879f662501ec705dff76bcd43b..e5d45a8ea5e3720ffacac738a2cb4add85120c41 100644
--- a/algo/detectors/trd/HitFinder.h
+++ b/algo/detectors/trd/HitFinder.h
@@ -4,12 +4,12 @@
 
 #pragma once
 
-#include "Cluster.h"
-#include "DigiRec.h"
-#include "Hit.h"
-#include "HitFinderPars.h"
 #include "Math/Rotation3D.h"
 #include "Math/Vector3Dfwd.h"
+#include "algo/detectors/trd/Cluster.h"
+#include "algo/detectors/trd/DigiRec.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/HitFinderPars.h"
 
 #include <tuple>
 #include <vector>
@@ -23,7 +23,7 @@ namespace cbm::algo::trd
   **/
   class HitFinder {
    public:
-    typedef std::pair<Hit, std::vector<DigiRec>> resultType;
+    typedef std::pair<trd::Hit, std::vector<DigiRec>> resultType;
 
     HitFinder(){};
     /**
diff --git a/algo/detectors/trd/HitFinder2D.cxx b/algo/detectors/trd/HitFinder2D.cxx
index bff16859141b26132dc93482a6aef528b3ecea30..69f67715765885b35c70e26ad49c943a5be21538 100644
--- a/algo/detectors/trd/HitFinder2D.cxx
+++ b/algo/detectors/trd/HitFinder2D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "HitFinder2D.h"
+#include "algo/detectors/trd/HitFinder2D.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/HitFinder2D.h b/algo/detectors/trd/HitFinder2D.h
index 973f2f8ed97fa5bbdd5d886ec75ad600e22459c1..5cabb18433efc306c341e7d635c2e615d0b1a191 100644
--- a/algo/detectors/trd/HitFinder2D.h
+++ b/algo/detectors/trd/HitFinder2D.h
@@ -5,13 +5,13 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "Cluster2D.h"
-#include "DigiRec.h"
-#include "Hit.h"
-#include "HitFactory2D.h"
-#include "HitFinder2DPars.h"
 #include "Math/Rotation3D.h"
 #include "Math/Vector3Dfwd.h"
+#include "algo/detectors/trd/Cluster2D.h"
+#include "algo/detectors/trd/DigiRec.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/HitFactory2D.h"
+#include "algo/detectors/trd/HitFinder2DPars.h"
 
 #include <cstdint>
 #include <tuple>
diff --git a/algo/detectors/trd/HitMerger.cxx b/algo/detectors/trd/HitMerger.cxx
index 9adddadc589d476fe0a93eb855f5cbd04ede75ec..20eb03eb36d2b3ba5f0b9f0ac80bf935850489f1 100644
--- a/algo/detectors/trd/HitMerger.cxx
+++ b/algo/detectors/trd/HitMerger.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Etienne Bechtel, Florian Uhlig */
 
-#include "HitMerger.h"
+#include "algo/detectors/trd/HitMerger.h"
 
 namespace cbm::algo::trd
 {
diff --git a/algo/detectors/trd/HitMerger.h b/algo/detectors/trd/HitMerger.h
index 4d01c20e325eb4ede4c26b43d02f3dfeca4df097..af809e289e3288c548b5f7f1c2cdf7c2c54e571e 100644
--- a/algo/detectors/trd/HitMerger.h
+++ b/algo/detectors/trd/HitMerger.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "DigiRec.h"
-#include "Hit.h"
-#include "HitFinderPars.h"
+#include "algo/detectors/trd/DigiRec.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/HitFinderPars.h"
 
 #include <tuple>
 #include <vector>
diff --git a/algo/detectors/trd/HitMerger2D.cxx b/algo/detectors/trd/HitMerger2D.cxx
index fc4e4a55d52340830ab9b21aa324a338bf03b0c2..1bfde0d2f90df1088efef3b01b3d396ef75a0f59 100644
--- a/algo/detectors/trd/HitMerger2D.cxx
+++ b/algo/detectors/trd/HitMerger2D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer], Alexandru Bercuci */
 
-#include "HitMerger2D.h"
+#include "algo/detectors/trd/HitMerger2D.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/HitMerger2D.h b/algo/detectors/trd/HitMerger2D.h
index 113f029e0d7e2150ae6e4fbcf81fb0ef3dd5f7b3..6be8542f44f9cb6a82222279c78a35fc5bba750e 100644
--- a/algo/detectors/trd/HitMerger2D.h
+++ b/algo/detectors/trd/HitMerger2D.h
@@ -5,12 +5,12 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "DigiRec.h"
-#include "Hit.h"
-#include "HitFactory2D.h"
-#include "HitFinder2DPars.h"
 #include "Math/Rotation3D.h"
 #include "Math/Vector3Dfwd.h"
+#include "algo/detectors/trd/DigiRec.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/HitFactory2D.h"
+#include "algo/detectors/trd/HitFinder2DPars.h"
 
 #include <cstdint>
 #include <tuple>
diff --git a/algo/detectors/trd/Hitfind.cxx b/algo/detectors/trd/Hitfind.cxx
index d0cb3f36cdc8e1655ab1426934ca9cd64fa9b219..e5b5056eb5e70b6b94f2480b7f370faf4cce3a7f 100644
--- a/algo/detectors/trd/Hitfind.cxx
+++ b/algo/detectors/trd/Hitfind.cxx
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "Hitfind.h"
+#include "algo/detectors/trd/Hitfind.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "compat/OpenMP.h"
-#include "util/TimingsFormat.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/util/TimingsFormat.h"
 
 #include <chrono>
 
diff --git a/algo/detectors/trd/Hitfind.h b/algo/detectors/trd/Hitfind.h
index acf2138d0aab6276295bf690873b62e273d24149..043270d108ab5d27fec554d59bd8fc0fd9c4a5f5 100644
--- a/algo/detectors/trd/Hitfind.h
+++ b/algo/detectors/trd/Hitfind.h
@@ -5,17 +5,17 @@
 #pragma once
 
 #include "CbmTrdDigi.h"
-#include "DigiRec.h"
 #include "PODVector.h"
 #include "PartitionedVector.h"
-#include "trd/Clusterizer.h"
-#include "trd/Clusterizer2D.h"
-#include "trd/HitFinder.h"
-#include "trd/HitFinder2D.h"
-#include "trd/HitMerger.h"
-#include "trd/HitMerger2D.h"
-#include "trd/Hitfind2DSetup.h"
-#include "trd/HitfindSetup.h"
+#include "algo/detectors/trd/Clusterizer.h"
+#include "algo/detectors/trd/Clusterizer2D.h"
+#include "algo/detectors/trd/DigiRec.h"
+#include "algo/detectors/trd/HitFinder.h"
+#include "algo/detectors/trd/HitFinder2D.h"
+#include "algo/detectors/trd/HitMerger.h"
+#include "algo/detectors/trd/HitMerger2D.h"
+#include "algo/detectors/trd/Hitfind2DSetup.h"
+#include "algo/detectors/trd/HitfindSetup.h"
 
 #include <gsl/span>
 #include <optional>
diff --git a/algo/detectors/trd/Hitfind2DSetup.h b/algo/detectors/trd/Hitfind2DSetup.h
index a045abbc75fa6e9c3ffc0b3063d6b41f94eb993d..c9427c10300b832ab7dd81aa056e9cc4624d59d5 100644
--- a/algo/detectors/trd/Hitfind2DSetup.h
+++ b/algo/detectors/trd/Hitfind2DSetup.h
@@ -3,7 +3,7 @@
    Authors: Dominik Smith [committer] */
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <array>
diff --git a/algo/detectors/trd/HitfindSetup.h b/algo/detectors/trd/HitfindSetup.h
index 68214432c780359b567ff17082e975bc4d3fabaf..79c8372aab2e423323bcf015fb68ccaea855a8db 100644
--- a/algo/detectors/trd/HitfindSetup.h
+++ b/algo/detectors/trd/HitfindSetup.h
@@ -3,7 +3,7 @@
    Authors: Dominik Smith [committer] */
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 #include "yaml/Property.h"
 
 #include <array>
diff --git a/algo/detectors/trd/ReadoutConfig.cxx b/algo/detectors/trd/ReadoutConfig.cxx
index 4ffa48492d816efc8c8c6135610ae59eb1d28604..be47a816e5ecdde734e58b81c68f8343f7a9cef2 100644
--- a/algo/detectors/trd/ReadoutConfig.cxx
+++ b/algo/detectors/trd/ReadoutConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/trd/ReadoutConfig.h"
 
 //#include "CbmTrdAddress.h"
 
diff --git a/algo/detectors/trd/TrackingInterface.cxx b/algo/detectors/trd/TrackingInterface.cxx
index 97d67f8085fadf737b195e05e8c679f533e381f5..bbc6f43dcc07d533efe7abedb6de64efd0574066 100644
--- a/algo/detectors/trd/TrackingInterface.cxx
+++ b/algo/detectors/trd/TrackingInterface.cxx
@@ -7,7 +7,7 @@
 /// \brief  A TRD-parameter and geometry interface used for tracking input data initialization (source)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "TrackingInterface.h"
+#include "algo/detectors/trd/TrackingInterface.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTrdAddress.h"
diff --git a/algo/detectors/trd/TrackingInterface.h b/algo/detectors/trd/TrackingInterface.h
index e5f1bf05e8c65a9e5393174a00c13c467b26807a..915b4720e7c974aad222080ce7422e9f53031a37 100644
--- a/algo/detectors/trd/TrackingInterface.h
+++ b/algo/detectors/trd/TrackingInterface.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "SubChain.h"
+#include "algo/base/SubChain.h"
 
 namespace cbm::algo::trd
 {
diff --git a/algo/detectors/trd/Unpack.cxx b/algo/detectors/trd/Unpack.cxx
index 6e037ec986960b3713ebdd81233deb720812ff5f..e82b3e7cea19cc027efee1f2b1c1b16985964097 100644
--- a/algo/detectors/trd/Unpack.cxx
+++ b/algo/detectors/trd/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
 
-#include "Unpack.h"
+#include "algo/detectors/trd/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/Unpack.h b/algo/detectors/trd/Unpack.h
index 91dc4d769c8268d6a1f187140fb2cd9883fe0725..0091f41d39e1034d10b4aa9941556021b424221d 100644
--- a/algo/detectors/trd/Unpack.h
+++ b/algo/detectors/trd/Unpack.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
+#include "algo/detectors/trd/ReadoutConfig.h"
+#include "algo/detectors/trd/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::trd
 {
diff --git a/algo/detectors/trd/UnpackMS.cxx b/algo/detectors/trd/UnpackMS.cxx
index d598336a23b633e57a74c3c8eb1bd3aefd30d6af..bd4ecf86a33b3a105e2014e4ae5972edcdf9e3ba 100644
--- a/algo/detectors/trd/UnpackMS.cxx
+++ b/algo/detectors/trd/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pascal Raisig, Dominik Smith [committer], David Schledt */
 
-#include "UnpackMS.h"
+#include "algo/detectors/trd/UnpackMS.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd/UnpackMS.h b/algo/detectors/trd/UnpackMS.h
index e7832b93ca6384e04cf0b1c7bd8a90314f03959f..528d71904080a1494af89d9d6a70b9fd8b65c685 100644
--- a/algo/detectors/trd/UnpackMS.h
+++ b/algo/detectors/trd/UnpackMS.h
@@ -9,7 +9,7 @@
 #include "CbmTrdRawMessageSpadic.h"
 #include "MicrosliceDescriptor.hpp"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cmath>
 #include <memory>
diff --git a/algo/detectors/trd2d/ReadoutConfig.cxx b/algo/detectors/trd2d/ReadoutConfig.cxx
index a65ca1e2c05b08085fe9ed80dcd1fb274f92ea95..7606200590577f9ad2558a0d672e137434105d83 100644
--- a/algo/detectors/trd2d/ReadoutConfig.cxx
+++ b/algo/detectors/trd2d/ReadoutConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese, Dominik Smith [committer], Alex Bercuci */
 
-#include "ReadoutConfig.h"
+#include "algo/detectors/trd2d/ReadoutConfig.h"
 
 //#include "CbmTrdAddress.h"
 #include "AlgoFairloggerCompat.h"
diff --git a/algo/detectors/trd2d/ReadoutConfig.h b/algo/detectors/trd2d/ReadoutConfig.h
index 673b55f876c9bcebd5ed15cd832a18b35882ffd4..db9673da9b4c5b32280f54e6b439ee0d25567744 100644
--- a/algo/detectors/trd2d/ReadoutConfig.h
+++ b/algo/detectors/trd2d/ReadoutConfig.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "UnpackMS.h"
+#include "algo/detectors/trd2d/UnpackMS.h"
 #include "yaml/Property.h"
 #include "yaml/Yaml.h"
 
diff --git a/algo/detectors/trd2d/Unpack.cxx b/algo/detectors/trd2d/Unpack.cxx
index b0b57c45d5c8af23dd6bbffc78cedc3fa2560727..a1147f09921b3da698422811344014b054b58066 100644
--- a/algo/detectors/trd2d/Unpack.cxx
+++ b/algo/detectors/trd2d/Unpack.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith, Alex Bercuci */
 
-#include "Unpack.h"
+#include "algo/detectors/trd2d/Unpack.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd2d/Unpack.h b/algo/detectors/trd2d/Unpack.h
index 0495ddaa0a1b24a25044a6549527291c83f53bbc..443bd2e08756a5e84829c738dfe253fa23118400 100644
--- a/algo/detectors/trd2d/Unpack.h
+++ b/algo/detectors/trd2d/Unpack.h
@@ -4,9 +4,9 @@
 
 #pragma once
 
-#include "CommonUnpacker.h"
-#include "ReadoutConfig.h"
-#include "UnpackMS.h"
+#include "algo/detectors/trd2d/ReadoutConfig.h"
+#include "algo/detectors/trd2d/UnpackMS.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 namespace cbm::algo::trd2d
 {
diff --git a/algo/detectors/trd2d/UnpackMS.cxx b/algo/detectors/trd2d/UnpackMS.cxx
index b143ea98cbd904037deace010190a169ee2ce220..382e6d4bee514a49e04b1d445ddaa72bfee5d811 100644
--- a/algo/detectors/trd2d/UnpackMS.cxx
+++ b/algo/detectors/trd2d/UnpackMS.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pascal Raisig, Alexandru Bercuci, Dominik Smith [committer] */
 
-#include "UnpackMS.h"
+#include "algo/detectors/trd2d/UnpackMS.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/detectors/trd2d/UnpackMS.h b/algo/detectors/trd2d/UnpackMS.h
index 9696671b6ad792e4da97a19987d68770354d65c9..a8f21685723ffbb5be215484dea1674ce129aaea 100644
--- a/algo/detectors/trd2d/UnpackMS.h
+++ b/algo/detectors/trd2d/UnpackMS.h
@@ -5,7 +5,7 @@
 
 #include "CbmTrdDigi.h"
 #include "MicrosliceDescriptor.hpp"
-#include "UnpackMSBase.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <array>
 #include <memory>
diff --git a/algo/evbuild/Config.cxx b/algo/evbuild/Config.cxx
index cf34f09388f27e4a4acb8ff0e361be291aaed4d1..f9d8dad1f8bb09eff0d36a40bb1d7d715d7780f9 100644
--- a/algo/evbuild/Config.cxx
+++ b/algo/evbuild/Config.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "Config.h"
+#include "algo/evbuild/Config.h"
 
 #include <fstream>
 
diff --git a/algo/evbuild/Config.h b/algo/evbuild/Config.h
index 974e2b8b031b3aa90bc5528b1bed8e65970e7014..2137528e2df455a011cae6dc048282e9d91f08cd 100644
--- a/algo/evbuild/Config.h
+++ b/algo/evbuild/Config.h
@@ -6,10 +6,10 @@
 #ifndef ALGO_EVBUILD_CONFIG_H
 #define ALGO_EVBUILD_CONFIG_H 1
 
-#include "DigiEventSelectorConfig.h"
-#include "DigiTriggerConfig.h"
-#include "EventBuilderConfig.h"
-#include "V0Trigger.h"
+#include "algo/evbuild/EventBuilderConfig.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
+#include "algo/trigger/DigiTriggerConfig.h"
+#include "algo/trigger/V0Trigger.h"
 
 #include <yaml-cpp/yaml.h>
 
diff --git a/algo/evbuild/EventBuilder.cxx b/algo/evbuild/EventBuilder.cxx
index a53e8f2772c1c11ab67a92698fcab804ea545e22..26279f97bcfd86f5ff72ee49af37010dd598dd2c 100644
--- a/algo/evbuild/EventBuilder.cxx
+++ b/algo/evbuild/EventBuilder.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "EventBuilder.h"
+#include "algo/evbuild/EventBuilder.h"
 
 #include <cassert>
 #include <iomanip>
diff --git a/algo/evbuild/EventBuilder.h b/algo/evbuild/EventBuilder.h
index b3837384a4a65099871279eb90ebc72be32920f1..71e6d15e2599083e304a554f2ae9bf9aa2b5267b 100644
--- a/algo/evbuild/EventBuilder.h
+++ b/algo/evbuild/EventBuilder.h
@@ -6,9 +6,9 @@
 #define CBM_ALGO_EVENTBUILDER_H 1
 
 #include "CbmDefs.h"
-#include "DigiData.h"
-#include "DigiEventSelector.h"
-#include "EventBuilderConfig.h"
+#include "algo/base/DigiData.h"
+#include "algo/evbuild/EventBuilderConfig.h"
+#include "algo/evselector/DigiEventSelector.h"
 
 #include <algorithm>
 #include <gsl/span>
diff --git a/algo/evbuild/EventBuilderConfig.cxx b/algo/evbuild/EventBuilderConfig.cxx
index e0817b04a49b8010007baf04a5f00b67bf425fe5..94375b203545bd4c8604d90ed8d62ba4634c7b1b 100644
--- a/algo/evbuild/EventBuilderConfig.cxx
+++ b/algo/evbuild/EventBuilderConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "EventBuilderConfig.h"
+#include "algo/evbuild/EventBuilderConfig.h"
 
 
 namespace cbm::algo::evbuild
diff --git a/algo/evbuild/EventbuildChain.cxx b/algo/evbuild/EventbuildChain.cxx
index 7184a4a06c8a10b3fb1255b31e8f8593116f4c6b..b1e90679e9840068b3088a38addb8f16572919d5 100644
--- a/algo/evbuild/EventbuildChain.cxx
+++ b/algo/evbuild/EventbuildChain.cxx
@@ -2,12 +2,12 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "EventbuildChain.h"
+#include "algo/evbuild/EventbuildChain.h"
 
 #include "CbmDigiTimeslice.h"
-#include "DigiData.h"
-#include "HistogramContainer.h"
-#include "evbuild/Config.h"
+#include "algo/base/DigiData.h"
+#include "algo/evbuild/Config.h"
+#include "algo/qa/HistogramContainer.h"
 
 #include <sstream>
 #include <string>
diff --git a/algo/evbuild/EventbuildChain.h b/algo/evbuild/EventbuildChain.h
index 32ae1e649c1228b17c49bc59226e2e66f7033f75..2699a37ca06b6f6bb8a71e8959fa2a906925918a 100644
--- a/algo/evbuild/EventbuildChain.h
+++ b/algo/evbuild/EventbuildChain.h
@@ -6,16 +6,16 @@
 #define CBM_ALGO_EVBUILD_EVBUILDCHAIN_H 1
 
 #include "CbmDefs.h"
-#include "Config.h"
-#include "DigiEventQa.h"
-#include "DigiEventSelector.h"
-#include "EventBuilder.h"
-#include "HistogramSender.h"
-#include "HitMultTrigger.h"
-#include "RecoResults.h"
-#include "SubChain.h"
-#include "TimeClusterTrigger.h"
-#include "V0Trigger.h"
+#include "algo/base/HistogramSender.h"
+#include "algo/base/SubChain.h"
+#include "algo/evbuild/Config.h"
+#include "algo/evbuild/EventBuilder.h"
+#include "algo/evselector/DigiEventSelector.h"
+#include "algo/global/RecoResults.h"
+#include "algo/qa/DigiEventQa.h"
+#include "algo/trigger/HitMultTrigger.h"
+#include "algo/trigger/TimeClusterTrigger.h"
+#include "algo/trigger/V0Trigger.h"
 
 #include <memory>
 
diff --git a/algo/evselector/DigiEventSelector.cxx b/algo/evselector/DigiEventSelector.cxx
index 4411689bfb468fa88af8bbb41233b3152c9eb5bc..ea5417830633e88908087354b368f9bf726ff9e9 100644
--- a/algo/evselector/DigiEventSelector.cxx
+++ b/algo/evselector/DigiEventSelector.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Shreya Roy [committer], Pierre-Alain Loizeau, Norbert Herrmann, Volker Friese, Dominik Smith */
 
-#include "DigiEventSelector.h"
+#include "algo/evselector/DigiEventSelector.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmStsDigi.h"
diff --git a/algo/evselector/DigiEventSelector.h b/algo/evselector/DigiEventSelector.h
index f12fd4ccd2abd2826289f88479d66a189abefd50..3cc7db7d29ee7fd1b965260ae88a22362b918b3a 100644
--- a/algo/evselector/DigiEventSelector.h
+++ b/algo/evselector/DigiEventSelector.h
@@ -5,9 +5,9 @@
 #ifndef CBM_ALGO_DIGIEVENTSELECTOR_H
 #define CBM_ALGO_DIGIEVENTSELECTOR_H 1
 
-#include "DigiData.h"
-#include "DigiEventSelectorConfig.h"
-#include "TrackingSetup.h"
+#include "algo/base/DigiData.h"
+#include "algo/ca/TrackingSetup.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
 
 #include <cstdint>
 #include <gsl/span>
diff --git a/algo/evselector/DigiEventSelectorConfig.cxx b/algo/evselector/DigiEventSelectorConfig.cxx
index 43399c74f0c7af2d827bedb8d8deffdf313ff17f..5cde512db2dd71460cfb186a3fb668226033df35 100644
--- a/algo/evselector/DigiEventSelectorConfig.cxx
+++ b/algo/evselector/DigiEventSelectorConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Shreya Roy. Pierre-Alain Loizeau, Volker Friese [committer], Dominik Smith, Sergei Zharko */
 
-#include "DigiEventSelectorConfig.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/global/ParFiles.cxx b/algo/global/ParFiles.cxx
index 9d4e8ee2cde9139b0cc765ea92b5f97d62025d66..a16db465aac6ce1c96fb457be665156bde3fdfe8 100644
--- a/algo/global/ParFiles.cxx
+++ b/algo/global/ParFiles.cxx
@@ -1,9 +1,9 @@
 /* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "ParFiles.h"
+#include "algo/global/ParFiles.h"
 
-#include "Exceptions.h"
+#include "algo/base/Exceptions.h"
 
 using namespace cbm::algo;
 
@@ -124,6 +124,6 @@ ParFiles::ParFiles(uint32_t runId)
       kfp.V0FinderConfig = "mcbm2025_02/kfp_lambda_v25a.yaml";
       break;
 
-    default: throw FatalError("Unknown setup: {}", ToString(setup));
+    default: throw FatalError("Unknown setup: {}", util::ToString(setup));
   }
 }
diff --git a/algo/global/ParFiles.h b/algo/global/ParFiles.h
index 0fe7b3094b1e25eaa0d7f3ccb207a6977f5d2836..09100494a7674cd2f6c0808fb080a7eb14a46391 100644
--- a/algo/global/ParFiles.h
+++ b/algo/global/ParFiles.h
@@ -8,8 +8,8 @@
  * @brief This file contains the definition of the ParFiles class.
  */
 
-#include "Definitions.h"
-#include "compat/Filesystem.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/compat/Filesystem.h"
 
 namespace cbm::algo
 {
diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index 1554da152a372b06c12fad0c227dcff9878905c9..8967a7600bd5c62063d07684849cb7daff14d393 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -1,44 +1,44 @@
 /* Copyright (C) 2023-2025 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], P.-A. Loizeau, Sergei Zharko */
-#include "Reco.h"
+#include "algo/global/Reco.h"
 
 #include "AlgoFairloggerCompat.h"
-#include "AuxDigiData.h"
-#include "BuildInfo.h"
+#include "CaTrack.h"
 #include "CbmDigiEvent.h"
-#include "EventbuildChain.h"
-#include "Exceptions.h"
-#include "HistogramSender.h"
-#include "ParFiles.h"
-#include "RecoGeneralQa.h"
-#include "StsDigiQa.h"
-#include "TrackingSetup.h"
-#include "bmon/Calibrate.h"
-#include "bmon/Hitfind.h"
-#include "bmon/ReadoutConfig.h"
-#include "bmon/Unpack.h"
-#include "ca/TrackingChain.h"
-#include "ca/core/data/CaTrack.h"
-#include "compat/OpenMP.h"
-#include "evbuild/Config.h"
-#include "kfp/KfpV0FinderChain.h"
-#include "much/Unpack.h"
-#include "qa/QaManager.h"
-#include "qa/hitfind/BmonHitfindQa.h"
-#include "qa/hitfind/TofHitfindQa.h"
-#include "rich/Unpack.h"
-#include "sts/ChannelMaskSet.h"
-#include "sts/HitfinderChain.h"
-#include "sts/Unpack.h"
-#include "tof/Calibrate.h"
-#include "tof/Hitfind.h"
-#include "tof/Unpack.h"
-#include "trd/Hitfind.h"
-#include "trd/Unpack.h"
-#include "trd2d/Unpack.h"
-#include "util/TimingsFormat.h"
-#include "util/TsUtils.h"
+#include "algo/base/AuxDigiData.h"
+#include "algo/base/BuildInfo.h"
+#include "algo/base/Exceptions.h"
+#include "algo/base/HistogramSender.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/util/TimingsFormat.h"
+#include "algo/base/util/TsUtils.h"
+#include "algo/ca/TrackingChain.h"
+#include "algo/ca/TrackingSetup.h"
+#include "algo/detectors/bmon/Calibrate.h"
+#include "algo/detectors/bmon/Hitfind.h"
+#include "algo/detectors/bmon/ReadoutConfig.h"
+#include "algo/detectors/bmon/Unpack.h"
+#include "algo/detectors/much/Unpack.h"
+#include "algo/detectors/rich/Unpack.h"
+#include "algo/detectors/sts/ChannelMaskSet.h"
+#include "algo/detectors/sts/HitfinderChain.h"
+#include "algo/detectors/sts/Unpack.h"
+#include "algo/detectors/tof/Calibrate.h"
+#include "algo/detectors/tof/Hitfind.h"
+#include "algo/detectors/tof/Unpack.h"
+#include "algo/detectors/trd/Hitfind.h"
+#include "algo/detectors/trd/Unpack.h"
+#include "algo/detectors/trd2d/Unpack.h"
+#include "algo/evbuild/Config.h"
+#include "algo/evbuild/EventbuildChain.h"
+#include "algo/global/ParFiles.h"
+#include "algo/kfp/KfpV0FinderChain.h"
+#include "algo/qa/QaManager.h"
+#include "algo/qa/RecoGeneralQa.h"
+#include "algo/qa/hitfind/BmonHitfindQa.h"
+#include "algo/qa/hitfind/TofHitfindQa.h"
+#include "algo/qa/unpack/StsDigiQa.h"
 #include "yaml/Yaml.h"
 
 #include <Monitor.hpp>
@@ -646,7 +646,7 @@ void Reco::QueueUnpackerMetricsDet(const UnpackMonitor<MSMonitor>& monitor)
     return;
   }
 
-  std::string_view det = ToString(monitor.system);
+  std::string_view det = util::ToString(monitor.system);
 
   auto MkKey = [&](std::string_view key) { return fmt::format("{}{}", key, Capitalize(det)); };
 
diff --git a/algo/global/Reco.h b/algo/global/Reco.h
index e5a8412151d8e05a4cd1b5ee68d71d8ee6f47ebc..b31e62f69a094d9f511bd654ff893edc330c0710 100644
--- a/algo/global/Reco.h
+++ b/algo/global/Reco.h
@@ -3,10 +3,10 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
-#include "AlgoTraits.h"
-#include "SubChain.h"
-#include "evselector/RecoEventSelectorMonitor.h"
-#include "global/RecoResults.h"
+#include "algo/base/AlgoTraits.h"
+#include "algo/base/SubChain.h"
+#include "algo/evselector/RecoEventSelectorMonitor.h"
+#include "algo/global/RecoResults.h"
 
 #include <xpu/host.h>
 
diff --git a/algo/global/RecoResults.h b/algo/global/RecoResults.h
index 3bcee8be6acd66388ab8e0043313888c0f35c615..c445fbf91b30848fa5698cd95606339f9173c352 100644
--- a/algo/global/RecoResults.h
+++ b/algo/global/RecoResults.h
@@ -9,16 +9,17 @@
 
 #pragma once
 
-#include "DigiData.h"
+#include "CaTrack.h"
+#include "CaVector.h"
+#include "PODVector.h"
 #include "PartitionedSpan.h"
 #include "PartitionedVector.h"
-#include "bmon/Hit.h"
-#include "ca/core/data/CaTrack.h"
-#include "ca/core/utils/CaVector.h"
-#include "sts/Cluster.h"
-#include "sts/Hit.h"
-#include "tof/Hit.h"
-#include "trd/Hit.h"
+#include "algo/base/DigiData.h"
+#include "algo/data/sts/Cluster.h"
+#include "algo/data/sts/Hit.h"
+#include "algo/detectors/bmon/Hit.h"
+#include "algo/detectors/tof/Hit.h"
+#include "algo/detectors/trd/Hit.h"
 
 #include <vector>
 
diff --git a/algo/global/RecoResultsInputArchive.cxx b/algo/global/RecoResultsInputArchive.cxx
index 650f014e8a222a3ee0656712e3a987211d3c700d..52cfbca5694cc5bfc4e7413ad577045876d81faf 100644
--- a/algo/global/RecoResultsInputArchive.cxx
+++ b/algo/global/RecoResultsInputArchive.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "RecoResultsInputArchive.h"
+#include "algo/global/RecoResultsInputArchive.h"
 
 namespace fles
 {
diff --git a/algo/global/RecoResultsInputArchive.h b/algo/global/RecoResultsInputArchive.h
index f73e338265f119354f78f69151dd6efb6c6acaa3..0240f1800172b510eb2d9fe7c3043a48cb665df1 100644
--- a/algo/global/RecoResultsInputArchive.h
+++ b/algo/global/RecoResultsInputArchive.h
@@ -3,7 +3,7 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
-#include "StorableRecoResults.h"
+#include "algo/global/StorableRecoResults.h"
 
 #include <InputArchive.hpp>
 
diff --git a/algo/global/RecoResultsOutputArchive.cxx b/algo/global/RecoResultsOutputArchive.cxx
index e1094f362b442c3a0f3c94c55f5f6e7d42c7a8e5..596dd9bdd21000747e4ec442ef56aacc57a902c0 100644
--- a/algo/global/RecoResultsOutputArchive.cxx
+++ b/algo/global/RecoResultsOutputArchive.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 
-#include "RecoResultsOutputArchive.h"
+#include "algo/global/RecoResultsOutputArchive.h"
 
 namespace fles
 {
diff --git a/algo/global/RecoResultsOutputArchive.h b/algo/global/RecoResultsOutputArchive.h
index 8c673eb16df0676465c20f89e147555246c48a11..7ac61d58722dc7826da57dc25010399a1778ce75 100644
--- a/algo/global/RecoResultsOutputArchive.h
+++ b/algo/global/RecoResultsOutputArchive.h
@@ -3,7 +3,7 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
-#include "StorableRecoResults.h"
+#include "algo/global/StorableRecoResults.h"
 
 #include <OutputArchive.hpp>
 
diff --git a/algo/global/StorableRecoResults.cxx b/algo/global/StorableRecoResults.cxx
index 22b072eb30b4e716295f590c911f7a05a76530a3..a3956307af5fde92a19af096ad8941394aeb1f64 100644
--- a/algo/global/StorableRecoResults.cxx
+++ b/algo/global/StorableRecoResults.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], P.-A. Loizeau */
-#include "StorableRecoResults.h"
+#include "algo/global/StorableRecoResults.h"
 
 using namespace cbm::algo;
 
diff --git a/algo/global/StorableRecoResults.h b/algo/global/StorableRecoResults.h
index 3dfd208b18b30ffe95683e6a9c07d57be8f50db0..3269175dfb569ff3de3b5e2ec84911225f11fc56 100644
--- a/algo/global/StorableRecoResults.h
+++ b/algo/global/StorableRecoResults.h
@@ -4,15 +4,15 @@
 #ifndef CBM_ALGO_GLOBAL_STORABLE_RECO_RESULTS_H
 #define CBM_ALGO_GLOBAL_STORABLE_RECO_RESULTS_H
 
+#include "CaTrack.h"
+#include "CaVector.h"
 #include "CbmDigiEvent.h"
 #include "PartitionedVector.h"
-#include "bmon/Hit.h"
-#include "ca/core/data/CaTrack.h"
-#include "ca/core/utils/CaVector.h"
-#include "sts/Cluster.h"
-#include "sts/Hit.h"
-#include "tof/Hit.h"
-#include "trd/Hit.h"
+#include "algo/data/sts/Cluster.h"
+#include "algo/data/sts/Hit.h"
+#include "algo/detectors/bmon/Hit.h"
+#include "algo/detectors/tof/Hit.h"
+#include "algo/detectors/trd/Hit.h"
 
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/utility.hpp>
diff --git a/algo/kfp/KfpV0Finder.cxx b/algo/kfp/KfpV0Finder.cxx
index 820078945d3ffd25eb18256e3077899c35d47432..2e27c577dc926a4dd6c28d3797a3fd4d462b3b0b 100644
--- a/algo/kfp/KfpV0Finder.cxx
+++ b/algo/kfp/KfpV0Finder.cxx
@@ -7,9 +7,9 @@
 /// \brief  A V0 finding algorithm (implementation)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "kfp/KfpV0Finder.h"
+#include "algo/kfp/KfpV0Finder.h"
 
-#include "global/RecoResults.h"
+#include "algo/global/RecoResults.h"
 
 #include <algorithm>
 #include <limits>
diff --git a/algo/kfp/KfpV0Finder.h b/algo/kfp/KfpV0Finder.h
index 9605b581b2b980b0825cb68de1689fc68da2ad5e..39e3c5653a40708c5042db67bf610aaa4df02806 100644
--- a/algo/kfp/KfpV0Finder.h
+++ b/algo/kfp/KfpV0Finder.h
@@ -11,8 +11,8 @@
 
 #include "CbmEventTriggers.h"
 #include "KFParticleTopoReconstructor.h"
-#include "global/RecoResults.h"
-#include "kfp/KfpV0FinderMonitor.h"
+#include "algo/global/RecoResults.h"
+#include "algo/kfp/KfpV0FinderMonitor.h"
 
 #include <limits>
 #include <memory>
diff --git a/algo/kfp/KfpV0FinderChain.cxx b/algo/kfp/KfpV0FinderChain.cxx
index 96dc60a593ee94df51cfde7a736e4f1c15c541a8..ee298cfb7e912248745d183116573cbdc3f8b099 100644
--- a/algo/kfp/KfpV0FinderChain.cxx
+++ b/algo/kfp/KfpV0FinderChain.cxx
@@ -7,11 +7,11 @@
 /// \brief  A chain for V0 finding (implementation)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "kfp/KfpV0FinderChain.h"
+#include "algo/kfp/KfpV0FinderChain.h"
 
-#include "global/ParFiles.h"
-#include "kfp/KfpV0FinderConfig.h"
-#include "log/AlgoFairloggerCompat.h"
+#include "AlgoFairloggerCompat.h"
+#include "algo/global/ParFiles.h"
+#include "algo/kfp/KfpV0FinderConfig.h"
 #include "yaml/Yaml.h"
 
 #include <sstream>
diff --git a/algo/kfp/KfpV0FinderChain.h b/algo/kfp/KfpV0FinderChain.h
index 42580e745655688c52ab38da66eb4f71ab393da6..89ecdd0091794d6b80e1b94a331408d521c20da8 100644
--- a/algo/kfp/KfpV0FinderChain.h
+++ b/algo/kfp/KfpV0FinderChain.h
@@ -11,11 +11,11 @@
 
 #include "CbmEventTriggers.h"
 #include "PODVector.h"
-#include "RecoResults.h"
-#include "SubChain.h"
-#include "kfp/KfpV0Finder.h"
-#include "kfp/KfpV0FinderMonitor.h"
-#include "kfp/KfpV0FinderQa.h"
+#include "algo/base/SubChain.h"
+#include "algo/global/RecoResults.h"
+#include "algo/kfp/KfpV0Finder.h"
+#include "algo/kfp/KfpV0FinderMonitor.h"
+#include "algo/kfp/KfpV0FinderQa.h"
 
 namespace cbm::algo
 {
diff --git a/algo/kfp/KfpV0FinderConfig.cxx b/algo/kfp/KfpV0FinderConfig.cxx
index d74e4d8b2ca7f53755e941dcde73030ca27fbb4c..5f026bc839a2de7c3ce1261a151be80feef1f1d2 100644
--- a/algo/kfp/KfpV0FinderConfig.cxx
+++ b/algo/kfp/KfpV0FinderConfig.cxx
@@ -7,7 +7,7 @@
 /// \brief  Configuration structure for V0 selector in mCBM (implementation)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "KfpV0FinderConfig.h"
+#include "algo/kfp/KfpV0FinderConfig.h"
 
 #include <iomanip>
 #include <sstream>
diff --git a/algo/kfp/KfpV0FinderQa.cxx b/algo/kfp/KfpV0FinderQa.cxx
index 703f067f93cf0b2a81c440817a55d9feac6fe7ea..90b05bb5a5d4bcaca56758caacc1c898656626a8 100644
--- a/algo/kfp/KfpV0FinderQa.cxx
+++ b/algo/kfp/KfpV0FinderQa.cxx
@@ -7,10 +7,10 @@
 /// \brief  A V0 finding algorithm QA (implementation)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "kfp/KfpV0FinderQa.h"
+#include "algo/kfp/KfpV0FinderQa.h"
 
-#include "global/RecoResults.h"
-#include "kfp/KfpV0Finder.h"
+#include "algo/global/RecoResults.h"
+#include "algo/kfp/KfpV0Finder.h"
 
 
 using cbm::algo::kfp::V0FinderQa;
diff --git a/algo/kfp/KfpV0FinderQa.h b/algo/kfp/KfpV0FinderQa.h
index 1f941a744a398defac90bd0dfacb72400af7b02e..66f2ebcc6777bb882163a29a0c894fd37672f264 100644
--- a/algo/kfp/KfpV0FinderQa.h
+++ b/algo/kfp/KfpV0FinderQa.h
@@ -9,7 +9,8 @@
 
 #pragma once
 
-#include "qa/QaTaskHeader.h"
+#include "algo/qa/QaTaskHeader.h"
+
 
 namespace cbm::algo
 {
diff --git a/algo/online/CMakeLists.txt b/algo/online/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f72fc4858c376d7bae6a815147cf317ab296ed7f
--- /dev/null
+++ b/algo/online/CMakeLists.txt
@@ -0,0 +1,6 @@
+# A rule to build the online versions of CbmRoot core libraries
+#
+add_subdirectory(containers)
+add_subdirectory(data)
+
+
diff --git a/algo/online/containers/CMakeLists.txt b/algo/online/containers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..34a95ef9d3a4b22d20b6b78c8d2c02f7e46d562d
--- /dev/null
+++ b/algo/online/containers/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Online version of libCbmContainers
+
+set(OFFLINE_CONTAINERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/containers)
+
+add_library(OnlineContainers INTERFACE)
+
+target_include_directories(OnlineContainers
+  INTERFACE ${OFFLINE_CONTAINERS_DIR}
+)
+
+target_compile_definitions(OnlineContainers INTERFACE NO_ROOT)
+
+target_link_libraries(OnlineContainers 
+  INTERFACE GSL
+)
+
+install(TARGETS OnlineContainers DESTINATION lib)
diff --git a/algo/data/CMakeLists.txt b/algo/online/data/CMakeLists.txt
similarity index 94%
rename from algo/data/CMakeLists.txt
rename to algo/online/data/CMakeLists.txt
index 717ba53896c880649c4c07c1ff010fad8c14551b..7f045e7fa33d20c079ed804f76ded30d85e01a08 100644
--- a/algo/data/CMakeLists.txt
+++ b/algo/online/data/CMakeLists.txt
@@ -2,7 +2,7 @@
 # the array .
 # The extension is already found.  Any number of sources could be listed here.
 
-set(OFFLINE_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../core/data)
+set(OFFLINE_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../core/data)
 
 set(SRCS
   ${OFFLINE_DATA_DIR}/CbmDefs.cxx
@@ -52,6 +52,7 @@ target_include_directories(OnlineData
   PUBLIC ${OFFLINE_DATA_DIR}/fsd
   PUBLIC ${OFFLINE_DATA_DIR}/global
   PUBLIC ${OFFLINE_DATA_DIR}/raw
+  #PUBLIC ${OFFLINE_DATA_DIR}/experimental
 )
 
 target_compile_definitions(OnlineData PUBLIC NO_ROOT)
diff --git a/algo/qa/CanvasConfig.cxx b/algo/qa/CanvasConfig.cxx
index 322b082f75fbb91f592f4cf6efaad010fdf62203..68a78945dad783466a6ecec8b37afcc60fc46133 100644
--- a/algo/qa/CanvasConfig.cxx
+++ b/algo/qa/CanvasConfig.cxx
@@ -7,7 +7,7 @@
 /// \brief  A class representing a canvas in the message for the Histogram server (implementation)
 /// \author S.Zharko <s.zharko@gsi.de>
 
-#include "CanvasConfig.h"
+#include "algo/qa/CanvasConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/qa/CanvasConfig.h b/algo/qa/CanvasConfig.h
index 20088d8b9bba7065f1e8361265a482c5b8750dd0..ec25f9f579e5c63379a06a7c2081c9d4d560ec1f 100644
--- a/algo/qa/CanvasConfig.h
+++ b/algo/qa/CanvasConfig.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "PadConfig.h"
+#include "algo/qa/PadConfig.h"
 
 #include <string>
 #include <string_view>
diff --git a/algo/qa/DigiEventQa.cxx b/algo/qa/DigiEventQa.cxx
index 3fb21feca31b337175a71013147fbcdc32cb1144..d1137f9e01d4554b8d199aba87d28f22dfbc5113 100644
--- a/algo/qa/DigiEventQa.cxx
+++ b/algo/qa/DigiEventQa.cxx
@@ -2,9 +2,9 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer], P.-A. Loizeau */
 
-#include "DigiEventQa.h"
+#include "algo/qa/DigiEventQa.h"
 
-#include "Histogram.h"
+#include "algo/qa/Histogram.h"
 
 #include <functional>
 #include <iomanip>
diff --git a/algo/qa/DigiEventQa.h b/algo/qa/DigiEventQa.h
index 897cda8ebcb5cbf770e71b55f59f61aaa3275dc6..9184e0d2c2ddd0c07f4a223709b6b31175280944 100644
--- a/algo/qa/DigiEventQa.h
+++ b/algo/qa/DigiEventQa.h
@@ -6,9 +6,9 @@
 #define ALGO_QA_DIGIEVENTQA_H 1
 
 #include "CbmDefs.h"
-#include "DigiData.h"
-#include "HistogramContainer.h"
-#include "evbuild/EventBuilderConfig.h"
+#include "algo/base/DigiData.h"
+#include "algo/evbuild/EventBuilderConfig.h"
+#include "algo/qa/HistogramContainer.h"
 
 #include <gsl/span>
 #include <unordered_map>
diff --git a/algo/qa/Histo1D.cxx b/algo/qa/Histo1D.cxx
index 80a9d7027ab0fe0b6868fefe85997243322531eb..ff0e44ea7b6304c855eb2c6637e9581d8231b50a 100644
--- a/algo/qa/Histo1D.cxx
+++ b/algo/qa/Histo1D.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "Histo1D.h"
+#include "algo/qa/Histo1D.h"
 
 #include <cassert>
 #include <cmath>
diff --git a/algo/qa/Histogram.h b/algo/qa/Histogram.h
index 44040934a422adb09a9b536714610548f30afabc..d467a6ef98b59293ff245089a669f76ee828810a 100644
--- a/algo/qa/Histogram.h
+++ b/algo/qa/Histogram.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Accumulators.h"
+#include "algo/qa/Accumulators.h"
 
 #include <boost/histogram.hpp>
 //#include <boost/histogram/algorithm/sum.hpp>
diff --git a/algo/qa/HistogramContainer.cxx b/algo/qa/HistogramContainer.cxx
index b70cb5f371d6fd0916c2db912af81bb5db7e3f98..bcd499b317a5e41b933b44363d23b30999031b01 100644
--- a/algo/qa/HistogramContainer.cxx
+++ b/algo/qa/HistogramContainer.cxx
@@ -7,7 +7,7 @@
 /// \brief  A histogram container for the histogram server (header)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "HistogramContainer.h"
+#include "algo/qa/HistogramContainer.h"
 
 #include <algorithm>
 
diff --git a/algo/qa/HistogramContainer.h b/algo/qa/HistogramContainer.h
index 3ccdbf263ab7ee8fc81ea13ac2cdc1c23d989282..ae004fe93af30e57ea01e8cc3c4fa9551f585133 100644
--- a/algo/qa/HistogramContainer.h
+++ b/algo/qa/HistogramContainer.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Histogram.h"  // for H1D, H2D
+#include "algo/qa/Histogram.h"  // for H1D, H2D
 
 #include <boost/serialization/forward_list.hpp>
 
diff --git a/algo/qa/PadConfig.cxx b/algo/qa/PadConfig.cxx
index bd157e04ead76b1c970e9ec55e08e8049264665f..a924ab1c4d5ac1b352b4fbe3f8fee709850b42d4 100644
--- a/algo/qa/PadConfig.cxx
+++ b/algo/qa/PadConfig.cxx
@@ -7,7 +7,7 @@
 /// \brief  A class representing a Pad in the message for the Histogram server (implementation)
 /// \author S.Zharko <s.zharko@gsi.de>
 
-#include "PadConfig.h"
+#include "algo/qa/PadConfig.h"
 
 #include "AlgoFairloggerCompat.h"
 
diff --git a/algo/qa/PadConfig.h b/algo/qa/PadConfig.h
index 104b2144263b06834952557d14d3b30d21e6197a..426dc4f970f309cccafeaee02dba9c1d5a8c177d 100644
--- a/algo/qa/PadConfig.h
+++ b/algo/qa/PadConfig.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Histogram.h"
+#include "algo/qa/Histogram.h"
 
 #include <string>
 #include <string_view>
diff --git a/algo/qa/QaData.cxx b/algo/qa/QaData.cxx
index 6c42b3a5237df1cad00eacd1d9b9a579cf661f6d..308582d91f2ed62172fc7162a9c4604f99d7a787 100644
--- a/algo/qa/QaData.cxx
+++ b/algo/qa/QaData.cxx
@@ -7,7 +7,7 @@
 /// \brief  A unified data-structure to handle QA objects for the online reconstruction (implementation)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "QaData.h"
+#include "algo/qa/QaData.h"
 
 #include <algorithm>
 
diff --git a/algo/qa/QaData.h b/algo/qa/QaData.h
index d8ed2717929074cb95941eab53366fa63614ef22..9b4a0764f3926e42776fc18aeb88954d2f4de381 100644
--- a/algo/qa/QaData.h
+++ b/algo/qa/QaData.h
@@ -10,10 +10,10 @@
 #pragma once
 
 #include "AlgoFairloggerCompat.h"
-#include "HistogramSender.h"
-#include "qa/CanvasConfig.h"
-#include "qa/HistogramContainer.h"
-#include "qa/TaskProperties.h"
+#include "algo/base/HistogramSender.h"
+#include "algo/qa/CanvasConfig.h"
+#include "algo/qa/HistogramContainer.h"
+#include "algo/qa/TaskProperties.h"
 
 #include <boost/serialization/forward_list.hpp>
 
diff --git a/algo/qa/QaManager.cxx b/algo/qa/QaManager.cxx
index dc831fa2ecc0f92f4c58a3c05df5c74a785908ef..7c636b53cf3f75bb324deb3d504b111abf0706ad 100644
--- a/algo/qa/QaManager.cxx
+++ b/algo/qa/QaManager.cxx
@@ -7,7 +7,7 @@
 /// \brief  QA manager for the online data reconstruction
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/QaManager.h"
+#include "algo/qa/QaManager.h"
 
 using cbm::algo::HistogramSender;
 using cbm::algo::qa::Data;
diff --git a/algo/qa/QaManager.h b/algo/qa/QaManager.h
index 93d587eb390d014d7a65974af7df93d005097019..2f901345be7bfba2aa9677cb41adf5685ad86e78 100644
--- a/algo/qa/QaManager.h
+++ b/algo/qa/QaManager.h
@@ -9,9 +9,9 @@
 
 #pragma once
 
-#include "HistogramSender.h"
-#include "SubChain.h"
-#include "qa/QaData.h"
+#include "algo/base/HistogramSender.h"
+#include "algo/base/SubChain.h"
+#include "algo/qa/QaData.h"
 
 namespace cbm::algo::qa
 {
diff --git a/algo/qa/QaTaskHeader.h b/algo/qa/QaTaskHeader.h
index e910a6a103d62dbcee2e17722b9ac4d0a9f924b7..210c730cce6b194dcbdaeb054da4b13f4232cd11 100644
--- a/algo/qa/QaTaskHeader.h
+++ b/algo/qa/QaTaskHeader.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "qa/QaManager.h"
+#include "algo/qa/QaManager.h"
 
 #include <memory>
 
diff --git a/algo/qa/RecoGeneralQa.cxx b/algo/qa/RecoGeneralQa.cxx
index 87687520d53ed4bda7028c0790eb0f849e5a3e67..dd7145d9d97fea3b9e9ae46556ef9ea2674be9ce 100644
--- a/algo/qa/RecoGeneralQa.cxx
+++ b/algo/qa/RecoGeneralQa.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: P.-A. Loizeau [committer] */
 
-#include "RecoGeneralQa.h"
+#include "algo/qa/RecoGeneralQa.h"
 
 #include <cmath>
 
diff --git a/algo/qa/RecoGeneralQa.h b/algo/qa/RecoGeneralQa.h
index 2b859e9c6dd43e8c2b4e7742157347b1f84bae68..880d17522ef79787628a79598b91a40d6b07ae2b 100644
--- a/algo/qa/RecoGeneralQa.h
+++ b/algo/qa/RecoGeneralQa.h
@@ -6,8 +6,8 @@
 #define ALGO_QA_RECOGENERALQA_H 1
 
 #include "CbmDefs.h"
-#include "HistogramSender.h"
-#include "QaData.h"
+#include "algo/base/HistogramSender.h"
+#include "algo/qa/QaData.h"
 
 #include <StorableTimeslice.hpp>
 
diff --git a/algo/qa/TaskProperties.h b/algo/qa/TaskProperties.h
index ec012b907cd9e29c41cebfc4e9e53ded7272b451..ab0901534c67af3f9db52f4179ed667923c8faa0 100644
--- a/algo/qa/TaskProperties.h
+++ b/algo/qa/TaskProperties.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "Histogram.h"  // for H1D, H2D
+#include "algo/qa/Histogram.h"  // for H1D, H2D
 
 #include <forward_list>
 #include <string>
diff --git a/algo/qa/hitfind/BmonHitfindQa.cxx b/algo/qa/hitfind/BmonHitfindQa.cxx
index 0bf088900f35ef7f55b6ce59f311bda818dee011..9c99adfc59015e9574944271ea099b9b10e25a55 100644
--- a/algo/qa/hitfind/BmonHitfindQa.cxx
+++ b/algo/qa/hitfind/BmonHitfindQa.cxx
@@ -7,12 +7,12 @@
 /// \since  09.02.2025
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/hitfind/BmonHitfindQa.h"
+#include "algo/qa/hitfind/BmonHitfindQa.h"
 
 #include "CbmBmonDigi.h"
 #include "CbmTofAddress.h"
-#include "bmon/Hit.h"
-#include "qa/Histogram.h"
+#include "algo/detectors/bmon/Hit.h"
+#include "algo/qa/Histogram.h"
 
 #include <fmt/format.h>
 
diff --git a/algo/qa/hitfind/BmonHitfindQa.h b/algo/qa/hitfind/BmonHitfindQa.h
index b2a8b3e30e709d099ef1059aaa5a619864d02c54..c2640ff1e6b75de19a1a016dca711de00bce2de8 100644
--- a/algo/qa/hitfind/BmonHitfindQa.h
+++ b/algo/qa/hitfind/BmonHitfindQa.h
@@ -11,8 +11,8 @@
 
 #include "PODVector.h"
 #include "PartitionedVector.h"
-#include "qa/QaTaskHeader.h"
-#include "qa/hitfind/BmonHitfindQaParameters.h"
+#include "algo/qa/QaTaskHeader.h"
+#include "algo/qa/hitfind/BmonHitfindQaParameters.h"
 
 class CbmBmonDigi;
 
diff --git a/algo/qa/hitfind/BmonHitfindQaParameters.cxx b/algo/qa/hitfind/BmonHitfindQaParameters.cxx
index aa7f4aadce0f8e7cad631de165f789177a02c4c9..92362da81bf6635535e42f86df60e28cc445579b 100644
--- a/algo/qa/hitfind/BmonHitfindQaParameters.cxx
+++ b/algo/qa/hitfind/BmonHitfindQaParameters.cxx
@@ -7,7 +7,7 @@
 /// \since  10.02.2025
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/hitfind/BmonHitfindQaParameters.h"
+#include "algo/qa/hitfind/BmonHitfindQaParameters.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
diff --git a/algo/qa/hitfind/BmonHitfindQaParameters.h b/algo/qa/hitfind/BmonHitfindQaParameters.h
index 25f524ba87945024350ed277757e8856f1eb6de6..19e2f214a276783c7349c5530b30e56dc9450d6e 100644
--- a/algo/qa/hitfind/BmonHitfindQaParameters.h
+++ b/algo/qa/hitfind/BmonHitfindQaParameters.h
@@ -9,8 +9,8 @@
 
 #pragma once
 
-#include "bmon/CalibrateSetup.h"
-#include "bmon/HitfindSetup.h"
+#include "algo/detectors/bmon/CalibrateSetup.h"
+#include "algo/detectors/bmon/HitfindSetup.h"
 
 #include <vector>
 
diff --git a/algo/qa/hitfind/TofHitfindQa.cxx b/algo/qa/hitfind/TofHitfindQa.cxx
index c037dc676457bd599e552e7c3e972ca523c9b4e8..7e306310b014bb64d035eac1b02943ba4e3f1daf 100644
--- a/algo/qa/hitfind/TofHitfindQa.cxx
+++ b/algo/qa/hitfind/TofHitfindQa.cxx
@@ -7,11 +7,11 @@
 /// \since  04.03.2025
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/hitfind/TofHitfindQa.h"
+#include "algo/qa/hitfind/TofHitfindQa.h"
 
 #include "CbmTofAddress.h"
-#include "qa/Histogram.h"
-#include "tof/Hit.h"
+#include "algo/detectors/tof/Hit.h"
+#include "algo/qa/Histogram.h"
 
 #include <fmt/format.h>
 
diff --git a/algo/qa/hitfind/TofHitfindQa.h b/algo/qa/hitfind/TofHitfindQa.h
index 3c630b0b2a72a1943e94df84c95c9b33041e4d16..1b89a36282329c5827d0bff173e5483608edd63f 100644
--- a/algo/qa/hitfind/TofHitfindQa.h
+++ b/algo/qa/hitfind/TofHitfindQa.h
@@ -12,8 +12,8 @@
 
 #include "PODVector.h"
 #include "PartitionedVector.h"
-#include "qa/QaTaskHeader.h"
-#include "qa/hitfind/TofHitfindQaParameters.h"
+#include "algo/qa/QaTaskHeader.h"
+#include "algo/qa/hitfind/TofHitfindQaParameters.h"
 
 namespace cbm::algo
 {
diff --git a/algo/qa/hitfind/TofHitfindQaParameters.cxx b/algo/qa/hitfind/TofHitfindQaParameters.cxx
index 3cb2f35b8cef672094e082cf4de445612f65f44b..e6aa2732e5fbfa2bde91cc3b1dcba6826f42be1f 100644
--- a/algo/qa/hitfind/TofHitfindQaParameters.cxx
+++ b/algo/qa/hitfind/TofHitfindQaParameters.cxx
@@ -7,7 +7,7 @@
 /// \since  10.02.2025
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/hitfind/TofHitfindQaParameters.h"
+#include "algo/qa/hitfind/TofHitfindQaParameters.h"
 
 #include "AlgoFairloggerCompat.h"
 #include "CbmTofAddress.h"
diff --git a/algo/qa/hitfind/TofHitfindQaParameters.h b/algo/qa/hitfind/TofHitfindQaParameters.h
index f64fe1e9f324749c98f268eb3eb6a838278f70fc..cde3c43c8dcb01467db55cc5e04ae505eccba1fa 100644
--- a/algo/qa/hitfind/TofHitfindQaParameters.h
+++ b/algo/qa/hitfind/TofHitfindQaParameters.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "tof/HitfindSetup.h"
+#include "algo/detectors/tof/HitfindSetup.h"
 
 #include <unordered_map>
 #include <vector>
diff --git a/algo/qa/trigger/V0TriggerQa.cxx b/algo/qa/trigger/V0TriggerQa.cxx
index 8422852b6181d3275bb20b47b234cbf26d5c6ddd..fd72fd2efd426bf445552bdbb333fdc8c4dad272 100644
--- a/algo/qa/trigger/V0TriggerQa.cxx
+++ b/algo/qa/trigger/V0TriggerQa.cxx
@@ -7,9 +7,9 @@
 /// \since  06.03.2025
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "qa/trigger/V0TriggerQa.h"
+#include "algo/qa/trigger/V0TriggerQa.h"
 
-#include "qa/Histogram.h"
+#include "algo/qa/Histogram.h"
 
 using cbm::algo::evbuild::V0TriggerQa;
 
diff --git a/algo/qa/trigger/V0TriggerQa.h b/algo/qa/trigger/V0TriggerQa.h
index b0f37c398036756b8507da7b71a718e17985c36a..bed8b0409c221ba3dbd55031a6d3eef78296d398 100644
--- a/algo/qa/trigger/V0TriggerQa.h
+++ b/algo/qa/trigger/V0TriggerQa.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "qa/QaTaskHeader.h"
+#include "algo/qa/QaTaskHeader.h"
 
 namespace cbm::algo::qa
 {
diff --git a/algo/qa/unpack/QaBase.h b/algo/qa/unpack/QaBase.h
index 4e47eeb27731c15b3256714df8855d2eb3872acb..93e73dad909bd95c322e2a221d292aee85a603ef 100644
--- a/algo/qa/unpack/QaBase.h
+++ b/algo/qa/unpack/QaBase.h
@@ -9,9 +9,9 @@
 
 #pragma once
 
-#include "Definitions.h"
 #include "PODVector.h"
-#include "QaData.h"
+#include "algo/base/Definitions.h"
+#include "algo/qa/QaData.h"
 
 #include <string>
 
diff --git a/algo/qa/unpack/StsDigiQa.cxx b/algo/qa/unpack/StsDigiQa.cxx
index 7c502536c435d010cddfbb74b1fd84db6b56778e..6a3001deae078982a183b794614d9a230b87c53a 100644
--- a/algo/qa/unpack/StsDigiQa.cxx
+++ b/algo/qa/unpack/StsDigiQa.cxx
@@ -7,7 +7,7 @@
 /// \brief  QA module for STS raw digis (source)
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "StsDigiQa.h"
+#include "algo/qa/unpack/StsDigiQa.h"
 
 #include "CbmStsAddress.h"
 
diff --git a/algo/qa/unpack/StsDigiQa.h b/algo/qa/unpack/StsDigiQa.h
index 1e70c3d02668fbcb474f03af729825c55752f925..b3296d53d67baa8fd72d15afd4d57ef45b972ec4 100644
--- a/algo/qa/unpack/StsDigiQa.h
+++ b/algo/qa/unpack/StsDigiQa.h
@@ -10,9 +10,9 @@
 #pragma once
 
 #include "CbmStsDigi.h"
-#include "Definitions.h"
-#include "QaBase.h"
-#include "sts/Unpack.h"
+#include "algo/base/Definitions.h"
+#include "algo/detectors/sts/Unpack.h"
+#include "algo/qa/unpack/QaBase.h"
 
 #include <unordered_map>
 #include <vector>
diff --git a/algo/test/_GTestChannelMapping.cxx b/algo/test/_GTestChannelMapping.cxx
index 754d3b911bfe0f59606073ef63af819163bdc24e..6041fc663ceb981a568bce2b44e281f0127fc5ca 100644
--- a/algo/test/_GTestChannelMapping.cxx
+++ b/algo/test/_GTestChannelMapping.cxx
@@ -2,8 +2,8 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: David Gutierrez [committer], Dario Ramirez */
 
-#include "Definitions.h"
-#include "detectors/sts/StsRecoUtils.h"
+#include "algo/base/Definitions.h"
+#include "algo/detectors/sts/StsRecoUtils.h"
 
 #include <array>
 #include <optional>
diff --git a/algo/test/_GTestDigiEventSelector.cxx b/algo/test/_GTestDigiEventSelector.cxx
index c199ab5e1826d61fba4a5037ec3515a45fc31af7..2d188103ed96cab0f411a97fe745fd874d20c703 100644
--- a/algo/test/_GTestDigiEventSelector.cxx
+++ b/algo/test/_GTestDigiEventSelector.cxx
@@ -2,9 +2,9 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "DigiEventSelector.h"
-#include "DigiEventSelectorConfig.h"
 #include "MicrosliceDescriptor.hpp"
+#include "algo/evselector/DigiEventSelector.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
 #include "gtest/gtest-spi.h"
 #include "gtest/gtest.h"
 
diff --git a/algo/test/_GTestEventBuilder.cxx b/algo/test/_GTestEventBuilder.cxx
index 1f6a36d9b981d70f83e88c082db416e42a7337a4..0eec26b52390d4e66b88bf60c958133fd67f0d3c 100644
--- a/algo/test/_GTestEventBuilder.cxx
+++ b/algo/test/_GTestEventBuilder.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "EventBuilder.h"
+#include "algo/evbuild/EventBuilder.h"
 #include "gtest/gtest-spi.h"
 #include "gtest/gtest.h"
 
diff --git a/algo/test/_GTestPartitionedSpan.cxx b/algo/test/_GTestPartitionedSpan.cxx
index ccc3823250d773de15a4be28b68c6db5cae2797c..d7836d9ede10fbfd2481c07f3ddd4aa981f7947f 100644
--- a/algo/test/_GTestPartitionedSpan.cxx
+++ b/algo/test/_GTestPartitionedSpan.cxx
@@ -1,13 +1,18 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
+
 #include "PartitionedSpan.h"
 #include "PartitionedVector.h"
+#include "algo/base/Definitions.h"
 
 #include <gtest/gtest.h>
 
 using namespace cbm::algo;
 
+using cbm::PartitionedSpan;
+using cbm::PartitionedVector;
+
 template<typename T>
 void EXPECT_CONTAINER_EQ(gsl::span<T> a, std::vector<i32> b)
 {
diff --git a/algo/test/_GTestPartitionedVector.cxx b/algo/test/_GTestPartitionedVector.cxx
index 49ab5b17609f616092e1501fa36ac30fe47ea71a..c26cebc73247fe33d3f225b9048e58aaa75ab04e 100644
--- a/algo/test/_GTestPartitionedVector.cxx
+++ b/algo/test/_GTestPartitionedVector.cxx
@@ -4,10 +4,15 @@
 
 #include "PODVector.h"
 #include "PartitionedVector.h"
+#include "algo/base/Definitions.h"
 #include "gtest/gtest.h"
 
 using namespace cbm::algo;
 
+using cbm::PartitionedPODVector;
+using cbm::PartitionedVector;
+using cbm::PODAllocator;
+
 template<typename T>
 void EXPECT_CONTAINER_EQ(gsl::span<const T> a, std::vector<T> b)
 {
diff --git a/algo/test/_GTestTimeClusterTrigger.cxx b/algo/test/_GTestTimeClusterTrigger.cxx
index 168c614662ae8846c89a6074978b55550ebf3c38..4a9e11d858a59d934d94987e9530d74cf758bf5f 100644
--- a/algo/test/_GTestTimeClusterTrigger.cxx
+++ b/algo/test/_GTestTimeClusterTrigger.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Dominik Smith [committer] */
 
-#include "TimeClusterTrigger.h"
+#include "algo/trigger/TimeClusterTrigger.h"
 #include "gtest/gtest-spi.h"
 #include "gtest/gtest.h"
 
diff --git a/algo/test/_GTestTrdClusterizer.cxx b/algo/test/_GTestTrdClusterizer.cxx
index 8f51c39204957cd0fe686c3f6349c65c1d6b6f01..86fa3527afc78165fe370b176911a3a1017115b1 100644
--- a/algo/test/_GTestTrdClusterizer.cxx
+++ b/algo/test/_GTestTrdClusterizer.cxx
@@ -3,12 +3,13 @@
    Authors: Axel Puntke [committer] */
 
 #include "CbmTrdDigi.h"
+#include "algo/detectors/trd/Clusterizer.h"
+#include "algo/detectors/trd/HitFinderPars.h"
 #include "gtest/gtest-spi.h"
 #include "gtest/gtest.h"
-#include "trd/Clusterizer.h"
-#include "trd/HitFinderPars.h"
 
 //Charge values to be used for self- and neighbor-triggers
+// FIXME: SZh 16.04.2025: replace global variables with static constexpr constants
 double CHARGE_ST = 1000;
 double CHARGE_NT = 500;
 
diff --git a/algo/trigger/DigiTriggerConfig.cxx b/algo/trigger/DigiTriggerConfig.cxx
index cc844930afd482c6cc86a9c0db0a56bd9b4dd693..aa42255adfcd4b92334bcba34caa52f16c14afe1 100644
--- a/algo/trigger/DigiTriggerConfig.cxx
+++ b/algo/trigger/DigiTriggerConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "DigiTriggerConfig.h"
+#include "algo/trigger/DigiTriggerConfig.h"
 
 
 namespace cbm::algo::evbuild
diff --git a/algo/trigger/HitMultTrigger.cxx b/algo/trigger/HitMultTrigger.cxx
index 2ffc10d697baa52b7ee6c77e6cd9848ecb2f206b..80b16abaa34f6bea32f77815fc096af1cc281d78 100644
--- a/algo/trigger/HitMultTrigger.cxx
+++ b/algo/trigger/HitMultTrigger.cxx
@@ -2,8 +2,9 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer], Dominik Smith */
 
-#include "HitMultTrigger.h"
+#include "algo/trigger/HitMultTrigger.h"
 
+#include "AlgoFairloggerCompat.h"
 #include "CbmStsHit.h"
 #include "CbmTofHit.h"
 #include "CbmTrdHit.h"
diff --git a/algo/trigger/HitMultTrigger.h b/algo/trigger/HitMultTrigger.h
index 946429c1016c1d7c99136f973c17a79bf50e805f..2ea54a775e0f4266c1ef67cb9f35e7c428f9efcc 100644
--- a/algo/trigger/HitMultTrigger.h
+++ b/algo/trigger/HitMultTrigger.h
@@ -4,9 +4,9 @@
 
 #pragma once  // include this header only once per compilation unit
 
-#include "DigiTriggerConfig.h"
-#include "RecoResults.h"
-#include "TimeClusterTrigger.h"
+#include "algo/global/RecoResults.h"
+#include "algo/trigger/DigiTriggerConfig.h"
+#include "algo/trigger/TimeClusterTrigger.h"
 
 #include <utility>
 #include <vector>
diff --git a/algo/trigger/TimeClusterTrigger.cxx b/algo/trigger/TimeClusterTrigger.cxx
index 06b84f364f0d940f00ef6590994071d8a22f408b..4df4624c138b995f900125821b98a00a15d78255 100644
--- a/algo/trigger/TimeClusterTrigger.cxx
+++ b/algo/trigger/TimeClusterTrigger.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer], Dominik Smith */
 
-#include "TimeClusterTrigger.h"
+#include "algo/trigger/TimeClusterTrigger.h"
 
 #include <algorithm>
 #include <cassert>
diff --git a/algo/trigger/TimeClusterTrigger.h b/algo/trigger/TimeClusterTrigger.h
index 9e2e0a7df4f0d635b2425dad07ad8e9592140fc9..842345da7449d82ea9d426727ff7ae0d56c94662 100644
--- a/algo/trigger/TimeClusterTrigger.h
+++ b/algo/trigger/TimeClusterTrigger.h
@@ -5,8 +5,8 @@
 #ifndef CBM_ALGO_TIMECLUSTERTRIGGER_H
 #define CBM_ALGO_TIMECLUSTERTRIGGER_H 1
 
-#include "Definitions.h"
-#include "DigiTriggerConfig.h"
+#include "algo/base/Definitions.h"
+#include "algo/trigger/DigiTriggerConfig.h"
 
 #include <cstddef>
 #include <cstdint>
diff --git a/algo/trigger/V0Trigger.cxx b/algo/trigger/V0Trigger.cxx
index 4ba866c8140f03fddb38f8db4e2240fbdb1edd0a..e3c0a08faa2326348e358b8fe8f227ff1f2a3b9d 100644
--- a/algo/trigger/V0Trigger.cxx
+++ b/algo/trigger/V0Trigger.cxx
@@ -2,7 +2,9 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer], Dominik Smith */
 
-#include "V0Trigger.h"
+#include "algo/trigger/V0Trigger.h"
+
+#include "AlgoFairloggerCompat.h"
 
 #include <iterator>
 #include <sstream>
diff --git a/algo/trigger/V0Trigger.h b/algo/trigger/V0Trigger.h
index 3736b64f23754f992e76199f1a957d210d213be4..029fd32ab837dca510845053eee6fc0ed99c5dfc 100644
--- a/algo/trigger/V0Trigger.h
+++ b/algo/trigger/V0Trigger.h
@@ -6,8 +6,8 @@
 
 #include "CaTrack.h"
 #include "CaVector.h"
-#include "V0TriggerConfig.h"
-#include "qa/trigger/V0TriggerQa.h"
+#include "algo/qa/trigger/V0TriggerQa.h"
+#include "algo/trigger/V0TriggerConfig.h"
 
 #include <utility>
 #include <vector>
diff --git a/algo/trigger/V0TriggerConfig.cxx b/algo/trigger/V0TriggerConfig.cxx
index 6170756d276a2912d3830492444fca8dd0afa07f..d2548d4c1a43df9feb768357af6423336ccf147a 100644
--- a/algo/trigger/V0TriggerConfig.cxx
+++ b/algo/trigger/V0TriggerConfig.cxx
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-#include "V0TriggerConfig.h"
+#include "algo/trigger/V0TriggerConfig.h"
 
 
 namespace cbm::algo::evbuild
diff --git a/algo/unpack/CommonUnpacker.cxx b/algo/unpack/CommonUnpacker.cxx
index d7cc52db073c3d64534202dec590e6314147f08a..1ccc84a662d9aeda0b49d85ac0dea41af24411d3 100644
--- a/algo/unpack/CommonUnpacker.cxx
+++ b/algo/unpack/CommonUnpacker.cxx
@@ -1,7 +1,7 @@
 /* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer], Dominik Smith */
-#include "CommonUnpacker.h"
+#include "algo/unpack/CommonUnpacker.h"
 
 #include <iomanip>
 
@@ -23,7 +23,7 @@ detail::MSData::MSData(const fles::Timeslice& ts, fles::Subsystem subsystem, gsl
 
     if (std::find(legalEqIds.begin(), legalEqIds.end(), componentId) == legalEqIds.end()) {
       L_(error) << "Invalid equipment id 0x" << std::hex << std::setw(4) << componentId << std::dec << " for subsystem "
-                << ToString(subsystem);
+                << util::ToString(subsystem);
       monitor.errInvalidEqId++;
       continue;
     }
@@ -36,5 +36,5 @@ detail::MSData::MSData(const fles::Timeslice& ts, fles::Subsystem subsystem, gsl
       msContent.push_back(ts.content(comp, mslice));
     }
   }
-  L_(debug) << "Found " << monitor.numMs << " microslices for subsystem " << ToString(subsystem);
+  L_(debug) << "Found " << monitor.numMs << " microslices for subsystem " << util::ToString(subsystem);
 }
diff --git a/algo/unpack/CommonUnpacker.h b/algo/unpack/CommonUnpacker.h
index 3db3952e782feee53bcbc62c353b867f8287eb01..f75be9a9fb98a87ba8a2cdbea6aa5aeeef52f975 100644
--- a/algo/unpack/CommonUnpacker.h
+++ b/algo/unpack/CommonUnpacker.h
@@ -4,13 +4,13 @@
 #pragma once
 
 #include "AlgoFairloggerCompat.h"
-#include "Definitions.h"
 #include "PODVector.h"
 #include "Timeslice.hpp"
-#include "UnpackMSBase.h"
-#include "compat/Algorithm.h"
-#include "compat/OpenMP.h"
-#include "util/StlUtils.h"
+#include "algo/base/Definitions.h"
+#include "algo/base/compat/Algorithm.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/util/StlUtils.h"
+#include "algo/unpack/UnpackMSBase.h"
 
 #include <cstdint>
 #include <gsl/span>
@@ -118,12 +118,12 @@ namespace cbm::algo
         if (algo == fAlgos.end()) {
           if (!Contains(legalEqIds, msDesc.eq_id)) {
             L_(error) << "Invalid equip id " << std::hex << int{msDesc.eq_id} << std::dec << " for subsystem "
-                      << ToString(subsystem);
+                      << util::ToString(subsystem);
             monitorOut.errInvalidEqId++;
           }
           else {
             L_(error) << "Invalid system version " << std::hex << int{msDesc.sys_ver} << std::dec << " for subsystem "
-                      << ToString(subsystem);
+                      << util::ToString(subsystem);
             monitorOut.errInvalidSysVer++;
           }
           continue;
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 7fa667426b023d1307b541fb9ed0f8921059f9b8..c574819054e656a01509755ecf2436da389f6bd2 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -2,10 +2,12 @@
 set(CBMDATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data)
 set(CBMBASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/base)
 
+add_subdirectory(containers)
 add_subdirectory(data)
 add_subdirectory(field)
 add_subdirectory(base)
 add_subdirectory(qa)
+add_subdirectory(utility)
 
 add_subdirectory(detectors/trd)
 add_subdirectory(detectors/rich)
diff --git a/core/containers/CMakeLists.txt b/core/containers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..71dc351cf379b5524199d512dc599e642c0c97a6
--- /dev/null
+++ b/core/containers/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Library: CbmContainers
+# 
+
+set(INCLUDE_DIRECTORIES
+  ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+set(HEADERS 
+  PartitionedVector.h
+  PartitionedSpan.h
+  PODVector.h
+  PODAllocator.h
+)
+
+set(LIBRARY_NAME CbmContainers)
+
+add_library(${LIBRARY_NAME} INTERFACE)
+
+target_include_directories(${LIBRARY_NAME}
+  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_link_libraries(${LIBRARY_NAME}
+  INTERFACE GSL
+)
+
+install(TARGETS CbmContainers DESTINATION lib)
+
+install(
+  FILES 
+    PartitionedVector.h
+    PartitionedSpan.h
+    PODAllocator.h
+    PODVector.h
+  DESTINATION
+    include/
+)
diff --git a/algo/base/util/PODAllocator.h b/core/containers/PODAllocator.h
similarity index 89%
rename from algo/base/util/PODAllocator.h
rename to core/containers/PODAllocator.h
index 45f1ea89f30f5604f255bc36842ab99d30c800f0..c276655e068911a28590dbe48129fa0125fbc252 100644
--- a/algo/base/util/PODAllocator.h
+++ b/core/containers/PODAllocator.h
@@ -8,7 +8,7 @@
 #include <type_traits>
 #include <utility>
 
-namespace cbm::algo
+namespace cbm
 {
   /**
   * @brief Allocator for plain old data types.
@@ -22,7 +22,7 @@ namespace cbm::algo
     // static_assert(std::is_trivially_constructible_v<T>, "PODAllocator only works for POD types");
 
     // Ensure T has no vtable
-    static_assert(std::is_standard_layout_v<T>, "PODAllocator only works with types with standard layout");
+    static_assert(!std::is_polymorphic_v<T>, "PODAllocator only works with types with non-polymorphic types");
 
     using value_type = T;
 
@@ -39,6 +39,6 @@ namespace cbm::algo
     bool operator==(const PODAllocator&) const { return true; }
     bool operator!=(const PODAllocator&) const { return false; }
   };
-}  // namespace cbm::algo
+}  // namespace cbm
 
 #endif  // CBM_ALGO_BASE_POD_ALLOCATOR_H
diff --git a/algo/base/PODVector.h b/core/containers/PODVector.h
similarity index 90%
rename from algo/base/PODVector.h
rename to core/containers/PODVector.h
index 16f1ceed518bea5af781370502a13aa90798016b..d63f042c93103b753c0f12cb714f421df21e5161 100644
--- a/algo/base/PODVector.h
+++ b/core/containers/PODVector.h
@@ -4,11 +4,11 @@
 #ifndef CBM_ALGO_BASE_POD_VECTOR_H
 #define CBM_ALGO_BASE_POD_VECTOR_H
 
-#include "util/PODAllocator.h"
+#include "PODAllocator.h"
 
 #include <vector>
 
-namespace cbm::algo
+namespace cbm
 {
   /**
   * @brief PODVector is a std::vector that doesn't initialize its elements.
@@ -28,6 +28,6 @@ namespace cbm::algo
     return PODVector<T>(vec.begin(), vec.end());
   }
 
-}  // namespace cbm::algo
+}  // namespace cbm
 
 #endif  // CBM_ALGO_BASE_POD_VECTOR_H
diff --git a/algo/base/PartitionedSpan.h b/core/containers/PartitionedSpan.h
similarity index 87%
rename from algo/base/PartitionedSpan.h
rename to core/containers/PartitionedSpan.h
index c626b75552aa7632a3edbf05160513d33f2d2f93..20cb76f12b7097d5a93b0ec2e40b9f7a565ff670 100644
--- a/algo/base/PartitionedSpan.h
+++ b/core/containers/PartitionedSpan.h
@@ -4,14 +4,13 @@
 #ifndef CBM_ALGO_BASE_PARTITIONED_SPAN_H
 #define CBM_ALGO_BASE_PARTITIONED_SPAN_H
 
-#include "Definitions.h"
-
 #include <array>
+#include <cstdint>
 #include <gsl/span>
 #include <stdexcept>
 #include <vector>
 
-namespace cbm::algo
+namespace cbm
 {
 
   template<typename T, typename Allocator>
@@ -36,7 +35,7 @@ namespace cbm::algo
     // #if  defined(__INTELLISENSE__) || defined(__clang__)
     template<typename Allocator>
     PartitionedSpan(std::vector<T, Allocator>& container, gsl::span<const size_t> offsets,
-                    gsl::span<const u32> addresses)
+                    gsl::span<const uint32_t> addresses)
       : fData(container)
       , fOffsets(offsets)
       , fAdresses(addresses)
@@ -47,7 +46,7 @@ namespace cbm::algo
     // FIXME disable if T is non-const via SFINAE, otherwise get misleading compiler errors
     template<typename Allocator>
     PartitionedSpan(const std::vector<T, Allocator>& container, gsl::span<const size_t> offsets,
-                    gsl::span<const u32> addresses)
+                    gsl::span<const uint32_t> addresses)
       : fData(container)
       , fOffsets(offsets)
       , fAdresses(addresses)
@@ -56,7 +55,7 @@ namespace cbm::algo
     }
 
     template<size_t N>
-    PartitionedSpan(std::array<T, N>& container, gsl::span<const size_t> offsets, gsl::span<const u32> addresses)
+    PartitionedSpan(std::array<T, N>& container, gsl::span<const size_t> offsets, gsl::span<const uint32_t> addresses)
       : fData(container)
       , fOffsets(offsets)
       , fAdresses(addresses)
@@ -66,7 +65,8 @@ namespace cbm::algo
 
     // FIXME disable if T is non-const via SFINAE
     template<size_t N>
-    PartitionedSpan(const std::array<T, N>& container, gsl::span<const size_t> offsets, gsl::span<const u32> addresses)
+    PartitionedSpan(const std::array<T, N>& container, gsl::span<const size_t> offsets,
+                    gsl::span<const uint32_t> addresses)
       : fData(container)
       , fOffsets(offsets)
       , fAdresses(addresses)
@@ -75,7 +75,7 @@ namespace cbm::algo
     }
     // #endif
 
-    PartitionedSpan(gsl::span<T> data, gsl::span<const size_t> offsets, gsl::span<const u32> addresses)
+    PartitionedSpan(gsl::span<T> data, gsl::span<const size_t> offsets, gsl::span<const uint32_t> addresses)
       : fData(data)
       , fOffsets(offsets)
       , fAdresses(addresses)
@@ -115,16 +115,16 @@ namespace cbm::algo
       return UnsafePartitionSpan(i);
     }
 
-    u32 Address(size_t i) const
+    uint32_t Address(size_t i) const
     {
       EnsureBounds(i);
       return fAdresses[i];
     }
 
-    std::pair<gsl::span<T>, u32> Partition(size_t i) const
+    std::pair<gsl::span<T>, uint32_t> Partition(size_t i) const
     {
       EnsureBounds(i);
-      return std::pair<gsl::span<T>, u32>(UnsafePartitionSpan(i), fAdresses[i]);
+      return std::pair<gsl::span<T>, uint32_t>(UnsafePartitionSpan(i), fAdresses[i]);
     }
 
     size_t NPartitions() const { return fAdresses.size(); }
@@ -139,7 +139,7 @@ namespace cbm::algo
 
     gsl::span<T> Data() const { return fData; }
 
-    gsl::span<const u32> Addresses() const { return fAdresses; }
+    gsl::span<const uint32_t> Addresses() const { return fAdresses; }
 
     gsl::span<const size_t> Offsets() const { return fOffsets; }
 
@@ -149,7 +149,7 @@ namespace cbm::algo
 
     gsl::span<T> fData;
     gsl::span<const size_t> fOffsets;
-    gsl::span<const u32> fAdresses;
+    gsl::span<const uint32_t> fAdresses;
 
     // FIXME code duplication with PartitionedVector
 
@@ -176,10 +176,10 @@ namespace cbm::algo
 
   // template auto deduction
   template<typename T, template<typename> class Container>
-  PartitionedSpan(Container<T>&, gsl::span<const size_t>, gsl::span<const u32>) -> PartitionedSpan<T>;
+  PartitionedSpan(Container<T>&, gsl::span<const size_t>, gsl::span<const uint32_t>) -> PartitionedSpan<T>;
 
   template<typename T, template<typename> class Container>
-  PartitionedSpan(const Container<T>&, gsl::span<const size_t>, gsl::span<const u32>) -> PartitionedSpan<const T>;
+  PartitionedSpan(const Container<T>&, gsl::span<const size_t>, gsl::span<const uint32_t>) -> PartitionedSpan<const T>;
 
   template<typename T, typename Allocator>
   PartitionedSpan(PartitionedVector<T, Allocator>&) -> PartitionedSpan<T>;
@@ -187,6 +187,6 @@ namespace cbm::algo
   template<typename T, typename Allocator>
   PartitionedSpan(const PartitionedVector<T, Allocator>&) -> PartitionedSpan<const T>;
 
-}  // namespace cbm::algo
+}  // namespace cbm
 
 #endif
diff --git a/algo/base/PartitionedVector.h b/core/containers/PartitionedVector.h
similarity index 90%
rename from algo/base/PartitionedVector.h
rename to core/containers/PartitionedVector.h
index 6aa91585c03692b7913bb0c8600a86a36eaa6691..c0599860946cc658675df2ae3ffa14be7f4c3693 100644
--- a/algo/base/PartitionedVector.h
+++ b/core/containers/PartitionedVector.h
@@ -4,8 +4,7 @@
 #ifndef CBM_ALGO_BASE_PARTITIONED_VECTOR_H
 #define CBM_ALGO_BASE_PARTITIONED_VECTOR_H
 
-#include "Definitions.h"
-#include "util/PODAllocator.h"
+#include "PODAllocator.h"
 
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/vector.hpp>
@@ -13,7 +12,7 @@
 #include <gsl/span>
 #include <vector>
 
-namespace cbm::algo
+namespace cbm
 {
   template<typename T>
   class PartitionedSpan;
@@ -46,7 +45,7 @@ namespace cbm::algo
      *
      * @note Requires sizes.size() == addresses.size()
      */
-    PartitionedVector(Container_t&& data, gsl::span<const size_t> sizes, gsl::span<const u32> addresses)
+    PartitionedVector(Container_t&& data, gsl::span<const size_t> sizes, gsl::span<const uint32_t> addresses)
       : fData(std::move(data))
       , fOffsets()
       , fAddresses(addresses.begin(), addresses.end())
@@ -149,7 +148,7 @@ namespace cbm::algo
     /**
      * @brief Get the hardware address of partition i.
      */
-    u32 Address(size_t i) const
+    uint32_t Address(size_t i) const
     {
       EnsureBounds(i);
       return fAddresses[i];
@@ -169,19 +168,19 @@ namespace cbm::algo
     /**
      * @brief Get a pair of the data and the hardware address of partition i.
      */
-    std::pair<gsl::span<T>, u32> Partition(size_t i)
+    std::pair<gsl::span<T>, uint32_t> Partition(size_t i)
     {
       EnsureBounds(i);
-      return std::pair<gsl::span<T>, u32>(UnsafePartitionSpan(i), fAddresses[i]);
+      return std::pair<gsl::span<T>, uint32_t>(UnsafePartitionSpan(i), fAddresses[i]);
     }
 
     /**
      * @brief Get a pair of the data and the hardware address of partition i.
      */
-    std::pair<gsl::span<const T>, u32> Partition(size_t i) const
+    std::pair<gsl::span<const T>, uint32_t> Partition(size_t i) const
     {
       EnsureBounds(i);
-      return std::pair<gsl::span<const T>, u32>(UnsafePartitionSpan(i), fAddresses[i]);
+      return std::pair<gsl::span<const T>, uint32_t>(UnsafePartitionSpan(i), fAddresses[i]);
     }
 
     /**
@@ -221,7 +220,7 @@ namespace cbm::algo
     /**
      * @brief Get the addresses.
      */
-    const std::vector<u32>& Addresses() const { return fAddresses; }
+    const std::vector<uint32_t>& Addresses() const { return fAddresses; }
 
     /**
      * @brief Get the underlying offsets.
@@ -230,9 +229,9 @@ namespace cbm::algo
 
 
    private:
-    Container_t fData;             //< Data
-    std::vector<size_t> fOffsets;  // < Offsets of the partitions in fData
-    std::vector<u32> fAddresses;   //< Hardware addresses of the partitions
+    Container_t fData;                 ///< Data
+    std::vector<size_t> fOffsets;      ///< Offsets of the partitions in fData
+    std::vector<uint32_t> fAddresses;  ///< Addresses of the partitions
 
     void EnsureDimensions() const
     {
@@ -285,6 +284,6 @@ namespace cbm::algo
   template<typename T>
   using PartitionedPODVector = PartitionedVector<T, PODAllocator<T>>;
 
-}  // namespace cbm::algo
+}  // namespace cbm
 
 #endif
diff --git a/core/qa/CMakeLists.txt b/core/qa/CMakeLists.txt
index 9b022d7bb8905345543b90516b6693cfa36a4ec4..18f04ce3ab0afe05d253f99ee659d53a997b7afe 100644
--- a/core/qa/CMakeLists.txt
+++ b/core/qa/CMakeLists.txt
@@ -2,7 +2,6 @@ set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}/checker
   ${CMAKE_CURRENT_SOURCE_DIR}/report
   ${CMAKE_CURRENT_SOURCE_DIR}
-  ${CMAKE_SOURCE_DIR}/algo/base  # For "algo/base/yaml/*.h" included as relative "yaml/?????.h" to fit install tree
   )
 
 set(SRCS
diff --git a/core/qa/CbmQaOnlineInterface.h b/core/qa/CbmQaOnlineInterface.h
index 3b6bed4b086ad538783dd2f650e9a394b5f28d85..ac9fc9b8a4c339b80e1328e9815d0f203a523812 100644
--- a/core/qa/CbmQaOnlineInterface.h
+++ b/core/qa/CbmQaOnlineInterface.h
@@ -11,12 +11,12 @@
 
 #pragma once
 
-#include "Histogram.h"
 #include "Logger.h"
 #include "TH1D.h"
 #include "TH2D.h"
 #include "TProfile.h"
 #include "TProfile2D.h"
+#include "algo/qa/Histogram.h"
 
 //#include <log.hpp>
 #include <type_traits>
diff --git a/core/utility/CMakeLists.txt b/core/utility/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f4e2b1368389a25a1b14d069e756920da0dd4b46
--- /dev/null
+++ b/core/utility/CMakeLists.txt
@@ -0,0 +1,31 @@
+# A library for CBM common utilities. The utilities include generic functions and classes
+# to extend the STL and BOOST C++. The library is not a place for a detector- or analysis-specific
+# software.
+#
+add_subdirectory(yaml)
+
+set(SRCS 
+  CbmEnumDict.cxx
+)
+
+add_library(CbmUtility SHARED ${SRCS})
+
+target_include_directories(CbmUtility
+  PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_link_libraries(CbmUtility
+  PUBLIC GSL
+         fmt::fmt
+         xpu
+)
+
+install(TARGETS CbmUtility DESTINATION lib)
+
+install(
+  FILES 
+    CbmEnumDict.h
+  DESTINATION
+    include/
+)
+
diff --git a/algo/base/util/EnumDict.cxx b/core/utility/CbmEnumDict.cxx
similarity index 85%
rename from algo/base/util/EnumDict.cxx
rename to core/utility/CbmEnumDict.cxx
index a0ffd40f360a6bea9e7f3976e08ef7b2c8f44cee..960d54df601821377009fda2e01ec38cea7dc615 100644
--- a/algo/base/util/EnumDict.cxx
+++ b/core/utility/CbmEnumDict.cxx
@@ -1,11 +1,11 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "EnumDict.h"
+#include "CbmEnumDict.h"
 
 #include <sstream>
 
-void cbm::algo::detail::RaiseUnknownEntry(std::string_view str, const std::vector<std::string_view>& validEntries)
+void cbm::util::detail::RaiseUnknownEntry(std::string_view str, const std::vector<std::string_view>& validEntries)
 {
   std::ostringstream oss;
   oss << "Could not parse '" << str << "'. Valid entries are: ";
diff --git a/algo/base/util/EnumDict.h b/core/utility/CbmEnumDict.h
similarity index 87%
rename from algo/base/util/EnumDict.h
rename to core/utility/CbmEnumDict.h
index fde2d6d7850590a8c5f089ccad49762dba3c2174..c60ab8a5a0aaaf33186d938424c25c7fa87c6cf3 100644
--- a/algo/base/util/EnumDict.h
+++ b/core/utility/CbmEnumDict.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
+/* Copyright (C) 2023-2025 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
 #ifndef CBM_ALGO_BASE_UTIL_SERIALIZABLEENUM_H
@@ -16,7 +16,7 @@
 #include <fmt/format.h>
 #include <xpu/defines.h>
 
-namespace cbm::algo
+namespace cbm::util
 {
   namespace detail
   {
@@ -68,7 +68,7 @@ namespace cbm::algo
     if (it == dict.end()) throw std::runtime_error(fmt::format("Entry {} for enum missing!", static_cast<int>(t)));
     return it->first;
   }
-}  // namespace cbm::algo
+}  // namespace cbm::util
 
 #if XPU_IS_CPU
 /**
@@ -97,9 +97,9 @@ namespace cbm::algo
    */
 #define CBM_ENUM_DICT(type, ...)                                                                                       \
   template<>                                                                                                           \
-  inline const cbm::algo::detail::EnumDict_t<type> cbm::algo::detail::EnumDict<type> = {__VA_ARGS__};                  \
+  inline const cbm::util::detail::EnumDict_t<type> cbm::util::detail::EnumDict<type> = {__VA_ARGS__};                  \
   template<>                                                                                                           \
-  struct cbm::algo::detail::EnumHasDict<type> : std::true_type {                                                       \
+  struct cbm::util::detail::EnumHasDict<type> : std::true_type {                                                       \
   }
 #else  // XPU_IS_CPU
 // Disable macro in GPU code, causes some issues with nvcc
@@ -110,22 +110,22 @@ namespace cbm::algo
 // Placed in global namespace to be found by ADL e.g. for std::ostream_iterator
 namespace std
 {
-  template<typename T, typename = std::enable_if_t<cbm::algo::detail::EnumHasDict_v<T>>>
+  template<typename T, typename = std::enable_if_t<cbm::util::detail::EnumHasDict_v<T>>>
   std::ostream& operator<<(std::ostream& os, T t)
   {
-    os << cbm::algo::ToString(t);
+    os << cbm::util::ToString(t);
     return os;
   }
 
-  template<typename T, typename = std::enable_if_t<cbm::algo::detail::EnumHasDict_v<T>>>
+  template<typename T, typename = std::enable_if_t<cbm::util::detail::EnumHasDict_v<T>>>
   std::istream& operator>>(std::istream& is, T& t)
   {
     std::string str;
     is >> str;
-    auto maybet = cbm::algo::FromString<T>(str);
+    auto maybet = cbm::util::FromString<T>(str);
 
     if (!maybet) {
-      cbm::algo::detail::RaiseUnknownEntry(str, cbm::algo::detail::ValidEntries<T>());
+      cbm::util::detail::RaiseUnknownEntry(str, cbm::util::detail::ValidEntries<T>());
     }
     t = *maybet;
 
diff --git a/algo/base/yaml/BaseTypes.h b/core/utility/yaml/BaseTypes.h
similarity index 99%
rename from algo/base/yaml/BaseTypes.h
rename to core/utility/yaml/BaseTypes.h
index 1743aace818e77ba8ad33993711f79111a7e1b86..f7194da3cb1f81ceab9cdced9e97578c539be9bc 100644
--- a/algo/base/yaml/BaseTypes.h
+++ b/core/utility/yaml/BaseTypes.h
@@ -5,7 +5,7 @@
 #define CBM_YAML_BASETYPES_H
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <array>
 #include <map>
diff --git a/algo/base/yaml/CMakeLists.txt b/core/utility/yaml/CMakeLists.txt
similarity index 65%
rename from algo/base/yaml/CMakeLists.txt
rename to core/utility/yaml/CMakeLists.txt
index 756401d832e849767e03cf1f9b33188c770022b7..ef611b0c17736860e045b354008cb4444a83e6b5 100644
--- a/algo/base/yaml/CMakeLists.txt
+++ b/core/utility/yaml/CMakeLists.txt
@@ -1,20 +1,23 @@
 set(INCLUDE_DIRECTORIES
-  ${CMAKE_SOURCE_DIR}/algo/base  # For "algo/base/yaml/*.h" included as relative "yaml/?????.h" to fit install tree
+  ${CMAKE_CURRENT_SOURCE_DIR}/..  # For inclusions like "yaml/Yaml.h"
 )
 
 add_library(CbmYamlInterface INTERFACE)
 
 target_include_directories(CbmYamlInterface
-  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
+  INTERFACE ${INCLUDE_DIRECTORIES}
 )
 
 target_link_libraries(CbmYamlInterface
   INTERFACE GSL
+            CbmUtility
             xpu
             fmt::fmt
             external::yaml-cpp
 )
 
+install(TARGETS CbmYamlInterface DESTINATION lib)
+
 install(
   FILES
     BaseTypes.h
diff --git a/algo/base/yaml/Property.h b/core/utility/yaml/Property.h
similarity index 99%
rename from algo/base/yaml/Property.h
rename to core/utility/yaml/Property.h
index 223a978542779a9499bb7f95d5b273f5238f4d5c..95ef674408e0dc2d3763a9038831dc53f5113daa 100644
--- a/algo/base/yaml/Property.h
+++ b/core/utility/yaml/Property.h
@@ -5,8 +5,6 @@
 #define CBM_YAML_PROPERTY_H
 #pragma once
 
-#include "Definitions.h"
-
 #include <optional>
 #include <string_view>
 #include <tuple>
diff --git a/algo/base/yaml/Yaml.h b/core/utility/yaml/Yaml.h
similarity index 93%
rename from algo/base/yaml/Yaml.h
rename to core/utility/yaml/Yaml.h
index e5dfa3d33adbe63720b129d52f762028b4f00840..13cbbf58d45738675aab0a93e686fdf90a859ee4 100644
--- a/algo/base/yaml/Yaml.h
+++ b/core/utility/yaml/Yaml.h
@@ -5,12 +5,12 @@
 #define CBM_YAML_YAML_H
 #pragma once
 
-#include "Definitions.h"
-#include "compat/Filesystem.h"
-#include "util/EnumDict.h"
+#include "CbmEnumDict.h"
 #include "yaml/BaseTypes.h"
 #include "yaml/Property.h"
 
+#include <boost/filesystem.hpp>
+
 #include <sstream>
 #include <string_view>
 
@@ -19,6 +19,19 @@
 
 namespace cbm::algo::yaml
 {
+  namespace fs = boost::filesystem;
+
+  // 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;
 
   template<typename T>
   T Read(const YAML::Node& node);
@@ -71,14 +84,14 @@ namespace cbm::algo::yaml
 #endif
     using Type = std::remove_cv_t<std::remove_reference_t<T>>;
 
-    static_assert(!IsEnum<T> || detail::EnumHasDict_v<T>, "Enum must have a dictionary to be deserializable");
+    static_assert(!IsEnum<T> || util::detail::EnumHasDict_v<T>, "Enum must have a dictionary to be deserializable");
 
     // TODO: error handling
     if constexpr (IsFundamental<Type>) {
       return node.as<Type>();
     }
     else if constexpr (IsEnum<Type>) {
-      std::optional<T> maybet = FromString<T>(node.as<std::string>());
+      std::optional<T> maybet = util::FromString<T>(node.as<std::string>());
       if (!maybet) {
         throw std::runtime_error(fmt::format("Invalid enum value: {}", node.as<std::string>()));
       }
@@ -207,7 +220,7 @@ namespace cbm::algo::yaml
     template<typename T>
     void DoDump(const T& object, YAML::Emitter& ss, std::optional<YAML::EMITTER_MANIP> formatEntries = {})
     {
-      static_assert(!IsEnum<T> || detail::EnumHasDict_v<T>, "Enum must have a dictionary");
+      static_assert(!IsEnum<T> || util::detail::EnumHasDict_v<T>, "Enum must have a dictionary");
 
       if constexpr (IsFundamental<T>) {
         // Take care that i8 and u8 are printed as integers not as characters
@@ -217,7 +230,7 @@ namespace cbm::algo::yaml
           ss << object;
       }
       else if constexpr (IsEnum<T>) {
-        ss << std::string{ToString<T>(object)};
+        ss << std::string{util::ToString<T>(object)};
       }
       else if constexpr (IsVector<T> || IsArray<T> || IsSet<T>) {
         ss << YAML::BeginSeq;
diff --git a/reco/KF/CbmKFV0FinderTask.cxx b/reco/KF/CbmKFV0FinderTask.cxx
index aaf6b26efe64e90dc018222aaa59cbae49cfa888..36316e4ff8be27d205d7b1b8135e16b67fd8e7f0 100644
--- a/reco/KF/CbmKFV0FinderTask.cxx
+++ b/reco/KF/CbmKFV0FinderTask.cxx
@@ -23,10 +23,10 @@
 #include "FairRunAna.h"
 #include "KFPTrackVector.h"
 #include "KFVertex.h"
-#include "KfpV0FinderConfig.h"
 #include "Logger.h"
 #include "TClonesArray.h"
 #include "TMatrixTSym.h"
+#include "algo/kfp/KfpV0FinderConfig.h"
 #include "yaml/Yaml.h"
 
 #include <boost/filesystem.hpp>
diff --git a/reco/app/cbmreco/main.cxx b/reco/app/cbmreco/main.cxx
index c78dbfe889ff2259fb4acc36bb4ebdcf932462da..f710e83820dcb4c2b1876cbb61dfb562290f4704 100644
--- a/reco/app/cbmreco/main.cxx
+++ b/reco/app/cbmreco/main.cxx
@@ -1,18 +1,18 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Felix Weiglhofer [committer] */
-#include "BuildInfo.h"
 #include "CbmDigiEvent.h"
-#include "Exceptions.h"
-#include "Options.h"
-#include "Reco.h"
-#include "RecoResultsInputArchive.h"
-#include "RecoResultsOutputArchive.h"
-#include "System.h"
-#include "compat/Algorithm.h"
-#include "compat/OpenMP.h"
-#include "gpu/DeviceImage.h"
-#include "util/MemoryLogger.h"
+#include "algo/base/BuildInfo.h"
+#include "algo/base/Exceptions.h"
+#include "algo/base/Options.h"
+#include "algo/base/System.h"
+#include "algo/base/compat/Algorithm.h"
+#include "algo/base/compat/OpenMP.h"
+#include "algo/base/gpu/DeviceImage.h"
+#include "algo/base/util/MemoryLogger.h"
+#include "algo/global/Reco.h"
+#include "algo/global/RecoResultsInputArchive.h"
+#include "algo/global/RecoResultsOutputArchive.h"
 
 #include <StorableTimeslice.hpp>
 #include <TimesliceAutoSource.hpp>
diff --git a/reco/app/cbmreco_fairrun/Application.cxx b/reco/app/cbmreco_fairrun/Application.cxx
index 92f063b3bdf19e0db530ade556ccd2cf477c8381..73e5c7701fa9ee4b3e3d1d99dbc0956093f5fb4e 100644
--- a/reco/app/cbmreco_fairrun/Application.cxx
+++ b/reco/app/cbmreco_fairrun/Application.cxx
@@ -4,7 +4,7 @@
 
 #include "Application.h"
 
-#include "MainConfig.h"
+#include "algo/base/MainConfig.h"
 
 #include <chrono>
 #include <fstream>
diff --git a/reco/detectors/sts/CbmRecoSts.cxx b/reco/detectors/sts/CbmRecoSts.cxx
index 475c230a4e358b9b0d56848f7f1c4b033bd6d1b2..36ff4809ac89292da8381b1b19dd0c6860d3a194 100644
--- a/reco/detectors/sts/CbmRecoSts.cxx
+++ b/reco/detectors/sts/CbmRecoSts.cxx
@@ -21,7 +21,7 @@
 #include "CbmStsPhysics.h"
 #include "CbmStsRecoModule.h"
 #include "CbmStsSetup.h"
-#include "sts/HitfinderPars.h"
+#include "algo/data/sts/HitfinderPars.h"
 
 #include <FairField.h>
 #include <FairRootManager.h>
diff --git a/reco/detectors/sts/CbmRecoSts.h b/reco/detectors/sts/CbmRecoSts.h
index 82205d875e449f98bf1b860e8c6ad25e5035c0bd..9c13e994a501e5ddeae2bc9238d90a41d8c95aa8 100644
--- a/reco/detectors/sts/CbmRecoSts.h
+++ b/reco/detectors/sts/CbmRecoSts.h
@@ -11,7 +11,7 @@
 #ifndef CBMRECOSTS_H
 #define CBMRECOSTS_H 1
 
-#include "sts/HitfinderChain.h"
+#include "algo/detectors/sts/HitfinderChain.h"
 
 #include <FairTask.h>
 
diff --git a/reco/steer/CbmOnlineParWrite.h b/reco/steer/CbmOnlineParWrite.h
index 35ab63d0743424cf183f1a4f045a548372f7ad1e..73e851cf0fcda1dedfe9d09b1f77edffe8519609 100644
--- a/reco/steer/CbmOnlineParWrite.h
+++ b/reco/steer/CbmOnlineParWrite.h
@@ -9,7 +9,7 @@
  * @brief This file contains the declaration of the CbmOnlineParWrite class.
 **/
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <TString.h>
 
diff --git a/reco/steer/CbmSourceDigiEvents.h b/reco/steer/CbmSourceDigiEvents.h
index c11954d2d38019ab450e4b9f807d67c403546e76..a3c7f269b2cbacae4a25c0b9febf573cf1cbcffe 100644
--- a/reco/steer/CbmSourceDigiEvents.h
+++ b/reco/steer/CbmSourceDigiEvents.h
@@ -5,8 +5,8 @@
 #pragma once  // include this header only once per compilation unit
 
 #include "CbmDigiEvent.h"
-#include "DigiData.h"
-#include "RecoResultsInputArchive.h"
+#include "algo/base/DigiData.h"
+#include "algo/global/RecoResultsInputArchive.h"
 
 #include <FairSource.h>
 
diff --git a/reco/steer/CbmSourceDigiTimeslice.h b/reco/steer/CbmSourceDigiTimeslice.h
index 023cf816b21e0adfed30d66e4e2cd86a5786cfd7..38c9b1c627aa11a21d21573cedc1358e1fec21cf 100644
--- a/reco/steer/CbmSourceDigiTimeslice.h
+++ b/reco/steer/CbmSourceDigiTimeslice.h
@@ -4,8 +4,8 @@
 
 #pragma once  // include this header only once per compilation unit
 
-#include "DigiData.h"
-#include "RecoResultsInputArchive.h"
+#include "algo/base/DigiData.h"
+#include "algo/global/RecoResultsInputArchive.h"
 
 #include <FairSource.h>
 
diff --git a/reco/steer/CbmSourceRecoTimeslice.cxx b/reco/steer/CbmSourceRecoTimeslice.cxx
index a94565dfcb89715b35a14933601ac87994429c43..f4299055092de891be0f82fdf37f617ace78af89 100644
--- a/reco/steer/CbmSourceRecoTimeslice.cxx
+++ b/reco/steer/CbmSourceRecoTimeslice.cxx
@@ -79,22 +79,22 @@ Bool_t CbmSourceRecoTimeslice::Init()
   };
 
   // TODO: replace individual vectors with reco-timeslice objects
-  fBmonHits = new PartitionedVector<bmon::Hit>();
+  fBmonHits = new cbm::PartitionedVector<bmon::Hit>();
   if (!RegisterVector(fBmonHits, "OnlineBmonHit")) {
     return kFALSE;
   }
 
-  fStsHits = new PartitionedVector<sts::Hit>();
+  fStsHits = new cbm::PartitionedVector<sts::Hit>();
   if (!RegisterVector(fStsHits, "OnlineStsHit")) {
     return kFALSE;
   }
 
-  fTrdHits = new PartitionedVector<trd::Hit>();
+  fTrdHits = new cbm::PartitionedVector<trd::Hit>();
   if (!RegisterVector(fTrdHits, "OnlineTrdHit")) {
     return kFALSE;
   }
 
-  fTofHits = new PartitionedVector<tof::Hit>();
+  fTofHits = new cbm::PartitionedVector<tof::Hit>();
   if (!RegisterVector(fTofHits, "OnlineTofHit")) {
     return kFALSE;
   }
diff --git a/reco/steer/CbmSourceRecoTimeslice.h b/reco/steer/CbmSourceRecoTimeslice.h
index 1d0b907a6e508e3cc4c9d01d105291eef01e9375..bc934a90872b3525fb329ac621acbc38f007c586 100644
--- a/reco/steer/CbmSourceRecoTimeslice.h
+++ b/reco/steer/CbmSourceRecoTimeslice.h
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include "RecoResultsInputArchive.h"
+#include "algo/global/RecoResultsInputArchive.h"
 
 #include <FairSource.h>
 
@@ -81,10 +81,10 @@ class CbmSourceRecoTimeslice : public FairSource {
   void ClearOutputVectors();
 
   //* Data containers
-  cbm::algo::PartitionedVector<cbm::algo::bmon::Hit>* fBmonHits{nullptr};
-  cbm::algo::PartitionedVector<cbm::algo::sts::Hit>* fStsHits{nullptr};
-  cbm::algo::PartitionedVector<cbm::algo::trd::Hit>* fTrdHits{nullptr};
-  cbm::algo::PartitionedVector<cbm::algo::tof::Hit>* fTofHits{nullptr};
+  cbm::PartitionedVector<cbm::algo::bmon::Hit>* fBmonHits{nullptr};
+  cbm::PartitionedVector<cbm::algo::sts::Hit>* fStsHits{nullptr};
+  cbm::PartitionedVector<cbm::algo::trd::Hit>* fTrdHits{nullptr};
+  cbm::PartitionedVector<cbm::algo::tof::Hit>* fTofHits{nullptr};
   cbm::algo::ca::Vector<cbm::algo::ca::Track>* fTracks{nullptr};
   cbm::algo::StorableRecoResults::TrackHitIndexContainer_t* fTrackStsHitIndices{nullptr};
   cbm::algo::StorableRecoResults::TrackHitIndexContainer_t* fTrackTrdHitIndices{nullptr};
diff --git a/reco/tasks/CMakeLists.txt b/reco/tasks/CMakeLists.txt
index eff7ad33044e1a2f30ac1245f90dc42e2710bb94..1dc8472452ececfbffdf0cbe2e883bd7b7075a3b 100644
--- a/reco/tasks/CMakeLists.txt
+++ b/reco/tasks/CMakeLists.txt
@@ -3,9 +3,8 @@
 
 set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}
-  ${CMAKE_SOURCE_DIR}/algo       # For "algo/qa/*.h"        included as relative "qa/?????.h"   to fit install tree
-  ${CMAKE_SOURCE_DIR}/algo/base  # For "algo/base/yaml/*.h" included as relative "yaml/?????.h" to fit install tree
-  )
+  ${CMAKE_SOURCE_DIR}  # For "algo/qa/*.h"        included as relative "qa/?????.h"   to fit install tree
+)
 
 set(SRCS
   CbmReco.cxx
diff --git a/reco/tasks/CbmReco.cxx b/reco/tasks/CbmReco.cxx
index 84e865f39c92ac9d696285fbc6395a48f79ebf03..09a23d49607fc51c08becf194249940d0c915b2c 100644
--- a/reco/tasks/CbmReco.cxx
+++ b/reco/tasks/CbmReco.cxx
@@ -10,8 +10,8 @@
 #include "CbmTaskTriggerDigi.h"
 #include "CbmTaskUnpack.h"
 #include "CbmTsEventHeader.h"
-#include "DigiEventSelector.h"
-#include "DigiEventSelectorConfig.h"
+#include "algo/evselector/DigiEventSelector.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
 
 #include <FairFileSource.h>
 #include <FairRootFileSink.h>
diff --git a/reco/tasks/CbmReco.h b/reco/tasks/CbmReco.h
index eb510545988f43fe3bc4e4d0ffcbd6fca85a960d..4379b0035b2742efbe4e228b566793ec65459ba2 100644
--- a/reco/tasks/CbmReco.h
+++ b/reco/tasks/CbmReco.h
@@ -19,7 +19,7 @@ namespace cbm
 }
 #endif
 
-#include "evbuild/Config.h"
+#include "algo/evbuild/Config.h"
 
 #include <TString.h>
 
diff --git a/reco/tasks/CbmTaskBuildEvents.h b/reco/tasks/CbmTaskBuildEvents.h
index 843a599823b78a9d31519eb7a7a8b59e6811c03e..bf0a8723f0aa58c9ebc5e9339a169bbc7b81ac96 100644
--- a/reco/tasks/CbmTaskBuildEvents.h
+++ b/reco/tasks/CbmTaskBuildEvents.h
@@ -8,9 +8,9 @@
 #include "CbmDefs.h"
 #include "CbmDigiEvent.h"
 #include "CbmDigiTimeslice.h"
-#include "DigiEventSelector.h"
-#include "DigiEventSelectorConfig.h"
-#include "evbuild/EventBuilder.h"
+#include "algo/evbuild/EventBuilder.h"
+#include "algo/evselector/DigiEventSelector.h"
+#include "algo/evselector/DigiEventSelectorConfig.h"
 
 #include <FairTask.h>
 
diff --git a/reco/tasks/CbmTaskDigiEventQa.cxx b/reco/tasks/CbmTaskDigiEventQa.cxx
index b07b9b49fcaa1b6e38f66ddab156bfd261e44b47..5feedea5c6fa86bea1332ac970a91fe8ff8d1fb1 100644
--- a/reco/tasks/CbmTaskDigiEventQa.cxx
+++ b/reco/tasks/CbmTaskDigiEventQa.cxx
@@ -5,7 +5,6 @@
 #include "CbmTaskDigiEventQa.h"
 
 #include "CbmReco.h"  // for CbmRecoConfig
-#include "qa/Histo1D.h"
 
 #include <FairRunOnline.h>
 #include <Logger.h>
diff --git a/reco/tasks/CbmTaskDigiEventQa.h b/reco/tasks/CbmTaskDigiEventQa.h
index bf21dd5ca520c88612347494f9d7ed8ba3794191..4be534e8a76c89249243b1348734bd720e1f235e 100644
--- a/reco/tasks/CbmTaskDigiEventQa.h
+++ b/reco/tasks/CbmTaskDigiEventQa.h
@@ -7,9 +7,8 @@
 
 #include "CbmDefs.h"
 #include "CbmDigiEvent.h"
-#include "evbuild/Config.h"
-#include "qa/DigiEventQa.h"
-#include "qa/Histo1D.h"
+#include "algo/evbuild/Config.h"
+#include "algo/qa/DigiEventQa.h"
 
 #include <FairTask.h>
 
diff --git a/reco/tasks/CbmTaskInspectRecoTimeslice.h b/reco/tasks/CbmTaskInspectRecoTimeslice.h
index 16365d5f418975bfbb7a45d22cfb00652f880ff5..3026f5289eabad41bbaff4a63ed860c016dbea5d 100644
--- a/reco/tasks/CbmTaskInspectRecoTimeslice.h
+++ b/reco/tasks/CbmTaskInspectRecoTimeslice.h
@@ -9,8 +9,8 @@
 
 #pragma once
 
-#include "RecoResults.h"
-#include "StorableRecoResults.h"
+#include "algo/global/RecoResults.h"
+#include "algo/global/StorableRecoResults.h"
 
 #include <FairTask.h>
 
@@ -53,10 +53,10 @@ class CbmTaskInspectRecoTimeslice : public FairTask {
   virtual InitStatus Init();
 
   //* Data containers
-  const cbm::algo::PartitionedVector<cbm::algo::bmon::Hit>* fBmonHits{nullptr};
-  const cbm::algo::PartitionedVector<cbm::algo::sts::Hit>* fStsHits{nullptr};
-  const cbm::algo::PartitionedVector<cbm::algo::trd::Hit>* fTrdHits{nullptr};
-  const cbm::algo::PartitionedVector<cbm::algo::tof::Hit>* fTofHits{nullptr};
+  const cbm::PartitionedVector<cbm::algo::bmon::Hit>* fBmonHits{nullptr};
+  const cbm::PartitionedVector<cbm::algo::sts::Hit>* fStsHits{nullptr};
+  const cbm::PartitionedVector<cbm::algo::trd::Hit>* fTrdHits{nullptr};
+  const cbm::PartitionedVector<cbm::algo::tof::Hit>* fTofHits{nullptr};
   const cbm::algo::ca::Vector<cbm::algo::ca::Track>* fTracks{nullptr};
   const cbm::algo::StorableRecoResults::TrackHitIndexContainer_t* fTrackStsHitIndices{nullptr};
   const cbm::algo::StorableRecoResults::TrackHitIndexContainer_t* fTrackTrdHitIndices{nullptr};
diff --git a/reco/tasks/CbmTaskStsHitFinderParWrite.cxx b/reco/tasks/CbmTaskStsHitFinderParWrite.cxx
index cb27cbcfc71f78dcaade2853d8b6b96c89483b7d..0e836ac8da98ffbef5f015a70d12479b9027690e 100644
--- a/reco/tasks/CbmTaskStsHitFinderParWrite.cxx
+++ b/reco/tasks/CbmTaskStsHitFinderParWrite.cxx
@@ -13,7 +13,7 @@
 #include "CbmStsPhysics.h"
 #include "CbmStsRecoModule.h"
 #include "CbmStsSetup.h"
-#include "sts/HitfinderPars.h"
+#include "algo/data/sts/HitfinderPars.h"
 #include "yaml/Yaml.h"
 
 #include <FairField.h>
diff --git a/reco/tasks/CbmTaskTofClusterizer.cxx b/reco/tasks/CbmTaskTofClusterizer.cxx
index cbf6ca5aefad193d9005c3ca177bec58e8510287..3051031be065ce90f67e3c9993c436dd3750de19 100644
--- a/reco/tasks/CbmTaskTofClusterizer.cxx
+++ b/reco/tasks/CbmTaskTofClusterizer.cxx
@@ -25,7 +25,7 @@
 #include "TStopwatch.h"
 
 // C++ Classes and includes
-#include "compat/Filesystem.h"
+#include "algo/base/compat/Filesystem.h"
 #include "yaml/Yaml.h"
 
 #include <iomanip>
diff --git a/reco/tasks/CbmTaskTofClusterizer.h b/reco/tasks/CbmTaskTofClusterizer.h
index 9283cc50087876bc48c665bbf1b837a284d4dc1d..fe43d43fa10bbae4482a719bcd453cab36a3b668 100644
--- a/reco/tasks/CbmTaskTofClusterizer.h
+++ b/reco/tasks/CbmTaskTofClusterizer.h
@@ -13,9 +13,9 @@ class CbmTsEventHeader;
 
 #include "CbmMatch.h"
 #include "CbmTofDigi.h"
-#include "tof/Calibrate.h"
-#include "tof/Clusterizer.h"
-#include "tof/Hitfind.h"
+#include "algo/detectors/tof/Calibrate.h"
+#include "algo/detectors/tof/Clusterizer.h"
+#include "algo/detectors/tof/Hitfind.h"
 
 // ROOT Classes and includes
 #include "Math/Rotation3D.h"
diff --git a/reco/tasks/CbmTaskTofClusterizerParWrite.cxx b/reco/tasks/CbmTaskTofClusterizerParWrite.cxx
index e8e8df40802b660799adb94422150c823bd595cb..5f5fd702addd1dcf6095621ffa0f419a374c2cf7 100644
--- a/reco/tasks/CbmTaskTofClusterizerParWrite.cxx
+++ b/reco/tasks/CbmTaskTofClusterizerParWrite.cxx
@@ -20,10 +20,10 @@
 #include "FairRootManager.h"
 #include "FairRunAna.h"
 #include "FairRuntimeDb.h"
-#include "bmon/CalibrateSetup.h"
-#include "bmon/HitfindSetup.h"
-#include "tof/CalibrateSetup.h"
-#include "tof/HitfindSetup.h"
+#include "algo/detectors/bmon/CalibrateSetup.h"
+#include "algo/detectors/bmon/HitfindSetup.h"
+#include "algo/detectors/tof/CalibrateSetup.h"
+#include "algo/detectors/tof/HitfindSetup.h"
 #include "yaml/Yaml.h"
 
 #include <Logger.h>
diff --git a/reco/tasks/CbmTaskTofClusterizerParWrite.h b/reco/tasks/CbmTaskTofClusterizerParWrite.h
index 7e2adcfe8c4172819fd8f2441c4f280a129b0161..bb85d4bcb54037200ab2a4e02bc9e5fe51eaf69c 100644
--- a/reco/tasks/CbmTaskTofClusterizerParWrite.h
+++ b/reco/tasks/CbmTaskTofClusterizerParWrite.h
@@ -12,7 +12,7 @@ class CbmTofDigiPar;
 class CbmTofDigiBdfPar;
 class CbmTofCell;
 
-#include "tof/Clusterizer.h"
+#include "algo/detectors/tof/Clusterizer.h"
 
 // ROOT Classes and includes
 #include "Math/Rotation3D.h"
diff --git a/reco/tasks/CbmTaskTofHitFinder.h b/reco/tasks/CbmTaskTofHitFinder.h
index a7afdf0567781b8fbbb74ab7bf74d2dc45b1fd54..a74095dfb758ff7ca227a726ed589c312b54ef6a 100644
--- a/reco/tasks/CbmTaskTofHitFinder.h
+++ b/reco/tasks/CbmTaskTofHitFinder.h
@@ -23,7 +23,7 @@ class CbmTofCell;
 class CbmDigiManager;
 class CbmEvent;
 
-#include "tof/HitFinder.h"
+#include "algo/detectors/tof/HitFinder.h"
 
 // FAIR classes and includes
 #include "FairTask.h"
diff --git a/reco/tasks/CbmTaskTrdHitFinder.cxx b/reco/tasks/CbmTaskTrdHitFinder.cxx
index b9785e20b15aa968f7a3682ef998ed2928e9ba87..895aa73f45304966a90927e829d27b700a2ca303 100644
--- a/reco/tasks/CbmTaskTrdHitFinder.cxx
+++ b/reco/tasks/CbmTaskTrdHitFinder.cxx
@@ -12,7 +12,7 @@
 #include <Logger.h>
 
 // C++ Classes and includes
-#include "compat/Filesystem.h"
+#include "algo/base/compat/Filesystem.h"
 #include "yaml/Yaml.h"
 
 #include <TStopwatch.h>
diff --git a/reco/tasks/CbmTaskTrdHitFinder.h b/reco/tasks/CbmTaskTrdHitFinder.h
index 204c5189df8eeaf857c2e40e41d9e39650ef6504..64ca181d0d831b6ea9d25206d62b21b9cc3cab5c 100644
--- a/reco/tasks/CbmTaskTrdHitFinder.h
+++ b/reco/tasks/CbmTaskTrdHitFinder.h
@@ -9,8 +9,8 @@
 #include "CbmTrdDigi.h"
 #include "CbmTrdHit.h"
 #include "FairTask.h"
-#include "trd/Hit.h"
-#include "trd/Hitfind.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/Hitfind.h"
 
 #include <gsl/span>
 #include <map>
diff --git a/reco/tasks/CbmTaskTrdHitFinderParWrite.cxx b/reco/tasks/CbmTaskTrdHitFinderParWrite.cxx
index 247f73e738888386a51e3440416ce8ccb1c62ef3..666b59ef77677900d8e36174c0b3ab1dd31f86ee 100644
--- a/reco/tasks/CbmTaskTrdHitFinderParWrite.cxx
+++ b/reco/tasks/CbmTaskTrdHitFinderParWrite.cxx
@@ -14,8 +14,8 @@
 #include "CbmTrdParSetGeo.h"
 #include "TGeoPhysicalNode.h"
 #include "TVector3.h"
-#include "trd/Hitfind2DSetup.h"
-#include "trd/HitfindSetup.h"
+#include "algo/detectors/trd/Hitfind2DSetup.h"
+#include "algo/detectors/trd/HitfindSetup.h"
 #include "yaml/Yaml.h"
 
 #include <FairRootManager.h>
diff --git a/reco/tasks/CbmTaskTrdHitFinderParWrite.h b/reco/tasks/CbmTaskTrdHitFinderParWrite.h
index 6543c220669067a4eff512cdd3005fa581241b6e..388242aa19c6565519be8aaeaaafc9c267bbb6b7 100644
--- a/reco/tasks/CbmTaskTrdHitFinderParWrite.h
+++ b/reco/tasks/CbmTaskTrdHitFinderParWrite.h
@@ -6,11 +6,11 @@
 #define CBMTRDHITFINDERPARWRITE_H
 
 #include "FairTask.h"
-#include "trd/Clusterizer.h"
-#include "trd/Clusterizer2D.h"
-#include "trd/Hit.h"
-#include "trd/HitFinder.h"
-#include "trd/HitFinder2D.h"
+#include "algo/detectors/trd/Clusterizer.h"
+#include "algo/detectors/trd/Clusterizer2D.h"
+#include "algo/detectors/trd/Hit.h"
+#include "algo/detectors/trd/HitFinder.h"
+#include "algo/detectors/trd/HitFinder2D.h"
 
 #include <map>
 #include <set>
diff --git a/reco/tasks/CbmTaskTrdUnpackParWrite.cxx b/reco/tasks/CbmTaskTrdUnpackParWrite.cxx
index 6679dc59958d92b6a44e010ad992276a813e980f..b0332f2a300de30675cd75aae0f5722f2266afb7 100644
--- a/reco/tasks/CbmTaskTrdUnpackParWrite.cxx
+++ b/reco/tasks/CbmTaskTrdUnpackParWrite.cxx
@@ -10,8 +10,8 @@
 #include "CbmTrdParSetAsic.h"
 #include "CbmTrdParSetDigi.h"
 #include "CbmTrdParSpadic.h"
-#include "trd/ReadoutConfig.h"
-#include "trd2d/ReadoutConfig.h"
+#include "algo/detectors/trd/ReadoutConfig.h"
+#include "algo/detectors/trd2d/ReadoutConfig.h"
 #include "yaml/Yaml.h"
 
 #include <FairParamList.h>
diff --git a/reco/tasks/CbmTaskTrdUnpackParWrite.h b/reco/tasks/CbmTaskTrdUnpackParWrite.h
index 09203a69ff02e4882afc6ed9f0572f110d2059be..2d61f8245ea653eede3055cae702cb02210ec936 100644
--- a/reco/tasks/CbmTaskTrdUnpackParWrite.h
+++ b/reco/tasks/CbmTaskTrdUnpackParWrite.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <FairTask.h>
 
diff --git a/reco/tasks/CbmTaskTriggerDigi.cxx b/reco/tasks/CbmTaskTriggerDigi.cxx
index 4bb45239e7791ced6d35df066d5aa58417fbe882..4d54a640289c41be8d7e583b4ff5cada2d21cc54 100644
--- a/reco/tasks/CbmTaskTriggerDigi.cxx
+++ b/reco/tasks/CbmTaskTriggerDigi.cxx
@@ -14,7 +14,7 @@
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "TimeClusterTrigger.h"
+#include "algo/trigger/TimeClusterTrigger.h"
 
 #include <FairRootManager.h>
 #include <Logger.h>
diff --git a/reco/tasks/CbmTaskTriggerDigi.h b/reco/tasks/CbmTaskTriggerDigi.h
index f80d9149d1541fa9ac0427dff08fcb7843928a63..d63c58b126c0be366dbcff17df96e5e46cde6345 100644
--- a/reco/tasks/CbmTaskTriggerDigi.h
+++ b/reco/tasks/CbmTaskTriggerDigi.h
@@ -7,7 +7,7 @@
 
 #include "CbmDefs.h"
 #include "CbmDigiBranchBase.h"
-#include "TimeClusterTrigger.h"
+#include "algo/trigger/TimeClusterTrigger.h"
 
 #include <FairTask.h>
 
diff --git a/reco/tasks/CbmTaskUnpack.cxx b/reco/tasks/CbmTaskUnpack.cxx
index a41254d09c866de9659434035ff2acc03d8fcbf3..dfcaac09017ff1d16d2c0ad78f143aab8e09b1a9 100644
--- a/reco/tasks/CbmTaskUnpack.cxx
+++ b/reco/tasks/CbmTaskUnpack.cxx
@@ -20,11 +20,11 @@
 #include "CbmTrdParSpadic.h"
 #include "CbmTsEventHeader.h"
 #include "MicrosliceDescriptor.hpp"
-#include "ParFiles.h"
 #include "System.hpp"
-#include "bmon/ReadoutConfig.h"
-#include "sts/ChannelMaskSet.h"
-#include "tof/ReadoutConfig.h"
+#include "algo/detectors/bmon/ReadoutConfig.h"
+#include "algo/detectors/sts/ChannelMaskSet.h"
+#include "algo/detectors/tof/ReadoutConfig.h"
+#include "algo/global/ParFiles.h"
 #include "yaml/Yaml.h"
 
 #include <FairParAsciiFileIo.h>
diff --git a/reco/tasks/CbmTaskUnpack.h b/reco/tasks/CbmTaskUnpack.h
index ba79d2203f5dc5846bab759d5bfb07417e6a1517..7dae3dbf72fb21cabe83d0d9c261fbfe1c868194 100644
--- a/reco/tasks/CbmTaskUnpack.h
+++ b/reco/tasks/CbmTaskUnpack.h
@@ -19,16 +19,16 @@ namespace cbm
 }
 #endif
 
-#include "AlgoTraits.h"
-#include "ParFiles.h"
-#include "bmon/Unpack.h"
-#include "evbuild/EventBuilder.h"
-#include "much/Unpack.h"
-#include "rich/Unpack.h"
-#include "sts/Unpack.h"
-#include "tof/Unpack.h"
-#include "trd/Unpack.h"
-#include "trd2d/Unpack.h"
+#include "algo/base/AlgoTraits.h"
+#include "algo/detectors/bmon/Unpack.h"
+#include "algo/detectors/much/Unpack.h"
+#include "algo/detectors/rich/Unpack.h"
+#include "algo/detectors/sts/Unpack.h"
+#include "algo/detectors/tof/Unpack.h"
+#include "algo/detectors/trd/Unpack.h"
+#include "algo/detectors/trd2d/Unpack.h"
+#include "algo/evbuild/EventBuilder.h"
+#include "algo/global/ParFiles.h"
 
 #include <FairTask.h>
 
diff --git a/services/archive_explorer/app/Application.cxx b/services/archive_explorer/app/Application.cxx
index 31d86f4479cceb0734c28fa5d598dddba7358a96..eab788562cf4807daad9449c3301b008e633bed3 100644
--- a/services/archive_explorer/app/Application.cxx
+++ b/services/archive_explorer/app/Application.cxx
@@ -3,11 +3,11 @@
    Authors: Felix Weiglhofer [committer] */
 #include "Application.h"
 
-#include <log.hpp>
-
 #include "Histograms.h"
-#include "RecoResultsInputArchive.h"
 #include "Server.h"
+#include "algo/global/RecoResultsInputArchive.h"
+
+#include <log.hpp>
 
 using namespace cbm::explore;
 using namespace cbm::algo;
diff --git a/services/archive_explorer/app/Histograms.cxx b/services/archive_explorer/app/Histograms.cxx
index 01ef8413c231256e197c0254bd05028c0d5ae8c4..2cdc61d64b93eb9b7cb9bc16b491f0e5730321f7 100644
--- a/services/archive_explorer/app/Histograms.cxx
+++ b/services/archive_explorer/app/Histograms.cxx
@@ -3,13 +3,13 @@
    Authors: Felix Weiglhofer [committer] */
 #include "Histograms.h"
 
+#include "algo/global/StorableRecoResults.h"
+
 #include <TH1.h>
 
 #include <log.hpp>
 #include <unordered_map>
 
-#include "StorableRecoResults.h"
-
 using namespace cbm::explore;
 
 Histograms::Histograms()
diff --git a/services/archive_explorer/app/Options.h b/services/archive_explorer/app/Options.h
index d8a5f0734c2b9a5a6e53c28cc69510fc45920d9b..f6c5f229456797b65758d622bf5e59d9d7567b67 100644
--- a/services/archive_explorer/app/Options.h
+++ b/services/archive_explorer/app/Options.h
@@ -3,9 +3,9 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
-#include <optional>
+#include "algo/base/compat/Filesystem.h"
 
-#include "compat/Filesystem.h"
+#include <optional>
 
 namespace cbm::explore
 {
diff --git a/services/archive_explorer/lib/Server.h b/services/archive_explorer/lib/Server.h
index 03f0cf2f5c6fa42a0101ccbd0f9cf71ddf985d15..79ffa782d26743b1b438fbb8549127c804031126 100644
--- a/services/archive_explorer/lib/Server.h
+++ b/services/archive_explorer/lib/Server.h
@@ -3,14 +3,14 @@
    Authors: Felix Weiglhofer [committer] */
 #pragma once
 
+#include "HistogramCollection.h"
+#include "algo/global/RecoResultsInputArchive.h"
+
 #include <Rtypes.h>
 #include <TNamed.h>
 
 #include <memory>
 
-#include "HistogramCollection.h"
-#include "RecoResultsInputArchive.h"
-
 class THttpServer;
 class TH1;
 class TH1F;
diff --git a/services/histserv/app/Application.cxx b/services/histserv/app/Application.cxx
index a4978c303efe8ae9925b2a65f017b8303c796a37..37ae3774ffb19aa1be1640b85721cd330f08d3b6 100644
--- a/services/histserv/app/Application.cxx
+++ b/services/histserv/app/Application.cxx
@@ -6,7 +6,6 @@
 
 #include "CbmFlesCanvasTools.h"
 #include "CbmQaOnlineInterface.h"
-#include "HistogramContainer.h"
 #include "TCanvas.h"
 #include "TEnv.h"
 #include "TFile.h"
@@ -19,6 +18,7 @@
 #include "TProfile2D.h"
 #include "TRootSniffer.h"
 #include "TSystem.h"
+#include "algo/qa/HistogramContainer.h"
 
 #include <Logger.h>
 
diff --git a/services/histserv/app/Application.h b/services/histserv/app/Application.h
index 580e0dba47ca756266273a1bde3e8b39a0eda279..0c0efc6247941559925c7cd135f0d986e1ed2414 100644
--- a/services/histserv/app/Application.h
+++ b/services/histserv/app/Application.h
@@ -5,10 +5,10 @@
 #ifndef CBM_SERVICES_HISTSERV_APP_APPLICATION_H
 #define CBM_SERVICES_HISTSERV_APP_APPLICATION_H 1
 
-#include "Histogram.h"
 #include "ProgramOptions.h"
 #include "THttpServer.h"
 #include "TObjArray.h"
+#include "algo/qa/Histogram.h"
 #include "ui_callbacks.h"
 
 #include <csignal>
diff --git a/services/histserv/tester/Application.cxx b/services/histserv/tester/Application.cxx
index 99e9c3deeaf311d40817dcca719ffa7d88ad8b4d..d665cb431443d9c2fb9b77e2ea8fbd8d4155c5a2 100644
--- a/services/histserv/tester/Application.cxx
+++ b/services/histserv/tester/Application.cxx
@@ -4,11 +4,11 @@
 
 #include "Application.h"
 
-#include "CanvasConfig.h"
 #include "CbmFlesCanvasTools.h"
-#include "Histogram.h"
-#include "PadConfig.h"
-#include "QaData.h"
+#include "algo/qa/CanvasConfig.h"
+#include "algo/qa/Histogram.h"
+#include "algo/qa/PadConfig.h"
+#include "algo/qa/QaData.h"
 #include "ui_callbacks.h"
 
 #include <Logger.h>
diff --git a/services/histserv/tester/Application.h b/services/histserv/tester/Application.h
index ba000e0be4016fe6cf6cc10840596809c94934f4..88913136f164bccb3fe03ef819717c196fc56013 100644
--- a/services/histserv/tester/Application.h
+++ b/services/histserv/tester/Application.h
@@ -5,8 +5,8 @@
 #ifndef CBM_SERVICES_HISTSERV_TESTER_APPLICATION_H
 #define CBM_SERVICES_HISTSERV_TESTER_APPLICATION_H 1
 
-#include "HistogramSender.h"
 #include "ProgramOptions.h"
+#include "algo/base/HistogramSender.h"
 
 #include <memory>
 
diff --git a/services/online_par_dump/ProgramOptions.h b/services/online_par_dump/ProgramOptions.h
index d3aaa558415a8c9a56d6860a3a59700924708b96..308dbb8c4d0eaad5513ebcba8af5934cae03c9ed 100644
--- a/services/online_par_dump/ProgramOptions.h
+++ b/services/online_par_dump/ProgramOptions.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Definitions.h"
+#include "algo/base/Definitions.h"
 
 #include <string>