diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx
index 3fc33fbc3e951e1a67f557d488f8939e0bd7cbd8..24140f5b0ea5ee156bc13eaaa2172e94e07c35dc 100644
--- a/sim/transport/steer/CbmTransport.cxx
+++ b/sim/transport/steer/CbmTransport.cxx
@@ -369,7 +369,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 +394,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 +407,376 @@ 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);