diff --git a/Processes/OnShellCheck/OnShellCheck.cc b/Processes/OnShellCheck/OnShellCheck.cc
index a5662e4349ab1afb2d118320833da3c6a0d74a68..133af10c6a1bffe8ec439d785e28cc9c4d60d8e2 100644
--- a/Processes/OnShellCheck/OnShellCheck.cc
+++ b/Processes/OnShellCheck/OnShellCheck.cc
@@ -46,6 +46,9 @@ namespace corsika::process {
           const HEPEnergyType e_shifted =
               sqrt(p_original.GetSquaredNorm() + m_corsika * m_corsika);
           auto const e_shift_relative = (e_shifted / e_original - 1);
+          count_ = count_ + 1;
+          average_shift_ += abs(e_shift_relative);
+          if (abs(e_shift_relative) > max_shift_) max_shift_ = abs(e_shift_relative);
           /*
              For now we warn if the necessary shift is larger than 1%.
              we could promote this to an error.
diff --git a/Processes/OnShellCheck/OnShellCheck.h b/Processes/OnShellCheck/OnShellCheck.h
index f9a047324fda11f3d19f08f575e3c92a510d7feb..f1c588be018415476f70573f9c73163c74bd5b4b 100644
--- a/Processes/OnShellCheck/OnShellCheck.h
+++ b/Processes/OnShellCheck/OnShellCheck.h
@@ -19,12 +19,24 @@
 namespace corsika::process {
   namespace on_shell_check {
     class OnShellCheck : public process::SecondariesProcess<OnShellCheck> {
+      double average_shift_ = 0;
+      double max_shift_ = 0;
+      double count_ = 0;
 
     public:
       OnShellCheck(const double vMassTolerance, const double vEnergyTolerance)
           : mass_tolerance_(vMassTolerance)
           , energy_tolerance_(vEnergyTolerance) {}
 
+      ~OnShellCheck() {
+        std::cout << "OnShellCheck: summary" << std::endl
+                  << " particles shifted: " << int(count_) << std::endl;
+        if (count_)
+          std::cout << " average energy shift (%): " << average_shift_ / count_ * 100.
+                    << std::endl
+                    << " max. energy shift (%): " << max_shift_ * 100. << std::endl;
+      };
+
       EProcessReturn DoSecondaries(corsika::setup::StackView&);
 
       void Init();