diff --git a/core/data/test/trd/_GTestCbmTrdDigi.cxx b/core/data/test/trd/_GTestCbmTrdDigi.cxx
index f531d96b4bb4967d690b525062854f341c9c1d0e..c69dd509027faadcf5abf71f88a663b3a7e9d5d7 100644
--- a/core/data/test/trd/_GTestCbmTrdDigi.cxx
+++ b/core/data/test/trd/_GTestCbmTrdDigi.cxx
@@ -22,13 +22,14 @@ TEST(_GTestCbmTrdDigi , CheckStandardConstructor)
   // Create object
   // This creates a Spadic standard digi, fasp test to be added here
   Int_t padChNr = 42;
+  Int_t uniqueModuleId = (Int_t) ECbmModuleId::kTrd; // Unique ModuleId of first module
   Double_t charge = 42.42;
   ULong64_t digiTime = 42001;
   Int_t errClass = 0;
-  CbmTrdDigi test(padChNr, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass);
+  CbmTrdDigi test(padChNr, uniqueModuleId, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass);
   compareTrdDigiDataMembers(test, padChNr, ECbmModuleId::kTrd, digiTime, charge);
 
-  CbmTrdDigi* test1 = new CbmTrdDigi(padChNr, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass);
+  CbmTrdDigi* test1 = new CbmTrdDigi(padChNr, uniqueModuleId, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass);
 
   compareTrdDigiDataMembers(*test1, padChNr, ECbmModuleId::kTrd, digiTime, charge);;
 
diff --git a/core/data/test/trd/compareTrdDigi.h b/core/data/test/trd/compareTrdDigi.h
index 632cfa379f1efcf016f26a671e6df6cc18cd849d..16f1cea035dece97ea132e3b986b573d7e05a283 100644
--- a/core/data/test/trd/compareTrdDigi.h
+++ b/core/data/test/trd/compareTrdDigi.h
@@ -12,9 +12,8 @@ void compareTrdDigiDataMembers(CbmTrdDigi& test,
   retValInt = test.GetAddressChannel();
   EXPECT_EQ(padChNr, retValInt);
 
-  test.SetAddressModule(5);
   retValInt = test.GetAddressModule();
-  EXPECT_EQ(5, retValInt);
+  EXPECT_EQ((Int_t) systemid, retValInt);
 
   // GetAddress() returns the full Address part of the fInfo data member. However, since Module-5 translated via CbmTrdAddress corresponds to the value 0 it should return the setted channel number.
   retValInt = test.GetAddress();
diff --git a/core/data/trd/CbmTrdDigi.cxx b/core/data/trd/CbmTrdDigi.cxx
index eeecdad8a620fabdb2145a067a93d56f95d4ba0d..fce1f44395c9dbf68f4059dfb502ef0fb3eb254b 100644
--- a/core/data/trd/CbmTrdDigi.cxx
+++ b/core/data/trd/CbmTrdDigi.cxx
@@ -55,7 +55,7 @@ CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t chargeT, Float_t chargeR, ULong64_
 }
 
 //__________________________________________________________________________________________
-CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass)
+CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Int_t uniqueModuleId, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass)
   : fInfo(0)
   ,fCharge(0.)
   ,fTime(time)
@@ -71,7 +71,8 @@ CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t trig
  * fCharge definition UInt_t(charge*fgPrecission)
 */
   SetAsic(kSPADIC);
-  SetChannel(padChNr); 
+  SetChannel(padChNr);
+  SetAddress(uniqueModuleId);
   SetCharge(charge);
   SetTriggerType(triggerType);
   SetErrorClass(errClass);
diff --git a/core/data/trd/CbmTrdDigi.h b/core/data/trd/CbmTrdDigi.h
index fde30164662acd400c1318a4eba21213d255c9cd..f85c9d82ddd63e991d1c5a46eaa5ad1426cf8894 100644
--- a/core/data/trd/CbmTrdDigi.h
+++ b/core/data/trd/CbmTrdDigi.h
@@ -50,7 +50,7 @@ public:
    * \param[in] triggerType SPADIC trigger type see CbmTrdTriggerType.
    * \param[in] errClass SPADIC signal error parametrization based on message type.
    */
-  CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass/*nrSamples*/);
+  CbmTrdDigi(Int_t padChNr, Int_t uniqueModuleId, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass/*nrSamples*/);
   
   /**
    * \brief Constructor for backward compatibillity.
diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx
index 7f7d32cd15b96ee71123c69a63f576e178fe7738..27de8e7bc0210b42c603aadde973e8cc43b35bbf 100644
--- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx
+++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx
@@ -842,14 +842,14 @@ std::shared_ptr<CbmTrdDigi> CbmMcbm2018UnpackerAlgoTrdR::MakeDigi(CbmTrdRawMessa
     }
     asicAddress = mapIt->second;
     Int_t uniqueModuleId = asicAddress / 1000;
-    Int_t layerId(CbmTrdAddress::GetLayerId(uniqueModuleId));
-    Int_t moduleId(CbmTrdAddress::GetModuleId(uniqueModuleId));
+    // Int_t layerId(CbmTrdAddress::GetLayerId(uniqueModuleId));
+    // Int_t moduleId(CbmTrdAddress::GetModuleId(uniqueModuleId));
     Int_t asicChannelId(0);
     asicChannelId = (raw.GetElinkId() % 2) == fIsFirstChannelsElinkEven ? raw.GetChannelId() : raw.GetChannelId() + NSPADICCH/2;
     digiAddress = (fAsicChannelMap.find(asicAddress))->second.at(asicChannelId);
 
-    std::shared_ptr<CbmTrdDigi> digi = std::make_shared<CbmTrdDigi> ( CbmTrdDigi(digiAddress, digiCharge, digiTime, digiTriggerType, digiErrClass) );
-    digi->SetAddress(CbmTrdAddress::GetAddress(layerId, moduleId, 0, 0, 0)); // TODO this could be skipped, it is shifting the address components back and forth, however the digi setter would need to be enhanced 
+    std::shared_ptr<CbmTrdDigi> digi = std::make_shared<CbmTrdDigi> ( CbmTrdDigi(digiAddress, uniqueModuleId, digiCharge, digiTime, digiTriggerType, digiErrClass) );
+    // digi->SetAddress(CbmTrdAddress::GetAddress(layerId, moduleId, 0, 0, 0));
 
     // Int_t channelAddress = digi->GetAddressChannel();
     // Int_t address = digi->GetAddress();
diff --git a/sim/detectors/trd/CbmTrdModuleSimR.cxx b/sim/detectors/trd/CbmTrdModuleSimR.cxx
index 68dd1f176d21fb21bb2934e97b215efe651bc381..879912a42a37ef469cfabfa0afeb27a5f507cfc1 100644
--- a/sim/detectors/trd/CbmTrdModuleSimR.cxx
+++ b/sim/detectors/trd/CbmTrdModuleSimR.cxx
@@ -123,7 +123,7 @@ void CbmTrdModuleSimR::AddDigi(Int_t address, Double_t charge, Double_t /*charge
     digiMatch->AddLink(CbmLink(weighting, fPointId, fEventId, fInputId));
     AddNoise(charge);  
 
-    CbmTrdDigi *digi = new CbmTrdDigi(channel, charge*1e6, ULong64_t(time), 0, 0);
+    CbmTrdDigi *digi = new CbmTrdDigi(channel, fModAddress, charge*1e6, ULong64_t(time), 0, 0);
 
     digi->SetFlag(0,true);
     if(fDigiPar->GetPadSizeY(sec) == 1.5)     digi->SetErrorClass(1);
@@ -134,7 +134,7 @@ void CbmTrdModuleSimR::AddDigi(Int_t address, Double_t charge, Double_t /*charge
     fDigiMap[address] = std::make_pair(digi, digiMatch);
 
     it = fDigiMap.find(address);    
-    it->second.first->SetAddressModule(fModAddress);//module);
+    // it->second.first->SetAddressModule(fModAddress);//module); <- now handled in the digi contructor
     if(trigger==1)    it->second.first->SetTriggerType(CbmTrdDigi::kSelf);
     if(trigger==2)    it->second.first->SetTriggerType(CbmTrdDigi::kNeighbor);
   }
@@ -227,9 +227,9 @@ void CbmTrdModuleSimR::ProcessPulseBuffer(Int_t address, Bool_t FNcall, Bool_t M
     }
   }
   
-  CbmTrdDigi* digi=NULL;
-  if(fTimeBuffer[address] + corr - shift > 0.)  digi = fMessageConverter->MakeDigi(temp,channel,0,0,fTimeBuffer[address] + corr - shift,true);
-  else digi = fMessageConverter->MakeDigi(temp,channel,0,0,fTimeBuffer[address] + corr,true);
+  CbmTrdDigi* digi = nullptr;
+  if(fTimeBuffer[address] + corr - shift > 0.)  digi = fMessageConverter->MakeDigi(temp, channel, fModAddress, fTimeBuffer[address] + corr - shift,true);
+  else digi = fMessageConverter->MakeDigi(temp, fModAddress, channel, fTimeBuffer[address] + corr,true);
 
   if(fDigiPar->GetPadSizeY(sec) == 1.5)     digi->SetErrorClass(1);
   if(fDigiPar->GetPadSizeY(sec) == 4.)      digi->SetErrorClass(2);
@@ -342,7 +342,7 @@ void CbmTrdModuleSimR::ProcessPulseBuffer(Int_t address, Bool_t FNcall, Bool_t M
   }
   
   
-  digi->SetAddressModule(fModAddress);
+  // digi->SetAddressModule(fModAddress); Not required anymore, now handled in the digi c'tor
 
   if(trigger==1){
     digi->SetTriggerType(CbmTrdDigi::kSelf);
@@ -438,9 +438,8 @@ void CbmTrdModuleSimR::AddDigitoBuffer(Int_t address, Double_t charge, Double_t
   channel += ncols * row + col;
 
   //  std::cout<<charge*1e6<<"   "<<fTimeBuffer[address]/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)<<std::endl;
-  CbmTrdDigi* digi= new CbmTrdDigi(channel, charge*1e6, ULong64_t(time/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)), 0, 0);
+  CbmTrdDigi* digi= new CbmTrdDigi(channel, fModAddress, charge*1e6, ULong64_t(time/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)), 0, 0);
 
-  digi->SetAddressModule(fModAddress);//module);
   if(trigger==1)  digi->SetTriggerType(CbmTrdDigi::kSelf);
   if(trigger==2)  digi->SetTriggerType(CbmTrdDigi::kNeighbor);
   //digi->SetMatch(digiMatch);
diff --git a/sim/detectors/trd/CbmTrdRawToDigiR.cxx b/sim/detectors/trd/CbmTrdRawToDigiR.cxx
index 79c8ccf36fa9c8638245040514ea78891529f67b..b453d9568972a11599a26b0bbb11f50f76b6cad6 100644
--- a/sim/detectors/trd/CbmTrdRawToDigiR.cxx
+++ b/sim/detectors/trd/CbmTrdRawToDigiR.cxx
@@ -339,7 +339,7 @@ void CbmTrdRawToDigiR::ReadMaps(std::string file){
   
 }
 
-CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel,Int_t module,Int_t layer,ULong64_t time,Bool_t FN){
+CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel, Int_t uniqueModuleId, ULong64_t time, Bool_t FN){
   Float_t digicharge=0;
   Int_t samplesum=0;
   for(size_t i=0;i<fSampleMask.size();i++){
@@ -369,9 +369,8 @@ CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel
     
   }
   
-  CbmTrdDigi* digi= new CbmTrdDigi(channel, digicharge, time, 0, 0); 
-  digi->SetAddress(CbmTrdAddress::GetAddress(layer, module, 0, 0, 0));
-  
+  CbmTrdDigi* digi= new CbmTrdDigi(channel, uniqueModuleId, digicharge, time, 0, 0); 
+    
   return digi;
   
 }
diff --git a/sim/detectors/trd/CbmTrdRawToDigiR.h b/sim/detectors/trd/CbmTrdRawToDigiR.h
index ef55599ef3820b3eb37a688eb35ea9e88e2aa5e8..6d04da1279a0699b0460301a5ffa789e14a3292d 100644
--- a/sim/detectors/trd/CbmTrdRawToDigiR.h
+++ b/sim/detectors/trd/CbmTrdRawToDigiR.h
@@ -38,7 +38,7 @@ class CbmTrdRawToDigiR : public TObject
   virtual ~CbmTrdRawToDigiR() {;}    
 
   //  CbmTrdDigi* MakeDigi(CbmSpadicRawMessage22* raw);
-  CbmTrdDigi* MakeDigi(std::vector<Int_t> samples, Int_t channel,Int_t module,Int_t layer,ULong64_t time,Bool_t FN=false);
+  CbmTrdDigi* MakeDigi(std::vector<Int_t> samples, Int_t channel, Int_t uniqueModuleId, ULong64_t time,Bool_t FN=false);
 
   Float_t  GetTimeShift(std::vector<Int_t> samples);
   Double_t GetCharge(std::vector<Int_t> samples, Int_t shift=-1);