diff --git a/CMakeLists.txt b/CMakeLists.txt
index 47c1b5dacf2ec22a7c9fb576a02da7a1dadbf528..89231968eb4b295367aa97bd31c793978dedda34 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,6 +98,9 @@ ENDIF() #OGS_PACKAGING
 OPTION(Boost_USE_STATIC_LIBS "This option has to be set from the command line (before boost gets found)!" OFF)
 INCLUDE(scripts/cmake/ExternalProjectBoost.cmake)
 INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )
+IF(OGS_USE_EIGEN)
+	INCLUDE(scripts/cmake/ExternalProjectEigen.cmake)
+ENDIF()
 
 # Add subdirectories with the projects
 ADD_SUBDIRECTORY( ThirdParty )
diff --git a/scripts/cmake/ExternalProjectEigen.cmake b/scripts/cmake/ExternalProjectEigen.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..6d2c0abe024fd0a48ec234f774500b76e6254f85
--- /dev/null
+++ b/scripts/cmake/ExternalProjectEigen.cmake
@@ -0,0 +1,35 @@
+MESSAGE(STATUS "Eigen inc: ${EIGEN3_INCLUDE_DIR}")
+
+IF(EIGEN3_FOUND)
+	RETURN()
+ENDIF()
+
+# First check for system Eigen
+IF(NOT EIGEN3_INCLUDE_DIR)
+	FIND_PACKAGE(Eigen3)
+	IF(EIGEN3_FOUND)
+		SET(EIGEN3_FOUND TRUE CACHE BOOL "Was Eigen found?" FORCE)
+		SET(EIGEN3_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING "Eigen include dir" FORCE)
+		RETURN()
+	ELSE()
+		SET(EIGEN3_INCLUDE_DIR "")
+	ENDIF()
+ENDIF()
+
+ExternalProject_Add(Eigen
+	PREFIX ${CMAKE_BINARY_DIR}/External/eigen
+	URL http://bitbucket.org/eigen/eigen/get/3.2.0.tar.gz
+	URL_MD5 9559c34af203dde5f3f1d976d859c5b3
+	UPDATE_COMMAND ""
+	CONFIGURE_COMMAND ""
+	BUILD_COMMAND ""
+	BUILD_IN_SOURCE 1
+	INSTALL_COMMAND ""
+)
+ExternalProject_Get_Property( Eigen source_dir )
+
+IF(NOT EIGEN3_INCLUDE_DIR)
+	SET(EIGEN3_FOUND TRUE CACHE BOOL "Was Eigen found?" FORCE)
+	SET( EIGEN3_INCLUDE_DIR ${source_dir} CACHE INTERNAL "Eigen include dir")
+	MESSAGE(STATUS "Downloading Eigen automatically.")
+ENDIF()
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 1295af1ffbdc6ade270e946b93159b2c504197fa..e6f31ab9ace42215b55332418217fefd586c899b 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -165,8 +165,3 @@ ENDIF() # Shapelib_FOUND
 IF(OGS_USE_LIS)
 	FIND_PACKAGE( LIS REQUIRED )
 ENDIF()
-
-## Eigen ##
-IF(OGS_USE_EIGEN)
-	FIND_PACKAGE( Eigen3 REQUIRED )
-ENDIF()