diff --git a/core/detectors/trd/CbmTrdParSet.cxx b/core/detectors/trd/CbmTrdParSet.cxx
index 469c8a123c58e7483e27c677db443348eade823e..0b353d42e5fa13e53b10e82a179b7b871bb8e0c0 100644
--- a/core/detectors/trd/CbmTrdParSet.cxx
+++ b/core/detectors/trd/CbmTrdParSet.cxx
@@ -28,8 +28,8 @@ CbmTrdParSet::CbmTrdParSet(const char* name, const char* title, const char* cont
 //_______________________________________________________________________________
 CbmTrdParSet::~CbmTrdParSet()
 {
-  for (map<Int_t, CbmTrdParMod*>::iterator imod = fModuleMap.begin(); imod != fModuleMap.end(); imod++)
-    if (imod->second) delete imod->second;
+  //   for (map<Int_t, CbmTrdParMod*>::iterator imod = fModuleMap.begin(); imod != fModuleMap.end(); imod++)
+  //     if (imod->second) delete imod->second;  // TODO check ownership of module parameters
   fModuleMap.clear();
 }
 
diff --git a/sim/detectors/trd/CbmTrdDigitizer.cxx b/sim/detectors/trd/CbmTrdDigitizer.cxx
index 8ac36826bbee615517723f735b380127572948bb..6e71dfa8be986a2f03a6bfa70fff5a43693aabbc 100644
--- a/sim/detectors/trd/CbmTrdDigitizer.cxx
+++ b/sim/detectors/trd/CbmTrdDigitizer.cxx
@@ -362,7 +362,7 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId)
   // try to load Geometry parameters for module
   const CbmTrdParModGeo* pGeo(NULL);
   if (!fGeoPar || !(pGeo = (const CbmTrdParModGeo*) fGeoPar->GetModulePar(detId))) {
-    LOG(debug) << GetName() << "::AddModule : No Geo params for module @ " << path << ". Using default.";
+    LOG(info) << GetName() << "::AddModule : No Geo params for module " << detId << " @ " << path << ". Using default.";
     module->SetGeoPar(new CbmTrdParModGeo(Form("TRD_%d", detId), path));
   }
   else
@@ -371,7 +371,8 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId)
   // try to load read-out parameters for module
   const CbmTrdParModDigi* pDigi(NULL);
   if (!fDigiPar || !(pDigi = (const CbmTrdParModDigi*) fDigiPar->GetModulePar(detId))) {
-    LOG(debug) << GetName() << "::AddModule : No Read-Out params for module @ " << path << ". Using default.";
+    LOG(info) << GetName() << "::AddModule : No Read-Out params for module " << detId << " @ " << path
+              << ". Using default.";
   }
   else
     module->SetDigiPar(pDigi);
@@ -381,8 +382,7 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId)
     // try to load ASIC parameters for module
     CbmTrdParModAsic* pAsic(NULL);
     if (!fAsicPar || !(pAsic = (CbmTrdParModAsic*) fAsicPar->GetModulePar(detId))) {
-      LOG(debug) << GetName() << "::AddModule : No ASIC params for module @ " << path << ". Using default.";
-      module->SetAsicPar();  // map ASIC channels to read-out channels - need ParModDigi already loaded
+      LOG(fatal) << GetName() << "::AddModule : No ASIC params for module " << detId << " @ " << path << ". Abort.";
     }
     else
       module->SetAsicPar(pAsic);
@@ -390,7 +390,8 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId)
     // try to load Chamber parameters for module
     const CbmTrdParModGas* pChmb(NULL);
     if (!fGasPar || !(pChmb = (const CbmTrdParModGas*) fGasPar->GetModulePar(detId))) {
-      LOG(debug) << GetName() << "::AddModule : No Gas params for module @ " << path << ". Using default.";
+      LOG(info) << GetName() << "::AddModule : No Gas params for module " << detId << " @ " << path
+                << ". Using default.";
     }
     else
       module->SetChmbPar(pChmb);
@@ -398,7 +399,8 @@ CbmTrdModuleSim* CbmTrdDigitizer::AddModule(Int_t detId)
     // try to load Gain parameters for module
     const CbmTrdParModGain* pGain(NULL);
     if (!fGainPar || !(pGain = (const CbmTrdParModGain*) fGainPar->GetModulePar(detId))) {
-      LOG(debug) << GetName() << "::AddModule : No Gain params for module @ " << path << ". Using default.";
+      LOG(info) << GetName() << "::AddModule : No Gain params for module " << detId << " @ " << path
+                << ". Using default.";
     }
     else
       module->SetGainPar(pGain);
diff --git a/sim/detectors/trd/CbmTrdModuleSim2D.cxx b/sim/detectors/trd/CbmTrdModuleSim2D.cxx
index 020eed0b558fa62aafa9959ad61bf4228f03876e..2e54acc03503dbe91455315a1968efa77270774f 100644
--- a/sim/detectors/trd/CbmTrdModuleSim2D.cxx
+++ b/sim/detectors/trd/CbmTrdModuleSim2D.cxx
@@ -12,10 +12,10 @@
 #include "CbmTrdDigitizer.h"
 #include "CbmTrdFASP.h"
 #include "CbmTrdParFasp.h"
+#include "CbmTrdParModAsic.h"
 #include "CbmTrdParModDigi.h"
 #include "CbmTrdParModGain.h"
 #include "CbmTrdParModGas.h"
-#include "CbmTrdParSetAsic.h"
 #include "CbmTrdPoint.h"
 #include "CbmTrdRadiator.h"
 #include "CbmTrdTrianglePRF.h"
@@ -536,17 +536,30 @@ Bool_t CbmTrdModuleSim2D::ScanPadPlane(Double_t* point, Double_t DX, Double_t EL
 }
 
 //_______________________________________________________________________________________________
-void CbmTrdModuleSim2D::AddDigi(Int_t address, Double_t* charge, Double_t time /*, Double_t fTR*/)
+void CbmTrdModuleSim2D::AddDigi(Int_t pad, Double_t* charge, Double_t time /*, Double_t fTR*/)
 {
   /**
  * Adding triangular digits to time slice buffer
  */
 
+  // check the status of FEE for the current channels
+  int faspAddress        = fAsicPar->GetAsicAddress((pad << 1));
+  const CbmTrdParFasp* p = static_cast<const CbmTrdParFasp*>(fAsicPar->GetAsicPar(faspAddress));
+  if (!p) {
+    LOG(debug) << GetName() << "::AddDigi : Could not find FASP params for address=" << faspAddress << " @ pad=" << pad;
+    return;
+  }
+  if (charge[0] > 0) {  // mask T digi
+    if (p->GetChannel(pad, 0)->IsMasked()) charge[0] = 0;
+  }
+  if (charge[1] > 0) {  // mask R digi
+    if (p->GetChannel(pad, 1)->IsMasked()) charge[1] = 0;
+  }
 
   // make digi
   CbmTrdDigi *digi(NULL), *sdigi(NULL);
   CbmMatch* digiMatch(NULL);
-  digi = new CbmTrdDigi(address, charge[0], charge[1],
+  digi = new CbmTrdDigi(pad, charge[0], charge[1],
                         ULong64_t(TMath::Ceil(time / CbmTrdDigi::Clk(CbmTrdDigi::eCbmTrdAsicType::kFASP))));
   digi->SetAddressModule(fModAddress);  // may not be needed in the future
   digiMatch          = new CbmMatch();
@@ -555,28 +568,28 @@ void CbmTrdModuleSim2D::AddDigi(Int_t address, Double_t* charge, Double_t time /
   //digi->SetMatch(digiMatch);
 
   // get the link to saved digits
-  std::map<Int_t, std::vector<pair<CbmTrdDigi*, CbmMatch*>>>::iterator it = fBuffer.find(address);
+  std::map<Int_t, std::vector<pair<CbmTrdDigi*, CbmMatch*>>>::iterator it = fBuffer.find(pad);
 
   // check for saved
   if (it != fBuffer.end()) {
     Bool_t kINSERT(kFALSE);
-    for (std::vector<pair<CbmTrdDigi*, CbmMatch*>>::iterator itv = fBuffer[address].begin();
-         itv != fBuffer[address].end(); itv++) {
+    for (std::vector<pair<CbmTrdDigi*, CbmMatch*>>::iterator itv = fBuffer[pad].begin(); itv != fBuffer[pad].end();
+         itv++) {
       sdigi = itv->first;
       if (sdigi->GetTime() <= digi->GetTime()) continue;  // arrange digits in increasing order of time
-      fBuffer[address].insert(itv, make_pair(digi, digiMatch));
+      fBuffer[pad].insert(itv, make_pair(digi, digiMatch));
       if (VERBOSE) cout << "          => Save(I) " << digi->ToString();
       kINSERT = kTRUE;
       break;
     }
     if (!kINSERT) {
-      fBuffer[address].push_back(make_pair(digi, digiMatch));
+      fBuffer[pad].push_back(make_pair(digi, digiMatch));
       if (VERBOSE) cout << "          => Save(B) " << digi->ToString();
     }
   }
   else {  // add address
     if (VERBOSE) cout << "          => Add " << digi->ToString();
-    fBuffer[address].push_back(make_pair(digi, digiMatch));
+    fBuffer[pad].push_back(make_pair(digi, digiMatch));
   }
 }