diff --git a/corsika/detail/framework/core/Cascade.inl b/corsika/detail/framework/core/Cascade.inl
index bb0d0b854b8e6affe948046e63021ca273c23135..c3a1eee372e7d1390300305638e144e252c15748 100644
--- a/corsika/detail/framework/core/Cascade.inl
+++ b/corsika/detail/framework/core/Cascade.inl
@@ -303,15 +303,11 @@ namespace corsika {
         false; // only erase original particle if it decayed or interacted
 
     if (distance_interact < distance_decay) {
-      CrossSectionType const total_cx_post = composition.getWeightedSum(xs_function);
       eraseParticle = isInteracted(
-          interaction(secondaries, projectileP4Post, composition, total_cx_post));
+          interaction(secondaries, projectileP4Post, composition, total_cx_pre));
     } else {
       [[maybe_unused]] auto projectile = secondaries.getProjectile();
-
-      InverseTimeType const total_inv_lifetime_post =
-          sequence_.getInverseLifetime(particle);
-      if (decay(secondaries, total_inv_lifetime_post) == ProcessReturn::Decayed) {
+      if (decay(secondaries, total_inv_lifetime_pre) == ProcessReturn::Decayed) {
         eraseParticle = true;
         if (secondaries.getSize() == 1 &&
             projectile.getPID() == secondaries.getNextParticle().getPID()) {
@@ -321,8 +317,11 @@ namespace corsika {
       }
     }
 
-    sequence_.doSecondaries(secondaries);
-    if (eraseParticle) particle.erase();
+    if (eraseParticle) {
+      // doSecondaries() makes sense only if there was an actual event
+      sequence_.doSecondaries(secondaries);
+      particle.erase();
+    }
   }
 
   template <typename TTracking, typename TProcessList, typename TOutput, typename TStack>