diff --git a/.travis.yml b/.travis.yml
index 2afddbfe7771e29358f5785f4bee6c2072b058ce..0af10e8503768a5d09ed752d11b3fdfada033cc0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,8 +4,6 @@ env:
 language: python
 python:
 - '2.7'
-before_install:
-- pip install codecov
 install:
 - pip install -e .[testing]
 before_script:
diff --git a/memopol/tests/response_fixtures/DossiersTest.test_dossier_detail/content b/memopol/tests/response_fixtures/DossiersTest.test_dossier_detail.content
similarity index 100%
rename from memopol/tests/response_fixtures/DossiersTest.test_dossier_detail/content
rename to memopol/tests/response_fixtures/DossiersTest.test_dossier_detail.content
diff --git a/memopol/tests/response_fixtures/DossiersTest.test_dossier_detail.metadata b/memopol/tests/response_fixtures/DossiersTest.test_dossier_detail.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/DossiersTest.test_dossier_detail.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/DossiersTest.test_dossier_list/content b/memopol/tests/response_fixtures/DossiersTest.test_dossier_list.content
similarity index 100%
rename from memopol/tests/response_fixtures/DossiersTest.test_dossier_list/content
rename to memopol/tests/response_fixtures/DossiersTest.test_dossier_list.content
diff --git a/memopol/tests/response_fixtures/DossiersTest.test_dossier_list.metadata b/memopol/tests/response_fixtures/DossiersTest.test_dossier_list.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/DossiersTest.test_dossier_list.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_committees/content b/memopol/tests/response_fixtures/GroupListTest.test_active_committees.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_active_committees/content
rename to memopol/tests/response_fixtures/GroupListTest.test_active_committees.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_committees.metadata b/memopol/tests/response_fixtures/GroupListTest.test_active_committees.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_active_committees.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_delegations/content b/memopol/tests/response_fixtures/GroupListTest.test_active_delegations.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_active_delegations/content
rename to memopol/tests/response_fixtures/GroupListTest.test_active_delegations.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_delegations.metadata b/memopol/tests/response_fixtures/GroupListTest.test_active_delegations.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_active_delegations.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_parties/content b/memopol/tests/response_fixtures/GroupListTest.test_active_parties.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_active_parties/content
rename to memopol/tests/response_fixtures/GroupListTest.test_active_parties.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_active_parties.metadata b/memopol/tests/response_fixtures/GroupListTest.test_active_parties.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_active_parties.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_committees/content b/memopol/tests/response_fixtures/GroupListTest.test_all_committees.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_all_committees/content
rename to memopol/tests/response_fixtures/GroupListTest.test_all_committees.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_committees.metadata b/memopol/tests/response_fixtures/GroupListTest.test_all_committees.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_all_committees.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_delegations/content b/memopol/tests/response_fixtures/GroupListTest.test_all_delegations.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_all_delegations/content
rename to memopol/tests/response_fixtures/GroupListTest.test_all_delegations.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_delegations.metadata b/memopol/tests/response_fixtures/GroupListTest.test_all_delegations.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_all_delegations.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_parties/content b/memopol/tests/response_fixtures/GroupListTest.test_all_parties.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_all_parties/content
rename to memopol/tests/response_fixtures/GroupListTest.test_all_parties.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_all_parties.metadata b/memopol/tests/response_fixtures/GroupListTest.test_all_parties.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_all_parties.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_chambers/content b/memopol/tests/response_fixtures/GroupListTest.test_chambers.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_chambers/content
rename to memopol/tests/response_fixtures/GroupListTest.test_chambers.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_chambers.metadata b/memopol/tests/response_fixtures/GroupListTest.test_chambers.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_chambers.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_country/content b/memopol/tests/response_fixtures/GroupListTest.test_country.content
similarity index 100%
rename from memopol/tests/response_fixtures/GroupListTest.test_country/content
rename to memopol/tests/response_fixtures/GroupListTest.test_country.content
diff --git a/memopol/tests/response_fixtures/GroupListTest.test_country.metadata b/memopol/tests/response_fixtures/GroupListTest.test_country.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/GroupListTest.test_country.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_active_displaylist.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_all_displaylist.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby12_displaylist_searchjoly.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_active_displaygrid.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page1_paginateby24_all_displaygrid.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby12_displaylist.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist/content b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist.content
similarity index 100%
rename from memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist/content
rename to memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist.content
diff --git a/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist.metadata b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist.metadata
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0a6921bc4a7d94e1887a6eab7a49889fc3ace
--- /dev/null
+++ b/memopol/tests/response_fixtures/RepresentativeListTest.test_page2_paginateby24_displaylist.metadata
@@ -0,0 +1,3 @@
+{
+    "status_code": 200
+}
\ No newline at end of file
diff --git a/setup.py b/setup.py
index a8f8ff20750c26e60561c64a3564b49226b7410d..ad32135428ba1257787ff6d1db6a7e76bb00c8e8 100644
--- a/setup.py
+++ b/setup.py
@@ -10,36 +10,36 @@ setup(name='political-memory',
     url='http://github.com/political-memory/political_memory/',
     install_requires=[
         'django-autocomplete-light>=3.0,<4.0',
-        'django-bootstrap3>=6.2,<6.3',
+        'django-bootstrap3>=6,<7',
         'django-coffeescript>=0.7,<0.8',
-        'django-compressor>=1.6,<1.7',
+        'django-compressor>=1,<2',
         'django-datetime-widget>=0.9,<1.0',
-        'django-filter>=0.11,<0.12',
-        'django-libsass==0.7.0',
-        'django-representatives-votes==0.0.16',
-        'django-representatives==0.0.22',
+        'django-filter>=0.13,<0.14',
+        'django-libsass>=0.7,<0.8',
+        'django-representatives-votes==0.0.17',
+        'django-representatives==0.0.23',
         'django-taggit>=0.17,<0.18',
         'django>=1.8,<1.9',
-        'djangorestframework>=3.2.0,<3.3.0',
+        'djangorestframework>=3,<4',
         'hamlpy>=0.82,<0.83',
         'ijson>=2.2,<2.3',
         'python-dateutil>=2.4,<2.5',
-        'unicodecsv==0.14.1',
-        'pytz==2015.7',
-        'django-suit>=0.2.16,<0.3.0',
-        'sqlparse>=0.1',
+        'unicodecsv>=0.14,<0.15',
+        'pytz',  # Always use up-to-date TZ data
+        'django-suit>=0.2,<0.3',
+        'sqlparse>=0.1,<0.2',
     ],
     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==2.5.1',
-            'pep8==1.5.7',
-            'pytest==2.8.5',
-            'pytest-django==2.9.1',
-            'pytest-cov==2.2.0',
-            'codecov',
+            'codecov>=2,<3',
+            'flake8>=2,<3',
+            'django-responsediff>=0.6,<0.7',
+            'pep8>=1,<2',
+            'pytest>=2,<3',
+            'pytest-django>=2,<3',
+            'pytest-cov>=2,<3',
         ]
     },
     entry_points={