diff --git a/Documentation/Examples/geometry_example.cc b/Documentation/Examples/geometry_example.cc
index 9c459db161a116047b87e1ffd18e00c753fef374..6a05974fd6d5e0224d809072b99979e29578f7d2 100644
--- a/Documentation/Examples/geometry_example.cc
+++ b/Documentation/Examples/geometry_example.cc
@@ -9,7 +9,7 @@
 #include <typeinfo>
 
 using namespace corsika::geometry;
-using namespace corsika::units;
+using namespace corsika::units::si;
 
 int main() {
   // define the root coordinate system
diff --git a/Documentation/Examples/helix_example.cc b/Documentation/Examples/helix_example.cc
index 5caf35a43cf7d7a225161c02c4ecacf6a35475f5..9d6cdb23c5de0e2f4dd879cc63179a0ba3dd6ab7 100644
--- a/Documentation/Examples/helix_example.cc
+++ b/Documentation/Examples/helix_example.cc
@@ -8,7 +8,7 @@
 #include <iostream>
 
 using namespace corsika::geometry;
-using namespace corsika::units;
+using namespace corsika::units::si;
 
 int main() {
 
diff --git a/Documentation/Examples/stack_example.cc b/Documentation/Examples/stack_example.cc
index e70b7e6c85231ff141c16dcdb8f8dcacf0aaebbe..691cdb38440e916ee97f637705ea2bbfe3db89ba 100644
--- a/Documentation/Examples/stack_example.cc
+++ b/Documentation/Examples/stack_example.cc
@@ -7,7 +7,7 @@ using namespace std;
 // using namespace corsika::literals;
 // using namespace corsika::io;
 
-using namespace corsika::units;
+using namespace corsika::units::si;
 using namespace corsika::stack;
 
 void fill(corsika::stack::super_stupid::SuperStupidStack& s) {
diff --git a/Framework/Cascade/Cascade.h b/Framework/Cascade/Cascade.h
index 8c29a77987316d40f1aebf6df392f1abf581e446..3ef8ce9289cd1240e1d9897ddf87e881fb447c1a 100644
--- a/Framework/Cascade/Cascade.h
+++ b/Framework/Cascade/Cascade.h
@@ -5,7 +5,7 @@
 #include <corsika/geometry/Point.h>          // to be removed
 #include <corsika/units/PhysicalUnits.h>
 
-using namespace corsika::units;
+using namespace corsika::units::si;
 
 namespace corsika::cascade {
 
@@ -27,8 +27,20 @@ namespace corsika::cascade {
     void Run() {
       while (!fStack.IsEmpty()) {
         while (!fStack.IsEmpty()) {
-          Particle& p = *fStack.GetNextParticle();
-          Step(p);
+          //Particle& p = *fStack.GetNextParticle();
+ 	  EnergyType Emin;
+	  typename Stack::StackIterator pMin(fStack, 0);
+	  bool first = true;
+	  for (typename Stack::StackIterator ip = fStack.begin(); ip!=fStack.end(); ++ip) 
+	    {
+	      if (first || ip.GetEnergy()<Emin) {
+		first = false;
+		pMin = ip;
+		Emin = pMin.GetEnergy();
+	      }
+	    }
+	  
+          Step(pMin);
         }
         // do cascade equations, which can put new particles on Stack,
         // thus, the double loop
@@ -41,7 +53,7 @@ namespace corsika::cascade {
       corsika::geometry::CoordinateSystem root;
       Trajectory trajectory(
           corsika::geometry::Point(root, {0_m, 0_m, 0_m}),
-          corsika::geometry::Vector<corsika::units::SpeedType::dimension_type>(
+          corsika::geometry::Vector<corsika::units::si::SpeedType::dimension_type>(
               root, 0 * 1_m / second, 0 * 1_m / second, 1 * 1_m / second));
       fProcesseList.DoContinuous(particle, trajectory, fStack);
       // if (particle.IsMarkedToBeDeleted())
diff --git a/Framework/Cascade/testCascade.cc b/Framework/Cascade/testCascade.cc
index 3f9f1b0fcc61ae6764adb13424fc447dfc2a5d7e..7e0bd76ba6e94655dc8c3a4c83c06c1acd87c7a5 100644
--- a/Framework/Cascade/testCascade.cc
+++ b/Framework/Cascade/testCascade.cc
@@ -13,6 +13,8 @@ using namespace corsika::units;
 #include <iostream>
 using namespace std;
 
+static int fCount = 0;
+
 class ProcessSplit : public corsika::process::BaseProcess<ProcessSplit> {
 public:
   ProcessSplit() {}
@@ -28,13 +30,13 @@ public:
   template <typename Particle, typename Stack>
   void DoDiscrete(Particle& p, Stack& s) const {
     EnergyType E = p.GetEnergy();
-    if (E < 1_GeV) {
+    if (E < 85_MeV) {
       p.Delete();
       fCount++;
     } else {
       p.SetEnergy(E / 2);
       s.NewParticle().SetEnergy(E / 2);
-    }
+    }    
   }
 
   void Init() { fCount = 0; }
@@ -42,7 +44,6 @@ public:
   int GetCount() { return fCount; }
 
 private:
-  mutable int fCount = 0;
 };
 
 class ProcessReport : public corsika::process::BaseProcess<ProcessReport> {
@@ -59,17 +60,22 @@ public:
 
   template <typename Particle, typename Trajectory, typename Stack>
   void DoContinuous(Particle& p, Trajectory& t, Stack& s) const {
+    static int countStep = 0;
     if (!fReport) return;
-    static int fCount = 0;
-    std::cout << "generation  " << fCount << std::endl;
+    //std::cout << "generation  " << countStep << std::endl;
     int i = 0;
+    EnergyType Etot = 0_GeV;
     for (auto& iterP : s) {
       EnergyType E = iterP.GetEnergy();
-      std::cout << " particle data: " << i++ << ", id=" << iterP.GetPID()
+      Etot += E;
+      /*      std::cout << " particle data: " << i++ << ", id=" << iterP.GetPID()
                 << ", E=" << double(E / 1_GeV) << " GeV "
                 << " | " << std::endl;
+      */
     }
-    fCount++;
+    countStep++;
+    //cout << "#=" << countStep << " " << s.GetSize() << " " << Etot/1_GeV << endl;
+    cout << countStep << " " << s.GetSize() << " " << Etot/1_GeV << " " << fCount << endl;
   }
 
   template <typename Particle, typename Stack>
@@ -79,25 +85,32 @@ public:
 
 TEST_CASE("Cascade", "[Cascade]") {
 
-  ProcessReport p0(false);
+  ProcessReport p0(true);
   ProcessSplit p1;
   const auto sequence = p0 + p1;
   corsika::stack::super_stupid::SuperStupidStack stack;
-
+  
   corsika::cascade::Cascade<corsika::geometry::LineTrajectory, decltype(sequence),
                             decltype(stack)>
       EAS(sequence, stack);
 
+  stack.Clear();
+  auto particle = stack.NewParticle();
+  EnergyType E0 = 100_GeV;
+  particle.SetEnergy(E0);
+  EAS.Init();
+  EAS.Run();
+
   SECTION("sectionTwo") {
-    for (int i = 0; i < 5; ++i) {
+    for (int i = 0; i < 0; ++i) {
       stack.Clear();
       auto particle = stack.NewParticle();
       EnergyType E0 = 100_GeV * pow(10, i);
       particle.SetEnergy(E0);
       EAS.Init();
       EAS.Run();
-
-      cout << "E0=" << E0 / 1_GeV << "GeV, count=" << p1.GetCount() << endl;
+       
+      //cout << "Result: E0=" << E0 / 1_GeV << "GeV, count=" << p1.GetCount() << endl;
     }
   }
 }
diff --git a/Framework/Geometry/BaseTrajectory.h b/Framework/Geometry/BaseTrajectory.h
index ec5e4062cfe2be63d1f7be83bdb4a3e02cc1d596..485e4b734d960e77f332a3b09146215af0e7ac6e 100644
--- a/Framework/Geometry/BaseTrajectory.h
+++ b/Framework/Geometry/BaseTrajectory.h
@@ -15,7 +15,7 @@ namespace corsika::geometry {
 
   public:
     //!< t for \f$ t = 0 \f$, the starting Point shall be returned.
-    virtual Point GetPosition(corsika::units::TimeType t) const = 0;
+    virtual Point GetPosition(corsika::units::si::TimeType t) const = 0;
   };
 
 } // namespace corsika::geometry
diff --git a/Framework/Geometry/CoordinateSystem.h b/Framework/Geometry/CoordinateSystem.h
index b8a7afc25be0f3ab800fd7d4f4a69ae9646578e1..d30e9b4389ad772de241446bf1eb1c22b5e301e9 100644
--- a/Framework/Geometry/CoordinateSystem.h
+++ b/Framework/Geometry/CoordinateSystem.h
@@ -10,7 +10,7 @@ typedef Eigen::Translation<double, 3> EigenTranslation;
 
 namespace corsika::geometry {
 
-  using corsika::units::length_d;
+  using corsika::units::si::length_d;
 
   class CoordinateSystem {
     CoordinateSystem const* reference = nullptr;
diff --git a/Framework/Geometry/Helix.h b/Framework/Geometry/Helix.h
index 29bb49438f23387413094c8319486db8eea67e70..af92a68a5bb1e0bfae39390e46e14eafb7b68bf7 100644
--- a/Framework/Geometry/Helix.h
+++ b/Framework/Geometry/Helix.h
@@ -21,17 +21,17 @@ namespace corsika::geometry {
    */
 
   class Helix : public BaseTrajectory {
-    using VelocityVec = Vector<corsika::units::SpeedType::dimension_type>;
+    using VelocityVec = Vector<corsika::units::si::SpeedType::dimension_type>;
 
     Point const r0;
-    corsika::units::FrequencyType const omegaC;
+    corsika::units::si::FrequencyType const omegaC;
     VelocityVec const vPar;
     VelocityVec const vPerp, uPerp;
 
-    corsika::units::LengthType const radius;
+    corsika::units::si::LengthType const radius;
 
   public:
-    Helix(Point const& pR0, corsika::units::FrequencyType pOmegaC,
+    Helix(Point const& pR0, corsika::units::si::FrequencyType pOmegaC,
           VelocityVec const& pvPar, VelocityVec const& pvPerp)
         : r0(pR0)
         , omegaC(pOmegaC)
@@ -40,7 +40,7 @@ namespace corsika::geometry {
         , uPerp(vPerp.cross(vPar.normalized()))
         , radius(pvPar.norm() / abs(pOmegaC)) {}
 
-    Point GetPosition(corsika::units::TimeType t) const {
+    Point GetPosition(corsika::units::si::TimeType t) const {
       return r0 + vPar * t +
              (vPerp * (cos(omegaC * t) - 1) + uPerp * sin(omegaC * t)) / omegaC;
     }
diff --git a/Framework/Geometry/LineTrajectory.h b/Framework/Geometry/LineTrajectory.h
index 556da4642c52689c492fbd619863a3bfc0729d99..b3aa4423eff2488fd5f2b80d034cb692c4a884ba 100644
--- a/Framework/Geometry/LineTrajectory.h
+++ b/Framework/Geometry/LineTrajectory.h
@@ -9,7 +9,7 @@
 namespace corsika::geometry {
 
   class LineTrajectory : public BaseTrajectory {
-    using VelocityVec = Vector<corsika::units::SpeedType::dimension_type>;
+    using VelocityVec = Vector<corsika::units::si::SpeedType::dimension_type>;
 
     Point const r0;
     VelocityVec const v0;
@@ -19,7 +19,7 @@ namespace corsika::geometry {
         : r0(pR0)
         , v0(pV0) {}
 
-    Point GetPosition(corsika::units::TimeType t) const override { return r0 + v0 * t; }
+    Point GetPosition(corsika::units::si::TimeType t) const override { return r0 + v0 * t; }
   };
 
 } // namespace corsika::geometry
diff --git a/Framework/Geometry/Point.h b/Framework/Geometry/Point.h
index 108fe87f4aadd5339d93160a0b5f0efaab80199a..debbf91854abdb1852052d487981400d4966da8a 100644
--- a/Framework/Geometry/Point.h
+++ b/Framework/Geometry/Point.h
@@ -8,8 +8,8 @@
 
 namespace corsika::geometry {
 
-  using corsika::units::length_d;
-  using corsika::units::LengthType;
+  using corsika::units::si::length_d;
+  using corsika::units::si::LengthType;
 
   /*!
    * A Point represents a point in position space. It is defined by its
diff --git a/Framework/Geometry/QuantityVector.h b/Framework/Geometry/QuantityVector.h
index 671a6856092a0811aaf5d407ef68b0f7fbd37e4f..6066e1d50fa181fd653217b115e2afe7b79a764b 100644
--- a/Framework/Geometry/QuantityVector.h
+++ b/Framework/Geometry/QuantityVector.h
@@ -8,17 +8,18 @@
 #include <iostream>
 #include <utility>
 
-namespace corsika {
+namespace corsika::geometry {
 
   /*!
    * A QuantityVector is a three-component container based on Eigen::Vector3d
-   * with a phys::units::dimension. Arithmethic operators are defined that
+   * with a phys::units::si::dimension. Arithmethic operators are defined that
    * propagate the dimensions by dimensional analysis.
    */
-
+  
   template <typename dim>
   class QuantityVector {
   protected:
+    // todo: check if we need to move "quantity" into namespace corsika::units 
     using Quantity = phys::units::quantity<dim, double>; //< the phys::units::quantity
                                                          // corresponding to the dimension
 
@@ -108,7 +109,7 @@ namespace corsika {
 } // end namespace corsika
 
 template <typename dim>
-auto& operator<<(std::ostream& os, corsika::QuantityVector<dim> qv) {
+auto& operator<<(std::ostream& os, corsika::geometry::QuantityVector<dim> qv) {
   using Quantity = phys::units::quantity<dim, double>;
 
   os << '(' << qv.eVector(0) << ' ' << qv.eVector(1) << ' ' << qv.eVector(2) << ") "
diff --git a/Framework/Geometry/Trajectory.h b/Framework/Geometry/Trajectory.h
index 8a640cacd027510a64d0c574c48e66dbe11fd1d9..5c8cc739deb2e40cafd4642ff9fedf04031f1ecd 100644
--- a/Framework/Geometry/Trajectory.h
+++ b/Framework/Geometry/Trajectory.h
@@ -7,17 +7,17 @@
 namespace corsika::geometry {
 
   class Trajectory {
-    corsika::units::TimeType const fTStart, fTEnd;
+    corsika::units::si::TimeType const fTStart, fTEnd;
     BaseTrajectory const& fTrajectory;
 
   public:
-    Trajectory(corsika::units::TimeType pTStart, corsika::units::TimeType pTEnd,
+  Trajectory(corsika::units::si::TimeType pTStart, corsika::units::si::TimeType pTEnd,
                BaseTrajectory const& pTrajectory)
         : fTStart(pTStart)
         , fTEnd(pTEnd)
         , fTrajectory(pTrajectory) {}
 
-    Point GetPosition(corsika::units::TimeType t) const {
+    Point GetPosition(corsika::units::si::TimeType t) const {
       return fTrajectory.GetPosition(t + fTStart);
     }
 
diff --git a/Framework/Geometry/testGeometry.cc b/Framework/Geometry/testGeometry.cc
index 469d2dec68643215ac7a0d33bb55edbee3e211ad..ac444ef162a220ea92d51b240bd160d0d50694af 100644
--- a/Framework/Geometry/testGeometry.cc
+++ b/Framework/Geometry/testGeometry.cc
@@ -12,10 +12,10 @@
 #include <cmath>
 
 using namespace corsika::geometry;
-using namespace corsika::units;
+using namespace corsika::units::si;
 
 double constexpr absMargin = 1.0e-8;
-;
+
 
 TEST_CASE("transformations between CoordinateSystems") {
   CoordinateSystem rootCS;
@@ -23,10 +23,10 @@ TEST_CASE("transformations between CoordinateSystems") {
   REQUIRE(CoordinateSystem::GetTransformation(rootCS, rootCS)
               .isApprox(EigenTransform::Identity()));
 
-  corsika::QuantityVector<length_d> const coordinates{0_m, 0_m, 0_m};
+  QuantityVector<length_d> const coordinates{0_m, 0_m, 0_m};
   Point p1(rootCS, coordinates);
 
-  corsika::QuantityVector<magnetic_flux_density_d> components{1. * tesla, 0. * tesla,
+  QuantityVector<magnetic_flux_density_d> components{1. * tesla, 0. * tesla,
                                                               0. * tesla};
   Vector<magnetic_flux_density_d> v1(rootCS, components);
 
@@ -41,7 +41,7 @@ TEST_CASE("transformations between CoordinateSystems") {
   }
 
   SECTION("translations") {
-    corsika::QuantityVector<length_d> const translationVector{0_m, 4_m, 0_m};
+    QuantityVector<length_d> const translationVector{0_m, 4_m, 0_m};
 
     CoordinateSystem translatedCS = rootCS.translate(translationVector);
 
@@ -61,13 +61,13 @@ TEST_CASE("transformations between CoordinateSystems") {
   }
 
   SECTION("multiple translations") {
-    corsika::QuantityVector<length_d> const tv1{0_m, 5_m, 0_m};
+    QuantityVector<length_d> const tv1{0_m, 5_m, 0_m};
     CoordinateSystem cs2 = rootCS.translate(tv1);
 
-    corsika::QuantityVector<length_d> const tv2{3_m, 0_m, 0_m};
+    QuantityVector<length_d> const tv2{3_m, 0_m, 0_m};
     CoordinateSystem cs3 = rootCS.translate(tv2);
 
-    corsika::QuantityVector<length_d> const tv3{0_m, 0_m, 2_m};
+    QuantityVector<length_d> const tv3{0_m, 0_m, 2_m};
     CoordinateSystem cs4 = cs3.translate(tv3);
 
     REQUIRE(cs4.GetReference()->GetReference() == &rootCS);
@@ -79,7 +79,7 @@ TEST_CASE("transformations between CoordinateSystems") {
   }
 
   SECTION("rotations") {
-    corsika::QuantityVector<length_d> const axis{0_m, 0_m, 1_km};
+    QuantityVector<length_d> const axis{0_m, 0_m, 1_km};
     double const angle = 90. / 180. * M_PI;
 
     CoordinateSystem rotatedCS = rootCS.rotate(axis, angle);
@@ -94,9 +94,9 @@ TEST_CASE("transformations between CoordinateSystems") {
   }
 
   SECTION("multiple rotations") {
-    corsika::QuantityVector<length_d> const zAxis{0_m, 0_m, 1_km};
-    corsika::QuantityVector<length_d> const yAxis{0_m, 7_nm, 0_m};
-    corsika::QuantityVector<length_d> const xAxis{2_m, 0_nm, 0_m};
+    QuantityVector<length_d> const zAxis{0_m, 0_m, 1_km};
+    QuantityVector<length_d> const yAxis{0_m, 7_nm, 0_m};
+    QuantityVector<length_d> const xAxis{2_m, 0_nm, 0_m};
 
     double const angle = 90. / 180. * M_PI;
 
@@ -133,7 +133,7 @@ TEST_CASE("Trajectories") {
 
     LineTrajectory const lineTrajectory(r0, v0);
     CHECK((lineTrajectory.GetPosition(2_s).GetCoordinates() -
-           corsika::QuantityVector<length_d>(2_m, 0_m, 0_m))
+           QuantityVector<length_d>(2_m, 0_m, 0_m))
               .norm()
               .magnitude() == Approx(0).margin(absMargin));
 
@@ -151,12 +151,12 @@ TEST_CASE("Trajectories") {
     Helix const helix(r0, omegaC, vPar, vPerp);
 
     CHECK((helix.GetPosition(1_s).GetCoordinates() -
-           corsika::QuantityVector<length_d>(0_m, 0_m, 4_m))
+           QuantityVector<length_d>(0_m, 0_m, 4_m))
               .norm()
               .magnitude() == Approx(0).margin(absMargin));
 
     CHECK((helix.GetPosition(0.25_s).GetCoordinates() -
-           corsika::QuantityVector<length_d>(-1_m / (2 * M_PI), -1_m / (2 * M_PI), 1_m))
+           QuantityVector<length_d>(-1_m / (2 * M_PI), -1_m / (2 * M_PI), 1_m))
               .norm()
               .magnitude() == Approx(0).margin(absMargin));
 
diff --git a/Framework/Particles/ParticleProperties.h b/Framework/Particles/ParticleProperties.h
index 23ef2369886f8b102f973c89dd921c0aab731e28..9e3c557d6df2662e3bf3ae58f8121bf51f4ce164 100644
--- a/Framework/Particles/ParticleProperties.h
+++ b/Framework/Particles/ParticleProperties.h
@@ -31,8 +31,8 @@ namespace corsika::particles {
 
   // forward declarations to be used in GeneratedParticleProperties
   int16_t constexpr GetElectricChargeNumber(Code const);
-  corsika::units::ElectricChargeType constexpr GetElectricCharge(Code const);
-  corsika::units::MassType constexpr GetMass(Code const);
+  corsika::units::si::ElectricChargeType constexpr GetElectricCharge(Code const);
+  corsika::units::si::MassType constexpr GetMass(Code const);
   PDGCodeType constexpr GetPDG(Code const);
   std::string const GetName(Code const);
 
@@ -41,7 +41,7 @@ namespace corsika::particles {
   /*!
    * returns mass of particle
    */
-  corsika::units::MassType constexpr GetMass(Code const p) {
+  corsika::units::si::MassType constexpr GetMass(Code const p) {
     return masses[static_cast<CodeIntType const>(p)];
   }
 
@@ -56,8 +56,8 @@ namespace corsika::particles {
     return electric_charges[static_cast<CodeIntType const>(p)];
   }
 
-  corsika::units::ElectricChargeType constexpr GetElectricCharge(Code const p) {
-    return GetElectricChargeNumber(p) * (corsika::units::constants::e / 3.);
+  corsika::units::si::ElectricChargeType constexpr GetElectricCharge(Code const p) {
+    return GetElectricChargeNumber(p) * (corsika::units::si::constants::e / 3.);
   }
 
   std::string const GetName(Code const p) {
diff --git a/Framework/Particles/pdxml_reader.py b/Framework/Particles/pdxml_reader.py
index 4c271e8fbbcf4b8030b7f6df86f6ae8831681f83..8f39bd7ef193ece82395bc7849f7cb89aa891503 100755
--- a/Framework/Particles/pdxml_reader.py
+++ b/Framework/Particles/pdxml_reader.py
@@ -216,9 +216,9 @@ def gen_properties(pythia_db):
     string += "\n"
     
     # particle masses table
-    string += "static constexpr std::array<corsika::units::MassType const, size> masses = {\n"    
+    string += "static constexpr std::array<corsika::units::si::MassType const, size> masses = {\n"    
     for p in pythia_db.values():
-        string += "  {mass:f} * (1e9 * corsika::units::constants::eV / corsika::units::constants::cSquared), // {name:s}\n".format(mass = p['mass'], name = p['name'])              
+        string += "  {mass:f} * (1e9 * corsika::units::si::constants::eV / corsika::units::si::constants::cSquared), // {name:s}\n".format(mass = p['mass'], name = p['name'])              
     string += "};\n\n"
                    
     # PDG code table
@@ -279,8 +279,8 @@ def gen_classes(pythia_db):
         string += "class " + cname + " {\n"
         string += "  public:\n"
         string += "   static constexpr Code GetCode() { return Type; }\n"
-        string += "   static constexpr corsika::units::MassType GetMass() { return corsika::particles::GetMass(Type); }\n"
-        string += "   static constexpr corsika::units::ElectricChargeType GetCharge() { return corsika::particles::GetElectricCharge(Type); }\n"
+        string += "   static constexpr corsika::units::si::MassType GetMass() { return corsika::particles::GetMass(Type); }\n"
+        string += "   static constexpr corsika::units::si::ElectricChargeType GetCharge() { return corsika::particles::GetElectricCharge(Type); }\n"
         string += "   static constexpr int16_t GetChargeNumber() { return corsika::particles::GetElectricChargeNumber(Type); }\n"
         string += "   static std::string const GetName() { return corsika::particles::GetName(Type); }\n"
         string += "   static constexpr Code GetAntiParticle() { return AntiType; }\n"
diff --git a/Framework/Particles/testParticles.cc b/Framework/Particles/testParticles.cc
index 12947cb32689bbe9da1cc211a19d1b474039bff9..5e80d0081ed824408484fa38cdb50789df7a6528 100644
--- a/Framework/Particles/testParticles.cc
+++ b/Framework/Particles/testParticles.cc
@@ -6,7 +6,7 @@
                           // cpp file
 #include <catch2/catch.hpp>
 
-using namespace corsika::units;
+using namespace corsika::units::si;
 using namespace corsika::particles;
 
 TEST_CASE("ParticleProperties", "[Particles]") {
diff --git a/Framework/StackInterface/StackIterator.h b/Framework/StackInterface/StackIterator.h
index 8137e9b53b8268679cdcb936c477cba914cb9c8e..a6ca8bed67c4d25fbbd97abab1bda1bb3157e9ec 100644
--- a/Framework/StackInterface/StackIterator.h
+++ b/Framework/StackInterface/StackIterator.h
@@ -63,9 +63,12 @@ namespace corsika::stack {
     StackIteratorInterface(const StackIteratorInterface& mit)
         : fData(mit.fData)
         , fIndex(mit.fIndex) {}
+    
+  public:
     StackIteratorInterface& operator=(const StackIteratorInterface& mit) {
       fData = mit.fData;
       fIndex = mit.fIndex;
+      return *this;
     }
 
   public:
diff --git a/Framework/Units/PhysicalConstants.h b/Framework/Units/PhysicalConstants.h
index 5c1b3a91c8bce590416b1889e1021a3e00dcfca9..7add499dd5b000172de38da22074e5427ce36b76 100644
--- a/Framework/Units/PhysicalConstants.h
+++ b/Framework/Units/PhysicalConstants.h
@@ -27,7 +27,7 @@
 
 #include <phys/units/quantity.hpp>
 
-namespace corsika::units::constants {
+namespace corsika::units::si::constants {
 
   using namespace phys::units;
 
@@ -56,6 +56,6 @@ namespace corsika::units::constants {
 
   // etc.
 
-} // namespace corsika::units::constants
+} // namespace corsika::units::si::constants
 
 #endif // PHYS_UNITS_PHYSICAL_CONSTANTS_HPP_INCLUDED
diff --git a/Framework/Units/PhysicalUnits.h b/Framework/Units/PhysicalUnits.h
index c1cf07bb9c05e4b74ff26e7ad4da48d1a22e5ca1..23dbbb871dc7d5b2cd2d8538c2bbe7c6197c6812 100644
--- a/Framework/Units/PhysicalUnits.h
+++ b/Framework/Units/PhysicalUnits.h
@@ -16,7 +16,7 @@ namespace phys {
   namespace units {
     namespace literals {
       QUANTITY_DEFINE_SCALING_LITERALS(eV, energy_d,
-                                       magnitude(corsika::units::constants::eV))
+                                       magnitude(corsika::units::si::constants::eV))
 
       // phys::units::quantity<energy_d/mass_d> Joule2Kg = c2; // 1_Joule / 1_kg;
 
@@ -24,7 +24,7 @@ namespace phys {
   }   // namespace units
 } // namespace phys
 
-namespace corsika::units {
+namespace corsika::units::si {
   using namespace phys::units;
   using namespace phys::units::literals;
   // namespace literals = phys::units::literals;
@@ -38,7 +38,7 @@ namespace corsika::units {
   using EnergyType = phys::units::quantity<phys::units::energy_d, double>;
   using MassType = phys::units::quantity<phys::units::mass_d, double>;
 
-} // end namespace corsika::units
+} // end namespace corsika::units::si
 
 // we want to call the operator<< without namespace... I think
 using namespace phys::units::io;
diff --git a/Framework/Units/testUnits.cc b/Framework/Units/testUnits.cc
index 619ef5d6cf2f1ebc210b1c5481ef1f6e1619733d..6e77e4a01e62d2e5cd63e6ad286982fca6ef1766 100644
--- a/Framework/Units/testUnits.cc
+++ b/Framework/Units/testUnits.cc
@@ -6,7 +6,7 @@
 
 #include <array>
 
-using namespace corsika::units;
+using namespace corsika::units::si;
 
 TEST_CASE("PhysicalUnits", "[Units]") {
 
diff --git a/Stack/DummyStack/SuperStupidStack.h b/Stack/DummyStack/SuperStupidStack.h
index a4e931b3949d25d10968c3134ffcd52671f809f7..c1b9215d08c96d6c5f3ca5923718bd64df9ff12a 100644
--- a/Stack/DummyStack/SuperStupidStack.h
+++ b/Stack/DummyStack/SuperStupidStack.h
@@ -13,8 +13,8 @@ namespace corsika::stack {
   namespace super_stupid {
 
     using corsika::particles::Code;
-    using corsika::units::EnergyType;
-    using corsika::units::operator""_GeV; // literals;
+    using corsika::units::si::EnergyType;
+    using corsika::units::si::operator""_GeV; // literals;
 
     /**
      * Example of a particle object on the stack.
diff --git a/Stack/SuperStupidStack/SuperStupidStack.h b/Stack/SuperStupidStack/SuperStupidStack.h
index 2ab8ea790f889cb49035b3904b020fd2fab0debc..a09fe930f5546f807e282376a1afd7ef776b6fc1 100644
--- a/Stack/SuperStupidStack/SuperStupidStack.h
+++ b/Stack/SuperStupidStack/SuperStupidStack.h
@@ -12,8 +12,8 @@ namespace corsika::stack {
   namespace super_stupid {
 
     using corsika::particles::Code;
-    using corsika::units::EnergyType;
-    using corsika::units::operator""_GeV; // literals;
+    using corsika::units::si::EnergyType;
+    using corsika::units::si::operator""_GeV; // literals;
 
     /**
      * Example of a particle object on the stack.