diff --git a/Documentation/Examples/em_shower.cc b/Documentation/Examples/em_shower.cc
index d83cdacf51cf28cf70a0f97dae8f6a63ae672c91..5bc85b48cb624e96369820257d1a4fd027683dd3 100644
--- a/Documentation/Examples/em_shower.cc
+++ b/Documentation/Examples/em_shower.cc
@@ -130,9 +130,6 @@ int main(int argc, char** argv) {
   // setup processes, decays and interactions
 
   // PROPOSAL processs proposal{...};
-  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, false, true);
   process::proposal::Interaction proposal(env, cut);
   process::proposal::ContinuousProcess em_continuous(env, cut);
diff --git a/Documentation/Examples/vertical_EAS.cc b/Documentation/Examples/vertical_EAS.cc
index 738bd73e4eb4ed4c09bdfcccf8cb6584c28c4e85..057db325afd06ff77485d66dd14ca52fc31147b8 100644
--- a/Documentation/Examples/vertical_EAS.cc
+++ b/Documentation/Examples/vertical_EAS.cc
@@ -185,9 +185,6 @@ int main(int argc, char** argv) {
   decaySibyll.PrintDecayConfig();
 
   // PROPOSAL processs proposal{...};
-  PROPOSAL::InterpolationDef::path_to_tables = "~/.local/share/PROPOSAL/tables/";
-  PROPOSAL::InterpolationDef::path_to_tables_readonly = "~/.local/share/PROPOSAL/tables/";
-
   process::particle_cut::ParticleCut cut{60_GeV, false, true};
   process::proposal::Interaction proposal(env, cut);
   process::proposal::ContinuousProcess em_continuous(env, cut);
diff --git a/Processes/Proposal/ProposalProcessBase.cc b/Processes/Proposal/ProposalProcessBase.cc
index 815f032b533de2aca85587dd036d7d3a43b20417..d2ab2a2209fb5d5e7beac33f957c559383da253a 100644
--- a/Processes/Proposal/ProposalProcessBase.cc
+++ b/Processes/Proposal/ProposalProcessBase.cc
@@ -18,6 +18,7 @@
 #include <memory>
 #include <random>
 #include <tuple>
+#include <cstdlib>
 
 namespace corsika::process::proposal {
   bool ProposalProcessBase::CanInteract(particles::Code pcode) const {
@@ -50,6 +51,12 @@ namespace corsika::process::proposal {
     PROPOSAL::InterpolationDef::order_of_interpolation = 2;
     PROPOSAL::InterpolationDef::nodes_cross_section = 100;
     PROPOSAL::InterpolationDef::nodes_propagate = 1000;
+
+    //! If corsika data exist store interpolation tables to the corresponding
+    //! path, otherwise interpolation tables would only stored in main memory if
+    //! no explicit intrpolation def is specified.
+    if(auto data_path = std::getenv("CORSIKA_DATA"))
+        PROPOSAL::InterpolationDef::path_to_tables = std::string(data_path) + "/PROPOSAL";
   }
 
   size_t ProposalProcessBase::hash::operator()(const calc_key_t& p) const noexcept {