diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc
index 7faaa9dbb8b75f28acd77bc69748d6d79b37ad6e..f84ea98b5d129608d509fb9202013fb920c44b41 100644
--- a/Processes/Proposal/Interaction.cc
+++ b/Processes/Proposal/Interaction.cc
@@ -22,26 +22,27 @@ namespace corsika::process::proposal {
   using namespace corsika::units::si;
 
   template <>
-  std::unordered_map<particles::Code, PROPOSAL::ParticleDef>
-      Interaction<SetupEnvironment>::particles{
-          {particles::Code::Gamma, PROPOSAL::GammaDef()},
-          {particles::Code::Electron, PROPOSAL::EMinusDef()},
-          {particles::Code::Positron, PROPOSAL::EPlusDef()},
-          {particles::Code::MuMinus, PROPOSAL::MuMinusDef()},
-          {particles::Code::MuPlus, PROPOSAL::MuPlusDef()},
-          {particles::Code::TauPlus, PROPOSAL::TauPlusDef()},
-          {particles::Code::TauMinus, PROPOSAL::TauMinusDef()},
-      };
+  std::unordered_map<particles::Code, PROPOSAL::ParticleDef> Interaction::particles{
+      {particles::Code::Gamma, PROPOSAL::GammaDef()},
+      {particles::Code::Electron, PROPOSAL::EMinusDef()},
+      {particles::Code::Positron, PROPOSAL::EPlusDef()},
+      {particles::Code::MuMinus, PROPOSAL::MuMinusDef()},
+      {particles::Code::MuPlus, PROPOSAL::MuPlusDef()},
+      {particles::Code::TauPlus, PROPOSAL::TauPlusDef()},
+      {particles::Code::TauMinus, PROPOSAL::TauMinusDef()},
+  };
+
+  bool Interaction::CanInteract(particles::Code pcode) const noexcept {
+    auto search = particles.find(pcode);
+    if (search != particles.end()) return true;
+    return false;
+  };
 
   template <>
-  Interaction<SetupEnvironment>::Interaction(SetupEnvironment const& env,
-                                             CORSIKA_ParticleCut const& e_cut)
+  Interaction::Interaction(SetupEnvironment const& env, CORSIKA_ParticleCut const& e_cut)
       : fEnvironment(env)
       , cut(make_shared<const PROPOSAL::EnergyCutSettings>(e_cut.GetCutEnergy() / 1_GeV,
-                                                           1, false)) {}
-
-  template <>
-  void Interaction<SetupEnvironment>::Init() {
+                                                           1, false)) {
     auto all_compositions = std::vector<NuclearComposition>();
     fEnvironment.GetUniverse()->walk([&](auto& vtn) {
       if (vtn.HasModelProperties())
@@ -62,9 +63,12 @@ namespace corsika::process::proposal {
     }
   }
 
+  template <>
+  void Interaction::Init() {}
+
   template <>
   template <>
-  corsika::process::EProcessReturn Interaction<SetupEnvironment>::DoInteraction(
+  corsika::process::EProcessReturn Interaction::DoInteraction(
       setup::StackView::StackIterator& vP) {
     if (CanInteract(vP.GetPID())) {
       auto calc = GetCalculator(vP); // [CrossSections]
@@ -107,7 +111,7 @@ namespace corsika::process::proposal {
 
   template <>
   template <>
-  corsika::units::si::GrammageType Interaction<SetupEnvironment>::GetInteractionLength(
+  corsika::units::si::GrammageType Interaction::GetInteractionLength(
       setup::Stack::StackIterator& vP) {
     if (CanInteract(vP.GetPID())) {
       auto calc = GetCalculator(vP); // [CrossSections]
diff --git a/Processes/Proposal/Interaction.h b/Processes/Proposal/Interaction.h
index 503827f356892d636303a62c33f0ed31d5cb882d..6eff905a8599ad77b10cdd5c85903cc20588c97b 100644
--- a/Processes/Proposal/Interaction.h
+++ b/Processes/Proposal/Interaction.h
@@ -27,12 +27,9 @@ using CORSIKA_ParticleCut = corsika::process::particle_cut::ParticleCut;
 
 namespace corsika::process::proposal {
 
-  template <class TEnvironment>
-  class Interaction
-      : public corsika::process::InteractionProcess<Interaction<TEnvironment>> {
+  class Interaction : public corsika::process::InteractionProcess<Interaction> {
 
   private:
-    TEnvironment const& fEnvironment;
     shared_ptr<const PROPOSAL::EnergyCutSettings> cut;
 
     static std::unordered_map<particles::Code, PROPOSAL::ParticleDef> particles;
@@ -41,11 +38,7 @@ namespace corsika::process::proposal {
     corsika::random::RNG& fRNG =
         corsika::random::RNGManager::GetInstance().GetRandomStream("p_rndm");
 
-    bool CanInteract(particles::Code pcode) const noexcept {
-      auto search = particles.find(pcode);
-      if (search != particles.end()) return true;
-      return false;
-    };
+    bool CanInteract(particles::Code pcode) const noexcept;
 
     using calculator_t =
         tuple<PROPOSAL::SecondariesCalculator, unique_ptr<PROPOSAL::Interaction>,
@@ -70,6 +63,7 @@ namespace corsika::process::proposal {
     }
 
   public:
+    template <typename TEnvironment>
     Interaction(TEnvironment const& env, CORSIKA_ParticleCut const& cut);
 
     void Init();