diff --git a/.travis.yml b/.travis.yml
index 661d3a8e8e5cd6d3baf6494c7017abb835b2eee0..5885f0b27926de74865b8641a9c697262ad65c76 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,8 +10,10 @@ env:
   - TEST_SUITE=static_phpcs
   - TEST_SUITE=static_annotation
 cache:
+  apt: true
   directories:
     - $HOME/.composer/cache
+    - $HOME/.cache/bin
 matrix:
   exclude:
     - php: 5.6
@@ -21,7 +23,8 @@ matrix:
 before_install:
   - sudo apt-get update -qq
   - sudo apt-get install -y -qq postfix
-  - composer self-update
+  - sh -c "if [ -x $HOME/.cache/bin/composer ]; then $HOME/.cache/bin/composer self-update; echo ''; else  mkdir -p $HOME/.cache/bin; curl --connect-timeout 30 -sS 'https://getcomposer.org/installer' | php -- --install-dir $HOME/.cache/bin/ --filename composer; fi"
+  - $HOME/.cache/bin/composer --version
 before_script:
   # Mock mail
   - sudo service postfix stop
@@ -50,7 +53,7 @@ before_script:
   # Change memory_limit for travis
   - echo 'memory_limit = -1' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
   - phpenv rehash;
-  - composer install --no-interaction --prefer-dist
+  - $HOME/.cache/bin/composer install --no-interaction --prefer-dist
 script:
   # Unit tests
   - sh -c "if [ '$TEST_SUITE' = 'unit' ]; then ./vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist; fi"