diff --git a/.coveralls.yml b/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f289677959bd44b3413a523bc929f368e8b400e7
--- /dev/null
+++ b/.coveralls.yml
@@ -0,0 +1,3 @@
+service_name: travis-ci
+src_dir: .
+coverage_clover: build/logs/clover-*.xml
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 95003d4a4095a71dd95e33e274cd8e16608c2ee3..5029c10ccaf328f8688b6a3df38772ad53e1e680 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,6 +34,20 @@ matrix:
   allow_failures:
     - php: hhvm
     - php: 5.6
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Core
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Plugins
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Integration
+  include:
+    # Code Coverage
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Core
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Plugins
+    - php: 5.4
+      env: MYSQL_ADAPTER=PDO_MYSQL COVERAGE=Integration
   exclude:
     # Javascript tests need to run only on one PHP version
     - php: 5.4
@@ -91,6 +105,10 @@ install:
   - git checkout master -- ./tests/travis ./plugins/CoreConsole || true
 
 before_script:
+  - if [ -z "$TEST_SUITE" ];
+    then composer require satooshi/php-coveralls dev-master;
+    fi
+
   - ./tests/travis/configure_git.sh
 
   # print out mysql information
@@ -139,6 +157,10 @@ after_script:
   # change directory back to root travis dir
   - cd $PIWIK_ROOT_DIR
 
+  - if [ -z "$TEST_SUITE" ];
+    then php vendor/bin/coveralls -v;
+    fi
+
   # output contents of files w/ debugging info to screen
   - cat /var/log/nginx/error.log
   - cat $PIWIK_ROOT_DIR/tmp/php-fpm.log
diff --git a/README.md b/README.md
index 89735fdc94e5dfe914f559f241f44fcd7cb1e53a..d5ed6456d326e6e01ae1f05edd7050671e794699 100644
--- a/README.md
+++ b/README.md
@@ -101,3 +101,5 @@ The Piwik project uses an ever-expanding comprehensive set of thousands of unit
 
 Build status (master branch) [![Build Status](https://travis-ci.org/piwik/piwik.png?branch=master)](https://travis-ci.org/piwik/piwik) - Screenshot tests Build  [![Build Status](https://travis-ci.org/piwik/piwik-ui-tests.png?branch=master)](https://travis-ci.org/piwik/piwik-ui-tests)
 
+Code Coverage: [![Coverage Status](https://coveralls.io/repos/piwik/piwik/badge.png?branch=master)](https://coveralls.io/r/piwik/piwik?branch=master)
+
diff --git a/plugins/CoreConsole/templates/travis.yml.twig b/plugins/CoreConsole/templates/travis.yml.twig
index 6b52f22558772e430ff8a857d56f3bacd2cfa83f..553f5ae7b44021f48eef711f150debee48d3d5d9 100644
--- a/plugins/CoreConsole/templates/travis.yml.twig
+++ b/plugins/CoreConsole/templates/travis.yml.twig
@@ -96,6 +96,10 @@ install:
 {% endif %}
 
 before_script:
+  - if [ -z "$TEST_SUITE" ];
+    then composer require satooshi/php-coveralls dev-master;
+    fi
+
   - ./tests/travis/configure_git.sh
 
   # print out mysql information
@@ -147,6 +151,10 @@ after_script:
   # change directory back to root travis dir
   - cd $PIWIK_ROOT_DIR
 
+  - if [ -z "$TEST_SUITE" ];
+    then php vendor/bin/coveralls -v;
+    fi
+
   # output contents of files w/ debugging info to screen
   - cat /var/log/nginx/error.log
   - cat $PIWIK_ROOT_DIR/tmp/php-fpm.log
diff --git a/tests/PHPUnit/phpunit.xml.dist b/tests/PHPUnit/phpunit.xml.dist
index d344206dd2aa147e84d49a7f1a6e19461a5ad4c4..26fbd60a596d36985758f3004b36ecfb6f6f3841 100644
--- a/tests/PHPUnit/phpunit.xml.dist
+++ b/tests/PHPUnit/phpunit.xml.dist
@@ -47,4 +47,17 @@
   </testsuite>
 </testsuites>
 
+<filter>
+    <whitelist addUncoveredFilesFromWhitelist="true">
+        <directory suffix=".php">../../core</directory>
+        <directory suffix=".php">../../plugins</directory>
+        <exclude>
+            <directory suffix=".php">../../core/Updates</directory>
+            <directory suffix=".php">../../plugins/*/Updates</directory>
+            <directory suffix=".php">../../plugins/*/libs</directory>
+            <directory suffix=".php">../../plugins/*/tests</directory>
+        </exclude>
+    </whitelist>
+</filter>
+
 </phpunit>
diff --git a/tests/travis/travis.sh b/tests/travis/travis.sh
index b3d0a7f3754d6f0934b91c62c873d9b2a8347109..2d1d9ebac1e9d74998a204901cae677c43c76398 100755
--- a/tests/travis/travis.sh
+++ b/tests/travis/travis.sh
@@ -64,5 +64,17 @@ then
         fi
     fi
 else
-    travis_wait phpunit --configuration phpunit.xml --coverage-text --colors
+    if [ "$COVERAGE" = "Integration" ]
+    then
+        echo "Executing non Integration tests in test suite IntegrationTests..."
+        phpunit --configuration phpunit.xml --testsuite IntegrationTests --exclude-group Integration --colors --coverage-clover $TRAVIS_BUILD_DIR/build/logs/clover-integration.xml || true
+    elif [ "$COVERAGE" = "Core" ]
+    then
+        echo "Executing tests in test suite CoreTests..."
+        phpunit --configuration phpunit.xml --testsuite CoreTests --colors --coverage-clover $TRAVIS_BUILD_DIR/build/logs/clover-core.xml || true
+    elif [ "$COVERAGE" = "Plugins" ]
+    then
+        echo "Executing tests in test suite PluginTests..."
+        phpunit --configuration phpunit.xml --testsuite PluginTests --colors --coverage-clover $TRAVIS_BUILD_DIR/build/logs/clover-plugins.xml || true
+    fi;
 fi
\ No newline at end of file