diff --git a/setup.py b/setup.py
index 94c2470ada472476908069b51b4987850adaa2fb..555998eaebe675fce2461e8c82549f5f5fec2d37 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@ setup(name='political-memory',
     author_email='cortex@worlddomination.be',
     url='http://github.com/political-memory/political_memory/',
     install_requires=[
-        'django-autocomplete-light>=3.0',
+        'django-autocomplete-light>=3.0,<4.0',
         'django-bootstrap3>=6.2,<6.3',
         'django-coffeescript>=0.7,<0.8',
         'django-compressor>=1.6,<1.7',
@@ -22,20 +22,22 @@ setup(name='political-memory',
         'djangorestframework>=3.2.0,<3.3.0',
         'hamlpy>=0.82,<0.83',
         'ijson>=2.2,<2.3',
-        'lesscpy',
+        'lesscpy>=0.10.2,<0.11.0',
         'python-dateutil>=2.4,<2.5',
         'unicodecsv==0.14.1',
         'pytz==2015.7',
-        'django-suit',
+        'django-suit>=0.2.16,<0.3.0',
     ],
     extras_require={
+        # Full version hardcode for testing dependencies so that
+        # tests don't break on master without any obvious reason.
         'testing': [
             'django-responsediff==0.2.0',
-            'flake8',
-            'pep8',
-            'pytest',
-            'pytest-django',
-            'pytest-cov',
+            'flake8==2.5.1',
+            'pep8==1.5.7',
+            'pytest==2.8.5',
+            'pytest-django==2.9.1',
+            'pytest-cov==2.2.0',
             'codecov',
         ]
     }