diff --git a/applications/c8_air_shower.cpp b/applications/c8_air_shower.cpp
index cf6b72f2bf8ec0feb176becc0769263e58ff7e47..0837d31c409bc5905d6ffb0223fdfdbdd21dc8be 100644
--- a/applications/c8_air_shower.cpp
+++ b/applications/c8_air_shower.cpp
@@ -352,6 +352,8 @@ int main(int argc, char** argv) {
   // we make the axis much longer than the inj-core distance since the
   // profile will go beyond the core, depending on zenith angle
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos) * 1.2, env};
+  auto const dX = 10_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
   /* === END: CONSTRUCT GEOMETRY === */
 
   double const emthinfrac = app["--emthin"]->as<double>();
@@ -370,7 +372,7 @@ int main(int argc, char** argv) {
   OutputManager output(app["--filename"]->as<std::string>(), seed, args.str(), outputDir);
 
   // register energy losses as output
-  EnergyLossWriter dEdX{showerAxis, 10_g / square(1_cm), 200};
+  EnergyLossWriter dEdX{showerAxis, dX, nAxisBins};
   output.add("energyloss", dEdX);
 
   DynamicInteractionProcess<StackType> heModel;
@@ -432,7 +434,7 @@ int main(int argc, char** argv) {
   auto emContinuous =
       make_select(EMHadronSwitch(), emContinuousBethe, emContinuousProposal);
 
-  LongitudinalWriter profile{showerAxis, 200, 10_g / square(1_cm)};
+  LongitudinalWriter profile{showerAxis, nAxisBins, dX};
   output.add("profile", profile);
   LongitudinalProfile<SubWriter<decltype(profile)>> longprof{profile};
 
diff --git a/examples/cascade_examples/em_shower.cpp b/examples/cascade_examples/em_shower.cpp
index a685d70f15e8e920e0b437eb73c8e50d039ad57c..614572bc930a80fc9f5313087e6bf03e949a2850 100644
--- a/examples/cascade_examples/em_shower.cpp
+++ b/examples/cascade_examples/em_shower.cpp
@@ -133,6 +133,8 @@ int main(int argc, char** argv) {
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos) * 1.02, env,
                               false, 1000};
+  auto const dX = 10_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
 
   CORSIKA_LOG_INFO("Primary particle:   {}", beamCode);
   CORSIKA_LOG_INFO("Zenith angle:       {} (rad)", theta);
@@ -143,7 +145,7 @@ int main(int argc, char** argv) {
                    (showerCore - injectionPos).getNorm() * 1.02);
 
   // setup processes, decays and interactions
-  EnergyLossWriter energyloss{showerAxis, 10_g / square(1_cm), 200};
+  EnergyLossWriter energyloss{showerAxis, dX, nAxisBins};
   ParticleCut<SubWriter<decltype(energyloss)>> cut(5_MeV, 5_MeV, 100_GeV, 100_GeV, true,
                                                    energyloss);
 
@@ -165,7 +167,7 @@ int main(int argc, char** argv) {
   TrackWriter tracks;
   output.add("tracks", tracks);
 
-  LongitudinalWriter profile{showerAxis, 10_g / square(1_cm)};
+  LongitudinalWriter profile{showerAxis, nAxisBins, dX};
   output.add("profile", profile);
   LongitudinalProfile<SubWriter<decltype(profile)>> longprof{profile};
 
diff --git a/examples/cascade_examples/hybrid_MC.cpp b/examples/cascade_examples/hybrid_MC.cpp
index b3241ffa9a39b52270aa81fb242aca9136fbb198..6d6841f56351f9e16a056dc12c3c315cfacfcb3b 100644
--- a/examples/cascade_examples/hybrid_MC.cpp
+++ b/examples/cascade_examples/hybrid_MC.cpp
@@ -206,6 +206,8 @@ int main(int argc, char** argv) {
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos) * 1.02, env,
                               false, 1000};
+  auto const dX = 10_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
 
   CORSIKA_LOG_INFO("Primary particle:   {}", beamCode);
   CORSIKA_LOG_INFO("Zenith angle:       {} (rad)", theta);
@@ -220,7 +222,7 @@ int main(int argc, char** argv) {
   OutputManager output("hybrid_MC_outputs");
 
   // register energy losses as output
-  EnergyLossWriter dEdX{showerAxis, 10_g / square(1_cm), 200};
+  EnergyLossWriter dEdX{showerAxis, dX, nAxisBins};
   output.add("energyloss", dEdX);
 
   // create a track writer and register it with the output manager
@@ -230,7 +232,7 @@ int main(int argc, char** argv) {
   ParticleCut<SubWriter<decltype(dEdX)>> cut(3_GeV, false, dEdX);
   BetheBlochPDG<SubWriter<decltype(dEdX)>> eLoss(dEdX);
 
-  LongitudinalWriter profile{showerAxis, 10_g / square(1_cm)};
+  LongitudinalWriter profile{showerAxis, nAxisBins, dX};
   output.add("profile", profile);
   LongitudinalProfile<SubWriter<decltype(profile)>> longprof{profile};
 
diff --git a/examples/cascade_examples/mars.cpp b/examples/cascade_examples/mars.cpp
index f382ef11958fc3386592b0871f0ab241ce6490e0..e4c6945a8f6a8d5d07c9fefe3e1415be88861df7 100644
--- a/examples/cascade_examples/mars.cpp
+++ b/examples/cascade_examples/mars.cpp
@@ -303,8 +303,10 @@ int main(int argc, char** argv) {
   OutputManager output(app["--filename"]->as<std::string>());
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos) * 1.2, env};
+  auto const dX = 10_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
 
-  EnergyLossWriter dEdX{showerAxis};
+  EnergyLossWriter dEdX{showerAxis, dX, nAxisBins};
   output.add("energyloss", dEdX);
 
   HEPEnergyType const emcut = 1_GeV;
@@ -336,7 +338,7 @@ int main(int argc, char** argv) {
   auto emContinuous =
       make_select(EMHadronSwitch(), emContinuousBethe, emContinuousProposal);
 
-  LongitudinalWriter longprof{showerAxis};
+  LongitudinalWriter longprof{showerAxis, nAxisBins, dX};
   output.add("profile", longprof);
   LongitudinalProfile<SubWriter<decltype(longprof)>> profile{longprof};
 
diff --git a/examples/cascade_examples/radio_em_shower.cpp b/examples/cascade_examples/radio_em_shower.cpp
index 9631ce895caeb73f2a24b798760ca190d31481a1..199946217e472e1b7fbce7f620d9aa3336f81437 100644
--- a/examples/cascade_examples/radio_em_shower.cpp
+++ b/examples/cascade_examples/radio_em_shower.cpp
@@ -157,6 +157,8 @@ int main(int argc, char** argv) {
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos) * 1.02, env,
                               false, 1000};
+  auto const dX = 10_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
 
   // setup the radio antennas
   TimeType const groundHitTime{(showerCore - injectionPos).getNorm() / constants::c};
@@ -227,7 +229,7 @@ int main(int argc, char** argv) {
   // }
 
   // setup processes, decays and interactions
-  EnergyLossWriter energyloss{showerAxis, 10_g / square(1_cm), 200};
+  EnergyLossWriter energyloss{showerAxis, dX, nAxisBins};
   ParticleCut<SubWriter<decltype(energyloss)>> cut(5_MeV, 5_MeV, 100_GeV, 100_GeV, true,
                                                    energyloss);
 
@@ -249,7 +251,7 @@ int main(int argc, char** argv) {
   TrackWriter tracks;
   output.add("tracks", tracks);
 
-  LongitudinalWriter profile{showerAxis, 10_g / square(1_cm)};
+  LongitudinalWriter profile{showerAxis, nAxisBins, dX};
   output.add("profile", profile);
   LongitudinalProfile<SubWriter<decltype(profile)>> longprof{profile};
 
diff --git a/examples/cascade_examples/water.cpp b/examples/cascade_examples/water.cpp
index c0f995f6370e5f3e5466f3bb27a195120efed9cb..5e398d5b5fa1089cbb91f865fa919aadff2f65d4 100644
--- a/examples/cascade_examples/water.cpp
+++ b/examples/cascade_examples/water.cpp
@@ -199,11 +199,13 @@ int main(int argc, char** argv) {
 
   // * longitutional profile
   ShowerAxis const showerAxis{injectionPos, 1.2 * injectorLength * downVec, env};
-  LongitudinalWriter longiWriter{showerAxis, 5500, 1_g / square(1_cm)};
+  auto const dX = 1_g / square(1_cm); //Binning of the writers along the shower axis
+  uint const nAxisBins = showerAxis.getMaximumX() / dX + 1; //Get maximum number of bins
+  LongitudinalWriter longiWriter{showerAxis, nAxisBins, dX};
   LongitudinalProfile<SubWriter<decltype(longiWriter)>> longprof{longiWriter};
 
   // * energy loss profile
-  EnergyLossWriter dEdX{showerAxis, 1_g / square(1_cm), 5500};
+  EnergyLossWriter dEdX{showerAxis, dX, nAxisBins};
 
   // * physical process list
   // particle production threshold
diff --git a/examples/physics_examples/stopping_power.cpp b/examples/physics_examples/stopping_power.cpp
index cbf1733ffe0c9a39af0380a4820df2bec0493975..28a9ff7f060979d905a3d6b691cc2bea7a2118a2 100644
--- a/examples/physics_examples/stopping_power.cpp
+++ b/examples/physics_examples/stopping_power.cpp
@@ -9,7 +9,6 @@
 #include <corsika/media/Environment.hpp>
 #include <corsika/media/HomogeneousMedium.hpp>
 #include <corsika/media/IMediumModel.hpp>
-#include <corsika/media/ShowerAxis.hpp>
 
 #include <corsika/framework/geometry/Sphere.hpp>
 #include <corsika/modules/BetheBlochPDG.hpp>