diff --git a/.travis.yml b/.travis.yml
index bffec25e95eb229e49856ec43e52fbe9b5fb970f..0da570cbe638d3a6efeebb1f7ed9491d9a7ff613 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,58 +1,49 @@
-# Created with package:mono_repo v1.2.1
+# Created with package:mono_repo v2.0.0
 language: dart
 
 # Custom configuration
 sudo: required
 addons:
   chrome: stable
+env: FORCE_TEST_EXIT=true
 
 jobs:
   include:
     - stage: analyze_and_format
-      name: "SDK: dev - DIR: pkgs/test - TASKS: [dartfmt -n --set-exit-if-changed ., dartanalyzer --fatal-infos --fatal-warnings .]"
-      script: ./tool/travis.sh dartfmt dartanalyzer
-      env: PKG="pkgs/test"
+      name: "SDK: dev; PKGS: pkgs/test, pkgs/test_api, pkgs/test_core; TASKS: [`dartfmt -n --set-exit-if-changed .`, `dartanalyzer --fatal-infos --fatal-warnings .`]"
       dart: dev
+      env: PKGS="pkgs/test pkgs/test_api pkgs/test_core"
+      script: ./tool/travis.sh dartfmt dartanalyzer
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test - TASKS: xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 0"
-      script: ./tool/travis.sh command_0
-      env: PKG="pkgs/test"
+      name: "SDK: dev; PKG: pkgs/test; TASKS: `xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 0`"
       dart: dev
+      env: PKGS="pkgs/test"
+      script: ./tool/travis.sh command_0
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test - TASKS: xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 1"
-      script: ./tool/travis.sh command_1
-      env: PKG="pkgs/test"
+      name: "SDK: dev; PKG: pkgs/test; TASKS: `xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 1`"
       dart: dev
+      env: PKGS="pkgs/test"
+      script: ./tool/travis.sh command_1
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test - TASKS: xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 2"
-      script: ./tool/travis.sh command_2
-      env: PKG="pkgs/test"
+      name: "SDK: dev; PKG: pkgs/test; TASKS: `xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 2`"
       dart: dev
+      env: PKGS="pkgs/test"
+      script: ./tool/travis.sh command_2
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test - TASKS: xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 3"
-      script: ./tool/travis.sh command_3
-      env: PKG="pkgs/test" FORCE_TEST_EXIT=true
+      name: "SDK: dev; PKG: pkgs/test; TASKS: `xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 3`"
       dart: dev
+      env: PKGS="pkgs/test"
+      script: ./tool/travis.sh command_3
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test - TASKS: xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 4"
-      script: ./tool/travis.sh command_4
-      env: PKG="pkgs/test"
-      dart: dev
-    - stage: analyze_and_format
-      name: "SDK: dev - DIR: pkgs/test_api - TASKS: [dartfmt -n --set-exit-if-changed ., dartanalyzer --fatal-infos --fatal-warnings .]"
-      script: ./tool/travis.sh dartfmt dartanalyzer
-      env: PKG="pkgs/test_api"
+      name: "SDK: dev; PKG: pkgs/test; TASKS: `xvfb-run -s \"-screen 0 1024x768x24\" pub run test --preset travis --total-shards 5 --shard-index 4`"
       dart: dev
+      env: PKGS="pkgs/test"
+      script: ./tool/travis.sh command_4
     - stage: unit_test
-      name: "SDK: dev - DIR: pkgs/test_api - TASKS: pub run test --preset travis"
-      script: ./tool/travis.sh command_5
-      env: PKG="pkgs/test_api"
-      dart: dev
-    - stage: analyze_and_format
-      name: "SDK: dev - DIR: pkgs/test_core - TASKS: [dartfmt -n --set-exit-if-changed ., dartanalyzer --fatal-infos --fatal-warnings .]"
-      script: ./tool/travis.sh dartfmt dartanalyzer
-      env: PKG="pkgs/test_core"
+      name: "SDK: dev; PKG: pkgs/test_api; TASKS: `pub run test --preset travis`"
       dart: dev
+      env: PKGS="pkgs/test_api"
+      script: ./tool/travis.sh command_5
 
 stages:
   - analyze_and_format
diff --git a/mono_repo.yaml b/mono_repo.yaml
index d2f6acbe9321cc97a4e316c923fd826417506863..2020bf20621e5566a59437c3fdfe2a96aed1f703 100644
--- a/mono_repo.yaml
+++ b/mono_repo.yaml
@@ -4,3 +4,6 @@ travis:
   addons:
     chrome: stable
   env: FORCE_TEST_EXIT=true
+
+merge_stages:
+- analyze_and_format
diff --git a/tool/travis.sh b/tool/travis.sh
index 45215719d399e198ce15b71a80b68ea67b43d3af..6ca4d9c06ab110ab7e330d0a0e8c39c6a9d371c0 100755
--- a/tool/travis.sh
+++ b/tool/travis.sh
@@ -1,70 +1,72 @@
 #!/bin/bash
-# Created with package:mono_repo v1.2.1
+# Created with package:mono_repo v2.0.0
 
-if [ -z "$PKG" ]; then
-  echo -e '\033[31mPKG environment variable must be set!\033[0m'
+if [[ -z ${PKGS} ]]; then
+  echo -e '\033[31mPKGS environment variable must be set!\033[0m'
   exit 1
 fi
 
-if [ "$#" == "0" ]; then
+if [[ "$#" == "0" ]]; then
   echo -e '\033[31mAt least one task argument must be provided!\033[0m'
   exit 1
 fi
 
-pushd $PKG
-pub upgrade || exit $?
-
 EXIT_CODE=0
 
-while (( "$#" )); do
-  TASK=$1
-  case $TASK in
-  command_0) echo
-    echo -e '\033[1mTASK: command_0\033[22m'
-    echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 0'
-    xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 0 || EXIT_CODE=$?
-    ;;
-  command_1) echo
-    echo -e '\033[1mTASK: command_1\033[22m'
-    echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 1'
-    xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 1 || EXIT_CODE=$?
-    ;;
-  command_2) echo
-    echo -e '\033[1mTASK: command_2\033[22m'
-    echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 2'
-    xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 2 || EXIT_CODE=$?
-    ;;
-  command_3) echo
-    echo -e '\033[1mTASK: command_3\033[22m'
-    echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 3'
-    xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 3 || EXIT_CODE=$?
-    ;;
-  command_4) echo
-    echo -e '\033[1mTASK: command_4\033[22m'
-    echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 4'
-    xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 4 || EXIT_CODE=$?
-    ;;
-  command_5) echo
-    echo -e '\033[1mTASK: command_5\033[22m'
-    echo -e 'pub run test --preset travis'
-    pub run test --preset travis || EXIT_CODE=$?
-    ;;
-  dartanalyzer) echo
-    echo -e '\033[1mTASK: dartanalyzer\033[22m'
-    echo -e 'dartanalyzer --fatal-infos --fatal-warnings .'
-    dartanalyzer --fatal-infos --fatal-warnings . || EXIT_CODE=$?
-    ;;
-  dartfmt) echo
-    echo -e '\033[1mTASK: dartfmt\033[22m'
-    echo -e 'dartfmt -n --set-exit-if-changed .'
-    dartfmt -n --set-exit-if-changed . || EXIT_CODE=$?
-    ;;
-  *) echo -e "\033[31mNot expecting TASK '${TASK}'. Error!\033[0m"
-    EXIT_CODE=1
-    ;;
-  esac
+for PKG in ${PKGS}; do
+  echo -e "\033[1mPKG: ${PKG}\033[22m"
+  pushd "${PKG}" || exit $?
+  pub upgrade --no-precompile || exit $?
+
+  for TASK in "$@"; do
+    case ${TASK} in
+    command_0) echo
+      echo -e '\033[1mTASK: command_0\033[22m'
+      echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 0'
+      xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 0 || EXIT_CODE=$?
+      ;;
+    command_1) echo
+      echo -e '\033[1mTASK: command_1\033[22m'
+      echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 1'
+      xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 1 || EXIT_CODE=$?
+      ;;
+    command_2) echo
+      echo -e '\033[1mTASK: command_2\033[22m'
+      echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 2'
+      xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 2 || EXIT_CODE=$?
+      ;;
+    command_3) echo
+      echo -e '\033[1mTASK: command_3\033[22m'
+      echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 3'
+      xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 3 || EXIT_CODE=$?
+      ;;
+    command_4) echo
+      echo -e '\033[1mTASK: command_4\033[22m'
+      echo -e 'xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 4'
+      xvfb-run -s "-screen 0 1024x768x24" pub run test --preset travis --total-shards 5 --shard-index 4 || EXIT_CODE=$?
+      ;;
+    command_5) echo
+      echo -e '\033[1mTASK: command_5\033[22m'
+      echo -e 'pub run test --preset travis'
+      pub run test --preset travis || EXIT_CODE=$?
+      ;;
+    dartanalyzer) echo
+      echo -e '\033[1mTASK: dartanalyzer\033[22m'
+      echo -e 'dartanalyzer --fatal-infos --fatal-warnings .'
+      dartanalyzer --fatal-infos --fatal-warnings . || EXIT_CODE=$?
+      ;;
+    dartfmt) echo
+      echo -e '\033[1mTASK: dartfmt\033[22m'
+      echo -e 'dartfmt -n --set-exit-if-changed .'
+      dartfmt -n --set-exit-if-changed . || EXIT_CODE=$?
+      ;;
+    *) echo -e "\033[31mNot expecting TASK '${TASK}'. Error!\033[0m"
+      EXIT_CODE=1
+      ;;
+    esac
+  done
 
-  shift
+  popd
 done
 
-exit $EXIT_CODE
+exit ${EXIT_CODE}