diff --git a/Documentation/Examples/vertical_EAS.cc b/Documentation/Examples/vertical_EAS.cc
index 7a5b43fed06fabcf4c7cf8cb5e7cfb9f067ab0f9..77c02ada96cb9dfc1a6acbec239334b3cbf59762 100644
--- a/Documentation/Examples/vertical_EAS.cc
+++ b/Documentation/Examples/vertical_EAS.cc
@@ -243,6 +243,8 @@ int main(int argc, char** argv) {
        << "relative difference (%): " << (Efinal / E0 - 1) * 100 << endl;
   cout << "total dEdX energy (GeV): " << eLoss.GetTotal() / 1_GeV << endl
        << "relative difference (%): " << eLoss.GetTotal() / E0 * 100 << endl;
+       
+  observationLevel.print();
 
   auto const hists = sibyllCounted.GetHistogram() + sibyllNucCounted.GetHistogram() +
                      urqmdCounted.GetHistogram();
diff --git a/Processes/OnShellCheck/testOnShellCheck.cc b/Processes/OnShellCheck/testOnShellCheck.cc
index cfc7d159b5a7884a56dd45e19ee8c8c42f35901d..0d45b1e2946d814d47039d11f74249ace3282526 100644
--- a/Processes/OnShellCheck/testOnShellCheck.cc
+++ b/Processes/OnShellCheck/testOnShellCheck.cc
@@ -37,11 +37,10 @@ TEST_CASE("OnShellCheck", "[processes]") {
   // two energies
   const HEPEnergyType E = 10_GeV;
   // list of arbitrary particles
-  std::array<particles::Code, 4> particleList = {
-      particles::Code::PiPlus, particles::Code::PiMinus, particles::Code::Helium,
-      particles::Code::Gamma};
+  std::array const particleList{particles::Code::PiPlus, particles::Code::PiMinus,
+                                particles::Code::Helium, particles::Code::Gamma};
 
-  std::array<double, 4> mass_shifts = {1.1, 1.001, 1.0, 1.0};
+  std::array const mass_shifts{1.1, 1.001, 1.0, 1.0};
 
   SECTION("check particle masses") {
 
@@ -57,7 +56,7 @@ TEST_CASE("OnShellCheck", "[processes]") {
             corsika::stack::MomentumVector(rootCS, {0_GeV, 0_GeV, 0_GeV}),
             geometry::Point(rootCS, 0_m, 0_m, 0_m), 0_ns});
     // view on secondary particles
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view{particle};
     // ref. to primary particle through the secondary view.
     // only this way the secondary view is populated
     auto projectile = view.GetProjectile();
diff --git a/Processes/ParticleCut/testParticleCut.cc b/Processes/ParticleCut/testParticleCut.cc
index cdf3887a775150efadee6f0e1cd3a3ea14bcee6d..03432fc031fbcc37808a26347c6379e383950691 100644
--- a/Processes/ParticleCut/testParticleCut.cc
+++ b/Processes/ParticleCut/testParticleCut.cc
@@ -55,7 +55,7 @@ TEST_CASE("ParticleCut", "[processes]") {
             corsika::stack::MomentumVector(rootCS, {0_GeV, 0_GeV, 0_GeV}),
             geometry::Point(rootCS, 0_m, 0_m, 0_m), 0_ns});
     // view on secondary particles
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view{particle};
     // ref. to primary particle through the secondary view.
     // only this way the secondary view is populated
     auto projectile = view.GetProjectile();
@@ -85,7 +85,7 @@ TEST_CASE("ParticleCut", "[processes]") {
             corsika::stack::MomentumVector(rootCS, {0_GeV, 0_GeV, 0_GeV}),
             geometry::Point(rootCS, 0_m, 0_m, 0_m), 0_ns});
     // view on secondary particles
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view{particle};
     // ref. to primary particle through the secondary view.
     // only this way the secondary view is populated
     auto projectile = view.GetProjectile();
diff --git a/Processes/Pythia/testPythia8.cc b/Processes/Pythia/testPythia8.cc
index 4b1da6d837551d1bba4aded4d0c43cd8f315f1ca..6a8ae279badbbb7336357fefb208f926d55b4748 100644
--- a/Processes/Pythia/testPythia8.cc
+++ b/Processes/Pythia/testPythia8.cc
@@ -130,7 +130,7 @@ TEST_CASE("pythia process") {
 
     random::RNGManager::GetInstance().RegisterRandomStream("pythia");
 
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view(particle);
 
     process::pythia::Decay model;
 
@@ -179,7 +179,7 @@ TEST_CASE("pythia process") {
                    corsika::stack::MomentumVector, geometry::Point, units::si::TimeType>{
             particles::Code::PiPlus, E0, plab, pos, 0_ns});
     particle.SetNode(nodePtr);
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view(particle);
 
     process::pythia::Interaction model;
 
diff --git a/Processes/QGSJetII/testQGSJetII.cc b/Processes/QGSJetII/testQGSJetII.cc
index 0e6fddae9a60a4eba9eb3344454e8961bce8bef5..8f036bafcc22433660cdc0d4952154becc2bdda1 100644
--- a/Processes/QGSJetII/testQGSJetII.cc
+++ b/Processes/QGSJetII/testQGSJetII.cc
@@ -133,7 +133,7 @@ TEST_CASE("QgsjetIIInterface", "[processes]") {
             particles::Code::Proton, E0, plab, pos, 0_ns});
 
     particle.SetNode(nodePtr);
-    corsika::stack::SecondaryView view(particle);
+    setup::StackView view(particle);
     auto projectile = view.GetProjectile();
     auto const projectileMomentum = projectile.GetMomentum();
 
diff --git a/Processes/UrQMD/testUrQMD.cc b/Processes/UrQMD/testUrQMD.cc
index f7d36c891dc07b942186213a794184598cc12506..71cdd8068864a3c4eda760696374f9b61e193634 100644
--- a/Processes/UrQMD/testUrQMD.cc
+++ b/Processes/UrQMD/testUrQMD.cc
@@ -95,8 +95,7 @@ auto setupStack(int vA, int vZ, HEPEnergyType vMomentum, TNodeType* vNodePtr,
 
   particle.SetNode(vNodePtr);
   return std::make_tuple(
-      std::move(stack),
-      std::make_unique<decltype(corsika::stack::SecondaryView(particle))>(particle));
+      std::move(stack), std::make_unique<decltype(setup::StackView{particle})>(particle));
 }
 
 template <typename TNodeType>
@@ -117,8 +116,7 @@ auto setupStack(particles::Code vProjectileType, HEPEnergyType vMomentum,
 
   particle.SetNode(vNodePtr);
   return std::make_tuple(
-      std::move(stack),
-      std::make_unique<decltype(corsika::stack::SecondaryView(particle))>(particle));
+      std::move(stack), std::make_unique<decltype(setup::StackView{particle})>(particle));
 }
 
 TEST_CASE("UrQMD") {
diff --git a/Setup/SetupStack.h b/Setup/SetupStack.h
index 39117d4df122f06590cff087751a1b8a0467d693..b4ab5118db39d7ae23fe278a1730f447f477dceb 100644
--- a/Setup/SetupStack.h
+++ b/Setup/SetupStack.h
@@ -9,6 +9,7 @@
 #pragma once
 
 #include <corsika/history/HistoryStackExtension.h>
+#include <corsika/history/HistorySecondaryView.hpp>
 #include <corsika/stack/CombinedStack.h>
 #include <corsika/stack/node/GeometryNodeStackExtension.h>
 #include <corsika/stack/nuclear_extension/NuclearStackExtension.h>
@@ -152,7 +153,7 @@ namespace corsika::setup {
       // corsika::setup::detail::StackWithGeometryInterface>;
       corsika::setup::detail::StackWithHistoryInterface>;
 #elif defined(__GNUC__) || defined(__GNUG__)
-  using StackView = corsika::stack::MakeView<corsika::setup::Stack>::type;
+  using StackView = corsika::history::HistorySecondaryView<corsika::stack::MakeView<corsika::setup::Stack>::type>;
 #endif
 
 } // namespace corsika::setup
diff --git a/Stack/History/HistoryObservationPlane.cc b/Stack/History/HistoryObservationPlane.cc
index f65ce899377193f9468ba34098ec7efa4a82b7fd..218c5445f53085b423bf0241f241c809f431c770 100644
--- a/Stack/History/HistoryObservationPlane.cc
+++ b/Stack/History/HistoryObservationPlane.cc
@@ -8,7 +8,10 @@
 
 #include <corsika/history/HistoryObservationPlane.hpp>
 
+#include <boost/histogram/ostream.hpp>
+
 #include <fstream>
+#include <iostream>
 
 using namespace corsika::units::si;
 using namespace corsika::history;
@@ -72,3 +75,5 @@ void HistoryObservationPlane::fillHistoryHistogram(
   }
   histogram_(intCounter);
 }
+
+void HistoryObservationPlane::print() { std::cout << histogram_ << std::endl; }
diff --git a/Stack/History/HistoryObservationPlane.hpp b/Stack/History/HistoryObservationPlane.hpp
index 99a6b424f4bcae8ce3c9d3f207352c3fcbf558bd..019d5e1ee24895b87606a6ef0fcc4fb188999e1c 100644
--- a/Stack/History/HistoryObservationPlane.hpp
+++ b/Stack/History/HistoryObservationPlane.hpp
@@ -55,6 +55,8 @@ namespace corsika::history {
         corsika::setup::Stack::ParticleType const& vParticle,
         corsika::setup::Trajectory const& vTrajectory);
 
+    void print();
+
   private:
     void fillHistoryHistogram(setup::Stack::ParticleType const&);