diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
index a37ced7d15fcdca0a8687fb9de7dd9ca96330099..fdc7069499e80599c92ef25e80b63b62d175be60 100644
--- a/Documentation/Examples/cascade_example.cc
+++ b/Documentation/Examples/cascade_example.cc
@@ -23,6 +23,8 @@
 #include <corsika/cascade/sibyll2.3c.h>
 #include <corsika/process/sibyll/ParticleConversion.h>
 
+#include <corsika/process/sibyll/ProcessDecay.h>
+
 #include <corsika/units/PhysicalUnits.h>
 
 using namespace corsika;
@@ -333,54 +335,6 @@ double s_rndm_(int&) {
   return rmng() / (double)rmng.max();
 }
 
-class ProcessDecay : public corsika::process::BaseProcess<ProcessDecay> {
-public:
-  ProcessDecay() {}
-  void Init() {}
-  
-  template <typename Particle>
-  double MinStepLength(Particle& p, setup::Trajectory&) const {
-    EnergyType E   = p.GetEnergy();
-    MassType m     = corsika::particles::GetMass(p.GetPID());
-    // env.GetDensity();
-    const MassDensityType density = 1.25e-3 * kilogram  / ( 1_cm * 1_cm * 1_cm ); 
-    
-    const double gamma = E / m / constants::cSquared;
-    // lifetimes not implemented yet
-    TimeType t0;
-    switch( p.GetPID() ){
-    case Code::PiPlus :
-      t0 = 2.6e-8 * 1_s;
-      break;
-      
-    case Code::KPlus :
-      t0 = 1.e-5 * 1_s;
-      break;
-      
-    default:
-      t0 = 1.e8 * 1_s;
-      break;
-    }
-    cout << "ProcessDecay: MinStep: t0: " << t0 << endl;
-    cout << "ProcessDecay: MinStep: gamma: " << gamma << endl;
-    cout << "ProcessDecay: MinStep: density: " << density << endl;
-    // return as column density
-    const double x0 = density * t0 * gamma * constants::c / kilogram * 1_cm * 1_cm;
-    cout << "ProcessDecay: MinStep: x0: " << x0 << endl;
-    return x0;
-  }
-  
-  template <typename Particle, typename Stack>
-  void DoDiscrete(Particle& p, Stack& s) const {
-  }
-  
-  template <typename Particle, typename Stack>
-  EProcessReturn DoContinuous(Particle&, setup::Trajectory&, Stack&) const {
-    return EProcessReturn::eOk;
-  }
-
-};
-
 
 int main() {
 
@@ -389,7 +343,7 @@ int main() {
   tracking_line::TrackingLine<setup::Stack> tracking;
   stack_inspector::StackInspector<setup::Stack> p0(true);
   ProcessSplit p1;
-  ProcessDecay p2;
+  corsika::process::sibyll::ProcessDecay p2;
   const auto sequence = p0 + p1 + p2;
   setup::Stack stack;
 
diff --git a/Processes/Sibyll/CMakeLists.txt b/Processes/Sibyll/CMakeLists.txt
index f2e4a9fee1aabbbb5196a597db36de06e6385594..a0985a1ad2304e7e5bd4f1024cf43b5cefaf8bc4 100644
--- a/Processes/Sibyll/CMakeLists.txt
+++ b/Processes/Sibyll/CMakeLists.txt
@@ -20,6 +20,7 @@ set (
 set (
   MODEL_HEADERS
   ParticleConversion.h
+  ProcessDecay.h
   ${PROJECT_BINARY_DIR}/Processes/Sibyll/Generated.inc
   )
 
diff --git a/Processes/Sibyll/ProcessDecay.h b/Processes/Sibyll/ProcessDecay.h
new file mode 100644
index 0000000000000000000000000000000000000000..20f493607d1dbff293caa6bedeedf52a16f59712
--- /dev/null
+++ b/Processes/Sibyll/ProcessDecay.h
@@ -0,0 +1,65 @@
+#ifndef _include_ProcessDecay_h_
+#define _include_ProcessDecay_h_
+
+#include <corsika/process/ContinuousProcess.h>
+
+#include <corsika/setup/SetupTrajectory.h>
+#include <corsika/process/sibyll/ParticleConversion.h>
+
+//using namespace corsika::particles;
+
+namespace corsika::process {
+
+  namespace sibyll {
+
+class ProcessDecay : public corsika::process::BaseProcess<ProcessDecay> {
+public:
+  ProcessDecay() {}
+  void Init() {}
+  
+  template <typename Particle>
+  double MinStepLength(Particle& p, setup::Trajectory&) const {
+    EnergyType E   = p.GetEnergy();
+    MassType m     = corsika::particles::GetMass(p.GetPID());
+    // env.GetDensity();
+    const MassDensityType density = 1.25e-3 * kilogram  / ( 1_cm * 1_cm * 1_cm ); 
+    
+    const double gamma = E / m / constants::cSquared;
+    // lifetimes not implemented yet
+    TimeType t0;
+    switch( p.GetPID() ){
+    case corsika::particles::Code::PiPlus :
+      t0 = 2.6e-8 * 1_s;
+      break;
+      
+    case corsika::particles::Code::KPlus :
+      t0 = 1.e-5 * 1_s;
+      break;
+      
+    default:
+      t0 = 1.e8 * 1_s;
+      break;
+    }
+    cout << "ProcessDecay: MinStep: t0: " << t0 << endl;
+    cout << "ProcessDecay: MinStep: gamma: " << gamma << endl;
+    cout << "ProcessDecay: MinStep: density: " << density << endl;
+    // return as column density
+    const double x0 = density * t0 * gamma * constants::c / kilogram * 1_cm * 1_cm;
+    cout << "ProcessDecay: MinStep: x0: " << x0 << endl;
+    return x0;
+  }
+  
+  template <typename Particle, typename Stack>
+  void DoDiscrete(Particle& p, Stack& s) const {
+  }
+  
+  template <typename Particle, typename Stack>
+  EProcessReturn DoContinuous(Particle&, setup::Trajectory&, Stack&) const {
+    return EProcessReturn::eOk;
+  }
+
+};
+  }
+}
+
+#endif