diff --git a/reco/eventbuilder/digis/CbmBuildEventsQA.cxx b/reco/eventbuilder/digis/CbmBuildEventsQA.cxx
index 5e2831ee4d7d164d8e43f67d878eda7e31e7fbd0..9c3457dec1685da8d3e4e1f74b5845580a531542 100644
--- a/reco/eventbuilder/digis/CbmBuildEventsQA.cxx
+++ b/reco/eventbuilder/digis/CbmBuildEventsQA.cxx
@@ -9,6 +9,7 @@
 #include "CbmEvent.h"
 #include "CbmLink.h"
 #include "CbmMatch.h"
+#include "CbmModuleList.h"
 #include "CbmStsDigi.h"
 #include "FairLogger.h"
 #include "FairRootManager.h"
@@ -124,17 +125,19 @@ InitStatus CbmBuildEventsQA::Init() {
   fDigiMan = CbmDigiManager::Instance();
   fDigiMan->Init();
 
-  //Init STS digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kSts)) {
-    LOG(info) << "CbmBuildEventsQA(): Found STS digi input.";
-  } else {
-    LOG(fatal) << "CbmBuildEventsQA(): No STS digi input.";
+  // --- Check input data
+  for (ECbmModuleId system = ECbmModuleId::kMvd;
+       system < ECbmModuleId::kNofSystems;
+       ++system) {
+    if (fDigiMan->IsMatchPresent(system)) {
+      LOG(info) << GetName() << ": Found match branch for "
+                << CbmModuleList::GetModuleNameCaps(system);
+      fSystems.push_back(system);
+    }
   }
-
-  if (fDigiMan->IsMatchPresent(ECbmModuleId::kSts)) {
-    LOG(info) << "CbmBuildEventsQA(): Found STS match branch.";
-  } else {
-    LOG(fatal) << "CbmBuildEventsQA(): No STS match branch.";
+  if (fSystems.empty()) {
+    LOG(fatal) << GetName() << ": No match branch found!";
+    return kFATAL;
   }
 
   return kSUCCESS;
@@ -166,12 +169,13 @@ void CbmBuildEventsQA::MatchEvent(CbmEvent* event) {
   //              << ", STS digis : " << event->GetNofData(ECbmDataType::kStsDigi);
 
   // --- Loop over digis
-  for (Int_t iDigi = 0; iDigi < event->GetNofData(ECbmDataType::kStsDigi);
+  for (Int_t iDigi = 0;
+       iDigi < event->GetNofData(GetDigiType(ECbmModuleId::kSts));
        iDigi++) {
-    Int_t index               = event->GetIndex(ECbmDataType::kStsDigi, iDigi);
-    const CbmStsDigi* digi    = fDigiMan->Get<CbmStsDigi>(index);
+    Int_t index = event->GetIndex(GetDigiType(ECbmModuleId::kSts), iDigi);
+    //const CbmStsDigi* digi    = fDigiMan->Get<CbmStsDigi>(index); not needed ?
     const CbmMatch* digiMatch = fDigiMan->GetMatch(ECbmModuleId::kSts, index);
-    assert(digi);
+    //assert(digi);
     assert(digiMatch);
 
     // --- Update event match with digi links
@@ -191,4 +195,20 @@ void CbmBuildEventsQA::MatchEvent(CbmEvent* event) {
 // ===========================================================================
 
 
+// =====  Get digi type  =====================================================
+ECbmDataType CbmBuildEventsQA::GetDigiType(ECbmModuleId system) {
+  switch (system) {
+    case ECbmModuleId::kMvd: return ECbmDataType::kMvdDigi;
+    case ECbmModuleId::kSts: return ECbmDataType::kStsDigi;
+    case ECbmModuleId::kRich: return ECbmDataType::kRichDigi;
+    case ECbmModuleId::kMuch: return ECbmDataType::kMuchDigi;
+    case ECbmModuleId::kTrd: return ECbmDataType::kTrdDigi;
+    case ECbmModuleId::kTof: return ECbmDataType::kTofDigi;
+    case ECbmModuleId::kPsd: return ECbmDataType::kPsdDigi;
+    default: return ECbmDataType::kUnknown;
+  }
+}
+// ===========================================================================
+
+
 ClassImp(CbmBuildEventsQA)
diff --git a/reco/eventbuilder/digis/CbmBuildEventsQA.h b/reco/eventbuilder/digis/CbmBuildEventsQA.h
index d13212c58af15022b6ea85b7683d2f7c31da2546..346d1afaa1a797104b4a13a85fe25de923664acf 100644
--- a/reco/eventbuilder/digis/CbmBuildEventsQA.h
+++ b/reco/eventbuilder/digis/CbmBuildEventsQA.h
@@ -5,7 +5,7 @@
 #ifndef CBMBUILDEVENTSQA_H_
 #define CBMBUILDEVENTSQA_H 1
 
-
+#include "CbmDefs.h"
 #include <FairTask.h>
 
 class TClonesArray;
@@ -36,9 +36,10 @@ public:
 
 
 private:
-  CbmDigiManager* fDigiMan = nullptr;  //!
-  TClonesArray* fEvents;               ///< Input array (class CbmEvent)
-  Int_t fNofEntries;                   ///< Number of processed entries
+  CbmDigiManager* fDigiMan = nullptr;     //!
+  std::vector<ECbmModuleId> fSystems {};  //  List of detector systems
+  TClonesArray* fEvents;                  ///< Input array (class CbmEvent)
+  Int_t fNofEntries = 0;                  ///< Number of processed entries
 
   /** Task initialisation **/
   virtual InitStatus Init();
@@ -49,6 +50,8 @@ private:
 		 **/
   void MatchEvent(CbmEvent* event);
 
+  ECbmDataType GetDigiType(ECbmModuleId system);
+
   CbmBuildEventsQA(const CbmBuildEventsQA&);
   CbmBuildEventsQA& operator=(const CbmBuildEventsQA&);