diff --git a/Processes/UrQMD/UrQMD.cc b/Processes/UrQMD/UrQMD.cc
index 1953d4a35a796563566bff13d70d97c510553b36..fba5dc1833be9f813d14b6dfd9cb3c872192594c 100644
--- a/Processes/UrQMD/UrQMD.cc
+++ b/Processes/UrQMD/UrQMD.cc
@@ -170,8 +170,7 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& vProjecti
     rsys_.ebeam = (projectileEnergyLab - vProjectile.GetMass()) * (1 / 1_GeV);
 
     if (projectileCode == particles::Code::K0Long) {
-      std::uniform_int_distribution dist(0, 1);
-      projectileCode = (dist(fRNG) == 1) ? particles::Code::K0 : particles::Code::K0Bar;
+      projectileCode = fBooleanDist(fRNG) ? particles::Code::K0 : particles::Code::K0Bar;
     } else if (projectileCode == particles::Code::K0Short) {
       throw std::runtime_error("K0Short should not interact");
     }
@@ -205,7 +204,11 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& vProjecti
       originalCS.RotateToZ(projectileMomentumLab);
 
   for (int i = 0; i < sys_.npart; ++i) {
-    auto const code = ConvertFromUrQMD(isys_.ityp[i], isys_.iso3[i]);
+    auto code = ConvertFromUrQMD(isys_.ityp[i], isys_.iso3[i]);
+    if (code == particles::Code::K0 || code == particles::Code::K0Bar) {
+      code = fBooleanDist(fRNG) ? particles::Code::K0Short : particles::Code::K0Long;
+    }
+
     // "coor_.p0[i] * 1_GeV" is likely off-shell as UrQMD doesn't preserve masses well
     auto momentum = geometry::Vector(
         zAxisFrame,
diff --git a/Processes/UrQMD/UrQMD.h b/Processes/UrQMD/UrQMD.h
index c1af956f96696618c60fb7cfa6af88c93c765c87..bdbca146ea015ce66174b7c2b2b99f619636c466 100644
--- a/Processes/UrQMD/UrQMD.h
+++ b/Processes/UrQMD/UrQMD.h
@@ -18,6 +18,7 @@
 #include <corsika/units/PhysicalUnits.h>
 
 #include <array>
+#include <random>
 #include <utility>
 
 namespace corsika::process::UrQMD {
@@ -42,6 +43,8 @@ namespace corsika::process::UrQMD {
         particles::Code, particles::Code, corsika::units::si::HEPEnergyType, int);
     corsika::random::RNG& fRNG =
         corsika::random::RNGManager::GetInstance().GetRandomStream("UrQMD");
+
+    std::uniform_int_distribution<int> fBooleanDist{0, 1};
   };
 
   namespace constants {