From 3ead121e871a591c63db4a9421512d5223e9b64a Mon Sep 17 00:00:00 2001
From: Marco Ciotola <848222@stud.unive.it>
Date: Tue, 19 Feb 2019 01:06:47 +0100
Subject: [PATCH] Remove traces of south (now unused)

---
 helios/south_migrations/0001_initial.py       | 259 ------------------
 ...0002_v3_1_new_election_and_voter_fields.py | 196 -------------
 ...election_specific_voters_with_passwords.py | 178 ------------
 .../0004_v3_1_remove_voter_fields.py          | 153 -----------
 .../0005_add_quarantine_fields.py             | 154 -----------
 ..._unique_voter_voter_login_id_election__.py | 220 ---------------
 ..._file_content__chg_field_voterfile_vote.py | 149 ----------
 ...auto__add_unique_trustee_election_email.py | 143 ----------
 ...009_auto__add_field_election_help_email.py | 144 ----------
 ...d_field_election_randomize_answer_order.py | 146 ----------
 ...o__add_field_election_election_info_url.py | 147 ----------
 ...__add_field_election_result_released_at.py | 148 ----------
 helios/south_migrations/__init__.py           |   0
 helios_auth/south_migrations/0001_initial.py  |  49 ----
 helios_auth/south_migrations/__init__.py      |   0
 settings.py                                   |   4 -
 16 files changed, 2090 deletions(-)
 delete mode 100644 helios/south_migrations/0001_initial.py
 delete mode 100644 helios/south_migrations/0002_v3_1_new_election_and_voter_fields.py
 delete mode 100644 helios/south_migrations/0003_v3_1_election_specific_voters_with_passwords.py
 delete mode 100644 helios/south_migrations/0004_v3_1_remove_voter_fields.py
 delete mode 100644 helios/south_migrations/0005_add_quarantine_fields.py
 delete mode 100644 helios/south_migrations/0006_auto__chg_field_voter_vote__add_unique_voter_voter_login_id_election__.py
 delete mode 100644 helios/south_migrations/0007_auto__add_field_voterfile_voter_file_content__chg_field_voterfile_vote.py
 delete mode 100644 helios/south_migrations/0008_auto__add_unique_trustee_election_email.py
 delete mode 100644 helios/south_migrations/0009_auto__add_field_election_help_email.py
 delete mode 100644 helios/south_migrations/0010_auto__add_field_election_randomize_answer_order.py
 delete mode 100644 helios/south_migrations/0011_auto__add_field_election_election_info_url.py
 delete mode 100644 helios/south_migrations/0012_auto__add_field_election_result_released_at.py
 delete mode 100644 helios/south_migrations/__init__.py
 delete mode 100644 helios_auth/south_migrations/0001_initial.py
 delete mode 100644 helios_auth/south_migrations/__init__.py

diff --git a/helios/south_migrations/0001_initial.py b/helios/south_migrations/0001_initial.py
deleted file mode 100644
index 4fa118c..0000000
--- a/helios/south_migrations/0001_initial.py
+++ /dev/null
@@ -1,259 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'Election'
-        db.create_table('helios_election', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('admin', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios_auth.User'])),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('short_name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=250)),
-            ('description', self.gf('django.db.models.fields.TextField')()),
-            ('public_key', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('private_key', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('questions', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('eligibility', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('openreg', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('featured_p', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('use_voter_aliases', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('cast_url', self.gf('django.db.models.fields.CharField')(max_length=500)),
-            ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('modified_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('frozen_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('archived_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('registration_starts_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voting_starts_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voting_ends_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('tallying_starts_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voting_started_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voting_extended_until', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voting_ended_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('tallying_started_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('tallying_finished_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('tallies_combined_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)),
-            ('voters_hash', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)),
-            ('encrypted_tally', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('result', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('result_proof', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-        ))
-        db.send_create_signal('helios', ['Election'])
-
-        # Adding model 'ElectionLog'
-        db.create_table('helios_electionlog', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('election', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Election'])),
-            ('log', self.gf('django.db.models.fields.CharField')(max_length=500)),
-            ('at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-        ))
-        db.send_create_signal('helios', ['ElectionLog'])
-
-        # Adding model 'VoterFile'
-        db.create_table('helios_voterfile', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('election', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Election'])),
-            ('voter_file', self.gf('django.db.models.fields.files.FileField')(max_length=250)),
-            ('uploaded_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('processing_started_at', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-            ('processing_finished_at', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-            ('num_voters', self.gf('django.db.models.fields.IntegerField')(null=True)),
-        ))
-        db.send_create_signal('helios', ['VoterFile'])
-
-        # Adding model 'Voter'
-        db.create_table('helios_voter', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('election', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Election'])),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)),
-            ('voter_type', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('voter_id', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('alias', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)),
-            ('vote', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('vote_hash', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)),
-            ('cast_at', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-        ))
-        db.send_create_signal('helios', ['Voter'])
-
-        # Adding model 'CastVote'
-        db.create_table('helios_castvote', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('voter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Voter'])),
-            ('vote', self.gf('helios_auth.jsonfield.JSONField')()),
-            ('vote_hash', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('cast_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('verified_at', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-            ('invalidated_at', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-        ))
-        db.send_create_signal('helios', ['CastVote'])
-
-        # Adding model 'AuditedBallot'
-        db.create_table('helios_auditedballot', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('election', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Election'])),
-            ('raw_vote', self.gf('django.db.models.fields.TextField')()),
-            ('vote_hash', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('added_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-        ))
-        db.send_create_signal('helios', ['AuditedBallot'])
-
-        # Adding model 'Trustee'
-        db.create_table('helios_trustee', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('election', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios.Election'])),
-            ('uuid', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75)),
-            ('secret', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('public_key', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('public_key_hash', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('secret_key', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('pok', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('decryption_factors', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('decryption_proofs', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-        ))
-        db.send_create_signal('helios', ['Trustee'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'Election'
-        db.delete_table('helios_election')
-
-        # Deleting model 'ElectionLog'
-        db.delete_table('helios_electionlog')
-
-        # Deleting model 'VoterFile'
-        db.delete_table('helios_voterfile')
-
-        # Deleting model 'Voter'
-        db.delete_table('helios_voter')
-
-        # Deleting model 'CastVote'
-        db.delete_table('helios_castvote')
-
-        # Deleting model 'AuditedBallot'
-        db.delete_table('helios_auditedballot')
-
-        # Deleting model 'Trustee'
-        db.delete_table('helios_trustee')
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'eligibility': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'questions': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'voter_type': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0002_v3_1_new_election_and_voter_fields.py b/helios/south_migrations/0002_v3_1_new_election_and_voter_fields.py
deleted file mode 100644
index a5d4e1d..0000000
--- a/helios/south_migrations/0002_v3_1_new_election_and_voter_fields.py
+++ /dev/null
@@ -1,196 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'Voter.user'
-        db.add_column('helios_voter', 'user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['helios_auth.User'], null=True), keep_default=False)
-
-        # Adding field 'Voter.voter_login_id'
-        db.add_column('helios_voter', 'voter_login_id', self.gf('django.db.models.fields.CharField')(max_length=100, null=True), keep_default=False)
-
-        # Adding field 'Voter.voter_password'
-        db.add_column('helios_voter', 'voter_password', self.gf('django.db.models.fields.CharField')(max_length=100, null=True), keep_default=False)
-
-        # Adding field 'Voter.voter_name'
-        db.add_column('helios_voter', 'voter_name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True), keep_default=False)
-
-        # Adding field 'Voter.voter_email'
-        db.add_column('helios_voter', 'voter_email', self.gf('django.db.models.fields.CharField')(max_length=250, null=True), keep_default=False)
-
-        # Adding field 'Election.datatype'
-        db.add_column('helios_election', 'datatype', self.gf('django.db.models.fields.CharField')(default='legacy/Election', max_length=250), keep_default=False)
-
-        # Adding field 'Election.election_type'
-        db.add_column('helios_election', 'election_type', self.gf('django.db.models.fields.CharField')(default='election', max_length=250), keep_default=False)
-
-        # Adding field 'Election.private_p'
-        db.add_column('helios_election', 'private_p', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
-
-        # Adding field 'Election.use_advanced_audit_features'
-        db.add_column('helios_election', 'use_advanced_audit_features', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
-
-        # Adding field 'CastVote.vote_tinyhash'
-        db.add_column('helios_castvote', 'vote_tinyhash', self.gf('django.db.models.fields.CharField')(max_length=50, unique=True, null=True), keep_default=False)
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'Voter.user'
-        db.delete_column('helios_voter', 'user_id')
-
-        # Deleting field 'Voter.voter_login_id'
-        db.delete_column('helios_voter', 'voter_login_id')
-
-        # Deleting field 'Voter.voter_password'
-        db.delete_column('helios_voter', 'voter_password')
-
-        # Deleting field 'Voter.voter_name'
-        db.delete_column('helios_voter', 'voter_name')
-
-        # Deleting field 'Voter.voter_email'
-        db.delete_column('helios_voter', 'voter_email')
-
-        # Deleting field 'Election.datatype'
-        db.delete_column('helios_election', 'datatype')
-
-        # Deleting field 'Election.election_type'
-        db.delete_column('helios_election', 'election_type')
-
-        # Deleting field 'Election.private_p'
-        db.delete_column('helios_election', 'private_p')
-
-        # Deleting field 'Election.use_advanced_audit_features'
-        db.delete_column('helios_election', 'use_advanced_audit_features')
-
-        # Deleting field 'CastVote.vote_tinyhash'
-        db.delete_column('helios_castvote', 'vote_tinyhash')
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'questions': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_type': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0003_v3_1_election_specific_voters_with_passwords.py b/helios/south_migrations/0003_v3_1_election_specific_voters_with_passwords.py
deleted file mode 100644
index 573279f..0000000
--- a/helios/south_migrations/0003_v3_1_election_specific_voters_with_passwords.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
-    def forwards(self, orm):
-        """
-        update the voters data objects to point to users when it makes sense,
-        and otherwise to copy the data needed from the users table.
-        make all elections legacy, because before now they are.
-        """
-        for e in orm.Election.objects.all():
-            e.datatype = 'legacy/Election'
-            e.save()
-
-        # use the .iterator() call to reduce caching and make this more efficient
-        # so as not to trigger a memory error
-        for v in orm.Voter.objects.all().iterator():
-            user = orm['helios_auth.User'].objects.get(user_type = v.voter_type, user_id = v.voter_id)
-
-            if v.voter_type == 'password':
-                v.voter_login_id = v.voter_id
-                v.voter_name = v.name
-
-                v.voter_email = user.info['email']
-                v.voter_password = user.info['password']
-            else:
-                v.user = user
-
-            v.save()
-
-        # also, update tinyhash for all votes
-        for cv in orm.CastVote.objects.all().iterator():
-            safe_hash = cv.vote_hash
-            for c in ['/', '+']:
-                safe_hash = safe_hash.replace(c,'')
-    
-            length = 8
-            while True:
-                vote_tinyhash = safe_hash[:length]
-                if orm.CastVote.objects.filter(vote_tinyhash = vote_tinyhash).count() == 0:
-                    break
-                length += 1
-      
-            cv.vote_tinyhash = vote_tinyhash
-            cv.save()
-
-
-    def backwards(self, orm):
-        "Write your backwards methods here."
-        raise Exception("can't revert to system-wide user passwords, rather than election specific")
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'questions': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_type': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0004_v3_1_remove_voter_fields.py b/helios/south_migrations/0004_v3_1_remove_voter_fields.py
deleted file mode 100644
index b934e94..0000000
--- a/helios/south_migrations/0004_v3_1_remove_voter_fields.py
+++ /dev/null
@@ -1,153 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Deleting field 'Voter.name'
-        db.delete_column('helios_voter', 'name')
-
-        # Deleting field 'Voter.voter_id'
-        db.delete_column('helios_voter', 'voter_id')
-
-        # Deleting field 'Voter.voter_type'
-        db.delete_column('helios_voter', 'voter_type')
-
-
-    def backwards(self, orm):
-        
-        # Adding field 'Voter.name'
-        db.add_column('helios_voter', 'name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True), keep_default=False)
-
-        # We cannot add back in field 'Voter.voter_id'
-        raise RuntimeError(
-            "Cannot reverse this migration. 'Voter.voter_id' and its values cannot be restored.")
-
-        # We cannot add back in field 'Voter.voter_type'
-        raise RuntimeError(
-            "Cannot reverse this migration. 'Voter.voter_type' and its values cannot be restored.")
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'questions': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0005_add_quarantine_fields.py b/helios/south_migrations/0005_add_quarantine_fields.py
deleted file mode 100644
index b0f9f1d..0000000
--- a/helios/south_migrations/0005_add_quarantine_fields.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'Election.complaint_period_ends_at'
-        db.add_column('helios_election', 'complaint_period_ends_at', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True), keep_default=False)
-
-        # Adding field 'CastVote.quarantined_p'
-        db.add_column('helios_castvote', 'quarantined_p', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
-
-        # Adding field 'CastVote.released_from_quarantine_at'
-        db.add_column('helios_castvote', 'released_from_quarantine_at', self.gf('django.db.models.fields.DateTimeField')(null=True), keep_default=False)
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'Election.complaint_period_ends_at'
-        db.delete_column('helios_election', 'complaint_period_ends_at')
-
-        # Deleting field 'CastVote.quarantined_p'
-        db.delete_column('helios_castvote', 'quarantined_p')
-
-        # Deleting field 'CastVote.released_from_quarantine_at'
-        db.delete_column('helios_castvote', 'released_from_quarantine_at')
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'questions': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0006_auto__chg_field_voter_vote__add_unique_voter_voter_login_id_election__.py b/helios/south_migrations/0006_auto__chg_field_voter_vote__add_unique_voter_voter_login_id_election__.py
deleted file mode 100644
index 2791e49..0000000
--- a/helios/south_migrations/0006_auto__chg_field_voter_vote__add_unique_voter_voter_login_id_election__.py
+++ /dev/null
@@ -1,220 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Changing field 'Voter.vote'
-        db.alter_column('helios_voter', 'vote', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Adding unique constraint on 'Voter', fields ['voter_login_id', 'election']
-        db.create_unique('helios_voter', ['voter_login_id', 'election_id'])
-
-        # Changing field 'Election.result'
-        db.alter_column('helios_election', 'result', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Election.questions'
-        db.alter_column('helios_election', 'questions', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Election.encrypted_tally'
-        db.alter_column('helios_election', 'encrypted_tally', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Election.eligibility'
-        db.alter_column('helios_election', 'eligibility', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Election.private_key'
-        db.alter_column('helios_election', 'private_key', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Election.public_key'
-        db.alter_column('helios_election', 'public_key', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Trustee.public_key'
-        db.alter_column('helios_trustee', 'public_key', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Trustee.decryption_proofs'
-        db.alter_column('helios_trustee', 'decryption_proofs', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Trustee.pok'
-        db.alter_column('helios_trustee', 'pok', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Trustee.secret_key'
-        db.alter_column('helios_trustee', 'secret_key', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'Trustee.decryption_factors'
-        db.alter_column('helios_trustee', 'decryption_factors', self.gf('helios.datatypes.djangofield.LDObjectField')(null=True))
-
-        # Changing field 'CastVote.vote'
-        db.alter_column('helios_castvote', 'vote', self.gf('helios.datatypes.djangofield.LDObjectField')())
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'Voter', fields ['voter_login_id', 'election']
-        db.delete_unique('helios_voter', ['voter_login_id', 'election_id'])
-
-        # Changing field 'Voter.vote'
-        db.alter_column('helios_voter', 'vote', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.result'
-        db.alter_column('helios_election', 'result', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.questions'
-        db.alter_column('helios_election', 'questions', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.encrypted_tally'
-        db.alter_column('helios_election', 'encrypted_tally', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.eligibility'
-        db.alter_column('helios_election', 'eligibility', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.private_key'
-        db.alter_column('helios_election', 'private_key', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Election.public_key'
-        db.alter_column('helios_election', 'public_key', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Trustee.public_key'
-        db.alter_column('helios_trustee', 'public_key', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Trustee.decryption_proofs'
-        db.alter_column('helios_trustee', 'decryption_proofs', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Trustee.pok'
-        db.alter_column('helios_trustee', 'pok', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Trustee.secret_key'
-        db.alter_column('helios_trustee', 'secret_key', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'Trustee.decryption_factors'
-        db.alter_column('helios_trustee', 'decryption_factors', self.gf('helios_auth.jsonfield.JSONField')(null=True))
-
-        # Changing field 'CastVote.vote'
-        db.alter_column('helios_castvote', 'vote', self.gf('helios_auth.jsonfield.JSONField')())
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0007_auto__add_field_voterfile_voter_file_content__chg_field_voterfile_vote.py b/helios/south_migrations/0007_auto__add_field_voterfile_voter_file_content__chg_field_voterfile_vote.py
deleted file mode 100644
index 04a7f00..0000000
--- a/helios/south_migrations/0007_auto__add_field_voterfile_voter_file_content__chg_field_voterfile_vote.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'VoterFile.voter_file_content'
-        db.add_column('helios_voterfile', 'voter_file_content', self.gf('django.db.models.fields.TextField')(null=True), keep_default=False)
-
-        # Changing field 'VoterFile.voter_file'
-        db.alter_column('helios_voterfile', 'voter_file', self.gf('django.db.models.fields.files.FileField')(max_length=250, null=True))
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'VoterFile.voter_file_content'
-        db.delete_column('helios_voterfile', 'voter_file_content')
-
-        # User chose to not deal with backwards NULL issues for 'VoterFile.voter_file'
-        raise RuntimeError("Cannot reverse this migration. 'VoterFile.voter_file' and its values cannot be restored.")
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0008_auto__add_unique_trustee_election_email.py b/helios/south_migrations/0008_auto__add_unique_trustee_election_email.py
deleted file mode 100644
index 974dfd2..0000000
--- a/helios/south_migrations/0008_auto__add_unique_trustee_election_email.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding unique constraint on 'Trustee', fields ['election', 'email']
-        db.create_unique('helios_trustee', ['election_id', 'email'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'Trustee', fields ['election', 'email']
-        db.delete_unique('helios_trustee', ['election_id', 'email'])
-
-
-    models = {
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'unique_together': "(('election', 'email'),)", 'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        },
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0009_auto__add_field_election_help_email.py b/helios/south_migrations/0009_auto__add_field_election_help_email.py
deleted file mode 100644
index 1500f0e..0000000
--- a/helios/south_migrations/0009_auto__add_field_election_help_email.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'Election.help_email'
-        db.add_column('helios_election', 'help_email', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True), keep_default=False)
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'Election.help_email'
-        db.delete_column('helios_election', 'help_email')
-
-
-    models = {
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'help_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'unique_together': "(('election', 'email'),)", 'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        },
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios']
diff --git a/helios/south_migrations/0010_auto__add_field_election_randomize_answer_order.py b/helios/south_migrations/0010_auto__add_field_election_randomize_answer_order.py
deleted file mode 100644
index 96d1eb0..0000000
--- a/helios/south_migrations/0010_auto__add_field_election_randomize_answer_order.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Election.randomize_answer_order'
-        db.add_column('helios_election', 'randomize_answer_order',
-                      self.gf('django.db.models.fields.BooleanField')(default=False),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Election.randomize_answer_order'
-        db.delete_column('helios_election', 'randomize_answer_order')
-
-
-    models = {
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'help_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'randomize_answer_order': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'unique_together': "(('election', 'email'),)", 'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        },
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios']
\ No newline at end of file
diff --git a/helios/south_migrations/0011_auto__add_field_election_election_info_url.py b/helios/south_migrations/0011_auto__add_field_election_election_info_url.py
deleted file mode 100644
index 48c98fb..0000000
--- a/helios/south_migrations/0011_auto__add_field_election_election_info_url.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Election.election_info_url'
-        db.add_column('helios_election', 'election_info_url',
-                      self.gf('django.db.models.fields.CharField')(max_length=300, null=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Election.election_info_url'
-        db.delete_column('helios_election', 'election_info_url')
-
-
-    models = {
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_info_url': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'help_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'randomize_answer_order': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'unique_together': "(('election', 'email'),)", 'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        },
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios']
\ No newline at end of file
diff --git a/helios/south_migrations/0012_auto__add_field_election_result_released_at.py b/helios/south_migrations/0012_auto__add_field_election_result_released_at.py
deleted file mode 100644
index 0cc6853..0000000
--- a/helios/south_migrations/0012_auto__add_field_election_result_released_at.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Election.result_released_at'
-        db.add_column('helios_election', 'result_released_at',
-                      self.gf('django.db.models.fields.DateTimeField')(default=None, null=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Election.result_released_at'
-        db.delete_column('helios_election', 'result_released_at')
-
-
-    models = {
-        'helios.auditedballot': {
-            'Meta': {'object_name': 'AuditedBallot'},
-            'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'raw_vote': ('django.db.models.fields.TextField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'helios.castvote': {
-            'Meta': {'object_name': 'CastVote'},
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'invalidated_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'quarantined_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'released_from_quarantine_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'verified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'vote_tinyhash': ('django.db.models.fields.CharField', [], {'max_length': '50', 'unique': 'True', 'null': 'True'}),
-            'voter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Voter']"})
-        },
-        'helios.election': {
-            'Meta': {'object_name': 'Election'},
-            'admin': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']"}),
-            'archived_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'cast_url': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'complaint_period_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datatype': ('django.db.models.fields.CharField', [], {'default': "'legacy/Election'", 'max_length': '250'}),
-            'description': ('django.db.models.fields.TextField', [], {}),
-            'election_info_url': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}),
-            'election_type': ('django.db.models.fields.CharField', [], {'default': "'election'", 'max_length': '250'}),
-            'eligibility': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'encrypted_tally': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'featured_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'frozen_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'help_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'modified_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
-            'openreg': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'private_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'private_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'questions': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'randomize_answer_order': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'registration_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'result': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'result_proof': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'result_released_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'short_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'tallies_combined_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_finished_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'tallying_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'use_advanced_audit_features': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'use_voter_aliases': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'voters_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voting_ended_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_ends_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_extended_until': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_started_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
-            'voting_starts_at': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'})
-        },
-        'helios.electionlog': {
-            'Meta': {'object_name': 'ElectionLog'},
-            'at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'log': ('django.db.models.fields.CharField', [], {'max_length': '500'})
-        },
-        'helios.trustee': {
-            'Meta': {'unique_together': "(('election', 'email'),)", 'object_name': 'Trustee'},
-            'decryption_factors': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'decryption_proofs': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'pok': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'public_key_hash': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'secret_key': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'helios.voter': {
-            'Meta': {'unique_together': "(('election', 'voter_login_id'),)", 'object_name': 'Voter'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'cast_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios_auth.User']", 'null': 'True'}),
-            'uuid': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'vote': ('helios.datatypes.djangofield.LDObjectField', [], {'null': 'True'}),
-            'vote_hash': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_email': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_login_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}),
-            'voter_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'voter_password': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        'helios.voterfile': {
-            'Meta': {'object_name': 'VoterFile'},
-            'election': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['helios.Election']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'num_voters': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'processing_finished_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'processing_started_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'voter_file': ('django.db.models.fields.files.FileField', [], {'max_length': '250', 'null': 'True'}),
-            'voter_file_content': ('django.db.models.fields.TextField', [], {'null': 'True'})
-        },
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios']
\ No newline at end of file
diff --git a/helios/south_migrations/__init__.py b/helios/south_migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/helios_auth/south_migrations/0001_initial.py b/helios_auth/south_migrations/0001_initial.py
deleted file mode 100644
index 4ba2a3a..0000000
--- a/helios_auth/south_migrations/0001_initial.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'User'
-        db.create_table('helios_auth_user', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('user_type', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('user_id', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)),
-            ('info', self.gf('helios_auth.jsonfield.JSONField')()),
-            ('token', self.gf('helios_auth.jsonfield.JSONField')(null=True)),
-            ('admin_p', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('helios_auth', ['User'])
-
-        # Adding unique constraint on 'User', fields ['user_type', 'user_id']
-        db.create_unique('helios_auth_user', ['user_type', 'user_id'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'User', fields ['user_type', 'user_id']
-        db.delete_unique('helios_auth_user', ['user_type', 'user_id'])
-
-        # Deleting model 'User'
-        db.delete_table('helios_auth_user')
-
-
-    models = {
-        'helios_auth.user': {
-            'Meta': {'unique_together': "(('user_type', 'user_id'),)", 'object_name': 'User'},
-            'admin_p': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'info': ('helios_auth.jsonfield.JSONField', [], {}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
-            'token': ('helios_auth.jsonfield.JSONField', [], {'null': 'True'}),
-            'user_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'user_type': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        }
-    }
-
-    complete_apps = ['helios_auth']
diff --git a/helios_auth/south_migrations/__init__.py b/helios_auth/south_migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/settings.py b/settings.py
index 2c6130d..ec8336b 100644
--- a/settings.py
+++ b/settings.py
@@ -41,8 +41,6 @@ DATABASES = {
     }
 }
 
-SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
-
 # override if we have an env variable
 if get_from_env('DATABASE_URL', None):
     import dj_database_url
@@ -152,8 +150,6 @@ INSTALLED_APPS = (
     ## needed for queues
     'djcelery',
     'kombu.transport.django',
-    ## in Django 1.7 we now use built-in migrations, no more south
-    ## 'south',
     ## HELIOS stuff
     'helios_auth',
     'helios',
-- 
GitLab