diff --git a/.travis.yml b/.travis.yml
index b9daa5fc00e8cd5a26785087ae5d6335c04da25c..242881fb598a6f9e9d2577a96ef5f801766165c4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,20 +1,22 @@
 language: python
-python:
-  - "2.6"
-  - "2.7"
-  - "3.2"
-  - "3.3"
-  # - "pypy"  # Travis only has PyPy 1.9, cffi requires 2.0 (Unreleased)
+python: 2.7
+env:
+  - TOX_ENV=py26
+  - TOX_ENV=py27
+  - TOX_ENV=py32
+  - TOX_ENV=py33
+  - TOX_ENV=pypy
+
 install:
-  - pip install invoke
-  - pip install file://$PWD#egg=pynacl[tests]
-  - invoke sodium.install
+  - "[[ ${TOX_ENV} == pypy ]] && sudo add-apt-repository -y ppa:pypy/ppa || true"
+  - "[[ ${TOX_ENV} == pypy ]] && sudo apt-get -y update && sudo apt-get -y install pypy || true"
+  # This is required because we need to get rid of the Travis installed PyPy
+  # or it'll take precedence over the PPA installed one.
+  - "[[ ${TOX_ENV} == pypy ]] && sudo rm -rf /usr/local/pypy/bin || true"
+  - pip install tox coveralls
+
 script:
-  - invoke tests
-env:
-  global:
-    - LD_LIBRARY_PATH=/usr/local/lib
-    - LD_RUN_PATH=/usr/local/lib
-branches:
-  only:
-    - master
+  - tox -e $TOX_ENV
+
+after_success:
+  - coveralls
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000000000000000000000000000000000000..f9e837d8a398883004e30044af78a97b3e323009
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,8 @@
+[tox]
+envlist = py26,py27,pypy,py32,py33
+
+[testenv]
+deps =
+    pytest
+    pytest-cov
+commands = py.test --cov=nacl/