diff --git a/core/base/CbmDigiManager.cxx b/core/base/CbmDigiManager.cxx
index 6871158f3c1da282253634eaf7265629d2c16a46..886338c5fe4f6cb17dea62486975d0947bae7bad 100644
--- a/core/base/CbmDigiManager.cxx
+++ b/core/base/CbmDigiManager.cxx
@@ -18,6 +18,7 @@
 #include "CbmStsDigi.h"           // for CbmStsDigi
 #include "CbmTofDigi.h"           // for CbmTofDigi
 #include "CbmTrdDigi.h"           // for CbmTrdDigi
+#include "CbmTzdDigi.h"           // for CbmTzdDigi
 
 #include <FairTask.h>  // for kSUCCESS, InitStatus
 
@@ -90,6 +91,7 @@ InitStatus CbmDigiManager::Init()
   SetBranch<CbmTrdDigi>();
   SetBranch<CbmTofDigi>();
   SetBranch<CbmPsdDigi>();
+  SetBranch<CbmTzdDigi>();
   LOG(info) << "Present branches:";
   for (auto const& branch : fBranches) {
     LOG(info) << "   " << branch.second->ToString();
diff --git a/core/data/global/CbmTzdDigi.h b/core/data/global/CbmTzdDigi.h
index d43ea4c63dc7d7df9d9b524db3f5afc86c46b9ea..45acc223df28790733df917b1fa2adb8f0c98c1a 100644
--- a/core/data/global/CbmTzdDigi.h
+++ b/core/data/global/CbmTzdDigi.h
@@ -48,6 +48,12 @@ public:
   double GetCharge() const { return fCharge; }
 
 
+  /** System ID (static)
+  ** @return System identifier (EcbmModuleId)
+  **/
+  static ECbmModuleId GetSystem() { return ECbmModuleId::kT0; }
+
+
   /** @brief Time
    ** @return Time of measurement [ns]
    **/
diff --git a/reco/eventbuilder/digis/CbmBuildEventsIdeal.cxx b/reco/eventbuilder/digis/CbmBuildEventsIdeal.cxx
index 83a95c3957b3a123b99bb807505e680e333ed8ea..a6a3dad68d12a9f1eb48082a4d7fcf33a0ba8dd5 100644
--- a/reco/eventbuilder/digis/CbmBuildEventsIdeal.cxx
+++ b/reco/eventbuilder/digis/CbmBuildEventsIdeal.cxx
@@ -96,6 +96,7 @@ void CbmBuildEventsIdeal::Exec(Option_t*)
       case ECbmModuleId::kTrd: digiType = ECbmDataType::kTrdDigi; break;
       case ECbmModuleId::kTof: digiType = ECbmDataType::kTofDigi; break;
       case ECbmModuleId::kPsd: digiType = ECbmDataType::kPsdDigi; break;
+      case ECbmModuleId::kT0: digiType = ECbmDataType::kT0Digi; break;
       default: break;
     }  //? detector
 
diff --git a/sim/detectors/tzd/CbmTzdDigitize.cxx b/sim/detectors/tzd/CbmTzdDigitize.cxx
index 8ac5c8b765f43ee5b95eda46c3c4ad86dc1222a7..bcddaf179491eb8cabd5bc2a3a08dd799cf3b330 100644
--- a/sim/detectors/tzd/CbmTzdDigitize.cxx
+++ b/sim/detectors/tzd/CbmTzdDigitize.cxx
@@ -9,6 +9,8 @@
 
 #include "CbmTzdDigitize.h"
 
+#include "CbmMatch.h"
+
 #include <Logger.h>
 
 #include <TRandom.h>
@@ -40,7 +42,7 @@ void CbmTzdDigitize::Exec(Option_t*)
   TStopwatch timer;
   timer.Start();
 
-  // --- Get event time
+  // --- Get MC event information
   GetEventInfo();
 
   // --- Create digi and send it to DAQ
@@ -49,6 +51,7 @@ void CbmTzdDigitize::Exec(Option_t*)
   CbmTzdDigi* digi = new CbmTzdDigi(digiTime, charge);
   if (fCreateMatches) {
     CbmMatch* digiMatch = new CbmMatch();
+    digiMatch->AddLink(1., -1, fCurrentMCEntry, fCurrentInput);
     SendData(digiTime, digi, digiMatch);
   }
   else