diff --git a/Documentation/Examples/CMakeLists.txt b/Documentation/Examples/CMakeLists.txt
index 5ac721c54ac3d755bd013d241c9960c33252c1da..50c937f1415e3c4115c6299970664a795a42092c 100644
--- a/Documentation/Examples/CMakeLists.txt
+++ b/Documentation/Examples/CMakeLists.txt
@@ -8,12 +8,8 @@ target_link_libraries (particle_list_example CORSIKAparticles CORSIKAunits CORSI
 CORSIKA_ADD_EXAMPLE (geometry_example)
 target_link_libraries (geometry_example CORSIKAgeometry CORSIKAunits)
 
-CORSIKA_ADD_EXAMPLE (logger_example)
-target_link_libraries (logger_example CORSIKAunits CORSIKAlogging)
-
 CORSIKA_ADD_EXAMPLE (stack_example)
-target_link_libraries (stack_example SuperStupidStack CORSIKAunits
-  CORSIKAlogging)
+target_link_libraries (stack_example SuperStupidStack CORSIKAunits)
 
 # address sanitizer is making this example too slow, so we only do "undefined"
 CORSIKA_ADD_EXAMPLE (boundary_example)
@@ -43,6 +39,7 @@ target_link_libraries (cascade_example
   CORSIKAlogging
   CORSIKArandom
   ProcessSibyll
+  ProcessProposal
   CORSIKAcascade
   ProcessEnergyLoss
   ProcessTrackWriter
@@ -95,13 +92,18 @@ if (Pythia8_FOUND)
     CORSIKAlogging
     CORSIKArandom
     CORSIKAcascade
+    ProcessProposal
+    ProcessPythia8
     ProcessObservationPlane
     ProcessInteractionCounter
     ProcessTrackWriter
+    ProcessEnergyLoss
     ProcessTrackingLine
     ProcessParticleCut
+    ProcessOnShellCheck
     ProcessStackInspector
     ProcessLongitudinalProfile
+    ProcessCONEXSourceCut
     CORSIKAprocesses
     CORSIKAcascade
     CORSIKAparticles
@@ -127,3 +129,34 @@ target_link_libraries (staticsequence_example
   CORSIKAunits
   CORSIKAgeometry
   CORSIKAlogging)
+
+
+CORSIKA_ADD_EXAMPLE (proposal_example RUN_OPTIONS 100.)
+target_link_libraries (proposal_example
+  SuperStupidStack
+  CORSIKAunits
+  CORSIKAlogging
+  CORSIKArandom
+  ProcessSibyll
+  ProcessPythia8
+  ProcessUrQMD
+  ProcessSwitch
+  CORSIKAcascade
+  ProcessCONEXSourceCut
+  ProcessEnergyLoss
+  ProcessObservationPlane
+  ProcessInteractionCounter
+  ProcessTrackWriter
+  ProcessProposal
+  ProcessTrackingLine
+  ProcessParticleCut
+  ProcessOnShellCheck
+  ProcessStackInspector
+  ProcessLongitudinalProfile
+  CORSIKAprocesses
+  CORSIKAcascade
+  CORSIKAparticles
+  CORSIKAgeometry
+  CORSIKAenvironment
+  CORSIKAprocesssequence
+  )
diff --git a/Documentation/Examples/boundary_example.cc b/Documentation/Examples/boundary_example.cc
index caaa087a4fb1e32b52daf54276c23626b419d4f0..26a8239bda592c1b9d45ed2536677cdf31f00e34 100644
--- a/Documentation/Examples/boundary_example.cc
+++ b/Documentation/Examples/boundary_example.cc
@@ -118,7 +118,7 @@ int main() {
   process::sibyll::Interaction sibyll;
   process::sibyll::Decay decay;
 
-  process::particle_cut::ParticleCut cut(20_GeV);
+  process::particle_cut::ParticleCut cut(20_GeV, true, true);
 
   process::track_writer::TrackWriter trackWriter("tracks.dat");
   MyBoundaryCrossingProcess<true> boundaryCrossing("crossings.dat");
diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
index 7aa0561c0e2849fa32e25fa1cf1a9d5f00f564b5..b77dcea923b9c5c40137420c893c72b47561a579 100644
--- a/Documentation/Examples/cascade_example.cc
+++ b/Documentation/Examples/cascade_example.cc
@@ -23,7 +23,7 @@
 
 #include <corsika/geometry/Sphere.h>
 
-#include <corsika/process/proposal/Interaction.h>
+//#include <corsika/process/proposal/Interaction.h>
 
 #include <corsika/process/sibyll/Decay.h>
 #include <corsika/process/sibyll/Interaction.h>
@@ -137,19 +137,19 @@ int main() {
 
   random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
   random::RNGManager::GetInstance().RegisterRandomStream("pythia");
-  random::RNGManager::GetInstance().RegisterRandomStream("proposal");
+  //random::RNGManager::GetInstance().RegisterRandomStream("proposal");
   process::sibyll::Interaction sibyll;
   process::sibyll::NuclearInteraction sibyllNuc(sibyll, env);
   process::sibyll::Decay decay;
   // cascade with only HE model ==> HE cut
-  process::particle_cut::ParticleCut cut(80_GeV);
-  process::proposal::Interaction proposal(env, cut);
+  process::particle_cut::ParticleCut cut(80_GeV, true, true);
+  //process::proposal::Interaction proposal(env, cut);
 
   process::track_writer::TrackWriter trackWriter("tracks.dat");
   process::energy_loss::EnergyLoss eLoss{showerAxis};
 
   // assemble all processes into an ordered process list
-  auto sequence = stackInspect << sibyll << sibyllNuc << proposal << decay
+  auto sequence = stackInspect << sibyll << sibyllNuc /* << proposal*/ << decay
       /* << eLoss */
       << cut << trackWriter;
 
diff --git a/Documentation/Examples/cascade_proton_example.cc b/Documentation/Examples/cascade_proton_example.cc
index 996d67eb9fd3383801f150c2eb6d50c87f2da36d..12f758a0d02653905a62df5d0d229b395cf74c59 100644
--- a/Documentation/Examples/cascade_proton_example.cc
+++ b/Documentation/Examples/cascade_proton_example.cc
@@ -123,7 +123,7 @@ int main() {
   //  process::sibyll::NuclearInteraction sibyllNuc(env, sibyll);
   //  process::sibyll::Decay decay;
   process::pythia::Decay decay;
-  process::particle_cut::ParticleCut cut(20_GeV);
+  process::particle_cut::ParticleCut cut(20_GeV, true, true);
 
   // random::RNGManager::GetInstance().RegisterRandomStream("HadronicElasticModel");
   // process::HadronicElasticModel::HadronicElasticInteraction
diff --git a/Documentation/Examples/proposal_example.cc b/Documentation/Examples/proposal_example.cc
index de16fc65db2f361cea0ccb74aa28d8cbe089bf3d..d0699c45e69f9d0cf934c60bddab4780db388e0d 100644
--- a/Documentation/Examples/proposal_example.cc
+++ b/Documentation/Examples/proposal_example.cc
@@ -1,7 +1,5 @@
 /*
- * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
- *
- * See file AUTHORS for a list of contributors.
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
  *
  * This software is distributed under the terms of the GNU General Public
  * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
@@ -107,8 +105,8 @@ int main(int argc, char** argv) {
   cout << "input momentum: " << plab.GetComponents() / 1_GeV << ", norm = " << plab.norm()
        << endl;
 
-  auto const observationHeight = 1.4_km + builder.earthRadius;
-  auto const injectionHeight = 112.75_km + builder.earthRadius;
+  auto const observationHeight = 1.4_km + builder.getEarthRadius();
+  auto const injectionHeight = 112.75_km + builder.getEarthRadius();
   auto const t = -observationHeight * cos(thetaRad) +
                  sqrt(-si::detail::static_pow<2>(sin(thetaRad) * observationHeight) +
                       si::detail::static_pow<2>(injectionHeight));
@@ -136,15 +134,12 @@ int main(int argc, char** argv) {
   PROPOSAL::InterpolationDef::path_to_tables = "~/.local/share/PROPOSAL/tables/";
   PROPOSAL::InterpolationDef::path_to_tables_readonly = "~/.local/share/PROPOSAL/tables/";
 
-  process::particle_cut::ParticleCut cut(10_GeV);
+  process::particle_cut::ParticleCut cut(10_GeV, false, true);
   process::proposal::Interaction proposal(env, cut);
   process::proposal::ContinuousProcess em_continuous(env, cut);
   process::interaction_counter::InteractionCounter proposalCounted(proposal);
   process::track_writer::TrackWriter trackWriter("tracks.dat");
 
-  // energy cut; n.b. ParticleCut needs to be modified not to discard EM particles!
-  /* process::particle_cut::ParticleCut cut{60_GeV}; */
-
   // long. profile; columns for gamma, e+, e- still need to be added
   process::longitudinal_profile::LongitudinalProfile longprof{showerAxis};
 
@@ -161,7 +156,6 @@ int main(int argc, char** argv) {
   // define air shower object, run simulation
   tracking_line::TrackingLine tracking;
   cascade::Cascade EAS(env, tracking, sequence, stack);
-  EAS.Init();
 
   // to fix the point of first interaction, uncomment the following two lines:
   //  EAS.SetNodes();
diff --git a/Documentation/Examples/vertical_EAS.cc b/Documentation/Examples/vertical_EAS.cc
index 17a80986d0485df5043a1216926ca1da9f542f2f..60d4f3fc9d4d699baa6af054a3f8b8c849addac0 100644
--- a/Documentation/Examples/vertical_EAS.cc
+++ b/Documentation/Examples/vertical_EAS.cc
@@ -181,7 +181,7 @@ int main(int argc, char** argv) {
 
   decaySibyll.PrintDecayConfig();
 
-  process::particle_cut::ParticleCut cut{60_GeV};
+  process::particle_cut::ParticleCut cut{60_GeV, true, true};
 
   process::on_shell_check::OnShellCheck reset_particle_mass(1.e-3, 1.e-1, false);
 
diff --git a/Processes/CMakeLists.txt b/Processes/CMakeLists.txt
index c405641bbcbbae6bc614cb8f6f377465c41a700f..509bf305e20364d1151c9ad101504eec5245191a 100644
--- a/Processes/CMakeLists.txt
+++ b/Processes/CMakeLists.txt
@@ -13,7 +13,6 @@ if (CONEX_FOUND)
 endif (CONEX_FOUND)
 add_subdirectory (HadronicElasticModel)
 add_subdirectory (UrQMD)
-add_subdirectory (SwitchProcess)
 add_subdirectory (Proposal)
 
 # continuous physics
@@ -34,15 +33,15 @@ add_subdirectory (SwitchProcess)
 ##########################################
 # add_custom_target(CORSIKAprocesses)
 add_library (CORSIKAprocesses INTERFACE)
-add_dependencies(CORSIKAprocesses ProcessNullModel)
-add_dependencies(CORSIKAprocesses ProcessSibyll)
-add_dependencies(CORSIKAprocesses ProcessProposal)
+add_dependencies (CORSIKAprocesses ProcessNullModel)
+add_dependencies (CORSIKAprocesses ProcessSibyll)
+add_dependencies (CORSIKAprocesses ProcessProposal)
 if (Pythia8_FOUND)
-  add_dependencies(CORSIKAprocesses ProcessPythia)
+  add_dependencies (CORSIKAprocesses ProcessPythia8)
 endif (Pythia8_FOUND)
-add_dependencies(CORSIKAprocesses ProcessStackInspector)
-add_dependencies(CORSIKAprocesses ProcessTrackingLine)
-add_dependencies(CORSIKAprocesses ProcessEnergyLoss)
-add_dependencies(CORSIKAprocesses ProcessUrQMD)
-add_dependencies(CORSIKAprocesses ProcessParticleCut)
-add_dependencies(CORSIKAprocesses ProcessOnShellCheck)
+add_dependencies (CORSIKAprocesses ProcessStackInspector)
+add_dependencies (CORSIKAprocesses ProcessTrackingLine)
+add_dependencies (CORSIKAprocesses ProcessEnergyLoss)
+add_dependencies (CORSIKAprocesses ProcessUrQMD)
+add_dependencies (CORSIKAprocesses ProcessParticleCut)
+add_dependencies (CORSIKAprocesses ProcessOnShellCheck)
diff --git a/Processes/ParticleCut/ParticleCut.cc b/Processes/ParticleCut/ParticleCut.cc
index d9194614d61d259defd1b0463ce580d262d379ee..d7af1c81c61f4d2a004cd9d034f9e1a3169a7395 100644
--- a/Processes/ParticleCut/ParticleCut.cc
+++ b/Processes/ParticleCut/ParticleCut.cc
@@ -26,14 +26,13 @@ namespace corsika::process {
       if (vP.GetPID() == particles::Code::Nucleus) {
         // calculate energy per nucleon
         auto const ElabNuc = energyLab / vP.GetNuclearA();
-        return (ElabNuc < fECut);
+        return (ElabNuc < eCut_);
       } else {
-        return (energyLab < fECut);
+        return (energyLab < eCut_);
       }
     }
 
     bool ParticleCut::ParticleIsEmParticle(Code vCode) const {
-      // FOR NOW: switch
       switch (vCode) {
         case Code::Gamma:
         case Code::Electron:
@@ -63,26 +62,25 @@ namespace corsika::process {
         const Code pid = p.GetPID();
         HEPEnergyType energy = p.GetEnergy();
         cout << "ProcessCut: DoSecondaries: " << pid << " E= " << energy
-             << ", EcutTot=" << (fEmEnergy + fInvEnergy + fEnergy) / 1_GeV << " GeV"
+             << ", EcutTot=" << (emEnergy_ + invEnergy_ + energy_) / 1_GeV << " GeV"
              << endl;
-        /* if (ParticleIsEmParticle(pid)) { */
-        /*   cout << "removing em. particle..." << endl; */
-        /*   fEmEnergy += energy; */
-        /*   fEmCount += 1; */
-        /*   p.Delete(); */
-        /* } else */
-        if (ParticleIsInvisible(pid)) {
+	if (cutEm_ && ParticleIsEmParticle(pid)) { 
+	  cout << "removing em. particle..." << endl; 
+	  emEnergy_ += energy; 
+	  emCount_ += 1; 
+	  p.Delete(); 
+	} else if (cutInv_ && ParticleIsInvisible(pid)) {
           cout << "removing inv. particle..." << endl;
-          fInvEnergy += energy;
-          fInvCount += 1;
+          invEnergy_ += energy;
+          invCount_ += 1;
           p.Delete();
         } else if (ParticleIsBelowEnergyCut(p)) {
           cout << "removing low en. particle..." << endl;
-          fEnergy += energy;
+          energy_ += energy;
           p.Delete();
         } else if (p.GetTime() > 10_ms) {
           cout << "removing OLD particle..." << endl;
-          fEnergy += energy;
+          energy_ += energy;
           p.Delete();
         } else {
           ++p; // next entry in SecondaryView
@@ -91,24 +89,24 @@ namespace corsika::process {
       return EProcessReturn::eOk;
     }
 
-    ParticleCut::ParticleCut(const units::si::HEPEnergyType vCut)
-        : fECut(vCut) {
+    ParticleCut::ParticleCut(const units::si::HEPEnergyType eCut, bool em, bool inv)
+      : eCut_(eCut), cutEm_(em), cutInv_(inv) {
 
-      fEmEnergy = 0._GeV;
-      fEmCount = 0;
-      fInvEnergy = 0._GeV;
-      fInvCount = 0;
-      fEnergy = 0._GeV;
+      emEnergy_ = 0_GeV;
+      emCount_ = 0;
+      invEnergy_ = 0_GeV;
+      invCount_ = 0;
+      energy_ = 0_GeV;
     }
 
     void ParticleCut::ShowResults() {
       cout << " ******************************" << endl
            << " ParticleCut: " << endl
-           << " energy in em.  component (GeV):  " << fEmEnergy / 1_GeV << endl
-           << " no. of em.  particles injected:  " << fEmCount << endl
-           << " energy in inv. component (GeV):  " << fInvEnergy / 1_GeV << endl
-           << " no. of inv. particles injected:  " << fInvCount << endl
-           << " energy below particle cut (GeV): " << fEnergy / 1_GeV << endl
+           << " energy in em.  component (GeV):  " << emEnergy_ / 1_GeV << endl
+           << " no. of em.  particles injected:  " << emCount_ << endl
+           << " energy in inv. component (GeV):  " << invEnergy_ / 1_GeV << endl
+           << " no. of inv. particles injected:  " << invCount_ << endl
+           << " energy below particle cut (GeV): " << energy_ / 1_GeV << endl
            << " ******************************" << endl;
     }
   } // namespace particle_cut
diff --git a/Processes/ParticleCut/ParticleCut.h b/Processes/ParticleCut/ParticleCut.h
index f298f484e371d098abf8284b52b1eaa3bf737867..74796f9e20beceb8b55c7e3656f47b46d1f38539 100644
--- a/Processes/ParticleCut/ParticleCut.h
+++ b/Processes/ParticleCut/ParticleCut.h
@@ -16,18 +16,19 @@
 namespace corsika::process {
   namespace particle_cut {
     class ParticleCut : public process::SecondariesProcess<ParticleCut> {
-
-      units::si::HEPEnergyType const fECut;
-
-      units::si::HEPEnergyType fEnergy = 0 * units::si::electronvolt;
-      units::si::HEPEnergyType fEmEnergy = 0 * units::si::electronvolt;
-      unsigned int fEmCount = 0;
-      units::si::HEPEnergyType fInvEnergy = 0 * units::si::electronvolt;
-      unsigned int fInvCount = 0;
-
+      
+      units::si::HEPEnergyType const eCut_;
+      bool cutEm_;
+      bool cutInv_;
+      
+      units::si::HEPEnergyType energy_ = 0 * units::si::electronvolt;
+      units::si::HEPEnergyType emEnergy_ = 0 * units::si::electronvolt;
+      unsigned int emCount_ = 0;
+      units::si::HEPEnergyType invEnergy_ = 0 * units::si::electronvolt;
+      unsigned int invCount_ = 0;     
+      
     public:
-      ParticleCut(const units::si::HEPEnergyType eCut)
-          : fECut(eCut) {}
+      ParticleCut(const units::si::HEPEnergyType eCut, bool em, bool inv);
 
       bool ParticleIsInvisible(particles::Code) const;
       EProcessReturn DoSecondaries(corsika::setup::StackView&);
@@ -39,12 +40,12 @@ namespace corsika::process {
 
       void ShowResults();
 
-      units::si::HEPEnergyType GetECut() const { return fECut; }
-      units::si::HEPEnergyType GetInvEnergy() const { return fInvEnergy; }
-      units::si::HEPEnergyType GetCutEnergy() const { return fEnergy; }
-      units::si::HEPEnergyType GetEmEnergy() const { return fEmEnergy; }
-      unsigned int GetNumberEmParticles() const { return fEmCount; }
-      unsigned int GetNumberInvParticles() const { return fInvCount; }
+      units::si::HEPEnergyType GetECut() const { return eCut_; }
+      units::si::HEPEnergyType GetInvEnergy() const { return invEnergy_; }
+      units::si::HEPEnergyType GetCutEnergy() const { return energy_; }
+      units::si::HEPEnergyType GetEmEnergy() const { return emEnergy_; }
+      unsigned int GetNumberEmParticles() const { return emCount_; }
+      unsigned int GetNumberInvParticles() const { return invCount_; }
     };
   } // namespace particle_cut
 } // namespace corsika::process
diff --git a/Processes/ParticleCut/testParticleCut.cc b/Processes/ParticleCut/testParticleCut.cc
index b3d375f206ae1cd3c61cfdcdd53c5408f7a0cb68..7b3ce99eae1a166bc50efca8b40113872f8b3713 100644
--- a/Processes/ParticleCut/testParticleCut.cc
+++ b/Processes/ParticleCut/testParticleCut.cc
@@ -43,9 +43,9 @@ TEST_CASE("ParticleCut", "[processes]") {
       particles::Code::Electron, particles::Code::MuPlus,  particles::Code::NuE,
       particles::Code::Neutron};
 
-  SECTION("cut on particle type") {
+  SECTION("cut on particle type: inv") {
 
-    ParticleCut cut(20_GeV);
+    ParticleCut cut(20_GeV, false, true);
 
     // add primary particle to stack
     auto particle = stack.AddParticle(
@@ -70,11 +70,41 @@ TEST_CASE("ParticleCut", "[processes]") {
 
     cut.DoSecondaries(view);
 
-    REQUIRE(view.GetSize() == 8);
+    CHECK(view.GetSize() == 9);
   }
 
+  SECTION("cut on particle type: em") {
+
+    ParticleCut cut(20_GeV, true, false);
+
+    // add primary particle to stack
+    auto particle = stack.AddParticle(
+        std::tuple<particles::Code, units::si::HEPEnergyType,
+                   corsika::stack::MomentumVector, geometry::Point, units::si::TimeType>{
+            particles::Code::Proton, Eabove,
+            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);
+    // ref. to primary particle through the secondary view.
+    // only this way the secondary view is populated
+    auto projectile = view.GetProjectile();
+    // add secondaries, all with energies above the threshold
+    // only cut is by species
+    for (auto proType : particleList)
+      projectile.AddSecondary(std::tuple<particles::Code, units::si::HEPEnergyType,
+                                         corsika::stack::MomentumVector, geometry::Point,
+                                         units::si::TimeType>{
+          proType, Eabove, corsika::stack::MomentumVector(rootCS, {0_GeV, 0_GeV, 0_GeV}),
+          geometry::Point(rootCS, 0_m, 0_m, 0_m), 0_ns});
+
+    cut.DoSecondaries(view);
+
+    CHECK(view.GetSize() == 9);
+  }
+  
   SECTION("cut low energy") {
-    ParticleCut cut(20_GeV);
+    ParticleCut cut(20_GeV, true, true);
 
     // add primary particle to stack
     auto particle = stack.AddParticle(
@@ -99,6 +129,6 @@ TEST_CASE("ParticleCut", "[processes]") {
 
     cut.DoSecondaries(view);
 
-    REQUIRE(view.GetSize() == 0);
+    CHECK(view.GetSize() == 0);
   }
 }
diff --git a/Processes/Proposal/CMakeLists.txt b/Processes/Proposal/CMakeLists.txt
index b793dc1dde842ecfedab584c4888872dbdb9df0d..c3bc28b8379eccd948b489ee7c035225c0eb416a 100644
--- a/Processes/Proposal/CMakeLists.txt
+++ b/Processes/Proposal/CMakeLists.txt
@@ -1,8 +1,4 @@
-set (ADD_PYTHON OFF) # for proposal
-set (BUILD_TESTING OFF) # for proposal
 add_subdirectory (PROPOSAL)
-unset (ADD_PYTHON)
-unset (BUILD_TESTING)
 
 FILE (GLOB MODEL_SOURCES *.cc)
 FILE (GLOB MODEL_HEADERS *.h)
@@ -11,8 +7,10 @@ SET (MODEL_NAMESPACE corsika/process/proposal)
 ADD_LIBRARY (ProcessProposal STATIC ${MODEL_SOURCES})
 CORSIKA_COPY_HEADERS_TO_NAMESPACE (ProcessProposal ${MODEL_NAMESPACE} ${MODEL_HEADERS})
 
-SET_TARGET_PROPERTIES ( ProcessProposal PROPERTIES VERSION ${PROJECT_VERSION}
-    SOVERSION 1
+SET_TARGET_PROPERTIES (
+  ProcessProposal
+  PROPERTIES VERSION ${PROJECT_VERSION}
+  SOVERSION 1
   )
 
 TARGET_LINK_LIBRARIES (
diff --git a/Processes/Proposal/ContinuousProcess.cc b/Processes/Proposal/ContinuousProcess.cc
index d95202e5de358f102314dde343550f7fe5348f2d..537a2498510128ce245f3372a1b56d58cff689fe 100644
--- a/Processes/Proposal/ContinuousProcess.cc
+++ b/Processes/Proposal/ContinuousProcess.cc
@@ -1,3 +1,11 @@
+/*
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
 #include <PROPOSAL/PROPOSAL.h>
 #include <corsika/environment/IMediumModel.h>
 #include <corsika/environment/NuclearComposition.h>
diff --git a/Processes/Proposal/ContinuousProcess.h b/Processes/Proposal/ContinuousProcess.h
index 7e234ac632e3a01dd29164e14a6b5d34125f2e06..c5f6fb701390ca52018cf1d308f30dbb06269ffc 100644
--- a/Processes/Proposal/ContinuousProcess.h
+++ b/Processes/Proposal/ContinuousProcess.h
@@ -1,15 +1,12 @@
 /*
  * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
  *
- * See file AUTHORS for a list of contributors.
- *
  * This software is distributed under the terms of the GNU General Public
  * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
  * the license.
  */
 
-#ifndef _corsika_process_proposal_interaction_h_
-#define _corsika_process_proposal_interaction_h_
+#pragma once
 
 #include <PROPOSAL/PROPOSAL.h>
 #include <corsika/environment/Environment.h>
@@ -19,7 +16,6 @@
 #include <corsika/random/RNGManager.h>
 #include <corsika/random/UniformRealDistribution.h>
 #include <unordered_map>
-#include "PROPOSAL/PROPOSAL.h"
 
 using std::unordered_map;
 
@@ -102,8 +98,6 @@ namespace corsika::process::proposal {
     template <typename TEnvironment>
     ContinuousProcess(TEnvironment const&, CORSIKA_ParticleCut&);
 
-    void Init(){};
-
     template <typename Particle>
     corsika::units::si::HEPEnergyType TotalEnergyLoss(
         Particle const&, corsika::units::si::GrammageType const&);
@@ -120,4 +114,3 @@ namespace corsika::process::proposal {
   };
 } // namespace corsika::process::proposal
 
-#endif
diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc
index fb567b39813e53dc204ed42a695bc7e8df536b86..b1f25c96e6e389efb2a98bd0ae2a4f6c6761d812 100644
--- a/Processes/Proposal/Interaction.cc
+++ b/Processes/Proposal/Interaction.cc
@@ -1,3 +1,11 @@
+/*
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
 
 #include <corsika/environment/IMediumModel.h>
 #include <corsika/environment/NuclearComposition.h>
diff --git a/Processes/Proposal/Interaction.h b/Processes/Proposal/Interaction.h
index f3c3b2cf0b61b5a63524332f1f1a12f2b89a9827..6e1b2d57941c204a1a5a1b210c0e62f54a7295c8 100644
--- a/Processes/Proposal/Interaction.h
+++ b/Processes/Proposal/Interaction.h
@@ -1,15 +1,14 @@
 /*
- * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
- *
- * See file AUTHORS for a list of contributors.
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
  *
  * This software is distributed under the terms of the GNU General Public
  * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
  * the license.
  */
 
-#ifndef _corsika_process_proposal_interaction_h_
-#define _corsika_process_proposalythia_interaction_h_
+#pragma once
+
+#include <PROPOSAL/PROPOSAL.h>
 
 #include <corsika/environment/Environment.h>
 #include <corsika/particles/ParticleProperties.h>
@@ -18,7 +17,6 @@
 #include <corsika/random/RNGManager.h>
 #include <corsika/random/UniformRealDistribution.h>
 #include <array>
-#include "PROPOSAL/PROPOSAL.h"
 
 using namespace corsika::environment;
 using namespace corsika::units::si;
@@ -100,8 +98,6 @@ namespace corsika::process::proposal {
     template <typename TEnvironment>
     Interaction(TEnvironment const& env, CORSIKA_ParticleCut& cut);
 
-    void Init(){};
-
     template <typename Particle>
     corsika::process::EProcessReturn DoInteraction(Particle&);
 
@@ -109,4 +105,3 @@ namespace corsika::process::proposal {
     corsika::units::si::GrammageType GetInteractionLength(TParticle const& p);
   };
 } // namespace corsika::process::proposal
-#endif
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 98eaf3a72346dc2a153bfbc668d9f0479bfcbcc6..202c3908863a7f9b9616815898b1956cd14df72e 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -18,9 +18,7 @@ mark_as_advanced (ThirdPartyChoiceValues)
 
 ##############################################################################
 # Build spdlog
-#set (CMAKE_POSITION_INDEPENDENT_CODE ON) # this is needed for PROPOSAL... since it is dynamic
 add_subdirectory (spdlog)
-#unset (CMAKE_POSITION_INDEPENDENT_CODE)
 
 ##############################################################################
 # check for boost: either use C8 or system-level installation
diff --git a/do-copyright.py b/do-copyright.py
index a94ee4ddddd5a5e597b18a8afcee7c9e8c919316..4c2b29cc7a2c79418a5a8517018806e6c0aa1a9e 100755
--- a/do-copyright.py
+++ b/do-copyright.py
@@ -21,7 +21,7 @@ Debug settings are 0: nothing, 1: checking, 2: filesystem
 """
 Debug = 0 
 
-excludeDirs = ["ThirdParty", "git", "build", "install"]
+excludeDirs = ["ThirdParty", "git", "build", "install", "PROPOSAL"]
 excludeFiles = ['PhysicalConstants.h','CorsikaFenvOSX.cc', 'sgn.h']
 
 extensions = [".cc", ".h", ".test"]