diff --git a/core/data/CbmDefs.h b/core/data/CbmDefs.h
index 5c1eedd61352119bc7c47ddd30acf105c0452683..b9760d9bc96d16bfd2a1091129864972fe6aba1e 100644
--- a/core/data/CbmDefs.h
+++ b/core/data/CbmDefs.h
@@ -47,8 +47,9 @@ enum class ECbmModuleId
   kPsd        = 8,   ///< Projectile spectator detector
   kHodo       = 9,   ///< Hodoscope (for test beam times)
   kDummyDet   = 10,  ///< Dummy for tutorials or tests
-  kT0         = 11,  ///< ToF start Detector
-  kNofSystems = 12,  ///< For loops over active systems
+  kT0         = 11,  ///< ToF start Detector (FIXME)
+  kTrd2d      = 12,  ///< TRD-FASP Detector  (FIXME)
+  kNofSystems = 13,  ///< For loops over active systems
   kMagnet     = 17,  ///< Magnet
   kTarget     = 18,  ///< Target
   kPipe       = 19,  ///< Beam pipe
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
index 37c751e9579c5ff8309fed1c472c34e0e7470310..2011b13fc1151d0429dbd62c2028eed1f1be4a69 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
@@ -84,6 +84,15 @@ void CbmMcbmCheckTimingAlgo::CheckDataPresence(CheckTimingDetector detToCheck)
                     "Stopping there!";
     }  // if ( ! fpT0DigiVec )
   }    // if( ECbmModuleId::kT0 == detToCheck.detId )
+  /// Handle special case for TRD-2D as not yet supported in DigiManager
+  if (ECbmModuleId::kTrd2d == detToCheck.detId) {
+    // Get a pointer to the previous already existing data level
+    fpTrd2dDigiVec = ioman->InitObjectAs<std::vector<CbmTrdDigi> const*>("TrdFaspDigi");
+    if (!fpTrd2dDigiVec) {
+      LOG(fatal) << "No storage with TRD-2D digis found while it should be used. "
+                    "Stopping there!";
+    }  // if ( ! fpTrd2dDigiVec )
+  }    // if( ECbmModuleId::kTrd2d == detToCheck.detId )
   else if (!fDigiMan->IsPresent(detToCheck.detId)) {
     LOG(fatal) << "No " << detToCheck.sName << " digis found while it should be used. Stopping there!";
   }  // else if ( ! fDigiMan->IsPresent( detToCheck.detId ) ) of if( ECbmModuleId::kT0 == detToCheck.detId )
@@ -195,6 +204,10 @@ void CbmMcbmCheckTimingAlgo::ProcessTs()
       CheckInterSystemOffset<CbmTrdDigi>();
       break;
     }  // case ECbmModuleId::kTrd:
+    case ECbmModuleId::kTrd2d: {
+      CheckInterSystemOffset<CbmTrdDigi>();
+      break;
+    }  // case ECbmModuleId::kTrd2d:
     case ECbmModuleId::kTof: {
       CheckInterSystemOffset<CbmTofDigi>();
       break;
@@ -234,6 +247,10 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset()
       uNbRefDigis = fpT0DigiVec->size();
       break;
     }  // case ECbmModuleId::kT0
+    case ECbmModuleId::kTrd2d: {
+      uNbRefDigis = fpTrd2dDigiVec->size();
+      break;
+    }  // case ECbmModuleId::kTrd2d
     default: {
       uNbRefDigis = fDigiMan->GetNofDigis(fRefDet.detId);
       break;
@@ -255,6 +272,11 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset()
       dRefTime   = fpT0DigiVec->at(uDigi).GetTime();
       dRefCharge = fpT0DigiVec->at(uDigi).GetCharge();
     }  // if( ECbmModuleId::kT0 == fRefDet.detId )
+    else if (ECbmModuleId::kTrd2d == fRefDet.detId) {
+      dRefTime = fpTrd2dDigiVec->at(uDigi).GetTime();
+      //dRefCharge = fpTrd2dDigiVec->at(uDigi).GetCharge();
+      dRefCharge = 1;
+    }  // else if( ECbmModuleId::kTrd2d == fRefDet.detId )
     else {
       dRefTime   = fDigiMan->Get<DigiRef>(uDigi)->GetTime();
       dRefCharge = fDigiMan->Get<DigiRef>(uDigi)->GetCharge();
@@ -298,6 +320,10 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset()
           FillTimeOffsetHistos<CbmTrdDigi>(dRefTime, dRefCharge, uDetIdx);
           break;
         }  // case ECbmModuleId::kTrd:
+        case ECbmModuleId::kTrd2d: {
+          FillTimeOffsetHistos<CbmTrdDigi>(dRefTime, dRefCharge, uDetIdx);
+          break;
+        }  // case ECbmModuleId::kTrd:
         case ECbmModuleId::kTof: {
           FillTimeOffsetHistos<CbmTofDigi>(dRefTime, dRefCharge, uDetIdx);
           break;
@@ -339,6 +365,10 @@ void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime, const
       uNbDigis = fpT0DigiVec->size();
       break;
     }  // case ECbmModuleId::kT0
+    case ECbmModuleId::kTrd2d: {
+      uNbDigis = fpTrd2dDigiVec->size();
+      break;
+    }  // case ECbmModuleId::kTrd2d
     default: {
       uNbDigis = fDigiMan->GetNofDigis(fvDets[uDetIdx].detId);
       break;
@@ -355,6 +385,11 @@ void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime, const
       dTime   = fpT0DigiVec->at(uDigiIdx).GetTime();
       dCharge = fpT0DigiVec->at(uDigiIdx).GetCharge();
     }  // if( ECbmModuleId::kT0 == fRefDet.detId )
+    else if (ECbmModuleId::kTrd2d == fvDets[uDetIdx].detId) {
+      dTime = fpTrd2dDigiVec->at(uDigiIdx).GetTime();
+      // dCharge = fpTrd2dDigiVec->at(uDigiIdx).GetCharge();
+      dCharge = 1;
+    }  // else if (ECbmModuleId::kTrd2d == fvDets[uDetIdx].detId)
     else {
       dTime   = fDigiMan->Get<Digi>(uDigiIdx)->GetTime();
       dCharge = fDigiMan->Get<Digi>(uDigiIdx)->GetCharge();
@@ -469,6 +504,18 @@ void CbmMcbmCheckTimingAlgo::WriteHistos()
         }
         break;
       }
+      case ECbmModuleId::kTrd2d: {
+        if (DetAverageSingle > 0) {
+          TF1* gs_trd2d = new TF1("gs_trd2d", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTrd2dPeakWidthNs,
+                                  DetPeakPosSingle + 2 * fTrd2dPeakWidthNs);
+          gs_trd2d->SetParameters(0.7 * DetAverageSingle, DetPeakPosSingle, fTrd2dPeakWidthNs, DetAverageSingle);
+          fvhDetToRefDiff[uDetIdx]->Fit("gs_trd2d", "R");
+          TF1* fitresult_trd2d = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_trd2d");
+          LOG(debug) << fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_trd2d->GetParameter(0)
+                     << ",  " << fitresult_trd2d->GetParameter(1) << ",  " << fitresult_trd2d->GetParameter(2);
+        }
+        break;
+      }
       case ECbmModuleId::kT0: {
         if (DetAverageSingle > 0) {
           TF1* gs_tof = new TF1("gs_tof", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTofPeakWidthNs,
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
index 71a993702b8a098c8e62470c86b7f287a0896792..76d13b9c91d3fa29dd846f32ef53e8cecc24a406 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
@@ -10,6 +10,7 @@
 
 #include "CbmModuleList.h"
 #include "CbmTofDigi.h"
+#include "CbmTrdDigi.h"
 
 #include "TString.h"
 
@@ -87,6 +88,7 @@ public:
   void RemoveCheckDetector(ECbmModuleId detIn);
 
   void SetTrdPeakWidthNs(Double_t val = 120.) { fTrdPeakWidthNs = val; }
+  void SetTrd2dPeakWidthNs(Double_t val = 120.) { fTrd2dPeakWidthNs = val; }
   void SetStsPeakWidthNs(Double_t val = 30.) { fStsPeakWidthNs = val; }
   void SetMuchPeakWidthNs(Double_t val = 100.) { fMuchPeakWidthNs = val; }
   void SetTofPeakWidthNs(Double_t val = 20.) { fTofPeakWidthNs = val; }
@@ -108,6 +110,8 @@ private:
 
   /** T0 is not included in CbmDigiManager, so add it explicitly here **/
   const std::vector<CbmTofDigi>* fpT0DigiVec = nullptr;  //!
+  /** TRD-2D is not included in CbmDigiManager, so add it explicitly here **/
+  const std::vector<CbmTrdDigi>* fpTrd2dDigiVec = nullptr;  //!
 
   //
   UInt_t fuNbTs = 0;
@@ -130,12 +134,13 @@ private:
   TString fOutFileName = "data/HistosCheckTiming.root";
   Double_t DetPeakPosSingle;
   Double_t DetAverageSingle;
-  Double_t fTrdPeakWidthNs  = 120.;
-  Double_t fStsPeakWidthNs  = 30.;
-  Double_t fMuchPeakWidthNs = 100.;
-  Double_t fTofPeakWidthNs  = 20.;
-  Double_t fRichPeakWidthNs = 40.;
-  Double_t fPsdPeakWidthNs  = 20.;
+  Double_t fTrdPeakWidthNs   = 120.;
+  Double_t fTrd2dPeakWidthNs = 120.;
+  Double_t fStsPeakWidthNs   = 30.;
+  Double_t fMuchPeakWidthNs  = 100.;
+  Double_t fTofPeakWidthNs   = 20.;
+  Double_t fRichPeakWidthNs  = 40.;
+  Double_t fPsdPeakWidthNs   = 20.;
 
   ClassDefNV(CbmMcbmCheckTimingAlgo, 1);
 };
diff --git a/macro/beamtime/mcbm2021/check_timing_any.C b/macro/beamtime/mcbm2021/check_timing_any.C
index e3b2cef535ef6a810640a7a511b8ab3442bb39ed..50ab2ff9ea66c26f5be5b784c03c9c9225511eed 100644
--- a/macro/beamtime/mcbm2021/check_timing_any.C
+++ b/macro/beamtime/mcbm2021/check_timing_any.C
@@ -48,7 +48,6 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS
                                      190, 182 );
 */
   /// Here swapping with TOF
-
   timeChecker->SetReferenceDetector(ECbmModuleId::kPsd, "Psd", -300000, 300000, 320 * 300);
   timeChecker->RemoveCheckDetector(ECbmModuleId::kPsd);
   //timeChecker->AddCheckDetector(ECbmModuleId::kT0, "T0");
@@ -58,17 +57,14 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS
   timeChecker->SetReferenceDetector(ECbmModuleId::kMuch, "Much");
   timeChecker->RemoveCheckDetector(ECbmModuleId::kMuch);
   timeChecker->AddCheckDetector(ECbmModuleId::kT0, "T0");
-*/
+  */
 
   /// Remove detectors not present in 2021
   timeChecker->RemoveCheckDetector(ECbmModuleId::kT0);
   timeChecker->RemoveCheckDetector(ECbmModuleId::kMuch);
 
-  /// Remove detectors not yet in common unpacker
-  timeChecker->RemoveCheckDetector(ECbmModuleId::kSts);
-  timeChecker->RemoveCheckDetector(ECbmModuleId::kRich);
-
   /// Add detectors with wider range
+  /*
   timeChecker->RemoveCheckDetector(ECbmModuleId::kSts);
   timeChecker->AddCheckDetector(ECbmModuleId::kSts, "Sts");
   timeChecker->RemoveCheckDetector(ECbmModuleId::kTrd);
@@ -76,6 +72,10 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS
   timeChecker->RemoveCheckDetector(ECbmModuleId::kTof);
   //timeChecker->AddCheckDetector(ECbmModuleId::kTof, "Tof", -150000, 150000, 320*150);
   timeChecker->AddCheckDetector(ECbmModuleId::kTof, "Tof", -2000, 2000, 320 * 2);
+  */
+
+  /// Add detectors not in default list
+  timeChecker->AddCheckDetector(ECbmModuleId::kTrd2d, "Trd2d", -3000, 3000, 160 * 3);
 
   if (0 < uRunId) timeChecker->SetOutFilename(Form("%s/HistosTimeCheck_%03u.root", outDir.Data(), uRunId));
   fRun->AddTask(timeChecker);
diff --git a/macro/run/run_unpack_tsa.C b/macro/run/run_unpack_tsa.C
index 117e367c7d4ea374ef32e27252c1c8849656fe13..2152366abbf139bfbaa0a4f078756a7efaf1978a 100644
--- a/macro/run/run_unpack_tsa.C
+++ b/macro/run/run_unpack_tsa.C
@@ -159,7 +159,7 @@ void run_unpack_tsa(std::string infile = "test.tsa", UInt_t runid = 0, const cha
     trdfasp2dconfig->SetOutputBranchName("TrdFaspDigi");
     std::string parfilesbasepathTrdfasp2d = Form("%s/parameters/trd", srcDir.Data());
     trdfasp2dconfig->SetParFilesBasePath(parfilesbasepathTrdfasp2d);
-    trdfasp2dconfig->SetSystemTimeOffset(0);  // [ns] value to be updated
+    trdfasp2dconfig->SetSystemTimeOffset(-1800);  // [ns] value to be updated
   }
   // -------------