diff --git a/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C b/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C
index 169b1fd751526cd223fbc4cd23771873b294a71d..49fd93511de5b8d30f5e938f06a17d2d9cff6962 100644
--- a/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C
+++ b/macro/beamtime/mcbm2022/mcbm_event_reco_L1.C
@@ -461,6 +461,7 @@ Bool_t mcbm_event_reco_L1(UInt_t uRunId                   = 2391,
     std::cout << "-I- : Added task " << trdCluster->GetName() << std::endl;
 
     CbmTrdHitProducer* trdHit = new CbmTrdHitProducer();
+    trdHit->SetHitTimeOffset(363);  // hit time synchronization for TRD2D determined on run 2391
     run->AddTask(trdHit);
     std::cout << "-I- : Added task " << trdHit->GetName() << std::endl;
   }
diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx
index 10aad5baa85ccd2e13a4761ee89d6a8fc42e013b..2d239d67ca44f3160ad914006feb23aff0f2110a 100644
--- a/reco/detectors/trd/CbmTrdClusterFinder.cxx
+++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx
@@ -62,7 +62,7 @@ CbmTrdClusterFinder::~CbmTrdClusterFinder()
     fClusters->Delete();
     delete fClusters;
   }
-  if (fGeoPar) { delete fGeoPar; }
+  // if (fGeoPar) { delete fGeoPar; }
   //   if(fModuleInfo){
   //     delete fModuleInfo;
   //   }
diff --git a/reco/detectors/trd/CbmTrdHitProducer.cxx b/reco/detectors/trd/CbmTrdHitProducer.cxx
index 0a9ab6b8299636ff5a94902ba17638732f485d12..7f77912475a412d1ce63b07fb2c27da8b264b0fb 100644
--- a/reco/detectors/trd/CbmTrdHitProducer.cxx
+++ b/reco/detectors/trd/CbmTrdHitProducer.cxx
@@ -52,7 +52,7 @@ CbmTrdHitProducer::~CbmTrdHitProducer()
 {
   fHits->Clear();
   delete fHits;
-  if (fGeoPar) delete fGeoPar;
+  //if (fGeoPar) delete fGeoPar;
 }
 
 //____________________________________________________________________________________
@@ -101,6 +101,7 @@ CbmTrdModuleRec* CbmTrdHitProducer::AddModule(Int_t address, const CbmTrdParModG
   if (moduleType >= 9) {
     module = fModules[address] = new CbmTrdModuleRec2D(address);
     ((CbmTrdModuleRec2D*) module)->SetUseHelpers(CbmTrdClusterFinder::UseRecoHelpers());
+    ((CbmTrdModuleRec2D*) module)->SetHitTimeOffset(fHitTimeOffset);
   }
   else {
     module = fModules[address] = new CbmTrdModuleRecR(address);
diff --git a/reco/detectors/trd/CbmTrdHitProducer.h b/reco/detectors/trd/CbmTrdHitProducer.h
index 9cd1c6e2b399ac3b123e55c0be8b6b414afc00f8..c6fee3599111961ebab68e21d8b1afa6e7fa5d98 100644
--- a/reco/detectors/trd/CbmTrdHitProducer.h
+++ b/reco/detectors/trd/CbmTrdHitProducer.h
@@ -60,6 +60,8 @@ public:
     */
   virtual void Finish();
   virtual void SetParContainers();
+  /** \brief Correction of hit time in TRD2D due to different processes */ 
+  void SetHitTimeOffset(int dt) { fHitTimeOffset = dt; }
 
 private:
   CbmTrdHitProducer(const CbmTrdHitProducer&);
@@ -138,8 +140,8 @@ private:
 
   /** @brief Total processing time [RealTime]. */
   Float_t fProcessTime = 0;
-
-
+  int fHitTimeOffset = 0;  ///< hit time correction for synchronization
+  
   ClassDef(CbmTrdHitProducer, 2);
 };
 
diff --git a/reco/detectors/trd/CbmTrdModuleRec2D.cxx b/reco/detectors/trd/CbmTrdModuleRec2D.cxx
index 837d67caf584019b26dcae6dd3e625dffd230d2d..df0caa23869d7e67bebd9fd49470e61fc259a31c 100644
--- a/reco/detectors/trd/CbmTrdModuleRec2D.cxx
+++ b/reco/detectors/trd/CbmTrdModuleRec2D.cxx
@@ -520,7 +520,7 @@ Bool_t CbmTrdModuleRec2D::MergeHits(CbmTrdHit* h, Int_t a0)
   h->SetDy(edy);
   h->SetDz(0.);
   h->SetDxy(0.);
-  h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29, edt);
+  h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29 + fHitTimeOff, edt);
   h->SetELoss(e);
   h->SetClassType();
   h->SetMaxType(IsMaxTilt());
@@ -732,7 +732,7 @@ Bool_t CbmTrdModuleRec2D::BuildHit(CbmTrdHit* h)
   h->SetDy(edy);
   h->SetDz(0);
   h->SetDxy(0.);
-  h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29, edt);
+  h->SetTime(CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP) * (vt0 + time) - tdrift + 30.29 + fHitTimeOff, edt);
   h->SetELoss(e);
   h->SetClassType();
   h->SetMaxType(IsMaxTilt());
diff --git a/reco/detectors/trd/CbmTrdModuleRec2D.h b/reco/detectors/trd/CbmTrdModuleRec2D.h
index f74f0e9cb45079d3262c930e947726af0d35640e..dd9fcac98caeb804d59937673c41c50d81e300d8 100644
--- a/reco/detectors/trd/CbmTrdModuleRec2D.h
+++ b/reco/detectors/trd/CbmTrdModuleRec2D.h
@@ -125,6 +125,10 @@ public:
   {
     use ? SETBIT(fConfigMap, ECbmTrdModuleRec2D::kHelpers) : CLRBIT(fConfigMap, ECbmTrdModuleRec2D::kHelpers);
   }
+  /** \brief Time offset to synchronize TRD2D hits to the rest of detectors 
+   * \param dt offset in [ns]
+   */
+  void SetHitTimeOffset(int dt) { fHitTimeOff = dt; }
 
 protected:
 private:
@@ -205,6 +209,7 @@ private:
   UChar_t vrM   = 0;          //! maximum row
   UChar_t viM   = 0;          //! index of maximum signal in the projection
   UShort_t vyM  = 0;          //! bit map for cluster topology classification
+  int fHitTimeOff = 0;        //! hit time offset for synchronization
   std::vector<Double_t> vs;   //! working copy of signals from cluster
   std::vector<Double_t> vse;  //! working copy of signal errors from cluster
   std::vector<Char_t> vt;     //! working copy of signal relative timing