diff --git a/reco/detectors/trd/CbmTrdClusterFinder.cxx b/reco/detectors/trd/CbmTrdClusterFinder.cxx
index d9a0499e53ea56a61ed773ad472fec4b7fb7eb7f..5e07540503181353201f9b14c08c6b45c14c9464 100644
--- a/reco/detectors/trd/CbmTrdClusterFinder.cxx
+++ b/reco/detectors/trd/CbmTrdClusterFinder.cxx
@@ -84,30 +84,18 @@ InitStatus CbmTrdClusterFinder::Init()
   CbmDigiManager::Instance()->Init();
   if (!CbmDigiManager::Instance()->IsPresent(ECbmModuleId::kTrd)) LOG(fatal) << GetName() << "Missing Trd digi branch.";
 
+  fClusters              = new std::vector<CbmTrdCluster>();
   FairRootManager* ioman = FairRootManager::Instance();
-
-  fClusters = new std::vector<CbmTrdCluster>();
   ioman->RegisterAny("TrdCluster", fClusters, true);
 
-  //   // Get the full geometry information of the detector gas layers and store
-  //   // them with the CbmTrdModuleRec. This information can then be used for
-  //   // transformation calculations
-  //   std::map<Int_t, TGeoPhysicalNode*> moduleMap = fGeoHandler->FillModuleMap();
-  //
-  //   Int_t nrModules = fDigiPar->GetNrOfModules();
-  //   Int_t nrNodes = moduleMap.size();
-  //   if (nrModules != nrNodes) LOG(fatal) << "Geometry and parameter files have different number of modules.";
-  //   for (Int_t loop=0; loop< nrModules; ++loop) {
-  //      Int_t address = fDigiPar->GetModuleId(loop);
-  //      std::map<Int_t, TGeoPhysicalNode*>::iterator it = moduleMap.find(address);
-  //      if ( it  == moduleMap.end() ) {
-  //        LOG(fatal) << "Expected module with address " << address << " wasn't found in the map with TGeoNode information.";
-  //      }
-  //      AddModule(address, it->second);
-  //   }
+  for (auto entry : fDigiPar->GetModuleMap()) {
+    const auto moduleId = entry.first;
 
-  //   // new call needed when parameters are initialized from ROOT file
-  //   fDigiPar->Initialize();
+    // Get ASIC parameters for this module
+    CbmTrdParModAsic* setDet = static_cast<CbmTrdParModAsic*>(fAsicPar->GetModulePar(moduleId));
+    if (!setDet) continue;
+    AddModule(moduleId, setDet->GetAsicType());
+  }
 
   LOG(info) << "================ TRD Cluster Finder ===============";
   LOG(info) << " Free streaming       : " << (IsTimeBased() ? "yes" : "no");
@@ -142,23 +130,21 @@ void CbmTrdClusterFinder::Exec(Option_t* /*option*/)
   TStopwatch timerTs;
   timerTs.Start();
 
-  UInt_t nDigis        = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd)));
-  CbmTrdModuleRec* mod = nullptr;
+  UInt_t nDigis = static_cast<UInt_t>(std::abs(CbmDigiManager::Instance()->GetNofDigis(ECbmModuleId::kTrd)));
 
   for (size_t idigi(0); idigi < nDigis; idigi++) {
     const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(idigi);
     auto imod              = fModules.find(digi->GetAddressModule());
     if (imod == fModules.end()) {
-      mod = AddModule(digi->GetAddressModule(), digi->GetType());
-    }
-    else {
-      mod = imod->second;
+      LOG(error) << "CbmTrdClusterFinder: Digi with unknown module ID.";
+      continue;
     }
+    CbmTrdModuleRec* mod = imod->second;
     mod->AddDigi(digi, idigi);
   }
 
   for (auto imod = fModules.begin(); imod != fModules.end(); imod++) {
-    mod = imod->second;
+    CbmTrdModuleRec* mod = imod->second;
     fNrClusters += mod->FindClusters();
     AddClusters(mod->GetClusters());
     imod->second->Clear("cls");