diff --git a/commentaries/migrations/0001_initial.py b/commentaries/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..7cbd0fbac4d35942cd0a4108e7a00433675a485d
--- /dev/null
+++ b/commentaries/migrations/0001_initial.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Commentary',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('vetted', models.BooleanField(default=False)),
+                ('type', models.CharField(choices=[('published', 'published paper'), ('preprint', 'arXiv preprint (at least 8 weeks old)')], max_length=9)),
+                ('discipline', models.CharField(choices=[('physics', 'Physics')], default='physics', max_length=20)),
+                ('domain', models.CharField(choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational'), ('ET', 'Exp. & Theor.'), ('EC', 'Exp. & Comp.'), ('TC', 'Theor. & Comp.'), ('ETC', 'Exp., Theor. & Comp.')], default='E', max_length=3)),
+                ('specialization', models.CharField(choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')], default='A', max_length=1)),
+                ('open_for_commenting', models.BooleanField(default=True)),
+                ('pub_title', models.CharField(max_length=300, verbose_name='title')),
+                ('arxiv_link', models.URLField(blank=True, verbose_name='arXiv link (including version nr)')),
+                ('pub_DOI_link', models.URLField(blank=True, verbose_name='DOI link to the original publication')),
+                ('author_list', models.CharField(max_length=1000)),
+                ('pub_date', models.DateField(verbose_name='date of original publication')),
+                ('pub_abstract', models.TextField(verbose_name='abstract')),
+                ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)),
+            ],
+        ),
+    ]
diff --git a/commentaries/migrations/0002_auto_20160329_2225.py b/commentaries/migrations/0002_auto_20160329_2225.py
new file mode 100644
index 0000000000000000000000000000000000000000..38d311f20d965f0eb7601effa8d2503d7678f11b
--- /dev/null
+++ b/commentaries/migrations/0002_auto_20160329_2225.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('commentaries', '0001_initial'),
+        ('scipost', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='commentary',
+            name='authors',
+            field=models.ManyToManyField(blank=True, related_name='authors_com', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='authors_claims',
+            field=models.ManyToManyField(blank=True, related_name='authors_com_claims', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='authors_false_claims',
+            field=models.ManyToManyField(blank=True, related_name='authors_com_false_claims', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='requested_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='requested_by', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+    ]
diff --git a/commentaries/migrations/0003_auto_20160401_0642.py b/commentaries/migrations/0003_auto_20160401_0642.py
new file mode 100644
index 0000000000000000000000000000000000000000..aa2770f55b5548d1cbede90bb5c290adc5406186
--- /dev/null
+++ b/commentaries/migrations/0003_auto_20160401_0642.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-01 04:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0002_auto_20160329_2225'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='commentary',
+            name='arxiv_or_DOI_string',
+            field=models.CharField(default='', max_length=100, verbose_name='string form of arxiv nr or DOI for commentary url'),
+        ),
+        migrations.AlterField(
+            model_name='commentary',
+            name='pub_date',
+            field=models.DateField(blank=True, null=True, verbose_name='date of original publication'),
+        ),
+    ]
diff --git a/commentaries/migrations/0004_auto_20160419_2157.py b/commentaries/migrations/0004_auto_20160419_2157.py
new file mode 100644
index 0000000000000000000000000000000000000000..1010299278671442f15497002be5a20de46c24f7
--- /dev/null
+++ b/commentaries/migrations/0004_auto_20160419_2157.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-19 19:57
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0003_auto_20160401_0642'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='commentary',
+            options={'verbose_name_plural': 'Commentaries'},
+        ),
+    ]
diff --git a/commentaries/migrations/0005_auto_20160420_1946.py b/commentaries/migrations/0005_auto_20160420_1946.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c2dfa14b5b856d5058bad6fb8e831b4117cbd21
--- /dev/null
+++ b/commentaries/migrations/0005_auto_20160420_1946.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-20 17:46
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0004_auto_20160419_2157'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='commentary',
+            name='domain',
+            field=models.CharField(choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational'), ('ET', 'Exp. & Theor.'), ('EC', 'Exp. & Comp.'), ('TC', 'Theor. & Comp.'), ('ETC', 'Exp., Theor. & Comp.')], max_length=3),
+        ),
+        migrations.AlterField(
+            model_name='commentary',
+            name='specialization',
+            field=models.CharField(choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')], max_length=1),
+        ),
+    ]
diff --git a/commentaries/migrations/0006_auto_20160422_1018.py b/commentaries/migrations/0006_auto_20160422_1018.py
new file mode 100644
index 0000000000000000000000000000000000000000..072fd35c10a22a1d5560756a67402de042425589
--- /dev/null
+++ b/commentaries/migrations/0006_auto_20160422_1018.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-22 08:18
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0005_auto_20160420_1946'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='commentary',
+            name='journal',
+            field=models.CharField(blank=True, max_length=300, null=True),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='pages',
+            field=models.CharField(blank=True, max_length=50, null=True),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='volume',
+            field=models.CharField(blank=True, max_length=50, null=True),
+        ),
+    ]
diff --git a/commentaries/migrations/0007_auto_20160422_1515.py b/commentaries/migrations/0007_auto_20160422_1515.py
new file mode 100644
index 0000000000000000000000000000000000000000..b0786b339b17557cad8a98a6164d618b70ab94c0
--- /dev/null
+++ b/commentaries/migrations/0007_auto_20160422_1515.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-22 13:15
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0006_auto_20160422_1018'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='commentary',
+            name='arxiv_identifier',
+            field=models.CharField(blank=True, max_length=100, null=True, verbose_name='arXiv identifier (including version nr)'),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='metadata',
+            field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}, null=True),
+        ),
+        migrations.AddField(
+            model_name='commentary',
+            name='pub_DOI',
+            field=models.CharField(blank=True, max_length=200, null=True, verbose_name='DOI of the original publication'),
+        ),
+    ]
diff --git a/commentaries/migrations/0008_auto_20160423_0749.py b/commentaries/migrations/0008_auto_20160423_0749.py
new file mode 100644
index 0000000000000000000000000000000000000000..85fc841c141ce4e5295958c3318d218810625a5e
--- /dev/null
+++ b/commentaries/migrations/0008_auto_20160423_0749.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-23 05:49
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0007_auto_20160422_1515'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='commentary',
+            name='type',
+            field=models.CharField(choices=[('published', 'published paper'), ('preprint', 'arXiv preprint')], max_length=9),
+        ),
+    ]
diff --git a/commentaries/migrations/0009_auto_20160810_1608.py b/commentaries/migrations/0009_auto_20160810_1608.py
new file mode 100644
index 0000000000000000000000000000000000000000..d124db74532061ad4000f960a9b399cb0dbce50a
--- /dev/null
+++ b/commentaries/migrations/0009_auto_20160810_1608.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-10 14:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0008_auto_20160423_0749'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='commentary',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/commentaries/migrations/0010_auto_20160811_1057.py b/commentaries/migrations/0010_auto_20160811_1057.py
new file mode 100644
index 0000000000000000000000000000000000000000..4c0f16adc8bdab9c515caea3cce7df808e9846c7
--- /dev/null
+++ b/commentaries/migrations/0010_auto_20160811_1057.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 08:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0009_auto_20160810_1608'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='commentary',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/commentaries/migrations/0011_commentary_subject_area.py b/commentaries/migrations/0011_commentary_subject_area.py
new file mode 100644
index 0000000000000000000000000000000000000000..db57952caf9a427f7ce40bdd06b162ebdd9d9e02
--- /dev/null
+++ b/commentaries/migrations/0011_commentary_subject_area.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 12:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0010_auto_20160811_1057'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='commentary',
+            name='subject_area',
+            field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], default='Phys:QP', max_length=10),
+        ),
+    ]
diff --git a/commentaries/migrations/0012_remove_commentary_specialization.py b/commentaries/migrations/0012_remove_commentary_specialization.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c896b9ffc9deaaf57c8d4f181a14a9c96feea4e
--- /dev/null
+++ b/commentaries/migrations/0012_remove_commentary_specialization.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 13:39
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('commentaries', '0011_commentary_subject_area'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='commentary',
+            name='specialization',
+        ),
+    ]
diff --git a/comments/migrations/0001_initial.py b/comments/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..7685ff4c95e8ad6aa2450b18c7458cd80af87bb0
--- /dev/null
+++ b/comments/migrations/0001_initial.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Comment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('status', models.SmallIntegerField(default=0)),
+                ('is_author_reply', models.BooleanField(default=False)),
+                ('anonymous', models.BooleanField(default=False, verbose_name='Publish anonymously')),
+                ('is_rem', models.BooleanField(default=False, verbose_name='remark')),
+                ('is_que', models.BooleanField(default=False, verbose_name='question')),
+                ('is_ans', models.BooleanField(default=False, verbose_name='answer to question')),
+                ('is_obj', models.BooleanField(default=False, verbose_name='objection')),
+                ('is_rep', models.BooleanField(default=False, verbose_name='reply to objection')),
+                ('is_val', models.BooleanField(default=False, verbose_name='validation or rederivation')),
+                ('is_lit', models.BooleanField(default=False, verbose_name='pointer to related literature')),
+                ('is_sug', models.BooleanField(default=False, verbose_name='suggestion for further work')),
+                ('comment_text', models.TextField()),
+                ('remarks_for_editors', models.TextField(blank=True, default='', verbose_name='optional remarks for the Editors only')),
+                ('date_submitted', models.DateTimeField(verbose_name='date submitted')),
+                ('nr_A', models.PositiveIntegerField(default=0)),
+                ('nr_N', models.PositiveIntegerField(default=0)),
+                ('nr_D', models.PositiveIntegerField(default=0)),
+            ],
+        ),
+    ]
diff --git a/comments/migrations/0002_auto_20160329_2225.py b/comments/migrations/0002_auto_20160329_2225.py
new file mode 100644
index 0000000000000000000000000000000000000000..1957003c73be004c3c7d5b9da8fe539751bda7db
--- /dev/null
+++ b/comments/migrations/0002_auto_20160329_2225.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('commentaries', '0002_auto_20160329_2225'),
+        ('comments', '0001_initial'),
+        ('theses', '0001_initial'),
+        ('submissions', '0001_initial'),
+        ('scipost', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='comment',
+            name='author',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='commentary',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='commentaries.Commentary'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='in_agreement',
+            field=models.ManyToManyField(related_name='in_agreement', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='in_disagreement',
+            field=models.ManyToManyField(related_name='in_disagreement', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='in_notsure',
+            field=models.ManyToManyField(related_name='in_notsure', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='in_reply_to_comment',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='comments.Comment'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='in_reply_to_report',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.Report'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='submission',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='thesislink',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='theses.ThesisLink'),
+        ),
+    ]
diff --git a/comments/migrations/0003_auto_20160404_2150.py b/comments/migrations/0003_auto_20160404_2150.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ef1a35433b7028e9c73802a8161fe82ed87a2ad
--- /dev/null
+++ b/comments/migrations/0003_auto_20160404_2150.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-04 19:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0003_auto_20160330_1104'),
+        ('comments', '0002_auto_20160329_2225'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='comment',
+            name='is_cor',
+            field=models.BooleanField(default=False, verbose_name='correction'),
+        ),
+        migrations.AddField(
+            model_name='comment',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='comment_vetted_by', to='scipost.Contributor'),
+        ),
+    ]
diff --git a/journals/migrations/0001_initial.py b/journals/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..6718cec95b70dbfe1cdcec686434655475253045
--- /dev/null
+++ b/journals/migrations/0001_initial.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-14 04:12
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('scipost', '0017_remark_recommendation'),
+        ('submissions', '0023_auto_20160914_0612'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Issue',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('number', models.PositiveSmallIntegerField(unique=True)),
+                ('start_date', models.DateField(default=django.utils.timezone.now)),
+                ('until_date', models.DateField(default=django.utils.timezone.now)),
+                ('doi_string', models.CharField(blank=True, max_length=200, null=True)),
+                ('path', models.CharField(max_length=200)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Journal',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(choices=[('SciPost Physics Select', 'SciPost Physics Select'), ('SciPost Physics', 'SciPost Physics'), ('SciPost Physics Lecture Notes', 'SciPost Physics Lecture Notes')], max_length=100, unique=True)),
+                ('doi_string', models.CharField(blank=True, max_length=200, null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Publication',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('paper_nr', models.PositiveSmallIntegerField()),
+                ('discipline', models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20)),
+                ('domain', models.CharField(choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational'), ('ET', 'Exp. & Theor.'), ('EC', 'Exp. & Comp.'), ('TC', 'Theor. & Comp.'), ('ETC', 'Exp., Theor. & Comp.')], max_length=3)),
+                ('subject_area', models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], default='Phys:QP', max_length=10, verbose_name='Primary subject area')),
+                ('secondary_areas', scipost.models.ChoiceArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None)),
+                ('title', models.CharField(max_length=300)),
+                ('author_list', models.CharField(max_length=1000, verbose_name='author list')),
+                ('abstract', models.TextField()),
+                ('pdf_file', models.FileField(max_length=200, upload_to='UPLOADS/PUBLICATIONS/%Y/%m/')),
+                ('metadata', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}, null=True)),
+                ('metadata_xml', models.TextField(blank=True, null=True)),
+                ('BiBTeX_entry', models.TextField(blank=True, null=True)),
+                ('doi_label', models.CharField(blank=True, max_length=200, null=True)),
+                ('doi_string', models.CharField(blank=True, max_length=200, null=True)),
+                ('submission_date', models.DateField(verbose_name='submission date')),
+                ('acceptance_date', models.DateField(verbose_name='acceptance date')),
+                ('publication_date', models.DateField(verbose_name='publication date')),
+                ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)),
+                ('accepted_submission', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission')),
+                ('authors', models.ManyToManyField(blank=True, related_name='authors_pub', to='scipost.Contributor')),
+                ('authors_claims', models.ManyToManyField(blank=True, related_name='authors_pub_claims', to='scipost.Contributor')),
+                ('authors_false_claims', models.ManyToManyField(blank=True, related_name='authors_pub_false_claims', to='scipost.Contributor')),
+                ('in_issue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Issue')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Volume',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('number', models.PositiveSmallIntegerField(unique=True)),
+                ('start_date', models.DateField(default=django.utils.timezone.now)),
+                ('until_date', models.DateField(default=django.utils.timezone.now)),
+                ('doi_string', models.CharField(blank=True, max_length=200, null=True)),
+                ('in_journal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Journal')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='issue',
+            name='in_volume',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Volume'),
+        ),
+    ]
diff --git a/journals/migrations/0002_auto_20161019_0938.py b/journals/migrations/0002_auto_20161019_0938.py
new file mode 100644
index 0000000000000000000000000000000000000000..c92c00812a7d4503a65438f6419ec2d48edac066
--- /dev/null
+++ b/journals/migrations/0002_auto_20161019_0938.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-10-19 07:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0021_precookedemail'),
+        ('journals', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Deposit',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('doi_batch_id', models.CharField(default='', max_length=40)),
+                ('metadata_xml', models.TextField(blank=True, null=True)),
+                ('deposition_date', models.DateTimeField(default=django.utils.timezone.now)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='publication',
+            name='first_author',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='deposit',
+            name='publication',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Publication'),
+        ),
+    ]
diff --git a/journals/migrations/0003_journal_issn.py b/journals/migrations/0003_journal_issn.py
new file mode 100644
index 0000000000000000000000000000000000000000..b2cf01a6f95422568555cd5b9a12f504c7f529e7
--- /dev/null
+++ b/journals/migrations/0003_journal_issn.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-19 07:28
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0002_auto_20161019_0938'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='journal',
+            name='issn',
+            field=models.CharField(default='2542-4653', max_length=16),
+        ),
+    ]
diff --git a/journals/migrations/0004_auto_20161122_0602.py b/journals/migrations/0004_auto_20161122_0602.py
new file mode 100644
index 0000000000000000000000000000000000000000..00588d3d89d408cd482e900d7734eb93341a9590
--- /dev/null
+++ b/journals/migrations/0004_auto_20161122_0602.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-22 05:02
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0003_journal_issn'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UnregisteredAuthor',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('first_name', models.CharField(max_length=100)),
+                ('last_name', models.CharField(max_length=100)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='publication',
+            name='authors_unregistered',
+            field=models.ManyToManyField(blank=True, to='journals.UnregisteredAuthor'),
+        ),
+    ]
diff --git a/journals/migrations/0005_auto_20161122_0851.py b/journals/migrations/0005_auto_20161122_0851.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef723c7ae163955ee99fc857a5890f59c5dc8ccb
--- /dev/null
+++ b/journals/migrations/0005_auto_20161122_0851.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-22 07:51
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0004_auto_20161122_0602'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='publication',
+            name='first_author_unregistered',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='first_author_unregistered', to='journals.UnregisteredAuthor'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='authors_unregistered',
+            field=models.ManyToManyField(blank=True, related_name='authors_unregistered', to='journals.UnregisteredAuthor'),
+        ),
+    ]
diff --git a/journals/migrations/0006_publication_citedby.py b/journals/migrations/0006_publication_citedby.py
new file mode 100644
index 0000000000000000000000000000000000000000..79dd2b819780b80ce98b0c97a512b8e712ca4c56
--- /dev/null
+++ b/journals/migrations/0006_publication_citedby.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-23 05:12
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0005_auto_20161122_0851'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='publication',
+            name='citedby',
+            field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}, null=True),
+        ),
+    ]
diff --git a/scipost/migrations/0001_initial.py b/scipost/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..d611c216fe50cbdd266f2c6f2cd3a820dc79bd37
--- /dev/null
+++ b/scipost/migrations/0001_initial.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import django_countries.fields
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('commentaries', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AuthorshipClaim',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('status', models.SmallIntegerField(choices=[(1, 'accepted'), (0, 'not yet vetted (pending)'), (-1, 'rejected')], default=0)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Contributor',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activation_key', models.CharField(default='', max_length=40)),
+                ('key_expires', models.DateTimeField(default=django.utils.timezone.now)),
+                ('status', models.SmallIntegerField(choices=[(0, 'newly registered'), (1, 'normal user'), (-1, 'not a professional scientist'), (-2, 'other account already exists'), (-3, 'barred from SciPost'), (-4, 'account disabled')], default=0)),
+                ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')], max_length=4)),
+                ('discipline', models.CharField(choices=[('physics', 'Physics')], default='physics', max_length=20)),
+                ('orcid_id', models.CharField(blank=True, max_length=20, verbose_name='ORCID id')),
+                ('country_of_employment', django_countries.fields.CountryField(max_length=2)),
+                ('affiliation', models.CharField(max_length=300, verbose_name='affiliation')),
+                ('address', models.CharField(blank=True, default='', max_length=1000, verbose_name='address')),
+                ('personalwebpage', models.URLField(blank=True, verbose_name='personal web page')),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('vetted_by', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='RegistrationInvitation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')], max_length=4)),
+                ('first_name', models.CharField(default='', max_length=30)),
+                ('last_name', models.CharField(default='', max_length=30)),
+                ('email_address', models.EmailField(max_length=254)),
+                ('invitation_type', models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor')], default='C', max_length=2)),
+                ('message_style', models.CharField(choices=[('F', 'formal'), ('P', 'personal')], default='F', max_length=1)),
+                ('personal_message', models.TextField(blank=True, null=True)),
+                ('invitation_key', models.CharField(default='', max_length=40)),
+                ('key_expires', models.DateTimeField(default=django.utils.timezone.now)),
+                ('date_sent', models.DateTimeField(default=django.utils.timezone.now)),
+                ('responded', models.BooleanField(default=False)),
+                ('invited_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='authorshipclaim',
+            name='claimant',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='claimant', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='authorshipclaim',
+            name='commentary',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='commentaries.Commentary'),
+        ),
+    ]
diff --git a/scipost/migrations/0002_auto_20160329_2225.py b/scipost/migrations/0002_auto_20160329_2225.py
new file mode 100644
index 0000000000000000000000000000000000000000..2f2e7bdf0561a5acce4a73e429a7ba67bced00ca
--- /dev/null
+++ b/scipost/migrations/0002_auto_20160329_2225.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('theses', '0001_initial'),
+        ('submissions', '0001_initial'),
+        ('scipost', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='authorshipclaim',
+            name='submission',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='authorshipclaim',
+            name='thesislink',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='theses.ThesisLink'),
+        ),
+        migrations.AddField(
+            model_name='authorshipclaim',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+    ]
diff --git a/scipost/migrations/0003_auto_20160330_1104.py b/scipost/migrations/0003_auto_20160330_1104.py
new file mode 100644
index 0000000000000000000000000000000000000000..9caedcbb770960bb6a112be52b7d56a22a0de757
--- /dev/null
+++ b/scipost/migrations/0003_auto_20160330_1104.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-30 09:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0002_auto_20160329_2225'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contrib_vetted_by', to='scipost.Contributor'),
+        ),
+    ]
diff --git a/scipost/migrations/0004_auto_20160415_1952.py b/scipost/migrations/0004_auto_20160415_1952.py
new file mode 100644
index 0000000000000000000000000000000000000000..997cbf33c89237d6a7c071be1577cb42a294c73f
--- /dev/null
+++ b/scipost/migrations/0004_auto_20160415_1952.py
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-15 17:52
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0001_initial'),
+        ('comments', '__first__'),
+        ('commentaries', '0003_auto_20160401_0642'),
+        ('theses', '0001_initial'),
+        ('scipost', '0003_auto_20160330_1104'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Graph',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('private', models.BooleanField(default=True)),
+                ('title', models.CharField(max_length=100)),
+                ('description', models.TextField(blank=True, null=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='List',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('private', models.BooleanField(default=True)),
+                ('title', models.CharField(max_length=100)),
+                ('description', models.TextField(blank=True, null=True)),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('commentaries', models.ManyToManyField(blank=True, related_name='list_commentaries', to='commentaries.Commentary')),
+                ('comments', models.ManyToManyField(blank=True, related_name='list_comments', to='comments.Comment')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Node',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('name', models.CharField(max_length=100)),
+                ('description', models.TextField(blank=True, null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Team',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=20)),
+                ('established', models.DateField(default=django.utils.timezone.now)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='contributor',
+            name='invitation_key',
+            field=models.CharField(blank=True, default='', max_length=40, null=True),
+        ),
+        migrations.AddField(
+            model_name='contributor',
+            name='specializations',
+            field=django.contrib.postgres.fields.jsonb.JSONField(default={}),
+        ),
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='invitation_type',
+            field=models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor'), ('R', 'Refereeing')], default='C', max_length=2),
+        ),
+        migrations.AddField(
+            model_name='team',
+            name='leader',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='team',
+            name='members',
+            field=models.ManyToManyField(blank=True, related_name='team_members', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='added_by',
+            field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='arcs_in',
+            field=models.ManyToManyField(blank=True, related_name='node_arcs_in', to='scipost.Node'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='commentaries',
+            field=models.ManyToManyField(blank=True, related_name='node_commentaries', to='commentaries.Commentary'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='graph',
+            field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='scipost.Graph'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='submissions',
+            field=models.ManyToManyField(blank=True, related_name='node_submissions', to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='node',
+            name='thesislinks',
+            field=models.ManyToManyField(blank=True, related_name='node_thesislinks', to='theses.ThesisLink'),
+        ),
+        migrations.AddField(
+            model_name='list',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='list',
+            name='submissions',
+            field=models.ManyToManyField(blank=True, related_name='list_submissions', to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='list',
+            name='teams_with_access',
+            field=models.ManyToManyField(blank=True, to='scipost.Team'),
+        ),
+        migrations.AddField(
+            model_name='list',
+            name='thesislinks',
+            field=models.ManyToManyField(blank=True, related_name='list_thesislinks', to='theses.ThesisLink'),
+        ),
+        migrations.AddField(
+            model_name='graph',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='graph',
+            name='teams_with_access',
+            field=models.ManyToManyField(blank=True, to='scipost.Team'),
+        ),
+    ]
diff --git a/scipost/migrations/0005_auto_20160419_2157.py b/scipost/migrations/0005_auto_20160419_2157.py
new file mode 100644
index 0000000000000000000000000000000000000000..44c922d6c212fd4f9bc7861888c10afb49fb37ad
--- /dev/null
+++ b/scipost/migrations/0005_auto_20160419_2157.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-19 19:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0004_auto_20160415_1952'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='graph',
+            options={'default_permissions': ['add', 'view', 'change', 'delete']},
+        ),
+        migrations.AlterModelOptions(
+            name='list',
+            options={'default_permissions': ['add', 'view', 'change', 'delete']},
+        ),
+        migrations.AlterModelOptions(
+            name='node',
+            options={'default_permissions': ['add', 'view', 'change', 'delete']},
+        ),
+        migrations.AlterModelOptions(
+            name='team',
+            options={'default_permissions': ['add', 'view', 'change', 'delete']},
+        ),
+        migrations.AlterField(
+            model_name='team',
+            name='name',
+            field=models.CharField(max_length=100),
+        ),
+    ]
diff --git a/scipost/migrations/0006_auto_20160421_1520.py b/scipost/migrations/0006_auto_20160421_1520.py
new file mode 100644
index 0000000000000000000000000000000000000000..1df75d9da798714d0031fb259da6021ca8a04f77
--- /dev/null
+++ b/scipost/migrations/0006_auto_20160421_1520.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-21 13:20
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0005_auto_20160419_2157'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='registrationinvitation',
+            old_name='email_address',
+            new_name='email',
+        ),
+    ]
diff --git a/scipost/migrations/0007_auto_20160515_0550.py b/scipost/migrations/0007_auto_20160515_0550.py
new file mode 100644
index 0000000000000000000000000000000000000000..1cda881470452c6b843ba20960293aad0ff1d0ed
--- /dev/null
+++ b/scipost/migrations/0007_auto_20160515_0550.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-15 03:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0006_auto_20160421_1520'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Arc',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('length', models.PositiveSmallIntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8')], default=32)),
+                ('added_by', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+                ('graph', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='scipost.Graph')),
+            ],
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='arcs_in',
+        ),
+        migrations.AddField(
+            model_name='arc',
+            name='source',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='source', to='scipost.Node'),
+        ),
+        migrations.AddField(
+            model_name='arc',
+            name='target',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='target', to='scipost.Node'),
+        ),
+    ]
diff --git a/scipost/migrations/0008_auto_20160531_1526.py b/scipost/migrations/0008_auto_20160531_1526.py
new file mode 100644
index 0000000000000000000000000000000000000000..41fa58ba792bed7db111c723a994a19d527106cf
--- /dev/null
+++ b/scipost/migrations/0008_auto_20160531_1526.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-31 13:26
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0007_auto_20160527_2215'),
+        ('scipost', '0007_auto_20160515_0550'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='cited_in_submission',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='invitation_type',
+            field=models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor'), ('R', 'Refereeing'), ('ci', 'cited')], default='C', max_length=2),
+        ),
+    ]
diff --git a/scipost/migrations/0009_auto_20160604_0706.py b/scipost/migrations/0009_auto_20160604_0706.py
new file mode 100644
index 0000000000000000000000000000000000000000..12fc8bf272def213bc62d91060d2892c121dd8aa
--- /dev/null
+++ b/scipost/migrations/0009_auto_20160604_0706.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-06-04 05:06
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0008_auto_20160531_1526'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='specializations',
+            field=django.contrib.postgres.fields.jsonb.JSONField(default='{}'),
+        ),
+    ]
diff --git a/scipost/migrations/0010_auto_20160802_0534.py b/scipost/migrations/0010_auto_20160802_0534.py
new file mode 100644
index 0000000000000000000000000000000000000000..70cc92e83359dc075696b9c19820dd04ed700cf5
--- /dev/null
+++ b/scipost/migrations/0010_auto_20160802_0534.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-02 03:34
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0009_auto_20160604_0706'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='specializations',
+            field=django.contrib.postgres.fields.jsonb.JSONField(default={}),
+        ),
+    ]
diff --git a/scipost/migrations/0011_unavailabilityperiod.py b/scipost/migrations/0011_unavailabilityperiod.py
new file mode 100644
index 0000000000000000000000000000000000000000..c35a22961bb7f74b0877acb29691fa91d18796e0
--- /dev/null
+++ b/scipost/migrations/0011_unavailabilityperiod.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-03 18:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0010_auto_20160802_0534'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UnavailabilityPeriod',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('start', models.DateField()),
+                ('end', models.DateField()),
+                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+    ]
diff --git a/scipost/migrations/0012_remove_contributor_specializations.py b/scipost/migrations/0012_remove_contributor_specializations.py
new file mode 100644
index 0000000000000000000000000000000000000000..22b67d89cc832031e46e04cc8bce8c739ee12dd0
--- /dev/null
+++ b/scipost/migrations/0012_remove_contributor_specializations.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-09 05:42
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0011_unavailabilityperiod'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='contributor',
+            name='specializations',
+        ),
+    ]
diff --git a/scipost/migrations/0013_auto_20160810_1608.py b/scipost/migrations/0013_auto_20160810_1608.py
new file mode 100644
index 0000000000000000000000000000000000000000..e5d8565449276b8f486f92812c7dd00c96632757
--- /dev/null
+++ b/scipost/migrations/0013_auto_20160810_1608.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-10 14:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0012_remove_contributor_specializations'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='contributor',
+            name='expertises',
+            field=scipost.models.ChoiceArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:A', 'Atomic, Molecular and Optical Physics'), ('Phys:B', 'Biophysics'), ('Phys:C', 'Condensed Matter Physics'), ('Phys:F', 'Fluid Dynamics'), ('Phys:G', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:H', 'High-Energy Physics'), ('Phys:M', 'Mathematical Physics'), ('Phys:N', 'Nuclear Physics'), ('Phys:Q', 'Quantum Statistical Mechanics'), ('Phys:S', 'Statistical and Soft Matter Physics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:PDE', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:ODE', 'Classical Analysis and ODEs'), ('Math:COMB', 'Combinatorics'), ('Math:CA', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GenT', 'General Topology'), ('Math:GeoT', 'Geometric Topology'), ('Math:Group', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:L', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:Proba', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SpecT', 'Spectral Theory'), ('Math:StatT', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None),
+        ),
+        migrations.AlterField(
+            model_name='contributor',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/scipost/migrations/0014_auto_20160811_1057.py b/scipost/migrations/0014_auto_20160811_1057.py
new file mode 100644
index 0000000000000000000000000000000000000000..6adcb30188ed47f5c05c1048fa833c49c737df38
--- /dev/null
+++ b/scipost/migrations/0014_auto_20160811_1057.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 08:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0013_auto_20160810_1608'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+        migrations.AlterField(
+            model_name='contributor',
+            name='expertises',
+            field=scipost.models.ChoiceArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:A', 'Atomic, Molecular and Optical Physics'), ('Phys:B', 'Biophysics'), ('Phys:C', 'Condensed Matter Physics'), ('Phys:F', 'Fluid Dynamics'), ('Phys:G', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:H', 'High-Energy Physics'), ('Phys:M', 'Mathematical Physics'), ('Phys:N', 'Nuclear Physics'), ('Phys:Q', 'Quantum Statistical Mechanics'), ('Phys:S', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:PDE', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:ODE', 'Classical Analysis and ODEs'), ('Math:COMB', 'Combinatorics'), ('Math:CA', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GenT', 'General Topology'), ('Math:GeoT', 'Geometric Topology'), ('Math:Group', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:L', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:Proba', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SpecT', 'Spectral Theory'), ('Math:StatT', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None),
+        ),
+    ]
diff --git a/scipost/migrations/0015_auto_20160811_1305.py b/scipost/migrations/0015_auto_20160811_1305.py
new file mode 100644
index 0000000000000000000000000000000000000000..297749de0c3674266ccf5b2c387e8f0642a4eb7f
--- /dev/null
+++ b/scipost/migrations/0015_auto_20160811_1305.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 11:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0014_auto_20160811_1057'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20, verbose_name='Main discipline'),
+        ),
+        migrations.AlterField(
+            model_name='contributor',
+            name='expertises',
+            field=scipost.models.ChoiceArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None),
+        ),
+    ]
diff --git a/scipost/migrations/0016_remark.py b/scipost/migrations/0016_remark.py
new file mode 100644
index 0000000000000000000000000000000000000000..1bb698958ceb8c2a04b453c936d9b16b7acc9a45
--- /dev/null
+++ b/scipost/migrations/0016_remark.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-13 12:01
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0015_auto_20160811_1305'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Remark',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateTimeField()),
+                ('remark', models.TextField()),
+                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+    ]
diff --git a/scipost/migrations/0017_remark_recommendation.py b/scipost/migrations/0017_remark_recommendation.py
new file mode 100644
index 0000000000000000000000000000000000000000..5e6471f1e217ce26132c52957530fa4f30446134
--- /dev/null
+++ b/scipost/migrations/0017_remark_recommendation.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-13 13:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0021_remove_eicrecommendation_remarks_during_voting'),
+        ('scipost', '0016_remark'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='remark',
+            name='recommendation',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.EICRecommendation'),
+        ),
+    ]
diff --git a/scipost/migrations/0018_newsitem.py b/scipost/migrations/0018_newsitem.py
new file mode 100644
index 0000000000000000000000000000000000000000..771c1e4b27f72de02fcfba86aa67e2780b1e77a2
--- /dev/null
+++ b/scipost/migrations/0018_newsitem.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-16 07:03
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0017_remark_recommendation'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='NewsItem',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateField()),
+                ('headline', models.CharField(max_length=300)),
+                ('blurb', models.TextField()),
+                ('followup_link', models.URLField(blank=True, null=True)),
+                ('followup_link_text', models.CharField(blank=True, max_length=300, null=True)),
+            ],
+        ),
+    ]
diff --git a/scipost/migrations/0019_contributor_accepts_scipost_emails.py b/scipost/migrations/0019_contributor_accepts_scipost_emails.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b291fe1669420397896ce508b3b766c332c0eb1
--- /dev/null
+++ b/scipost/migrations/0019_contributor_accepts_scipost_emails.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-17 06:19
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0018_newsitem'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='contributor',
+            name='accepts_SciPost_emails',
+            field=models.BooleanField(default=True, verbose_name='I accept to receive SciPost emails'),
+        ),
+    ]
diff --git a/scipost/migrations/0020_auto_20160920_0831.py b/scipost/migrations/0020_auto_20160920_0831.py
new file mode 100644
index 0000000000000000000000000000000000000000..2820e3da8ed5fb5c0fa3d3bbb2c9be3ea7d20b85
--- /dev/null
+++ b/scipost/migrations/0020_auto_20160920_0831.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-20 06:31
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0001_initial'),
+        ('scipost', '0019_contributor_accepts_scipost_emails'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='cited_in_publication',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.Publication'),
+        ),
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='date_last_reminded',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='nr_reminders',
+            field=models.PositiveSmallIntegerField(default=0),
+        ),
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='invitation_type',
+            field=models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor'), ('R', 'Refereeing'), ('ci', 'cited in submission'), ('cp', 'cited in publication')], default='C', max_length=2),
+        ),
+    ]
diff --git a/scipost/migrations/0021_precookedemail.py b/scipost/migrations/0021_precookedemail.py
new file mode 100644
index 0000000000000000000000000000000000000000..bb4639be04d2867a4c282493d8c3f5507cd69736
--- /dev/null
+++ b/scipost/migrations/0021_precookedemail.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-10-03 17:15
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0020_auto_20160920_0831'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PrecookedEmail',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('email_subject', models.CharField(max_length=300)),
+                ('email_text', models.TextField()),
+                ('email_text_html', models.TextField()),
+                ('date_created', models.DateField(default=django.utils.timezone.now)),
+                ('emailed_to', django.contrib.postgres.fields.ArrayField(base_field=models.EmailField(blank=True, max_length=254), blank=True, size=None)),
+                ('date_last_used', models.DateField(default=django.utils.timezone.now)),
+                ('deprecated', models.BooleanField(default=False)),
+            ],
+        ),
+    ]
diff --git a/scipost/migrations/0022_registrationinvitation_declined.py b/scipost/migrations/0022_registrationinvitation_declined.py
new file mode 100644
index 0000000000000000000000000000000000000000..52d73978f7d7bc8309b2db3f7b05977a600e8808
--- /dev/null
+++ b/scipost/migrations/0022_registrationinvitation_declined.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-10-25 04:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0021_precookedemail'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='declined',
+            field=models.BooleanField(default=False),
+        ),
+    ]
diff --git a/scipost/migrations/0023_auto_20161112_1049.py b/scipost/migrations/0023_auto_20161112_1049.py
new file mode 100644
index 0000000000000000000000000000000000000000..34e3acf8bb485138ff4471cb749c489638bcd0f3
--- /dev/null
+++ b/scipost/migrations/0023_auto_20161112_1049.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-12 09:49
+from __future__ import unicode_literals
+
+import datetime
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0022_registrationinvitation_declined'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='SPBMembershipAgreement',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('status', models.CharField(choices=[('Submitted', 'Request submitted by Partner'), ('Pending', 'Sent to Partner, response pending'), ('Signed', 'Signed by Partner'), ('Honoured', 'Honoured: payment of Partner received')], max_length=16)),
+                ('date_requested', models.DateField()),
+                ('start_date', models.DateField()),
+                ('duration', models.DurationField(choices=[(datetime.timedelta(365), '1 year'), (datetime.timedelta(1095), '3 years'), (datetime.timedelta(1825), '5 years')])),
+            ],
+        ),
+        migrations.CreateModel(
+            name='SupportingPartner',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('partner_type', models.CharField(choices=[('Int. Fund. Agency', 'International Funding Agency'), ('Nat. Fund. Agency', 'National Funding Agency'), ('Univ. Library', 'University Library'), ('Univ. Library. Consortium', 'University Library Consortium'), ('Foundation', 'Foundation'), ('Individual', 'Individual')], max_length=32)),
+                ('status', models.CharField(choices=[('Prospective', 'Prospective'), ('Active', 'Active'), ('Inactive', 'Inactive')], max_length=16)),
+                ('institution', models.CharField(max_length=256)),
+                ('institution_acronym', models.CharField(max_length=10)),
+                ('institution_address', models.CharField(max_length=1000)),
+                ('contact_person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='spbmembershipagreement',
+            name='partner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.SupportingPartner'),
+        ),
+    ]
diff --git a/scipost/migrations/0024_auto_20161117_0602.py b/scipost/migrations/0024_auto_20161117_0602.py
new file mode 100644
index 0000000000000000000000000000000000000000..412e0365eedb3155c4f1b26b17de4481ae59202d
--- /dev/null
+++ b/scipost/migrations/0024_auto_20161117_0602.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-17 05:02
+from __future__ import unicode_literals
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0023_auto_20161112_1049'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='supportingpartner',
+            name='consortium_members',
+            field=models.TextField(blank=True, null=True),
+        ),
+        migrations.AlterField(
+            model_name='spbmembershipagreement',
+            name='duration',
+            field=models.DurationField(choices=[(datetime.timedelta(365), '1 year'), (datetime.timedelta(730), '2 years'), (datetime.timedelta(1095), '3 years'), (datetime.timedelta(1460), '4 years'), (datetime.timedelta(1825), '5 years')]),
+        ),
+        migrations.AlterField(
+            model_name='supportingpartner',
+            name='partner_type',
+            field=models.CharField(choices=[('Int. Fund. Agency', 'International Funding Agency'), ('Nat. Fund. Agency', 'National Funding Agency'), ('Nat. Library', 'National Library'), ('Univ. Library', 'University Library'), ('Res. Library', 'Research Library'), ('Consortium', 'Consortium'), ('Foundation', 'Foundation'), ('Individual', 'Individual')], max_length=32),
+        ),
+    ]
diff --git a/scipost/migrations/0025_auto_20161118_0839.py b/scipost/migrations/0025_auto_20161118_0839.py
new file mode 100644
index 0000000000000000000000000000000000000000..a922e4344f7d87eac9262366a4eb89a7874981cb
--- /dev/null
+++ b/scipost/migrations/0025_auto_20161118_0839.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-11-18 07:39
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django_countries.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0024_auto_20161117_0602'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AffiliationObject',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('country', django_countries.fields.CountryField(max_length=2)),
+                ('institution', models.CharField(max_length=128)),
+                ('subunit', models.CharField(max_length=128)),
+            ],
+        ),
+        migrations.AddField(
+            model_name='spbmembershipagreement',
+            name='offered_yearly_contribution',
+            field=models.SmallIntegerField(default=0),
+        ),
+    ]
diff --git a/scipost/migrations/0026_draftinvitation.py b/scipost/migrations/0026_draftinvitation.py
new file mode 100644
index 0000000000000000000000000000000000000000..db2dc27587e74c25d31c9d029247d64357a6d6ed
--- /dev/null
+++ b/scipost/migrations/0026_draftinvitation.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2016-11-29 09:19
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0006_publication_citedby'),
+        ('submissions', '0027_auto_20161019_2109'),
+        ('scipost', '0025_auto_20161118_0839'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='DraftInvitation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')], max_length=4)),
+                ('first_name', models.CharField(default='', max_length=30)),
+                ('last_name', models.CharField(default='', max_length=30)),
+                ('email', models.EmailField(max_length=254)),
+                ('invitation_type', models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor'), ('R', 'Refereeing'), ('ci', 'cited in submission'), ('cp', 'cited in publication')], default='C', max_length=2)),
+                ('date_drafted', models.DateTimeField(default=django.utils.timezone.now)),
+                ('processed', models.BooleanField(default=False)),
+                ('cited_in_publication', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.Publication')),
+                ('cited_in_submission', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission')),
+                ('drafted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+    ]
diff --git a/submissions/migrations/0001_initial.py b/submissions/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..db3db6ce8a62336bbe59d5a566865ccb193c766f
--- /dev/null
+++ b/submissions/migrations/0001_initial.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('scipost', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Report',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('status', models.SmallIntegerField(default=0)),
+                ('date_invited', models.DateTimeField(blank=True, null=True, verbose_name='date invited')),
+                ('date_submitted', models.DateTimeField(verbose_name='date submitted')),
+                ('qualification', models.PositiveSmallIntegerField(choices=[(4, 'expert in this subject'), (3, 'very knowledgeable in this subject'), (2, 'knowledgeable in this subject'), (1, 'generally qualified'), (0, 'not qualified')], verbose_name='Qualification to referee this: I am ')),
+                ('strengths', models.TextField()),
+                ('weaknesses', models.TextField()),
+                ('report', models.TextField()),
+                ('requested_changes', models.TextField(verbose_name='requested changes')),
+                ('validity', models.PositiveSmallIntegerField(choices=[(101, '-'), (100, 'top'), (80, 'high'), (60, 'good'), (40, 'ok'), (20, 'low'), (0, 'poor')], default=101)),
+                ('significance', models.PositiveSmallIntegerField(choices=[(101, '-'), (100, 'top'), (80, 'high'), (60, 'good'), (40, 'ok'), (20, 'low'), (0, 'poor')], default=101)),
+                ('originality', models.PositiveSmallIntegerField(choices=[(101, '-'), (100, 'top'), (80, 'high'), (60, 'good'), (40, 'ok'), (20, 'low'), (0, 'poor')], default=101)),
+                ('clarity', models.PositiveSmallIntegerField(choices=[(101, '-'), (100, 'top'), (80, 'high'), (60, 'good'), (40, 'ok'), (20, 'low'), (0, 'poor')], default=101)),
+                ('formatting', models.SmallIntegerField(blank=True, choices=[(6, 'perfect'), (5, 'excellent'), (4, 'good'), (3, 'reasonable'), (2, 'acceptable'), (1, 'below threshold'), (0, 'mediocre')], verbose_name='Quality of paper formatting')),
+                ('grammar', models.SmallIntegerField(blank=True, choices=[(6, 'perfect'), (5, 'excellent'), (4, 'good'), (3, 'reasonable'), (2, 'acceptable'), (1, 'below threshold'), (0, 'mediocre')], verbose_name='Quality of English grammar')),
+                ('recommendation', models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal)'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')])),
+                ('anonymous', models.BooleanField(default=True, verbose_name='Publish anonymously')),
+                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+                ('invited_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='invited_by', to='scipost.Contributor')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Submission',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('vetted', models.BooleanField(default=False)),
+                ('submitted_to_journal', models.CharField(choices=[('SciPost Physics', 'SciPost Physics'), ('SciPost Physics Lecture Notes', 'SciPost Physics Lecture Notes')], max_length=30, verbose_name='Journal to be submitted to')),
+                ('discipline', models.CharField(choices=[('physics', 'Physics')], default='physics', max_length=20)),
+                ('domain', models.CharField(choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational'), ('ET', 'Exp. & Theor.'), ('EC', 'Exp. & Comp.'), ('TC', 'Theor. & Comp.'), ('ETC', 'Exp., Theor. & Comp.')], max_length=3)),
+                ('specialization', models.CharField(choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')], max_length=1)),
+                ('status', models.CharField(choices=[('unassigned', 'unassigned'), ('forwarded', 'forwarded to a specialty editor'), ('SEICassigned', 'specialty editor-in-charge assigned'), ('under_review', 'under review'), ('review_completed', 'review period closed, editorial recommendation pending'), ('SEIC_has_recommended', 'specialty editor-in-charge has provided recommendation'), ('decided', 'journal editor-in-chief has fixed decision')], max_length=30)),
+                ('open_for_reporting', models.BooleanField(default=True)),
+                ('open_for_commenting', models.BooleanField(default=True)),
+                ('title', models.CharField(max_length=300)),
+                ('author_list', models.CharField(max_length=1000, verbose_name='author list')),
+                ('abstract', models.TextField()),
+                ('arxiv_link', models.URLField(verbose_name='arXiv link (including version nr)')),
+                ('submission_date', models.DateField(verbose_name='submission date')),
+                ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)),
+                ('authors', models.ManyToManyField(blank=True, related_name='authors_sub', to='scipost.Contributor')),
+                ('authors_claims', models.ManyToManyField(blank=True, related_name='authors_sub_claims', to='scipost.Contributor')),
+                ('authors_false_claims', models.ManyToManyField(blank=True, related_name='authors_sub_false_claims', to='scipost.Contributor')),
+                ('editor_in_charge', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='editor_in_charge', to='scipost.Contributor')),
+                ('submitted_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='report',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+    ]
diff --git a/submissions/migrations/0002_auto_20160415_1952.py b/submissions/migrations/0002_auto_20160415_1952.py
new file mode 100644
index 0000000000000000000000000000000000000000..65a8fad83767044d83c40fc3bac28d0264793d47
--- /dev/null
+++ b/submissions/migrations/0002_auto_20160415_1952.py
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-04-15 17:52
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0004_auto_20160415_1952'),
+        ('submissions', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='EditorialAssignment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('accepted', models.NullBooleanField(choices=[(None, 'Response pending'), (True, 'Accept'), (False, 'Decline')], default=None)),
+                ('completed', models.BooleanField(default=False)),
+                ('refusal_reason', models.CharField(blank=True, choices=[('BUS', 'Too busy'), ('COI', 'Conflict of interest: coauthor in last 5 years'), ('CCC', 'Conflict of interest: close colleague'), ('NIR', 'Cannot give an impartial assessment'), ('NIE', 'Not interested enough'), ('DNP', 'SciPost should not even consider this paper')], max_length=3, null=True)),
+                ('date_created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('date_answered', models.DateTimeField(blank=True, null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='EditorialCommunication',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('type', models.CharField(choices=[('EtoA', 'Editor-in-charge to Author'), ('AtoE', 'Author to Editor-in-charge'), ('EtoR', 'Editor-in-charge to Referee'), ('RtoE', 'Referee to Editor-in-Charge'), ('EtoS', 'Editor-in-charge to SciPost Editorial Administration'), ('StoE', 'SciPost Editorial Administration to Editor-in-charge')], max_length=4)),
+                ('timestamp', models.DateTimeField(default=django.utils.timezone.now)),
+                ('text', models.TextField()),
+                ('referee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='referee_in_correspondence', to='scipost.Contributor')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='EICRecommendation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date_submitted', models.DateTimeField(verbose_name='date submitted')),
+                ('remarks_for_authors', models.TextField(blank=True, null=True)),
+                ('requested_changes', models.TextField(blank=True, null=True, verbose_name='requested changes')),
+                ('remarks_for_editorial_college', models.TextField(blank=True, default='', null=True, verbose_name='optional remarks for the Editorial College')),
+                ('recommendation', models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal)'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')])),
+                ('voting_deadline', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date submitted')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='RefereeInvitation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs')], max_length=4)),
+                ('first_name', models.CharField(default='', max_length=30)),
+                ('last_name', models.CharField(default='', max_length=30)),
+                ('email_address', models.EmailField(max_length=254)),
+                ('invitation_key', models.CharField(default='', max_length=40)),
+                ('date_invited', models.DateTimeField(default=django.utils.timezone.now)),
+                ('accepted', models.NullBooleanField(choices=[(None, 'Response pending'), (True, 'Accept'), (False, 'Decline')], default=None)),
+                ('date_responded', models.DateTimeField(blank=True, null=True)),
+                ('refusal_reason', models.CharField(blank=True, choices=[('BUS', 'Too busy'), ('COI', 'Conflict of interest: coauthor in last 5 years'), ('CCC', 'Conflict of interest: close colleague'), ('NIR', 'Cannot give an impartial assessment'), ('NIE', 'Not interested enough'), ('DNP', 'SciPost should not even consider this paper')], max_length=3, null=True)),
+                ('fulfilled', models.BooleanField(default=False)),
+                ('invited_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='referee_invited_by', to='scipost.Contributor')),
+                ('referee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='referee', to='scipost.Contributor')),
+            ],
+        ),
+        migrations.RenameField(
+            model_name='submission',
+            old_name='vetted',
+            new_name='assigned',
+        ),
+        migrations.RemoveField(
+            model_name='report',
+            name='date_invited',
+        ),
+        migrations.RemoveField(
+            model_name='report',
+            name='invited_by',
+        ),
+        migrations.AddField(
+            model_name='report',
+            name='invited',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AddField(
+            model_name='report',
+            name='remarks_for_editors',
+            field=models.TextField(blank=True, default='', verbose_name='optional remarks for the Editors only'),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='reporting_deadline',
+            field=models.DateTimeField(default=django.utils.timezone.now),
+        ),
+        migrations.AlterField(
+            model_name='report',
+            name='formatting',
+            field=models.SmallIntegerField(choices=[(6, 'perfect'), (5, 'excellent'), (4, 'good'), (3, 'reasonable'), (2, 'acceptable'), (1, 'below threshold'), (0, 'mediocre')], verbose_name='Quality of paper formatting'),
+        ),
+        migrations.AlterField(
+            model_name='report',
+            name='grammar',
+            field=models.SmallIntegerField(choices=[(6, 'perfect'), (5, 'excellent'), (4, 'good'), (3, 'reasonable'), (2, 'acceptable'), (1, 'below threshold'), (0, 'mediocre')], verbose_name='Quality of English grammar'),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='editor_in_charge',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='EIC', to='scipost.Contributor'),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned'), ('assigned', 'Assigned to a specialty editor (response pending)'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('EIC_has_recommended', 'Editor-in-charge has provided recommendation'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('decided', 'Publication decision taken')], max_length=30),
+        ),
+        migrations.AddField(
+            model_name='refereeinvitation',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='voted_against',
+            field=models.ManyToManyField(blank=True, related_name='voted_against', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='voted_for',
+            field=models.ManyToManyField(blank=True, related_name='voted_for', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='editorialcommunication',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='editorialassignment',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='submissions.Submission'),
+        ),
+        migrations.AddField(
+            model_name='editorialassignment',
+            name='to',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor'),
+        ),
+    ]
diff --git a/submissions/migrations/0003_auto_20160515_0550.py b/submissions/migrations/0003_auto_20160515_0550.py
new file mode 100644
index 0000000000000000000000000000000000000000..c7ae2702c17db733db6af1bc36ea015d88ef697a
--- /dev/null
+++ b/submissions/migrations/0003_auto_20160515_0550.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-15 03:50
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0002_auto_20160415_1952'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='report',
+            name='flagged',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='metadata',
+            field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default={}, null=True),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='referees_flagged',
+            field=models.TextField(blank=True, null=True),
+        ),
+    ]
diff --git a/submissions/migrations/0004_auto_20160516_1600.py b/submissions/migrations/0004_auto_20160516_1600.py
new file mode 100644
index 0000000000000000000000000000000000000000..454500f0a17a4a06af47a92d93ce670ed494c854
--- /dev/null
+++ b/submissions/migrations/0004_auto_20160516_1600.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-16 14:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0003_auto_20160515_0550'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='editorialcommunication',
+            old_name='type',
+            new_name='comtype',
+        ),
+        migrations.RemoveField(
+            model_name='submission',
+            name='assigned',
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='open_for_commenting',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='open_for_reporting',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned'), ('assigned', 'Assigned to a specialty editor (response pending)'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('EIC_has_recommended', 'Editor-in-charge has provided recommendation'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('decided', 'Publication decision taken')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0005_auto_20160517_1914.py b/submissions/migrations/0005_auto_20160517_1914.py
new file mode 100644
index 0000000000000000000000000000000000000000..dd27b4199a47db72756a8df3ab6b862c8ea548bd
--- /dev/null
+++ b/submissions/migrations/0005_auto_20160517_1914.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-17 17:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0004_auto_20160516_1600'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='editorialassignment',
+            name='deprecated',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('EIC_has_recommended', 'Editor-in-charge has provided recommendation'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('decided', 'Publication decision taken')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0006_auto_20160521_1523.py b/submissions/migrations/0006_auto_20160521_1523.py
new file mode 100644
index 0000000000000000000000000000000000000000..1684512dc23e8f3b70b9544e5f2b0064aee31b88
--- /dev/null
+++ b/submissions/migrations/0006_auto_20160521_1523.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-21 13:23
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0005_auto_20160517_1914'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='submission',
+            options={'permissions': (('can_take_editorial_actions', 'Can take editorial actions'),)},
+        ),
+    ]
diff --git a/submissions/migrations/0007_auto_20160527_2215.py b/submissions/migrations/0007_auto_20160527_2215.py
new file mode 100644
index 0000000000000000000000000000000000000000..de77bbfb6f3172edfd207bc1e2925ec53e0a3346
--- /dev/null
+++ b/submissions/migrations/0007_auto_20160527_2215.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-05-27 20:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0006_auto_20160521_1523'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='refereeinvitation',
+            name='date_last_reminded',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='refereeinvitation',
+            name='nr_reminders',
+            field=models.PositiveSmallIntegerField(default=0),
+        ),
+        migrations.AlterField(
+            model_name='editorialcommunication',
+            name='comtype',
+            field=models.CharField(choices=[('EtoA', 'Editor-in-charge to Author'), ('EtoR', 'Editor-in-charge to Referee'), ('EtoS', 'Editor-in-charge to SciPost Editorial Administration'), ('AtoE', 'Author to Editor-in-charge'), ('RtoE', 'Referee to Editor-in-Charge'), ('StoE', 'SciPost Editorial Administration to Editor-in-charge')], max_length=4),
+        ),
+    ]
diff --git a/submissions/migrations/0008_auto_20160610_1220.py b/submissions/migrations/0008_auto_20160610_1220.py
new file mode 100644
index 0000000000000000000000000000000000000000..abbca05948f9e56c74513d0668253f7f4271a4c3
--- /dev/null
+++ b/submissions/migrations/0008_auto_20160610_1220.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-06-10 10:20
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0009_auto_20160604_0706'),
+        ('submissions', '0007_auto_20160527_2215'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='report',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='report_vetted_by', to='scipost.Contributor'),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0009_auto_20160704_2111.py b/submissions/migrations/0009_auto_20160704_2111.py
new file mode 100644
index 0000000000000000000000000000000000000000..2be752ed343a623f3b1a6cccde77eb3f06cfae14
--- /dev/null
+++ b/submissions/migrations/0009_auto_20160704_2111.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-07-04 19:11
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0008_auto_20160610_1220'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='submission_type',
+            field=models.CharField(blank=True, choices=[('Letter', 'Letter (broad-interest breakthrough results)'), ('Article', 'Article (in-depth reports on specialized research)'), ('Review', 'Review (candid snapshot of current research area)')], default=None, max_length=10, null=True),
+        ),
+        migrations.AlterField(
+            model_name='eicrecommendation',
+            name='date_submitted',
+            field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='date submitted'),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0010_auto_20160706_1154.py b/submissions/migrations/0010_auto_20160706_1154.py
new file mode 100644
index 0000000000000000000000000000000000000000..aee997d0bb539968c7903c535f7aaf83cac23c12
--- /dev/null
+++ b/submissions/migrations/0010_auto_20160706_1154.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-07-06 09:54
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0009_auto_20160704_2111'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned, undergoing pre-screening'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0011_auto_20160712_1437.py b/submissions/migrations/0011_auto_20160712_1437.py
new file mode 100644
index 0000000000000000000000000000000000000000..43e445ed548976ff47b112291b441d27d85d1b3c
--- /dev/null
+++ b/submissions/migrations/0011_auto_20160712_1437.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-07-12 12:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0010_auto_20160706_1154'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='submission_type',
+            field=models.CharField(blank=True, choices=[('Letter', 'Letter (broad-interest breakthrough results)'), ('Article', 'Article (in-depth reports on specialized research)'), ('Review', 'Review (candid snapshot of current research in a given area)')], default=None, max_length=10, null=True),
+        ),
+    ]
diff --git a/submissions/migrations/0012_auto_20160720_1722.py b/submissions/migrations/0012_auto_20160720_1722.py
new file mode 100644
index 0000000000000000000000000000000000000000..9975694be30251ce97f30150b9b988fc96355325
--- /dev/null
+++ b/submissions/migrations/0012_auto_20160720_1722.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-07-20 15:22
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0011_auto_20160712_1437'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='arxiv_identifier_w_vn_nr',
+            field=models.CharField(default='0000.00000v0', max_length=15),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='arxiv_identifier_wo_vn_nr',
+            field=models.CharField(default='0000.00000', max_length=10),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='arxiv_vn_nr',
+            field=models.PositiveSmallIntegerField(default=1),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='author_comments',
+            field=models.TextField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='is_current',
+            field=models.BooleanField(default=True),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='is_resubmission',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='list_of_changes',
+            field=models.TextField(blank=True, null=True),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned, undergoing pre-screening'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('resubmitted', 'Has been resubmitted'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0013_auto_20160802_0534.py b/submissions/migrations/0013_auto_20160802_0534.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3f36b877f79e731327d1f9f8f364e23bb3928d2
--- /dev/null
+++ b/submissions/migrations/0013_auto_20160802_0534.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-02 03:34
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0012_auto_20160720_1722'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned, undergoing pre-screening'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('resubmitted', 'Has been resubmitted'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('published', 'Published'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0014_auto_20160802_1541.py b/submissions/migrations/0014_auto_20160802_1541.py
new file mode 100644
index 0000000000000000000000000000000000000000..ccb04fb0f1966301fb9308687ee8402e39dfbfac
--- /dev/null
+++ b/submissions/migrations/0014_auto_20160802_1541.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-02 13:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0013_auto_20160802_0534'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='editorialassignment',
+            name='refusal_reason',
+            field=models.CharField(blank=True, choices=[('BUS', 'Too busy'), ('VAC', 'Away on vacation'), ('COI', 'Conflict of interest: coauthor in last 5 years'), ('CCC', 'Conflict of interest: close colleague'), ('NIR', 'Cannot give an impartial assessment'), ('NIE', 'Not interested enough'), ('DNP', 'SciPost should not even consider this paper')], max_length=3, null=True),
+        ),
+        migrations.AlterField(
+            model_name='refereeinvitation',
+            name='refusal_reason',
+            field=models.CharField(blank=True, choices=[('BUS', 'Too busy'), ('VAC', 'Away on vacation'), ('COI', 'Conflict of interest: coauthor in last 5 years'), ('CCC', 'Conflict of interest: close colleague'), ('NIR', 'Cannot give an impartial assessment'), ('NIE', 'Not interested enough'), ('DNP', 'SciPost should not even consider this paper')], max_length=3, null=True),
+        ),
+    ]
diff --git a/submissions/migrations/0015_eicrecommendation_voted_abstain.py b/submissions/migrations/0015_eicrecommendation_voted_abstain.py
new file mode 100644
index 0000000000000000000000000000000000000000..f8e7e374168e871da2da7f15127c9eefe75ef4b8
--- /dev/null
+++ b/submissions/migrations/0015_eicrecommendation_voted_abstain.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-09 05:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0011_unavailabilityperiod'),
+        ('submissions', '0014_auto_20160802_1541'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='voted_abstain',
+            field=models.ManyToManyField(blank=True, related_name='voted_abstain', to='scipost.Contributor'),
+        ),
+    ]
diff --git a/submissions/migrations/0016_auto_20160810_1608.py b/submissions/migrations/0016_auto_20160810_1608.py
new file mode 100644
index 0000000000000000000000000000000000000000..92e355880537ef639f63fcf8e1e484eed9996f91
--- /dev/null
+++ b/submissions/migrations/0016_auto_20160810_1608.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-10 14:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0015_eicrecommendation_voted_abstain'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/submissions/migrations/0017_auto_20160811_1057.py b/submissions/migrations/0017_auto_20160811_1057.py
new file mode 100644
index 0000000000000000000000000000000000000000..7777a861825c9afc446ca96350ba3cf1e02ee01d
--- /dev/null
+++ b/submissions/migrations/0017_auto_20160811_1057.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 08:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0016_auto_20160810_1608'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='referees_suggested',
+            field=models.TextField(blank=True, null=True),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/submissions/migrations/0018_auto_20160811_1442.py b/submissions/migrations/0018_auto_20160811_1442.py
new file mode 100644
index 0000000000000000000000000000000000000000..bbba364f3f4bad3d5104637e882b37b2d14beff4
--- /dev/null
+++ b/submissions/migrations/0018_auto_20160811_1442.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 12:42
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0017_auto_20160811_1057'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='secondary_areas',
+            field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None),
+        ),
+        migrations.AddField(
+            model_name='submission',
+            name='subject_area',
+            field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], default='Phys:QP', max_length=10, verbose_name='Primary subject area'),
+        ),
+    ]
diff --git a/submissions/migrations/0019_remove_submission_specialization.py b/submissions/migrations/0019_remove_submission_specialization.py
new file mode 100644
index 0000000000000000000000000000000000000000..524d5b9c0c4ac172ee8e2c565a9f734cd62f465b
--- /dev/null
+++ b/submissions/migrations/0019_remove_submission_specialization.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 13:39
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0018_auto_20160811_1442'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='submission',
+            name='specialization',
+        ),
+    ]
diff --git a/submissions/migrations/0020_auto_20160813_1401.py b/submissions/migrations/0020_auto_20160813_1401.py
new file mode 100644
index 0000000000000000000000000000000000000000..72de92aae6270db6f9e117b10f06882d5e700181
--- /dev/null
+++ b/submissions/migrations/0020_auto_20160813_1401.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-13 12:01
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0016_remark'),
+        ('submissions', '0019_remove_submission_specialization'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='eligible_to_vote',
+            field=models.ManyToManyField(blank=True, related_name='eligible_to_vote', to='scipost.Contributor'),
+        ),
+        migrations.AddField(
+            model_name='eicrecommendation',
+            name='remarks_during_voting',
+            field=models.ManyToManyField(blank=True, to='scipost.Remark'),
+        ),
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned, undergoing pre-screening'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('resubmitted', 'Has been resubmitted'), ('voting_in_preparation', 'Voting in preparation (eligible Fellows being selected)'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('published', 'Published'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0021_remove_eicrecommendation_remarks_during_voting.py b/submissions/migrations/0021_remove_eicrecommendation_remarks_during_voting.py
new file mode 100644
index 0000000000000000000000000000000000000000..d0d1a6fbe7044115e821cb5b5a5112327d346885
--- /dev/null
+++ b/submissions/migrations/0021_remove_eicrecommendation_remarks_during_voting.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-13 13:27
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0020_auto_20160813_1401'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='eicrecommendation',
+            name='remarks_during_voting',
+        ),
+    ]
diff --git a/submissions/migrations/0022_auto_20160822_1934.py b/submissions/migrations/0022_auto_20160822_1934.py
new file mode 100644
index 0000000000000000000000000000000000000000..448b5cee0542821379882faed3a9db24f7b25dbe
--- /dev/null
+++ b/submissions/migrations/0022_auto_20160822_1934.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-22 17:34
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0021_remove_eicrecommendation_remarks_during_voting'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='secondary_areas',
+            field=scipost.models.ChoiceArrayField(base_field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], max_length=10), blank=True, null=True, size=None),
+        ),
+    ]
diff --git a/submissions/migrations/0023_auto_20160914_0612.py b/submissions/migrations/0023_auto_20160914_0612.py
new file mode 100644
index 0000000000000000000000000000000000000000..fffaf495c0d9134292b69c1481aedbbc9ead9e7a
--- /dev/null
+++ b/submissions/migrations/0023_auto_20160914_0612.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-14 04:12
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0022_auto_20160822_1934'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='status',
+            field=models.CharField(choices=[('unassigned', 'Unassigned, undergoing pre-screening'), ('assignment_failed', 'Failed to assign Editor-in-charge; manuscript rejected'), ('EICassigned', 'Editor-in-charge assigned, manuscript under review'), ('review_closed', 'Review period closed, editorial recommendation pending'), ('revision_requested', 'Editor-in-charge has requested revision'), ('resubmitted', 'Has been resubmitted'), ('voting_in_preparation', 'Voting in preparation (eligible Fellows being selected)'), ('put_to_EC_voting', 'Undergoing voting at the Editorial College'), ('EC_vote_completed', 'Editorial College voting rounded up'), ('accepted', 'Publication decision taken: accept'), ('rejected', 'Publication decision taken: reject'), ('rejected_visible', 'Publication decision taken: reject (still publicly visible)'), ('published', 'Published'), ('withdrawn', 'Withdrawn by the Authors')], max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0024_refereeinvitation_cancelled.py b/submissions/migrations/0024_refereeinvitation_cancelled.py
new file mode 100644
index 0000000000000000000000000000000000000000..dfef91b539330a2dc276964bdba5b9304997a58f
--- /dev/null
+++ b/submissions/migrations/0024_refereeinvitation_cancelled.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-16 07:03
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0023_auto_20160914_0612'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='refereeinvitation',
+            name='cancelled',
+            field=models.BooleanField(default=False),
+        ),
+    ]
diff --git a/submissions/migrations/0025_submission_remarks_for_editors.py b/submissions/migrations/0025_submission_remarks_for_editors.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4ae560dbe7457d638d68655bacf53e93dacd853
--- /dev/null
+++ b/submissions/migrations/0025_submission_remarks_for_editors.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-09-30 08:09
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0024_refereeinvitation_cancelled'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='remarks_for_editors',
+            field=models.TextField(blank=True, null=True),
+        ),
+    ]
diff --git a/submissions/migrations/0026_auto_20161019_0938.py b/submissions/migrations/0026_auto_20161019_0938.py
new file mode 100644
index 0000000000000000000000000000000000000000..a8b90e8f82a62eb5bcf8247f752b3615f7194b55
--- /dev/null
+++ b/submissions/migrations/0026_auto_20161019_0938.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-10-19 07:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0025_submission_remarks_for_editors'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='eicrecommendation',
+            name='recommendation',
+            field=models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal) NOTE: NOT YET OPEN, WAIT FOR EARLY 2017'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')]),
+        ),
+        migrations.AlterField(
+            model_name='report',
+            name='recommendation',
+            field=models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal) NOTE: NOT YET OPEN, WAIT FOR EARLY 2017'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')]),
+        ),
+    ]
diff --git a/submissions/migrations/0027_auto_20161019_2109.py b/submissions/migrations/0027_auto_20161019_2109.py
new file mode 100644
index 0000000000000000000000000000000000000000..f6f13f7a46881954f936b6206c85122365d3a9c5
--- /dev/null
+++ b/submissions/migrations/0027_auto_20161019_2109.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-10-19 19:09
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0026_auto_20161019_0938'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='eicrecommendation',
+            name='recommendation',
+            field=models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal, qualifies as Select) NOTE: SELECT NOT YET OPEN, STARTS EARLY 2017'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')]),
+        ),
+        migrations.AlterField(
+            model_name='report',
+            name='recommendation',
+            field=models.SmallIntegerField(choices=[(1, 'Publish as Tier I (top 10% of papers in this journal, qualifies as Select) NOTE: SELECT NOT YET OPEN, STARTS EARLY 2017'), (2, 'Publish as Tier II (top 50% of papers in this journal)'), (3, 'Publish as Tier III (meets the criteria of this journal)'), (-1, 'Ask for minor revision'), (-2, 'Ask for major revision'), (-3, 'Reject')]),
+        ),
+    ]
diff --git a/theses/migrations/0001_initial.py b/theses/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ed3f4458b2b021e94d175bb11da307644c300c5
--- /dev/null
+++ b/theses/migrations/0001_initial.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-03-29 20:25
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('scipost', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ThesisLink',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('vetted', models.BooleanField(default=False)),
+                ('type', models.CharField(choices=[('MA', "Master's"), ('PhD', 'Ph.D.'), ('Hab', 'Habilitation')], max_length=3)),
+                ('discipline', models.CharField(choices=[('physics', 'Physics')], default='physics', max_length=20)),
+                ('domain', models.CharField(blank=True, choices=[('E', 'Experimental'), ('T', 'Theoretical'), ('C', 'Computational'), ('ET', 'Exp. & Theor.'), ('EC', 'Exp. & Comp.'), ('TC', 'Theor. & Comp.'), ('ETC', 'Exp., Theor. & Comp.')], max_length=3)),
+                ('specialization', models.CharField(blank=True, choices=[('A', 'Atomic, Molecular and Optical Physics'), ('B', 'Biophysics'), ('C', 'Condensed Matter Physics'), ('F', 'Fluid Dynamics'), ('G', 'Gravitation, Cosmology and Astroparticle Physics'), ('H', 'High-Energy Physics'), ('M', 'Mathematical Physics'), ('N', 'Nuclear Physics'), ('Q', 'Quantum Statistical Mechanics'), ('S', 'Statistical and Soft Matter Physics')], max_length=1)),
+                ('open_for_commenting', models.BooleanField(default=True)),
+                ('title', models.CharField(max_length=300, verbose_name='title')),
+                ('pub_link', models.URLField(verbose_name='URL (external repository)')),
+                ('author', models.CharField(max_length=1000)),
+                ('supervisor', models.CharField(default='', max_length=1000)),
+                ('institution', models.CharField(max_length=300, verbose_name='degree granting institution')),
+                ('defense_date', models.DateField(verbose_name='date of thesis defense')),
+                ('abstract', models.TextField(verbose_name='abstract, outline or summary')),
+                ('latest_activity', models.DateTimeField(default=django.utils.timezone.now)),
+                ('author_as_cont', models.ManyToManyField(blank=True, related_name='author_cont', to='scipost.Contributor')),
+                ('author_claims', models.ManyToManyField(blank=True, related_name='authors_thesis_claims', to='scipost.Contributor')),
+                ('author_false_claims', models.ManyToManyField(blank=True, related_name='authors_thesis_false_claims', to='scipost.Contributor')),
+                ('requested_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='thesislink_requested_by', to='scipost.Contributor')),
+                ('supervisor_as_cont', models.ManyToManyField(blank=True, related_name='supervisor_cont', to='scipost.Contributor', verbose_name='supervisor(s)')),
+                ('vetted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='scipost.Contributor')),
+            ],
+        ),
+    ]
diff --git a/theses/migrations/0002_auto_20160810_1608.py b/theses/migrations/0002_auto_20160810_1608.py
new file mode 100644
index 0000000000000000000000000000000000000000..a7ca41ab40598e3f637eba3d7d4ccefe3d55f328
--- /dev/null
+++ b/theses/migrations/0002_auto_20160810_1608.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-10 14:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('theses', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='thesislink',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/theses/migrations/0003_auto_20160811_1057.py b/theses/migrations/0003_auto_20160811_1057.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a0e6911e8535256246ca85c4f9ce067fe794806
--- /dev/null
+++ b/theses/migrations/0003_auto_20160811_1057.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 08:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('theses', '0002_auto_20160810_1608'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='thesislink',
+            name='discipline',
+            field=models.CharField(choices=[('physics', 'Physics'), ('astrophysics', 'Astrophysics'), ('mathematics', 'Mathematics'), ('computerscience', 'Computer Science')], default='physics', max_length=20),
+        ),
+    ]
diff --git a/theses/migrations/0004_thesislink_subject_area.py b/theses/migrations/0004_thesislink_subject_area.py
new file mode 100644
index 0000000000000000000000000000000000000000..628ec96e03db9fdabaef21f894f4ed95af1bdec5
--- /dev/null
+++ b/theses/migrations/0004_thesislink_subject_area.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 12:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('theses', '0003_auto_20160811_1057'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='thesislink',
+            name='subject_area',
+            field=models.CharField(choices=[('Physics', (('Phys:AE', 'Atomic, Molecular and Optical Physics - Experiment'), ('Phys:AT', 'Atomic, Molecular and Optical Physics - Theory'), ('Phys:BI', 'Biophysics'), ('Phys:CE', 'Condensed Matter Physics - Experiment'), ('Phys:CT', 'Condensed Matter Physics - Theory'), ('Phys:FD', 'Fluid Dynamics'), ('Phys:GR', 'Gravitation, Cosmology and Astroparticle Physics'), ('Phys:HE', 'High-Energy Physics - Experiment'), ('Phys:HT', 'High-Energy Physics- Theory'), ('Phys:HP', 'High-Energy Physics - Phenomenology'), ('Phys:MP', 'Mathematical Physics'), ('Phys:NE', 'Nuclear Physics - Experiment'), ('Phys:NT', 'Nuclear Physics - Theory'), ('Phys:QP', 'Quantum Physics'), ('Phys:SM', 'Statistical and Soft Matter Physics'))), ('Astrophysics', (('Astro:GA', 'Astrophysics of Galaxies'), ('Astro:CO', 'Cosmology and Nongalactic Astrophysics'), ('Astro:EP', 'Earth and Planetary Astrophysics'), ('Astro:HE', 'High Energy Astrophysical Phenomena'), ('Astro:IM', 'Instrumentation and Methods for Astrophysics'), ('Astro:SR', 'Solar and Stellar Astrophysics'))), ('Mathematics', (('Math:AG', 'Algebraic Geometry'), ('Math:AT', 'Algebraic Topology'), ('Math:AP', 'Analysis of PDEs'), ('Math:CT', 'Category Theory'), ('Math:CA', 'Classical Analysis and ODEs'), ('Math:CO', 'Combinatorics'), ('Math:AC', 'Commutative Algebra'), ('Math:CV', 'Complex Variables'), ('Math:DG', 'Differential Geometry'), ('Math:DS', 'Dynamical Systems'), ('Math:FA', 'Functional Analysis'), ('Math:GM', 'General Mathematics'), ('Math:GN', 'General Topology'), ('Math:GT', 'Geometric Topology'), ('Math:GR', 'Group Theory'), ('Math:HO', 'History and Overview'), ('Math:IT', 'Information Theory'), ('Math:KT', 'K-Theory and Homology'), ('Math:LO', 'Logic'), ('Math:MP', 'Mathematical Physics'), ('Math:MG', 'Metric Geometry'), ('Math:NT', 'Number Theory'), ('Math:NA', 'Numerical Analysis'), ('Math:OA', 'Operator Algebras'), ('Math:OC', 'Optimization and Control'), ('Math:PR', 'Probability'), ('Math:QA', 'Quantum Algebra'), ('Math:RT', 'Representation Theory'), ('Math:RA', 'Rings and Algebras'), ('Math:SP', 'Spectral Theory'), ('Math:ST', 'Statistics Theory'), ('Math:SG', 'Symplectic Geometry'))), ('Computer Science', (('Comp:AI', 'Artificial Intelligence'), ('Comp:CC', 'Computational Complexity'), ('Comp:CE', 'Computational Engineering, Finance, and Science'), ('Comp:CG', 'Computational Geometry'), ('Comp:GT', 'Computer Science and Game Theory'), ('Comp:CV', 'Computer Vision and Pattern Recognition'), ('Comp:CY', 'Computers and Society'), ('Comp:CR', 'Cryptography and Security'), ('Comp:DS', 'Data Structures and Algorithms'), ('Comp:DB', 'Databases'), ('Comp:DL', 'Digital Libraries'), ('Comp:DM', 'Discrete Mathematics'), ('Comp:DC', 'Distributed, Parallel, and Cluster Computing'), ('Comp:ET', 'Emerging Technologies'), ('Comp:FL', 'Formal Languages and Automata Theory'), ('Comp:GL', 'General Literature'), ('Comp:GR', 'Graphics'), ('Comp:AR', 'Hardware Architecture'), ('Comp:HC', 'Human-Computer Interaction'), ('Comp:IR', 'Information Retrieval'), ('Comp:IT', 'Information Theory'), ('Comp:LG', 'Learning'), ('Comp:LO', 'Logic in Computer Science'), ('Comp:MS', 'Mathematical Software'), ('Comp:MA', 'Multiagent Systems'), ('Comp:MM', 'Multimedia'), ('Comp:NI', 'Networking and Internet Architecture'), ('Comp:NE', 'Neural and Evolutionary Computing'), ('Comp:NA', 'Numerical Analysis'), ('Comp:OS', 'Operating Systems'), ('Comp:OH', 'Other Computer Science'), ('Comp:PF', 'Performance'), ('Comp:PL', 'Programming Languages'), ('Comp:RO', 'Robotics'), ('Comp:SI', 'Social and Information Networks'), ('Comp:SE', 'Software Engineering'), ('Comp:SD', 'Sound'), ('Comp:SC', 'Symbolic Computation'), ('Comp:SY', 'Systems and Control')))], default='Phys:QP', max_length=10),
+        ),
+    ]
diff --git a/theses/migrations/0005_remove_thesislink_specialization.py b/theses/migrations/0005_remove_thesislink_specialization.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce13ef13a43b5a5b66df35ee1b5c4ac73b7da8fc
--- /dev/null
+++ b/theses/migrations/0005_remove_thesislink_specialization.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.1 on 2016-08-11 13:39
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('theses', '0004_thesislink_subject_area'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='thesislink',
+            name='specialization',
+        ),
+    ]
diff --git a/theses/migrations/__init__.py b/theses/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391