diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6b1760cd29019f798f3a2deeeec27b9e64c2f494..2ab53f79a493bf21105d41615ac99286c20baa9e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,14 +121,6 @@ if (WITH_PYTHIA)
   find_package (Pythia8) # optional
 endif (WITH_PYTHIA)
 
-# check if system level eigen3 is present
-find_package (Eigen3 QUIET)
-if (NOT Eigen3_FOUND)
-  # ...no -> use our own header only version
-  set (THIRDPARTY_Eigen3 "yes")
-  message ("use ThirdParty/eigen3")
-endif (NOT Eigen3_FOUND)
-
 # order of subdirectories
 add_subdirectory (ThirdParty)
 add_subdirectory (Framework)
@@ -143,11 +135,24 @@ if (WITH_COAST)
   add_subdirectory (COAST)
 endif ()
 
-# now check if Eigen3 was previsouly found, or need to be checked again
-if (THIRDPARTY_Eigen3)
-  list (APPEND CMAKE_MODULE_PATH "${EIGEN3_INCLUDE_DIR}/cmake")
+# check for Eigen3: either use ThirdParty/eigen3 or system-level installation
+if (WITH_EIGEN3)
+  string (TOLOWER ${WITH_EIGEN3} WITH_EIGEN3_LOWER)
+  if (WITH_EIGEN3_LOWER EQUAL "system")
+    find_package (Eigen3 REQUIRED)
+  else ()
+    list (APPEND CMAKE_MODULE_PATH "${WITH_EIGEN3}/cmake")
+    set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") 
+    find_package (Eigen3 REQUIRED)
+  endif ()
+else (WITH_EIGEN3)
+  list (APPEND CMAKE_MODULE_PATH "${LOCAL_Eigen3_VERSION}/cmake")
+  set (EIGEN3_INCLUDE_DIR "${LOCAL_Eigen3_VERSION}" CACHE PATH "eigen3 directory")
   find_package (Eigen3 REQUIRED)
-endif (THIRDPARTY_Eigen3)
+endif (WITH_EIGEN3)
 
 # some final info output
 message ("Use eigen3 version: ${EIGEN3_VERSION} from ${EIGEN3_INCLUDE_DIR}")
+
+include (FeatureSummary)
+feature_summary (WHAT ALL)
diff --git a/Framework/Geometry/CMakeLists.txt b/Framework/Geometry/CMakeLists.txt
index f2b260a71238b2a53dac84c960bda8a79c8504aa..39d4fb9844230b0aec94dcc207caadc285dc5b20 100644
--- a/Framework/Geometry/CMakeLists.txt
+++ b/Framework/Geometry/CMakeLists.txt
@@ -46,7 +46,7 @@ target_link_libraries (
 target_include_directories (
   CORSIKAgeometry
   SYSTEM
-  PUBLIC    ${EIGEN3_INCLUDE_DIR}
+  PUBLIC ${EIGEN3_INCLUDE_DIR}
   )
 
 target_include_directories (
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index afff12f356fbb249cb9012d22e433d74dfa0a872..f33a2f516deba04e8dee556b0e18c28cabe69f2c 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -11,11 +11,16 @@ install (DIRECTORY phys DESTINATION include/ThirdParty/)
 install (DIRECTORY catch2 DESTINATION include/ThirdParty/)
 install (DIRECTORY boost DESTINATION include/ThirdParty/boost/)
 
-if (THIRDPARTY_Eigen3)
-  set (LOCAL_Eigen3_VERSION "eigen-eigen-b3f3d4950030") 
-  execute_process (
-    COMMAND ${CMAKE_COMMAND} -E tar xjf ${LOCAL_Eigen3_VERSION}.tar.bz2
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-    )  
-  set (EIGEN3_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${LOCAL_Eigen3_VERSION}" PARENT_SCOPE)
-endif (THIRDPARTY_Eigen3)
+if (NOT WITH_EIGEN3)
+  set (_LOCAL_Eigen3_VERSION "eigen-eigen-b3f3d4950030")
+  if ("${CMAKE_CURRENT_SOURCE_DIR}/${_LOCAL_Eigen3_VERSION}.tar.bz2"
+      IS_NEWER_THAN
+      "${CMAKE_CURRENT_SOURCE_DIR}/${_LOCAL_Eigen3_VERSION}")
+    message ("Unpacking ThirdParty/eigen3")
+    execute_process (
+      COMMAND ${CMAKE_COMMAND} -E tar xjf ${_LOCAL_Eigen3_VERSION}.tar.bz2
+      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+      )
+  endif ()
+  set (LOCAL_Eigen3_VERSION ${CMAKE_CURRENT_SOURCE_DIR}/eigen-eigen-b3f3d4950030 PARENT_SCOPE)
+endif (NOT WITH_EIGEN3)