diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx
index 3fc33fbc3e951e1a67f557d488f8939e0bd7cbd8..79f6b510fda5b601d70ed7c53545b0d9192dcf03 100644
--- a/sim/transport/steer/CbmTransport.cxx
+++ b/sim/transport/steer/CbmTransport.cxx
@@ -167,13 +167,17 @@ void CbmTransport::ConfigureVMC()
       LOG(info) << GetName() << ": Create TGeant3";
       vmc = new TGeant3("C++ Interface to Geant3");
     }  //? Native Geant3
-    if (!fGeant3Settings) { fGeant3Settings = new CbmGeant3Settings(); }
+    if (!fGeant3Settings) {
+      fGeant3Settings = new CbmGeant3Settings();
+    }
     fGeant3Settings->Init(vmc);
   }  //? Geant3
 
   else if (fEngine == kGeant4) {
     LOG(info) << GetName() << ": Create TGeant4";
-    if (!fGeant4Settings) { fGeant4Settings = new CbmGeant4Settings(); }
+    if (!fGeant4Settings) {
+      fGeant4Settings = new CbmGeant4Settings();
+    }
     std::array<std::string, 3> runConfigSettings = fGeant4Settings->GetG4RunConfig();
     TG4RunConfiguration* runConfig =
       new TG4RunConfiguration(runConfigSettings[0], runConfigSettings[1], runConfigSettings[2]);
@@ -369,7 +373,7 @@ void CbmTransport::RegisterIons()
   stable = kTRUE;
   charge = 2.;
   pdgdb->AddParticle(name, name, mass, stable, 0., charge, "Ion", code);
-  pdgdb->AddAntiParticle("He3-", -1 * code);
+  pdgdb->AddAntiParticle("He4-", -1 * code);
 }
 // --------------------------------------------------------------------------
 
@@ -394,7 +398,7 @@ void CbmTransport::PiAndEtaDecay(TVirtualMC* vmc)
 {
 
   assert(vmc);
-  LOG(info) << GetName() << ": Set decay modes for pi0 and eta";
+  LOG(info) << GetName() << ": Set decay modes for pi0, eta, Hypernuclei and Open Charm";
 
   if (fEngine == kGeant4) {
     std::cout << std::endl << std::endl;
@@ -407,6 +411,374 @@ void CbmTransport::PiAndEtaDecay(TVirtualMC* vmc)
     std::cout << std::endl << std::endl;
     return;
   }
+  Double_t lifetime = 1.85e-10;  // lifetime 3HL
+  Double_t mass     = 2.99339;
+  Int_t PDG         = 3004;
+  Double_t charge   = 1.;
+
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H3L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  Int_t mode[6][3];
+  Float_t bratio[6];
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000020030;  //3He
+  mode[0][1] = -211;        //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 2.632e-10;  // lifetime NL
+  mass     = 2.046;
+  PDG      = 3003;
+  charge   = 0.;
+
+  TVirtualMC::GetMC()->DefineParticle(PDG, "LambdaN", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1,
+                                      0, 0, 1, kFALSE);
+
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000010020;  //d
+  mode[0][1] = -211;        //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+  lifetime = 1.80e-10;  // lifetime 4HL
+  mass     = 3.92975;
+  PDG      = 3005;
+  charge   = 1.;
+
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H4L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000020040;  //4He
+  mode[0][1] = -211;        //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 1.50e-10;  // lifetime 4HeL
+  mass     = 3.93070;
+  PDG      = 3006;
+  charge   = 2.;
+
+  TVirtualMC::GetMC()->DefineParticle(PDG, "He4L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0,
+                                      0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000020030;  //3He
+  mode[0][1] = 2212;        //proton
+  mode[0][2] = -211;        //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 1.85e-10;  // lifetime 3HL->d p pi
+  mass     = 2.99339;
+  PDG      = 3012;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H3L_{dppi}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1,
+                                      1, 0, 0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000010020;  //d
+  mode[0][1] = 2212;        //proton
+  mode[0][2] = -211;        //pi-
+                            //       mode[0][0] = 3003;  //LambdaN
+                            //       mode[0][1] = 2212;  //proton
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 2.632e-10;  // lifetime 5HeL->4He p pi
+  mass     = 4.8393;
+  PDG      = 3007;
+  charge   = 2.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "He5L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0,
+                                      0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000020040;  //4He
+  mode[0][1] = 2212;        //proton
+  mode[0][2] = -211;        //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 2.632e-10;  // lifetime 4HLL_2body
+  mass     = 4.10791;
+  PDG      = 3008;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H4LL_{He4Lpi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0,
+                                      1, 1, 0, 0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 3006;  //4HeL
+  mode[0][1] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 2.632e-10;  // lifetime 4HLL_3body
+  mass     = 4.10791;
+  PDG      = 3009;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H4LL_{H3Lppi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0,
+                                      1, 1, 0, 0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 3004;  //3HL
+  mode[0][1] = 2212;  //p
+  mode[0][2] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+
+  lifetime = 2.632e-10;  // lifetime 5HLL
+  mass     = 5.04748;
+  PDG      = 3010;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "H5LL_{He5Lpi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0,
+                                      1, 1, 0, 0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 3007;  //5HeL
+  mode[0][1] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+
+  lifetime = 2.632e-10;  // lifetime 6HeLL
+  mass     = 5.98575;
+  PDG      = 3011;
+  charge   = 2.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "He6LL", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0,
+                                      0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 3007;  //5HeL
+  mode[0][1] = 2212;  //proton
+  mode[0][2] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+  // charm **********************************************************************************************************************
+  lifetime = 4.1e-13;  // lifetime D0 -> K- pi
+  mass     = 1.86486;
+  PDG      = 421;
+  charge   = 0.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "D0", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = -321;  //K-
+  mode[0][1] = 211;   //pi+
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 4.1e-13;  // lifetime D0b -> K+ pi-
+  mass     = 1.86486;
+  PDG      = -421;
+  charge   = 0.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "D0b", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 321;   //K+
+  mode[0][1] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 2.0e-13;  // lifetime Lc -> p K- pi+
+  mass     = 2.28646;
+  PDG      = 4122;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "Lc", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 2212;  //p
+  mode[0][1] = -321;  //K-
+  mode[0][2] = 211;   //pi+
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 1.04e-12;  // lifetime D+ -> K- pi pi
+  mass     = 1.86962;
+  PDG      = 411;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "D+", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = -321;  //K-
+  mode[0][1] = 211;   //pi+
+  mode[0][2] = 211;   //pi+
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 1.04e-12;  // lifetime D- -> K pi- pi-
+  mass     = 1.86962;
+  PDG      = -411;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "D-", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 321;   //K+
+  mode[0][1] = -211;  //pi-
+  mode[0][2] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+
+  lifetime = 5.0e-13;  // lifetime Ds+ -> K- K+ pi+
+  mass     = 1.96850;
+  PDG      = 431;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "Ds+", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = -321;  //K-
+  mode[0][1] = 321;   //K+
+  mode[0][2] = 211;   //pi+
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  lifetime = 5.0e-13;  // lifetime Ds- -> K- K+ pi-
+  mass     = 1.96850;
+  PDG      = -431;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "Ds-", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0,
+                                      1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = -321;  //K-
+  mode[0][1] = 321;   //K+
+  mode[0][2] = -211;  //pi-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
+  // end charm **********************************************************************************************************************
+
+
+  lifetime = 1.55e-22;  // lifetime 5HeD->4He K pi- pi-
+  mass     = 5.5809994;
+  PDG      = 4006;
+  charge   = 1.;
+  TVirtualMC::GetMC()->DefineParticle(PDG, "He5D", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0,
+                                      0, 1, kFALSE);
+
+  for (Int_t kz = 0; kz < 6; kz++) {
+    bratio[kz]  = 0.;
+    mode[kz][0] = 0;
+    mode[kz][1] = 0;
+    mode[kz][2] = 0;
+  }
+  bratio[0]  = 100.;
+  mode[0][0] = 1000020040;  //4He
+  mode[0][1] = -411;        //D-
+
+  TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode);
+
 
   TGeant3* gMC3 = static_cast<TGeant3*>(vmc);
   assert(vmc);
@@ -472,22 +844,26 @@ void CbmTransport::Run(Int_t nEvents)
 
   // Get the minimum number of events from all file based generators
   // Set the number of events to process to this minimum number of events
-  Int_t numAvailEvents {0};
-  Int_t numMinAvailEvents {INT_MAX};
+  Int_t numAvailEvents{0};
+  Int_t numMinAvailEvents{INT_MAX};
   TObjArray* genList = fEventGen->GetListOfGenerators();
   for (Int_t i = 0; i < genList->GetEntries(); i++) {
     CbmUnigenGenerator* gen = dynamic_cast<CbmUnigenGenerator*>(genList->At(i));
     if (gen) {
       numAvailEvents = gen->GetNumAvailableEvents();
       if (nEvents > numAvailEvents) {
-        if (numAvailEvents < numMinAvailEvents) { numMinAvailEvents = numAvailEvents; }
+        if (numAvailEvents < numMinAvailEvents) {
+          numMinAvailEvents = numAvailEvents;
+        }
       }
     }
     CbmPlutoGenerator* pgen = dynamic_cast<CbmPlutoGenerator*>(genList->At(i));
     if (pgen) {
       numAvailEvents = pgen->GetNumAvailableEvents();
       if (nEvents > numAvailEvents) {
-        if (numAvailEvents < numMinAvailEvents) { numMinAvailEvents = numAvailEvents; }
+        if (numAvailEvents < numMinAvailEvents) {
+          numMinAvailEvents = numAvailEvents;
+        }
       }
     }
   }