diff --git a/CMakeLists.txt b/CMakeLists.txt
index ae6f3c43be2dee1d593b7384a860825a0542b481..a74f0e361f938b366ea342a1080bbd89bc187671 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,8 +21,9 @@ enable_language (Fortran)
 # TEMPORARY: this should be removed, the sanitizers should be always enabled
 option (WITH_CORSIKA_SANITIZERS_ENABLED "temporary way to globally disable sanitizers until the currently failing tests are fixed" OFF)
 option (WITH_COAST "Flag to switch on/off COAST (reverse) interface" OFF)
-set (WITH_EIGEN3 "" CACHE STRING "Selection of eigen3 package. Can be \'system\' or path to installation. If empty ThirdParty/eigen3 will be used." FORCE)
-set (WITH_PYTHIA8 "" CACHE STRING "Selection of pythia8 package. Can be \'system\' or path to installation. If empty ThirdParty/pythia8 will be used..")
+set (WITH_EIGEN3 "" CACHE STRING "Selection of eigen3 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/eigen3." FORCE)
+set (WITH_PYTHIA8 "" CACHE STRING "Selection of pythia8 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/pythia8." FORCE)
+set (WITH_BOOST "" CACHE STRING "Selection of boost libaries. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/boost." FORCE)
 
 # check for python
 set(Python_ADDITIONAL_VERSIONS 3)
@@ -135,29 +136,28 @@ else (WITH_PYTHIA8)
   find_package (Pythia8) # if not found here, will automatically pick ThirdParty version 
 endif (WITH_PYTHIA8)
 
-# include potential ThirdParty code provided with CORSIKA
-add_subdirectory (ThirdParty)
-
 # check for Eigen3: either use ThirdParty/eigen3 or system-level installation
 message ("***** Configuring eigen3 version")
 if (WITH_EIGEN3)
   string (TOLOWER ${WITH_EIGEN3} WITH_EIGEN3_LOWER)
-  if (WITH_EIGEN3_LOWER STREQUAL "system")
-    message ("Use system-level eigen3")
+  if ("x_${WITH_EIGEN3_LOWER}" STREQUAL "x_c8")
+    message ("Use eigen3 from ThirdParty folder")
   else ()
-    message ("Use eigen3 installed at ${WITH_EIGEN3}")
+    message ("Using eigen3 installed at location ${WITH_EIGEN3}")
     list (APPEND CMAKE_MODULE_PATH "${WITH_EIGEN3}/cmake")
-    set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") 
+    # set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") 
+    find_package (Eigen3 REQUIRED)
   endif ()
 else (WITH_EIGEN3)
-  list (APPEND CMAKE_MODULE_PATH "${C8_Eigen3_VERSION}/cmake")
-  set (EIGEN3_INCLUDE_DIR "${C8_Eigen3_VERSION}" CACHE PATH "eigen3 directory")
+  message ("Searching eigen3 installed at system-level")
+  find_package (Eigen3) # if not found here, will automatically pick ThirdParty version 
 endif (WITH_EIGEN3)
-find_package (Eigen3 REQUIRED)
 
 # some final info output
 message ("Use eigen3 version: ${EIGEN3_VERSION} from ${EIGEN3_INCLUDE_DIR}")
 
+# include potential ThirdParty code provided with CORSIKA
+add_subdirectory (ThirdParty)
 
 # order of subdirectories
 add_subdirectory (Framework)
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 48b0bedbe30ec6565d199dedb09a7739f82f1db0..e2b4d06dfde83fdd6ceb9add90ed23cea0e264b0 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -18,7 +18,7 @@ add_library (CORSIKAboost INTERFACE IMPORTED GLOBAL)
 if (NOT Boost_FOUND)
   set (_C8_Boost_VERSION "107000")
   message ("Building ThirdParty/boost using boost-${_C8_Boost_VERSION}.tar.bz2")
-  ExternalProject_Add (boost PREFIX boost
+  ExternalProject_Add (boost
     URL ${CMAKE_CURRENT_SOURCE_DIR}/boost-${_C8_Boost_VERSION}.tar.bz2
     URL_MD5 8ffed5895a851894ad866888d4e64685
     SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/boost/install/boost 
@@ -54,19 +54,51 @@ endif (NOT Boost_FOUND)
 
 # eigen3
 
-if (NOT WITH_EIGEN3)
+add_library (CORSIKAEigen3 INTERFACE IMPORTED GLOBAL)
+if (NOT Eigen3_FOUND)
   set (_C8_Eigen3_VERSION "eigen-eigen-b3f3d4950030")
-  if ("${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}.tar.bz2"
-      IS_NEWER_THAN
-      "${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}")
-    message ("Unpacking ThirdParty/eigen3")
-    execute_process (
-      COMMAND ${CMAKE_COMMAND} -E tar xjf ${_C8_Eigen3_VERSION}.tar.bz2
-      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-      )
-  endif ()
-  set (C8_Eigen3_VERSION ${CMAKE_CURRENT_SOURCE_DIR}/eigen-eigen-b3f3d4950030 PARENT_SCOPE)
-endif (NOT WITH_EIGEN3)
+
+  message ("Building ThirdParty/eigen3 using ${_C8_Eigen3_VERSION}.tar.bz2")
+  ExternalProject_Add (eigen3
+    URL ${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}.tar.bz2
+    URL_MD5 8ffed5895a851894ad866888d4e64685
+    SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen
+    INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND ""
+    INSTALL_COMMAND ""
+    BUILD_IN_SOURCE ON
+    EXCLUDE_FROM_ALL FALSE
+    )
+  set (HAVE_Eigen3 1 CACHE BOOL "presence of eigen3, via external-project-add in ThirdParty folder")
+  set (Eigen3_FOUND 1 PARENT_SCOPE)
+  ExternalProject_Get_Property (boost INSTALL_DIR)
+  set (Eigen3_PREFIX ${INSTALL_DIR}/..)
+  set (Eigen3_INCLUDE_DIR  ${Eigen3_PREFIX})
+  set (Eigen3_LIBRARY_DIR ${Eigen3_PREFIX})
+  add_dependencies (CORSIKAboost boost)
+
+  # create include directory at config time
+  file (MAKE_DIRECTORY ${Eigen3_INCLUDE_DIR})
+  
+  set (Eigen3_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/eigen3)
+  install (DIRECTORY ${Eigen3_PREFIX}/ DESTINATION ${Eigen3_INSTALL_DIR})
+  
+  set_target_properties (
+    CORSIKAEigen3 PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES
+      $<BUILD_INTERFACE:${Eigen3_INCLUDE_DIR}>
+    )
+
+else (NOT Eigen3_FOUND)
+
+  set_target_properties (
+    CORSIKAEigen3 PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES
+      $<BUILD_INTERFACE:${Eigen3_INCLUDE_DIR}>
+    )
+  
+endif (NOT Eigen3_FOUND)
 
 # Pythia8
 
@@ -75,7 +107,7 @@ if (NOT Pythia8_FOUND)
   set (_C8_Pythia8_VERSION "8235")
   message ("Building ThirdParty/pythia8 using pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2")
   message ("This will take a bit.....")
-  ExternalProject_Add (pythia8 PREFIX pythia8
+  ExternalProject_Add (pythia8
     URL ${CMAKE_CURRENT_SOURCE_DIR}/pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2
     URL_MD5 53e1b5925a53875dedcf4ff2e3ba4cb9
     INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/pythia8/install