diff --git a/.travis.yml b/.travis.yml
index 8aa803f722def2a989cd5a80514b7b08e012ee36..e60dd2e82b4d0fe197d0b2cf3c587b75b22f773a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,68 +1,64 @@
+sudo: false
 language: cpp
 
 compiler:
   - gcc
   - clang
 
-cache:
-  - apt
-
-env:
-  - CASE=CLI CMAKE_ARGS="-DOGS_BUILD_GUI=OFF -DOGS_BUILD_UTILS=ON"
-  - CASE=CLI_PETSC CMAKE_ARGS="-DOGS_BUILD_GUI=OFF -DOGS_BUILD_UTILS=OFF -DOGS_USE_PETSC=ON -DPETSC_DIR=/usr/lib/petscdir/3.4.2/"
-  - CASE=GUI CMAKE_ARGS="-DOGS_BUILD_GUI=ON"
-
-before_install:
-  # -- External package sources --
-  - travis_retry sudo add-apt-repository --yes ppa:boost-latest
-  - travis_retry sudo apt-get install python-software-properties
-  - travis_retry sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
-  - if [[ "$CASE" == "CLI_PETSC" ]]; then sudo add-apt-repository --yes ppa:feelpp/petsc; fi
-  - travis_retry sudo apt-get update -qq;
-
-  # GCC 4.8
-  - travis_retry sudo apt-get install -qq g++-4.8
-  - export CXX="g++-4.8" CC="gcc-4.8"
-  - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90
+addons:
+  apt:
+    sources:
+      - boost-latest
+      - ubuntu-toolchain-r-test
+      # TODO: feelpp/petsc
+    packages:
+      - g++-4.8
+      - libeigen3-dev
+      - libboost1.55-dev
+      - libboost-date-time1.55-dev
+      - libboost-filesystem1.55-dev
+      - libboost-program-options1.55-dev
+      - libboost-system1.55-dev
+      - qt4-dev-tools
+      - libxt-dev
+      # TODO
+      # - libpetsc3.4.2-dev
+      # Not allowed yet:
+      # - numdiff
+      # - libshp-dev
+      # - libgeotiff-dev
 
-install:
-  # -- Install packages --
-  - travis_retry sudo apt-get install -qq libeigen3-dev numdiff
 
-  # Boost
-  - travis_retry sudo apt-get install -qq libboost1.55-dev libboost-date-time1.55-dev libboost-filesystem1.55-dev libboost-program-options1.55-dev libboost-system1.55-dev
 
-  # Eigen
-  - travis_retry wget http://bitbucket.org/eigen/eigen/get/3.2.5.tar.gz
-  - tar -xzf 3.2.5.tar.gz
-  - sudo cp -fR eigen-eigen-bdd17ee3b1b3/* /usr/include/eigen3/
-
-  # CMake
-  - travis_retry wget http://www.cmake.org/files/v3.1/cmake-3.1.1-Linux-x86_64.tar.gz
-  - tar -xzf cmake-3.1.1-Linux-x86_64.tar.gz
-  - sudo cp -fR cmake-3.1.1-Linux-x86_64/* /usr
-  - rm -rf cmake-3.1.1-Linux-x86_64.tar.gz cmake-3.1.1-Linux-x86_64
+cache:
+  directories:
+    - $HOME/cmake-3.1.1-Linux-x86_64
+    - $HOME/VTK-Install
 
-  # Qt
-  - if [[ "$CASE" == "GUI" ]]; then travis_retry sudo apt-get install -qq qt4-dev-tools libshp-dev libgeotiff-dev libxt-dev; fi
+env:
+  global:
+    - VTK_DIR=VTK-Install/lib/cmake/vtk-6.1
+  matrix:
+    - CASE=CLI CMAKE_ARGS="-DOGS_BUILD_GUI=OFF -DOGS_BUILD_UTILS=ON -DVTK_DIR=$HOME/$VTK_DIR"
+    # - CASE=CLI_PETSC CMAKE_ARGS="-DOGS_BUILD_GUI=OFF -DOGS_BUILD_UTILS=OFF -DOGS_USE_PETSC=ON -DPETSC_DIR=/usr/lib/petscdir/3.4.2/"
+    - CASE=GUI CMAKE_ARGS="-DOGS_BUILD_GUI=ON -DOGS_BUILD_CLI=OFF -DOGS_BUILD_TESTS=OFF -DVTK_DIR=$HOME/$VTK_DIR"
 
-  # VTK
-  - travis_retry wget http://www.opengeosys.org/images/dev/vtk-6.1.0.tar.gz
-  - tar -xzf vtk-6.1.0.tar.gz
-  - sudo cp -fR VTK-Install/* /usr
-  - rm -rf vtk-6.1.0.tar.gz VTK-Install
+before_install:
+  - bash scripts/travis/cmake.sh
+  - bash scripts/travis/vtk.sh
 
-  # PetSc
-  - if [[ "$CASE" == "CLI_PETSC" ]]; then travis_retry sudo apt-get install -qq libpetsc3.4.2-dev; fi
+before_script:
+  - export PATH=$HOME/cmake-3.1.1-Linux-x86_64/bin:$PATH
+  - export CXX=g++-4.8 CC=gcc-4.8
 
 script:
   - mkdir build
   - cd build
   - cmake $CMAKE_ARGS ..
-  - make
-  - make tests
+  - make -j 2
+  - if [[ "$CASE" == "CLI" ]]; then make tests; fi
   # PetSc
-  - if [[ "$CASE" == "CLI_PETSC" ]]; then make tests_mpi; fi
+  #- if [[ "$CASE" == "CLI_PETSC" ]]; then make tests_mpi; fi
 
 notifications:
   hipchat:
diff --git a/Applications/ApplicationsLib/CMakeLists.txt b/Applications/ApplicationsLib/CMakeLists.txt
index 61b83c038d9391f1ab79390c66bf3aa63f3efe53..38bedca85bdb906f6d4894cfd591874218f2d558 100644
--- a/Applications/ApplicationsLib/CMakeLists.txt
+++ b/Applications/ApplicationsLib/CMakeLists.txt
@@ -16,3 +16,7 @@ ADD_CATALYST_DEPENDENCY(ApplicationsLib)
 if(OGS_BUILD_GUI)
 	target_link_libraries(ApplicationsLib PUBLIC Qt4::QtCore)
 endif()
+
+if(TARGET Eigen)
+	add_dependencies(ApplicationsLib Eigen)
+endif()
diff --git a/NumLib/CMakeLists.txt b/NumLib/CMakeLists.txt
index dc446ffbb4bf5e83d769c55f9c496acbe28f5694..9bf33ca86e96cd98d58a7911d33c9aa11d928c09 100644
--- a/NumLib/CMakeLists.txt
+++ b/NumLib/CMakeLists.txt
@@ -47,3 +47,6 @@ target_link_libraries(NumLib INTERFACE
 	logog
 )
 
+if(TARGET Eigen)
+	add_dependencies(NumLib Eigen)
+endif()
diff --git a/scripts/cmake/ExternalProjectEigen.cmake b/scripts/cmake/ExternalProjectEigen.cmake
index d1bc30c77c736f68fd4dd49b1a9c4fedb9e4cd33..8b773dcce1ba9d4a31155cc761b1edd54cc44852 100644
--- a/scripts/cmake/ExternalProjectEigen.cmake
+++ b/scripts/cmake/ExternalProjectEigen.cmake
@@ -6,7 +6,7 @@ endif()
 
 # First check for system Eigen
 if(NOT EIGEN3_INCLUDE_DIR)
-	find_package(Eigen3)
+	find_package(Eigen3 3.2.5)
 	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)
diff --git a/scripts/cmake/ThirdPartyLibVersions.cmake b/scripts/cmake/ThirdPartyLibVersions.cmake
index 477f7e73f393c8460ddb34d87c81e47e89eb368f..877977d22fc8469bce10800899188ffe54d035f4 100644
--- a/scripts/cmake/ThirdPartyLibVersions.cmake
+++ b/scripts/cmake/ThirdPartyLibVersions.cmake
@@ -1,7 +1,7 @@
 set(OGS_BOOST_URL "http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download")
 set(OGS_BOOST_MD5 "b8839650e61e9c1c0a89f371dd475546")
 
-set(OGS_EIGEN_URL "http://bitbucket.org/eigen/eigen/get/3.2.5.tar.gz")
+set(OGS_EIGEN_URL "http://opengeosys.s3.amazonaws.com/ogs6-lib-sources/eigen-3.2.5.tar.gz")
 set(OGS_EIGEN_MD5 "8cc513ac6ec687117acadddfcacf551b")
 
 set(OGS_VTK_VERSION 6.1.0)
diff --git a/scripts/travis/cmake.sh b/scripts/travis/cmake.sh
new file mode 100644
index 0000000000000000000000000000000000000000..b29c93eedb579625186cc9be54f810ab1b7dd51c
--- /dev/null
+++ b/scripts/travis/cmake.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+set -e
+# check to see if cmake folder is empty
+if [ ! -d "$HOME/cmake-3.1.1-Linux-x86_64/bin" ]; then
+	cd $HOME
+	wget http://www.cmake.org/files/v3.1/cmake-3.1.1-Linux-x86_64.tar.gz;
+	tar -xzvf cmake-3.1.1-Linux-x86_64.tar.gz;
+else
+	echo 'Using cached cmake directory.';
+fi
diff --git a/scripts/travis/vtk.sh b/scripts/travis/vtk.sh
new file mode 100644
index 0000000000000000000000000000000000000000..8d5cc23d86a447299e7822652a3d257df441265e
--- /dev/null
+++ b/scripts/travis/vtk.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+if [ ! -d "$HOME/VTK-Install/include" ]; then
+	cd $HOME
+	wget http://www.opengeosys.org/images/dev/vtk-6.1.0.tar.gz
+	tar -xzf vtk-6.1.0.tar.gz
+else
+  echo 'Using cached vtk directory.';
+fi