diff --git a/corsika/detail/modules/pythia8/Decay.inl b/corsika/detail/modules/pythia8/Decay.inl
index 662afa95ae2ff806122a2a47c8387d36f4ee4fe0..4a4f5dc3d2facf102eeff3c70a45841774b0bff0 100644
--- a/corsika/detail/modules/pythia8/Decay.inl
+++ b/corsika/detail/modules/pythia8/Decay.inl
@@ -9,6 +9,7 @@
 #include <corsika/modules/pythia8/Pythia8.hpp>
 #include <corsika/modules/pythia8/Decay.hpp>
 #include <corsika/modules/pythia8/Random.hpp>
+#include <corsika/modules/pythia8/ConfigurationDirectory.hpp>
 
 #include <corsika/framework/utility/COMBoost.hpp>
 
@@ -18,7 +19,8 @@
 namespace corsika::pythia8 {
 
   Decay::Decay(const bool print_listing)
-      : print_listing_(print_listing) {
+      : Pythia8::Pythia(CORSIKA_Pythia8_XML_DIR)
+      , print_listing_(print_listing) {
     init();
   }
 
@@ -36,7 +38,7 @@ namespace corsika::pythia8 {
 
     // set random number generator in pythia
     Pythia8::RndmEngine* rndm = new corsika::pythia8::Random();
-    pythia_.setRndmEnginePtr(rndm);
+    Pythia8::Pythia::setRndmEnginePtr(rndm);
 
     /*
        issue xyz: definition of particles and decay channels use the same mechanism in
@@ -44,15 +46,15 @@ namespace corsika::pythia8 {
      */
     // bool ParticleData::reInit(string startFile, bool xmlFormat = true)
     // read in particle data from Corsika 8
-    // pythia_.particleData.reInit("/home/felix/ngcorsika/corsika-build/include/corsika/particles/ParticleData.xml");
-    // pythia_.particleData.checkTable();
+    // Pythia8::Pythia::particleData.reInit("/home/felix/ngcorsika/corsika-build/include/corsika/particles/ParticleData.xml");
+    // Pythia8::Pythia::particleData.checkTable();
 
-    pythia_.readString("Next:numberShowInfo = 0");
-    pythia_.readString("Next:numberShowProcess = 0");
-    pythia_.readString("Next:numberShowEvent = 0");
+    Pythia8::Pythia::readString("Next:numberShowInfo = 0");
+    Pythia8::Pythia::readString("Next:numberShowProcess = 0");
+    Pythia8::Pythia::readString("Next:numberShowEvent = 0");
 
-    pythia_.readString("Print:quiet = on");
-    pythia_.readString("Check:particleData = 0");
+    Pythia8::Pythia::readString("Print:quiet = on");
+    Pythia8::Pythia::readString("Check:particleData = 0");
 
     /*
        switching off event check in pythia is needed to allow decays that are off-shell
@@ -60,17 +62,17 @@ namespace corsika::pythia8 {
        the consistency of particle masses between event generators is an unsolved issues
     */
     CORSIKA_LOG_INFO("Pythia::Init: switching off event checking in pythia..");
-    pythia_.readString("Check:event = 1");
+    Pythia8::Pythia::readString("Check:event = 1");
 
-    pythia_.readString("ProcessLevel:all = off");
-    pythia_.readString("ProcessLevel:resonanceDecays = off");
+    Pythia8::Pythia::readString("ProcessLevel:all = off");
+    Pythia8::Pythia::readString("ProcessLevel:resonanceDecays = off");
 
     // making sure
     setStable(Code::Pi0);
 
-    //    pythia_.particleData.readString("59:m0 = 101.00");
+    //    Pythia8::Pythia::particleData.readString("59:m0 = 101.00");
 
-    if (!pythia_.init())
+    if (!Pythia8::Pythia::init())
       throw std::runtime_error("Pythia::Decay: Initialization failed!");
   }
 
@@ -115,20 +117,21 @@ namespace corsika::pythia8 {
 
   void Decay::setUnstable(Code const pCode) {
     CORSIKA_LOG_INFO("Pythia::Decay: setting {} unstable..", pCode);
-    pythia_.particleData.mayDecay(static_cast<int>(get_PDG(pCode)), true);
+    Pythia8::Pythia::particleData.mayDecay(static_cast<int>(get_PDG(pCode)), true);
   }
 
   void Decay::setStable(Code const pCode) {
     CORSIKA_LOG_INFO("Pythia::Decay: setting {} stable..", pCode);
-    pythia_.particleData.mayDecay(static_cast<int>(get_PDG(pCode)), false);
+    Pythia8::Pythia::particleData.mayDecay(static_cast<int>(get_PDG(pCode)), false);
   }
 
   bool Decay::isStable(Code const vCode) {
-    return pythia_.particleData.canDecay(static_cast<int>(get_PDG(vCode)));
+    return Pythia8::Pythia::particleData.canDecay(static_cast<int>(get_PDG(vCode)));
   }
 
   bool Decay::canDecay(Code const pCode) {
-    const bool ans = pythia_.particleData.canDecay(static_cast<int>(get_PDG(pCode)));
+    const bool ans =
+        Pythia8::Pythia::particleData.canDecay(static_cast<int>(get_PDG(pCode)));
     CORSIKA_LOG_INFO("Pythia::Decay: checking if particle: {} can decay in PYTHIA? {} ",
                      pCode, ans);
     return ans;
@@ -193,7 +196,7 @@ namespace corsika::pythia8 {
     count_++;
 
     // pythia stack
-    Pythia8::Event& event = pythia_.event;
+    Pythia8::Event& event = Pythia8::Pythia::event;
     event.reset();
 
     auto const particleId = projectile.getPID();
@@ -213,7 +216,7 @@ namespace corsika::pythia8 {
     // add particle to pythia stack
     event.append(pdgCode, 1, 0, 0, px, py, pz, en, m);
 
-    if (!pythia_.next())
+    if (!Pythia8::Pythia::next())
       throw std::runtime_error("Pythia::Decay: decay failed!");
     else
       CORSIKA_LOG_INFO("Pythia::Decay: particles after decay: {} ", event.size());
diff --git a/corsika/detail/modules/pythia8/Interaction.inl b/corsika/detail/modules/pythia8/Interaction.inl
index 8ddb3ac9130a6185ff7071fb3fb3f8a319cbc54a..afa5f423fd0bc320b5750f161748c05550eeaa9b 100644
--- a/corsika/detail/modules/pythia8/Interaction.inl
+++ b/corsika/detail/modules/pythia8/Interaction.inl
@@ -9,6 +9,7 @@
 #pragma once
 
 #include <corsika/modules/pythia8/Interaction.hpp>
+#include <corsika/modules/pythia8/ConfigurationDirectory.hpp>
 
 #include <corsika/framework/geometry/FourVector.hpp>
 #include <corsika/framework/utility/COMBoost.hpp>
@@ -25,29 +26,30 @@ namespace corsika::pythia8 {
     std::cout << "Pythia::Interaction n=" << count_ << std::endl;
   }
 
-  Interaction::Interaction(const bool print_listing)
-      : print_listing_(print_listing) {
+  Interaction::Interaction(bool const print_listing)
+      : Pythia8::Pythia(CORSIKA_Pythia8_XML_DIR)
+      , print_listing_(print_listing) {
 
+    std::cout << "Configuring Pythia8 from: " << CORSIKA_Pythia8_XML_DIR << std::endl;
     std::cout << "Pythia::Interaction n=" << count_ << std::endl;
 
     // initialize Pythia
-
-    pythia_.readString("Print:quiet = off");
-    pythia_.readString("Check:particleData = on");      // during init
-    pythia_.readString("Check:event = on");             // default: on
-    pythia_.readString("Check:levelParticleData = 12"); // 1 is default
+    Pythia8::Pythia::readString("Print:quiet = off");
+    Pythia8::Pythia::readString("Check:particleData = on");      // during init
+    Pythia8::Pythia::readString("Check:event = on");             // default: on
+    Pythia8::Pythia::readString("Check:levelParticleData = 12"); // 1 is default
     // TODO: proper process initialization for MinBias needed
-    pythia_.readString("HardQCD:all = on");
-    pythia_.readString("ProcessLevel:resonanceDecays = off");
+    Pythia8::Pythia::readString("HardQCD:all = on");
+    Pythia8::Pythia::readString("ProcessLevel:resonanceDecays = off");
 
-    if (!pythia_.init())
+    if (!Pythia8::Pythia::init())
       throw std::runtime_error("Pythia::Interaction: Initialization failed!");
 
     // any decays in pythia? if yes need to define which particles
     if (internalDecays_) {
       // define which particles are passed to corsika, i.e. which particles make it into
       // history even very shortlived particles like charm or pi0 are of interest here
-      const std::vector<Code> HadronsWeWantTrackedByCorsika = {
+      std::vector<Code> const HadronsWeWantTrackedByCorsika = {
           Code::PiPlus, Code::PiMinus, Code::Pi0,        Code::KMinus,     Code::KPlus,
           Code::K0Long, Code::K0Short, Code::SigmaPlus,  Code::SigmaMinus, Code::Lambda0,
           Code::Xi0,    Code::XiMinus, Code::OmegaMinus, Code::DPlus,      Code::DMinus,
@@ -57,7 +59,8 @@ namespace corsika::pythia8 {
     }
 
     // basic initialization of cross section routines
-    sigma_.init(&pythia_.info, pythia_.settings, &pythia_.particleData, &pythia_.rndm);
+    sigma_.init(&(Pythia8::Pythia::info), Pythia8::Pythia::settings,
+                &(Pythia8::Pythia::particleData), &(Pythia8::Pythia::rndm));
   }
 
   void Interaction::setStable(std::vector<Code> const& particleList) {
@@ -66,16 +69,16 @@ namespace corsika::pythia8 {
 
   void Interaction::setUnstable(Code const pCode) {
     std::cout << "Pythia::Interaction: setting " << pCode << " unstable.." << std::endl;
-    pythia_.particleData.mayDecay(static_cast<int>(get_PDG(pCode)), true);
+    Pythia8::Pythia::particleData.mayDecay(static_cast<int>(get_PDG(pCode)), true);
   }
 
   void Interaction::setStable(Code const pCode) {
     std::cout << "Pythia::Interaction: setting " << pCode << " stable.." << std::endl;
-    pythia_.particleData.mayDecay(static_cast<int>(get_PDG(pCode)), false);
+    Pythia8::Pythia::particleData.mayDecay(static_cast<int>(get_PDG(pCode)), false);
   }
 
-  void Interaction::configureLabFrameCollision(const Code BeamId, const Code TargetId,
-                                               const HEPEnergyType BeamEnergy) {
+  void Interaction::configureLabFrameCollision(Code const BeamId, Code const TargetId,
+                                               HEPEnergyType const BeamEnergy) {
     // Pythia configuration of the current event
     // very clumsy. I am sure this can be done better..
 
@@ -84,26 +87,26 @@ namespace corsika::pythia8 {
     auto const pdgBeam = static_cast<int>(get_PDG(BeamId));
     std::stringstream stBeam;
     stBeam << "Beams:idA = " << pdgBeam;
-    pythia_.readString(stBeam.str());
+    Pythia8::Pythia::readString(stBeam.str());
     // set target
     auto pdgTarget = static_cast<int>(get_PDG(TargetId));
     // replace hydrogen with proton, otherwise pythia goes into heavy ion mode!
     if (TargetId == Code::Hydrogen) pdgTarget = static_cast<int>(get_PDG(Code::Proton));
     std::stringstream stTarget;
     stTarget << "Beams:idB = " << pdgTarget;
-    pythia_.readString(stTarget.str());
+    Pythia8::Pythia::readString(stTarget.str());
     // set frame to lab. frame
-    pythia_.readString("Beams:frameType = 2");
+    Pythia8::Pythia::readString("Beams:frameType = 2");
     // set beam energy
-    const double Elab = BeamEnergy / 1_GeV;
+    double const Elab = BeamEnergy / 1_GeV;
     std::stringstream stEnergy;
     stEnergy << "Beams:eA = " << Elab;
-    pythia_.readString(stEnergy.str());
+    Pythia8::Pythia::readString(stEnergy.str());
     // target at rest
-    pythia_.readString("Beams:eB = 0.");
+    Pythia8::Pythia::readString("Beams:eB = 0.");
     // initialize this config
 
-    if (!pythia_.init())
+    if (!Pythia8::Pythia::init())
       throw std::runtime_error("Pythia::Interaction: Initialization failed!");
   }
 
@@ -113,20 +116,20 @@ namespace corsika::pythia8 {
   }
 
   std::tuple<CrossSectionType, CrossSectionType> Interaction::getCrossSection(
-      const Code BeamId, const Code TargetId, const HEPEnergyType CoMenergy) {
+      Code const BeamId, Code const TargetId, HEPEnergyType const CoMenergy) {
     // interaction possible in pythia?
     if (TargetId == Code::Proton || TargetId == Code::Hydrogen) {
       if (canInteract(BeamId) && isValidCoMEnergy(CoMenergy)) {
         // input particle PDG
         auto const pdgCodeBeam = static_cast<int>(get_PDG(BeamId));
         auto const pdgCodeTarget = static_cast<int>(get_PDG(TargetId));
-        const double ecm = CoMenergy / 1_GeV;
+        double const ecm = CoMenergy / 1_GeV;
 
         // calculate cross section
         sigma_.calc(pdgCodeBeam, pdgCodeTarget, ecm);
         if (sigma_.hasSigmaTot()) {
-          const double sigEla = sigma_.sigmaEl();
-          const double sigProd = sigma_.sigmaTot() - sigEla;
+          double const sigEla = sigma_.sigmaEl();
+          double const sigProd = sigma_.sigmaTot() - sigEla;
 
           return std::make_tuple(sigProd * (1_fm * 1_fm), sigEla * (1_fm * 1_fm));
 
@@ -142,7 +145,6 @@ namespace corsika::pythia8 {
     }
   }
 
-  //  template <>
   GrammageType Interaction::getInteractionLength(
       corsika::setup::Stack::particle_type const& particle) {
 
@@ -166,7 +168,7 @@ namespace corsika::pythia8 {
     pTotLab += pTarget;
     auto const pTotLabNorm = pTotLab.getNorm();
     // calculate cm. energy
-    const HEPEnergyType ECoM = sqrt(
+    HEPEnergyType const ECoM = sqrt(
         (Elab + pTotLabNorm) * (Elab - pTotLabNorm)); // binomial for numerical accuracy
 
     std::cout << "Interaction: LambdaInt: \n"
@@ -183,8 +185,8 @@ namespace corsika::pythia8 {
         ideally as full particle object so that the four momenta
         and the boosts can be defined..
       */
-      const auto* currentNode = particle.getNode();
-      const auto mediumComposition =
+      auto const* currentNode = particle.getNode();
+      auto const mediumComposition =
           currentNode->getModelProperties().getNuclearComposition();
       // determine average interaction length
 
@@ -211,17 +213,12 @@ namespace corsika::pythia8 {
     return std::numeric_limits<double>::infinity() * 1_g / (1_cm * 1_cm);
   }
 
-  /**
-     In this function PYTHIA is called to produce one event. The
-     event is copied (and boosted) into the shower lab frame.
-   */
-
   template <class TView>
   void Interaction::doInteraction(TView& view) {
 
     auto projectile = view.getProjectile();
 
-    const auto corsikaBeamId = projectile.getPID();
+    auto const corsikaBeamId = projectile.getPID();
     std::cout << "Pythia::Interaction: "
               << "DoInteraction: " << corsikaBeamId << " interaction? "
               << corsika::pythia8::Interaction::canInteract(corsikaBeamId) << std::endl;
@@ -244,9 +241,9 @@ namespace corsika::pythia8 {
 
       // define target
       // FOR NOW: target is always at rest
-      const auto eTargetLab = 0_GeV + constants::nucleonMass;
-      const auto pTargetLab = MomentumVector(labCS, 0_GeV, 0_GeV, 0_GeV);
-      const FourVector PtargLab(eTargetLab, pTargetLab);
+      auto const eTargetLab = 0_GeV + constants::nucleonMass;
+      auto const pTargetLab = MomentumVector(labCS, 0_GeV, 0_GeV, 0_GeV);
+      FourVector const PtargLab(eTargetLab, pTargetLab);
 
       std::cout << "Interaction: ebeam lab: " << eProjectileLab / 1_GeV << std::endl
                 << "Interaction: pbeam lab: " << pProjectileLab.getComponents() / 1_GeV
@@ -255,7 +252,7 @@ namespace corsika::pythia8 {
                 << "Interaction: ptarget lab: " << pTargetLab.getComponents() / 1_GeV
                 << std::endl;
 
-      const FourVector PprojLab(eProjectileLab, pProjectileLab);
+      FourVector const PprojLab(eProjectileLab, pProjectileLab);
 
       // define target kinematics in lab frame
       // define boost to and from CoM frame
@@ -288,8 +285,8 @@ namespace corsika::pythia8 {
       HEPEnergyType Ecm = sqrt(Etot * Etot - Ptot.getSquaredNorm());
 
       // sample target mass number
-      const auto* currentNode = projectile.getNode();
-      const auto& mediumComposition =
+      auto const* currentNode = projectile.getNode();
+      auto const& mediumComposition =
           currentNode->getModelProperties().getNuclearComposition();
       // get cross sections for target materials
       /*
@@ -302,12 +299,12 @@ namespace corsika::pythia8 {
 
       for (size_t i = 0; i < compVec.size(); ++i) {
         auto const targetId = compVec[i];
-        const auto [sigProd, sigEla] = getCrossSection(corsikaBeamId, targetId, Ecm);
-        [[maybe_unused]] const auto& dummy_sigEla = sigEla;
+        auto const [sigProd, sigEla] = getCrossSection(corsikaBeamId, targetId, Ecm);
+        [[maybe_unused]] auto const& dummy_sigEla = sigEla;
         cross_section_of_components[i] = sigProd;
       }
 
-      const auto corsikaTargetId =
+      auto const corsikaTargetId =
           mediumComposition.sampleTarget(cross_section_of_components, RNG_);
       std::cout << "Interaction: target selected: " << corsikaTargetId << std::endl;
 
@@ -331,10 +328,11 @@ namespace corsika::pythia8 {
         configureLabFrameCollision(corsikaBeamId, corsikaTargetId, eProjectileLab);
 
         // create event in pytia
-        if (!pythia_.next()) throw std::runtime_error("Pythia::DoInteraction: failed!");
+        if (!Pythia8::Pythia::next())
+          throw std::runtime_error("Pythia::DoInteraction: failed!");
 
         // link to pythia stack
-        Pythia8::Event& event = pythia_.event;
+        Pythia8::Event& event = Pythia8::Pythia::event;
 
         if (print_listing_) {
           // print final state
@@ -350,7 +348,7 @@ namespace corsika::pythia8 {
 
           auto const pyId = convert_from_PDG(static_cast<PDGCode>(p8p.id()));
 
-          const MomentumVector pyPlab(
+          MomentumVector const pyPlab(
               labCS, {p8p.px() * 1_GeV, p8p.py() * 1_GeV, p8p.pz() * 1_GeV});
           HEPEnergyType const pyEn = p8p.e() * 1_GeV;
 
diff --git a/corsika/modules/pythia8/Decay.hpp b/corsika/modules/pythia8/Decay.hpp
index 2bdfccb3c82a2a0aa8b653d7c117f062ee9bd1e6..5de68f4fbd2635471cc604a9fae3c2b783354195 100644
--- a/corsika/modules/pythia8/Decay.hpp
+++ b/corsika/modules/pythia8/Decay.hpp
@@ -17,7 +17,7 @@
 
 namespace corsika::pythia8 {
 
-  class Decay : public DecayProcess<Decay> {
+  class Decay : public DecayProcess<Decay>, public Pythia8::Pythia {
 
   public:
     Decay(bool const print_listing = false);
@@ -59,7 +59,6 @@ namespace corsika::pythia8 {
     void setStable(Code const);
 
     // data members
-    Pythia8::Pythia pythia_;
     int count_ = 0;
     bool handleAllDecays_ = true;
     std::set<Code> handledDecays_;
diff --git a/corsika/modules/pythia8/Interaction.hpp b/corsika/modules/pythia8/Interaction.hpp
index 9370ffd570fafb9539200720c74e90fee4340284..f2d264db15befbad789b0ba2afd122fa0e586f86 100644
--- a/corsika/modules/pythia8/Interaction.hpp
+++ b/corsika/modules/pythia8/Interaction.hpp
@@ -20,7 +20,7 @@
 
 namespace corsika::pythia8 {
 
-  class Interaction : public InteractionProcess<Interaction> {
+  class Interaction : public InteractionProcess<Interaction>, public Pythia8::Pythia {
 
   public:
     Interaction(const bool print_listing = false);
@@ -38,20 +38,17 @@ namespace corsika::pythia8 {
     std::tuple<CrossSectionType, CrossSectionType> getCrossSection(
         const Code BeamId, const Code TargetId, const HEPEnergyType CoMenergy);
 
-    // template <typename TParticle>
     GrammageType getInteractionLength(corsika::setup::Stack::particle_type const&);
 
     /**
        In this function PYTHIA is called to produce one event. The
        event is copied (and boosted) into the shower lab frame.
      */
-
     template <typename TView>
     void doInteraction(TView&);
 
   private:
     default_prng_type& RNG_ = RNGManager::getInstance().getRandomStream("pythia");
-    Pythia8::Pythia pythia_;
     Pythia8::SigmaTotal sigma_;
     const bool internalDecays_ = true;
     int count_ = 0;
diff --git a/modules/pythia/CMakeLists.txt b/modules/pythia/CMakeLists.txt
index 623d53adcb285010cb1ca95146e59459b32ec0bd..868f801d15ac9333f2f93fdd4cdf7f9876e96626 100644
--- a/modules/pythia/CMakeLists.txt
+++ b/modules/pythia/CMakeLists.txt
@@ -8,7 +8,7 @@ mark_as_advanced (ThirdPartyChoiceValues)
 ##############################################################################
 # check for Pythia8: either use C8 or system-level installation
 
-message ("***** Configuring Pythia8 version")
+message (STATUS "***** Configuring Pythia8 version")
 
 set (USE_PYTHIA8_C8 "C8" CACHE STRING
     "Selection of pythia8 package. Can be \'C8\' or \'SYSTEM\'. Default: \'C8\'.")
@@ -21,18 +21,18 @@ message (STATUS "USE_PYTHIA8_C8='${USE_PYTHIA8_C8}'")
 add_library (C8::ext::pythia8 STATIC IMPORTED GLOBAL)
 if ("x_${USE_PYTHIA8_C8}" STREQUAL "x_SYSTEM")
   
-  find_package (Pythia8 REQUIRED) 
+  find_package (Pythia8 8245 EXACT REQUIRED) 
   message (STATUS "Using system-level Pythia8 version ${Pythia8_VERSION} at ${Pythia8_INCLUDE_DIR}")
   set_target_properties (
     C8::ext::pythia8 PROPERTIES
     IMPORTED_LOCATION ${Pythia8_LIBRARY}/libpythia8.a
     IMPORTED_LINK_INTERFACE_LIBRARIES dl
     INTERFACE_INCLUDE_DIRECTORIES ${Pythia8_INCLUDE_DIR}
+    INTERFACE_COMPILE_DEFINITIONS CORSIKA_Pythia8_PREFIX="${Pythia8_PREFIX}"
     )
   set (Pythia8_FOUND 1 PARENT_SCOPE)
 
-  message ("Pythia8_LIBRARY=${Pythia8_LIBRARY}")
-  message ("Pythia8_INCLUDE_DIR=${Pythia8_INCLUDE_DIR}")
+  message (STATUS "Pythia8 (system) at ${Pythia8_PREFIX}")
 
 else ()
 
@@ -43,9 +43,9 @@ else ()
     URL ${CMAKE_CURRENT_SOURCE_DIR}/pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2
     URL_MD5 d3e951a2f101e8cfec26405cb61db83b
     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pythia8/source
-    INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/external/pythia8
+    INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/pythia8/install
     LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/pythia8/log
-    CONFIGURE_COMMAND ./configure --cxx-common=\\"${CMAKE_CXX_FLAGS} -O2 -fPIC\\" --prefix=${CMAKE_INSTALL_PREFIX}/external/pythia8
+    CONFIGURE_COMMAND ./configure --cxx-common=\\"${CMAKE_CXX_FLAGS} -O2 -fPIC\\" --prefix=${CMAKE_CURRENT_BINARY_DIR}/pythia8/install 
     BUILD_IN_SOURCE ON
     EXCLUDE_FROM_ALL TRUE
     LOG_CONFIGURE TRUE
@@ -54,28 +54,27 @@ else ()
     LOG_MERGED_STDOUTERR TRUE
     )
   set (Pythia8_FOUND 1 PARENT_SCOPE)
-  ExternalProject_Get_Property (pythia8 INSTALL_DIR)
+  ExternalProject_Get_Property (pythia8 INSTALL_DIR) # this is "make"
+  set (Pythia8_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/externals/pythia8) # this is "make install"
   set (Pythia8_VERSION ${_C8_Pythia8_VERSION} CACHE STRING "Version of Pythia8")
   set (Pythia8_PREFIX ${INSTALL_DIR})
   set (Pythia8_INCLUDE_DIR  ${Pythia8_PREFIX}/include)
   set (Pythia8_LIBRARY ${Pythia8_PREFIX}/lib/libpythia8.a)
   add_dependencies (C8::ext::pythia8 pythia8)
 
-  # create include directory at config time
-  file (MAKE_DIRECTORY ${Pythia8_INCLUDE_DIR})
-
   set (Pythia8_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/pythia8)
   install (DIRECTORY ${INSTALL_DIR}/ DESTINATION ${Pythia8_INSTALL_DIR})
   
   set_target_properties (
-    C8::ext::pythia8 PROPERTIES
+    C8::ext::pythia8
+    PROPERTIES
     IMPORTED_LOCATION ${Pythia8_LIBRARY}
     IMPORTED_LINK_INTERFACE_LIBRARIES dl
-    INTERFACE_INCLUDE_DIRECTORIES
-      $<BUILD_INTERFACE:${Pythia8_INCLUDE_DIR}>
+    INTERFACE_INCLUDE_DIRECTORIES ${Pythia8_INCLUDE_DIR}
+    INTERFACE_COMPILE_DEFINITIONS CORSIKA_Pythia8_PREFIX="${Pythia8_PREFIX}"
     )
 
-    message (STATUS "Pythia8_INCLUDE_DIR ${Pythia8_INCLUDE_DIR}")
+    message (STATUS "Pythia8 build at ${INSTALL_DIR}, install to ${Pythia8_INSTALL_DIR}")
 endif ()