diff --git a/Documentation/Examples/staticsequence_example.cc b/Documentation/Examples/staticsequence_example.cc
index a7db0b283dc17a2774cadc9aa6df9a6d57bb1b0f..e118961bcfcbef701ced00e8d69bce43e705d416 100644
--- a/Documentation/Examples/staticsequence_example.cc
+++ b/Documentation/Examples/staticsequence_example.cc
@@ -88,24 +88,8 @@ modular()
   
   DummyData p;
   DummyStack s;
-
-#warning Look here for this very strange effect. The next lines of unrelated code determine if the compiler complains, or the code crashes. In particular the line highligted!
- 
-  
   DummyTrajectory t;
   
-  geometry::CoordinateSystem& rootCS = geometry::RootCoordinateSystem::GetInstance().GetRootCS();
-  corsika::geometry::Point pos(rootCS, 0_m, 0_m, 0_m);
-  corsika::geometry::Point pos2(rootCS, 0_m, 0_m, 0_m);
-  corsika::geometry::Point pos3(rootCS, 0_m, 0_m, 0_m);
-  corsika::geometry::Vector<units::si::speed_d> vec(rootCS, 1_m/1_s,0_m/1_s,0_m/1_s); // HIGHLIGHTED LINE 
-  // SpeedType::dimension_type
-  //corsika::geometry::Line traj(pos, vec);
-  //Trajectory t;//(corsika::geometry::Trajectory<corsika::geometry::Line>(traj, 100_ns));
-
-#warning ------- unitl here ------
-  
-  
   const int n = 1000;
   for (int i = 0; i < n; ++i) { sequence.DoContinuous(p, t, s); }
   
diff --git a/Framework/Cascade/Cascade.h b/Framework/Cascade/Cascade.h
index 64c6ae0da0e6be96adafb2f6c150df091e3551d0..148092081c4c610f02a6372ee033acc343ed106e 100644
--- a/Framework/Cascade/Cascade.h
+++ b/Framework/Cascade/Cascade.h
@@ -35,10 +35,6 @@ namespace corsika::cascade {
         : fTracking(tr)
         , fProcesseList(pl)
         , fStack(stack) {
-      // static_assert(std::is_member_function_pointer<decltype(&ProcessList::DoDiscrete)>::value,
-      //"ProcessList has not function DoDiscrete.");
-      // static_assert(std::is_member_function_pointer<decltype(&ProcessList::DoContinuous)>::value,
-      //	    "ProcessList has not function DoContinuous.");
     }
 
     void Init() {
@@ -65,7 +61,8 @@ namespace corsika::cascade {
 
       /// here the particle is actually moved along the trajectory to new position:
       // std::visit(corsika::setup::ParticleUpdate<Particle>{particle}, step);
-
+      particle.SetPosition(step.GetPosition(1));
+      
       corsika::process::EProcessReturn status =
           fProcesseList.DoContinuous(particle, step, fStack);
       if (status == corsika::process::EProcessReturn::eParticleAbsorbed) {
diff --git a/Framework/ProcessSequence/BaseProcess.h b/Framework/ProcessSequence/BaseProcess.h
index 95373237051e34afd4a0b9364a330b139adb998f..020607c20229618dc2ffacee55cbd82454c78197 100644
--- a/Framework/ProcessSequence/BaseProcess.h
+++ b/Framework/ProcessSequence/BaseProcess.h
@@ -29,6 +29,12 @@ namespace corsika::process {
   struct BaseProcess {
     derived& GetRef() { return static_cast<derived&>(*this); }
     const derived& GetRef() const { return static_cast<const derived&>(*this); }
+
+    template <typename Particle, typename Stack>
+    inline EProcessReturn DoDiscrete(Particle&, Stack&) const; // {}
+
+    template <typename Particle, typename Track, typename Stack>
+      inline EProcessReturn DoContinuous(Particle&, Track&, Stack&) const; // {}
   };
 
   /*
diff --git a/Framework/ProcessSequence/ContinuousProcess.h b/Framework/ProcessSequence/ContinuousProcess.h
index 763ba07bd5d3dae40d81323c4b164f749fc0f46a..98a4dde0cce8d4b3497292f27144fa3eee58d218 100644
--- a/Framework/ProcessSequence/ContinuousProcess.h
+++ b/Framework/ProcessSequence/ContinuousProcess.h
@@ -35,15 +35,7 @@ namespace corsika::process {
     // -> enforce derived to implement DoContinuous...
     template <typename D, typename T, typename S>
       inline EProcessReturn DoContinuous(D&, T&, S&) const;
-    
-    
-    // provide "empty" version of DoDiscrete
-    /*
-      template <typename Particle, typename Stack>
-      inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
-      return EProcessReturn::eOk;
-      } // find out how to make this FINAL
-    */
+        
   };
 
 
diff --git a/Framework/ProcessSequence/DiscreteProcess.h b/Framework/ProcessSequence/DiscreteProcess.h
index 4955ff68e72770ae1b86bd09f90a2dfd4e8da8e2..1c7b50c0c5566a37ab7bc5ac4038f2103cfc39c8 100644
--- a/Framework/ProcessSequence/DiscreteProcess.h
+++ b/Framework/ProcessSequence/DiscreteProcess.h
@@ -30,24 +30,14 @@ namespace corsika::process {
   template <typename derived>
   struct DiscreteProcess {
 
-    // DiscreteProcess() {
-    // static_assert(mustProvide<derived>::mustProvide, "");
-    //}
-
     derived& GetRef() { return static_cast<derived&>(*this); }
     const derived& GetRef() const { return static_cast<const derived&>(*this); }
 
-    // here starts the interface part
+    /// here starts the interface-definition part
     // -> enforce derived to implement DoDiscrete...
     template <typename Particle, typename Stack>
     inline EProcessReturn DoDiscrete(Particle&, Stack&) const; // {}
 
-    /*
-    template <typename D, typename S>
-      inline EProcessReturn DoContinuous(D&, corsika::setup::Trajectory&, S&) const {
-      return EProcessReturn::eOk;
-    } // find out how to make this FINAL
-    */
   };
 
 } // namespace corsika::process
diff --git a/Framework/ProcessSequence/testProcessSequence.cc b/Framework/ProcessSequence/testProcessSequence.cc
index d7b15e573ef12c993304b150ee3b99db611aa58f..305023eaf4db01da0eac9bc0730985a75e11b2c7 100644
--- a/Framework/ProcessSequence/testProcessSequence.cc
+++ b/Framework/ProcessSequence/testProcessSequence.cc
@@ -17,14 +17,7 @@
 #include <iomanip>
 #include <iostream>
 
-#include <corsika/geometry/RootCoordinateSystem.h>
-#include <corsika/geometry/Point.h>
-#include <corsika/geometry/Vector.h>
-
 #include <corsika/process/ProcessSequence.h>
-#include <corsika/setup/SetupTrajectory.h> // TODO: maybe try to break this dependency later!
-using corsika::setup::Trajectory;
-#include <corsika/units/PhysicalUnits.h>
 
 using namespace corsika;
 using namespace corsika::units::si;
@@ -33,67 +26,65 @@ using namespace std;
 
 static const int nData = 10;
 
+int globalCount = 0;
+
 class ContinuousProcess1 : public ContinuousProcess<ContinuousProcess1> {
+  int fV = 0;
 public:
-  ContinuousProcess1() {}
-  void Init() { cout << "ContinuousProcess1::Init" << endl; }
+  ContinuousProcess1(const int v) : fV(v) {}
+  void Init() {
+    cout << "ContinuousProcess1::Init" << endl;
+    assert (globalCount == fV);
+    globalCount++;
+  }
   template <typename D, typename T, typename S>
   inline EProcessReturn DoContinuous(D& d, T&, S&) const {
     cout << "ContinuousProcess1::DoContinuous" << endl;
     for (int i = 0; i < nData; ++i) d.p[i] += 0.933;
     return EProcessReturn::eOk;
   }
-
-  template <typename Particle, typename Stack>
-  inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
-    cout << "ContinuousProcess1::DoDiscrete" << endl;
-    return EProcessReturn::eOk;
-  }
 };
 
 class ContinuousProcess2 : public ContinuousProcess<ContinuousProcess2> {
+  int fV = 0;
 public:
-  ContinuousProcess2() {}
-  void Init() { cout << "ContinuousProcess2::Init" << endl; }
+  ContinuousProcess2(const int v) : fV(v) {}
+  void Init() { cout << "ContinuousProcess2::Init" << endl;
+      assert (globalCount == fV);
+    globalCount++;
+}
   template <typename D, typename T, typename S>
   inline EProcessReturn DoContinuous(D& d, T&, S&) const {
     cout << "ContinuousProcess2::DoContinuous" << endl;
     for (int i = 0; i < nData; ++i) d.p[i] += 0.933;
     return EProcessReturn::eOk;
   }
-
-  template <typename Particle, typename Stack>
-  inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
-    cout << "ContinuousProcess2::DoDiscrete" << endl;
-    return EProcessReturn::eOk;
-  }
 };
 
 class Process1 : public DiscreteProcess<Process1> {
 public:
-  Process1() {}
-  void Init() { cout << "Process1::Init" << endl; }
-  template <typename D, typename T, typename S>
-  inline EProcessReturn DoContinuous(D& d, T&, S&) const {
-    for (int i = 0; i < nData; ++i) d.p[i] += 1 + i;
-    return EProcessReturn::eOk;
+  Process1(const int v) : fV(v) {}
+  void Init() { cout << "Process1::Init" << endl;
+    assert (globalCount == fV);
+    globalCount++;
   }
-  template <typename Particle, typename Stack>
-  inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
-    cout << "Process1::DoDiscrete" << endl;
+  template <typename D, typename S>
+  inline EProcessReturn DoDiscrete(D& d, S&) const {
+    for (int i = 0; i < nData; ++i) d.p[i] += 1 + i;
     return EProcessReturn::eOk;
   }
+  //private:
+  int fV;
 };
 
 class Process2 : public DiscreteProcess<Process2> {
+  int fV = 0;
 public:
-  Process2() {}
-  void Init() { cout << "Process2::Init" << endl; }
-  template <typename D, typename T, typename S>
-  inline EProcessReturn DoContinuous(D& d, T&, S&) const {
-    for (int i = 0; i < nData; ++i) d.p[i] *= 0.7;
-    return EProcessReturn::eOk;
-  }
+  Process2(const int v) : fV(v) {}
+  void Init() { cout << "Process2::Init" << endl;
+      assert (globalCount == fV);
+    globalCount++;
+}
   template <typename Particle, typename Stack>
   inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
     cout << "Process2::DoDiscrete" << endl;
@@ -102,14 +93,13 @@ public:
 };
 
 class Process3 : public DiscreteProcess<Process3> {
+  int fV = 0;
 public:
-  Process3() {}
-  void Init() { cout << "Process3::Init" << endl; }
-  template <typename D, typename T, typename S>
-  inline EProcessReturn DoContinuous(D& d, T&, S&) const {
-    for (int i = 0; i < nData; ++i) d.p[i] += 0.933;
-    return EProcessReturn::eOk;
-  }
+  Process3(const int v) : fV(v) {}
+  void Init() { cout << "Process3::Init" << endl;
+      assert (globalCount == fV);
+    globalCount++;
+}
   template <typename Particle, typename Stack>
   inline EProcessReturn DoDiscrete(Particle&, Stack&) const {
     cout << "Process3::DoDiscrete" << endl;
@@ -118,50 +108,65 @@ public:
 };
 
 class Process4 : public BaseProcess<Process4> {
+  int fV = 0;
 public:
-  Process4() {}
-  void Init() { cout << "Process4::Init" << endl; }
+  Process4(const int v) : fV(v) {}
+  void Init() { cout << "Process4::Init" << endl;
+      assert (globalCount == fV);
+    globalCount++;
+}
   template <typename D, typename T, typename S>
   inline EProcessReturn DoContinuous(D& d, T&, S&) const {
     for (int i = 0; i < nData; ++i) {d.p[i] /= 1.2;}
     return EProcessReturn::eOk;
   }
   // inline double MinStepLength(D& d) {
-  // void DoDiscrete(Particle& p, Stack& s) const {
+  template<typename Particle, typename Stack>
+  EProcessReturn DoDiscrete(Particle&, Stack&) const { return EProcessReturn::eOk; }
 };
 
 struct DummyData {
   double p[nData] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 };
 struct DummyStack {};
+struct DummyTrajectory {};
 
-TEST_CASE("Cascade", "[Cascade]") {
-
-  SECTION("sectionTwo") {
+TEST_CASE("Process Sequence", "[Process Sequence]") {
 
-    Process1 m1;
-    Process2 m2;
-    Process3 m3;
-    Process4 m4;
+  SECTION("Check init order") {
+    Process1 m1(0);
+    Process2 m2(1);
+    Process3 m3(2);
+    Process4 m4(3);
 
     const auto sequence = m1 + m2 + m3 + m4;
 
-    ContinuousProcess1 cp1;
-    ContinuousProcess2 cp2;
+    globalCount = 0;
+    sequence.Init();
+    //REQUIRE_NOTHROW( (sequence.Init()) );
 
-    const auto sequence2 = cp1 + m2 + m3 + cp2;
+    //const auto sequence_wrong = m3 + m2 + m1 + m4;
+    //globalCount = 0;
+    //sequence_wrong.Init();
+    //REQUIRE_THROWS(sequence_wrong.Init());
+  }
 
-    geometry::CoordinateSystem& rootCS = geometry::RootCoordinateSystem::GetInstance().GetRootCS();
-    corsika::geometry::Point pos(rootCS, 0_m, 0_m, 0_m);
-    corsika::geometry::Vector<SpeedType::dimension_type> vec(rootCS, 1_m/1_s, 0_m/1_s, 0_m/1_s);
-    corsika::geometry::Line traj(pos, vec);
-    Trajectory t;//(corsika::geometry::Trajectory<corsika::geometry::Line>(traj, 100_ns));
+  
+  SECTION("sectionTwo") {
 
-    DummyData p;
-    DummyStack s;
+    ContinuousProcess1 cp1(0);
+    ContinuousProcess2 cp2(3);
+    Process2 m2(1);
+    Process3 m3(2);
 
+    const auto sequence2 = cp1 + m2 + m3 + cp2;
 
-    cout << "-->init" << endl;
+    DummyData p;
+    DummyStack s;
+    DummyTrajectory t;
+    
+    cout << "-->init sequence2" << endl;
+    globalCount = 0;
     sequence2.Init();
     cout << "-->docont" << endl;
 
@@ -170,14 +175,11 @@ TEST_CASE("Cascade", "[Cascade]") {
     sequence2.DoDiscrete(p, s);
     cout << "-->done" << endl;
 
-    sequence.Init();
-
     const int nLoop = 5;
     cout << "Running loop with n=" << nLoop << endl;
-    for (int i = 0; i < nLoop; ++i) { sequence.DoContinuous(p, t, s); }
+    for (int i = 0; i < nLoop; ++i) { sequence2.DoContinuous(p, t, s); sequence2.DoDiscrete(p, s); }
     for (int i = 0; i < nData; i++) { cout << "data[" << i << "]=" << p.p[i] << endl; }
     cout << "done" << endl;
   }
 
-  SECTION("sectionThree") {}
 }
diff --git a/Processes/StackInspector/StackInspector.cc b/Processes/StackInspector/StackInspector.cc
index b0acefc4a86c72acba373feafc82b7434aa2b9a0..8a4514e5983000d5d2e8278a399fe24e450a4f2d 100644
--- a/Processes/StackInspector/StackInspector.cc
+++ b/Processes/StackInspector/StackInspector.cc
@@ -32,7 +32,8 @@ template <typename Stack>
 StackInspector<Stack>::~StackInspector() {}
 
 template <typename Stack>
-process::EProcessReturn StackInspector<Stack>::DoContinuous(Particle&, setup::Trajectory&,
+process::EProcessReturn StackInspector<Stack>::DoContinuous(Particle&,
+							    setup::Trajectory&,
                                                             Stack& s) const {
   static int countStep = 0;
   if (!fReport) return EProcessReturn::eOk;
diff --git a/Processes/TrackingLine/TrackingLine.h b/Processes/TrackingLine/TrackingLine.h
index 2f35e2d08255330d70e46b8478a63382b469e961..e750342a1add1bff5e32bd270710e995d60ce4b0 100644
--- a/Processes/TrackingLine/TrackingLine.h
+++ b/Processes/TrackingLine/TrackingLine.h
@@ -24,8 +24,7 @@ namespace corsika::process {
       setup::Trajectory GetTrack(Particle& p) {
         geometry::Vector<SpeedType::dimension_type> v = p.GetDirection();
         geometry::Line traj(p.GetPosition(), v);
-	return setup::Trajectory();
-        //return geometry::Trajectory<corsika::geometry::Line>(traj, 100_ns);
+        return geometry::Trajectory<corsika::geometry::Line>(traj, 100_ns);
       }
     };
 
diff --git a/Setup/SetupTrajectory.h b/Setup/SetupTrajectory.h
index f30c55b7116183698fa9a397de1beb79dda43f95..fa630171970f68f6b85e2b416d9e4efbb607dfde 100644
--- a/Setup/SetupTrajectory.h
+++ b/Setup/SetupTrajectory.h
@@ -20,21 +20,19 @@
 
 #include <variant>
 
-struct TTTT {void blubb() {} };
-
 namespace corsika::setup {
   
   using corsika::geometry::Helix;
   using corsika::geometry::Line;
   
   /// definition of Trajectory base class, to be used in tracking and cascades
-  /*typedef std::variant<std::monostate, corsika::geometry::Trajectory<Line>,
-                       corsika::geometry::Trajectory<Helix>>
-		       Trajectory;*/
-  //typedef corsika::geometry::Trajectory<Line> Trajectory;
-  typedef TTTT Trajectory;
+  typedef corsika::geometry::Trajectory<Line> Trajectory;
   
   /*
+  typedef std::variant<std::monostate, corsika::geometry::Trajectory<Line>,
+                       corsika::geometry::Trajectory<Helix>>
+		       Trajectory;
+
   /// helper visitor to modify Particle by moving along Trajectory
   template <typename Particle>
   class ParticleUpdate {
diff --git a/Stack/SuperStupidStack/SuperStupidStack.h b/Stack/SuperStupidStack/SuperStupidStack.h
index 064edffa2c4497743cfd4a5e5ef2caca6c86860a..d1c8bc2b38622698b359afe8805d22403d99a4ed 100644
--- a/Stack/SuperStupidStack/SuperStupidStack.h
+++ b/Stack/SuperStupidStack/SuperStupidStack.h
@@ -89,8 +89,11 @@ namespace corsika::stack {
       void Init() {}
 
       void Clear() {
-        fDataE.clear();
         fDataPID.clear();
+        fDataE.clear();
+        fMomentum.clear();
+        fPosition.clear();
+        fTime.clear();
       }
 
       int GetSize() const { return fDataPID.size(); }