diff --git a/.gitignore b/.gitignore
index a50e943..3f16be2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 *.pyc
 /_trial_temp
 /.coverage
+/.tox
 /htmlcov
 /build
 /dist
diff --git a/.travis.install b/.travis.install
deleted file mode 100644
index 7823e08..0000000
--- a/.travis.install
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-PYTHON_VERSION=$(python --version 2>&1)
-
-if [[ "$PYTHON_VERSION" > "Python 3" ]]; then
-    true
-else
-    pip install twisted
-fi
diff --git a/.travis.yml b/.travis.yml
index ab462ab..803b937 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,10 +4,11 @@ python:
   - "2.7"
   - "3.2"
   - "3.3"
+  - "3.4"
+  - "3.5"
 
 install:
-  - "bash .travis.install"
-  - "pip install pytest coveralls pytz ."
+  - "pip install -rrequirements.txt"
 script:
   - "coverage run $(which py.test) ."
 after_success:
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..e85310e
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,6 @@
+.
+coverage < 4.0
+coveralls
+pytest
+pytz
+twisted ; python_version <= '3.0'
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..4809765
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,14 @@
+[tox]
+envlist =
+    py26
+    py27
+    py32
+    py33
+    py34
+    py35
+
+[testenv]
+deps =
+    -rrequirements.txt
+commands =
+    py.test .