diff --git a/.bootstraprc b/.bootstraprc
index f02ac6f2dbbc5fcc9fdb13a3ae9119cf053e20a3..ab4a0cccb6882f155316d46dff87435d40a1502a 100644
--- a/.bootstraprc
+++ b/.bootstraprc
@@ -10,25 +10,30 @@
     "extractStyles": true,
     "styles": {
         "alert": true,
-        "mixins": true,
-        "normalize": true,
-        "reboot": true,
-        "grid": true,
-        "forms": true,
+        "button-group": true,
         "buttons": true,
+        "card": true,
+        "close": true,
         "dropdown": true,
-        "button-group": true,
+        "forms": true,
+        "grid": true,
         "input-group": true,
+        "list-group": true,
+        "mixins": true,
         "nav": true,
         "navbar": true,
+        "normalize": true,
+        "reboot": true,
         "responsive-embed": true,
-        "close": true,
-        "utilities": true,
         "transitions": true,
+        "type": true,
+        "tooltip": true,
+        "utilities": true,
     },
     "scripts": {
         "alert": true,
         "collapse": true,
+        "tooltip": true,
         "util": true,
     }
 }
diff --git a/README.md b/README.md
index 840f8eb6cf8a0ee49903a730e08ce4489d9b70dc..da09e066c26eea7bc0ad388464ef197014d84910 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 The complete scientific publication portal
 
 ## Dependencies
-SciPost is written in Python 3.5 using Django and requires PostgreSQL 9.3 or
+SciPost is written in Python 3.5 using Django and requires PostgreSQL 9.4 or
 higher. Python dependencies are listed in `requirements.txt`. Frontend dependencies are managed by [NPM](https://www.npmjs.com/) in package.json.
 
 ## Getting started
@@ -29,7 +29,7 @@ Now install dependencies:
 ```
 
 ### Frontend dependencies
-[NPM](https://www.npmjs.com/) will take care of frontend dependencies. To install all packages now run:
+[NPM](https://www.npmjs.com/) (version 4.0 or higher; tested on v4.1.2) will take care of frontend dependencies. To install all packages now run:
 
 ```shell
 (scipostenv) $ npm install
diff --git a/SciPost_v1/settings/staging_release.py b/SciPost_v1/settings/staging_release.py
index 74bfb6ed80ee434084ee0fd36f6bc9f1813af50c..a9290b92b0524e7a61c13d6322275fcd9d6dfe4f 100644
--- a/SciPost_v1/settings/staging_release.py
+++ b/SciPost_v1/settings/staging_release.py
@@ -22,7 +22,3 @@ WEBPACK_LOADER['DEFAULT']['BUNDLE_DIR_NAME'] = '/home/jdewit/webapps/scipost_sta
 
 # Error reporting
 ADMINS = MANAGERS = (('J. de Wit', 'jorrandewit@outlook.com'), )
-
-# Cookies
-SESSION_COOKIE_SECURE = True
-CSRF_COOKIE_SECURE = True
diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index 11c640116c6bffe41466958b01638c47d83103c9..9de4150622f5359fb55acdd2d0c9da1378d37d9c 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -31,6 +31,7 @@ urlpatterns = [
     url(r'^submission/', include('submissions.urls', namespace="submissions")),
     url(r'^theses/', include('theses.urls', namespace="theses")),
     url(r'^thesis/', include('theses.urls', namespace="theses")),
+    url(r'^meetings/', include('virtualmeetings.urls', namespace="virtualmeetings")),
     url(r'^news/', include('news.urls', namespace="news")),
 ]
 
diff --git a/docs/conf.py b/docs/conf.py
index 3e9e0968c2fdc609d4300ce70ec393ce11dc75e6..e504443637f1e3f1027b3f8b89b69c106ff24243 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -20,7 +20,9 @@ import django
 from django.conf import settings
 
 sys.path.insert(0, os.path.abspath('..'))
-os.environ['DJANGO_SETTINGS_MODULE'] = 'SciPost_v1.settings'
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings")
+
 #settings.configure()
 django.setup()
 
diff --git a/journals/models.py b/journals/models.py
index 19d4d03682818756b70e7b047d31e012823aa683..d858d6bcc51394a7f299831ae2f5011494c52e87 100644
--- a/journals/models.py
+++ b/journals/models.py
@@ -164,6 +164,15 @@ class IssueManager(models.Manager):
             issues.filter(in_volume__in_journal__name=journal)
         return issues
 
+    def get_current_issue(self, *args, **kwargs):
+        return self.published(start_date__lte=timezone.now(),
+                              until_date__gte=timezone.now(),
+                              **kwargs).order_by('-until_date').first()
+
+    def get_last_filled_issue(self, *args, **kwargs):
+        return self.published(publication__isnull=False,
+                              **kwargs).order_by('-until_date').first()
+
 
 class Issue(models.Model):
     in_volume = models.ForeignKey(Volume, on_delete=models.CASCADE)
@@ -182,15 +191,22 @@ class Issue(models.Model):
 
     def __str__(self):
         text = str(self.in_volume) + ' issue ' + str(self.number)
-        if self.start_date.month == self.until_date.month:
-            text += ' (' + self.until_date.strftime('%B') + ' ' + self.until_date.strftime('%Y') + ')'
-        else:
-            text += (' (' + self.start_date.strftime('%B') + '-' + self.until_date.strftime('%B') +
-                     ' ' + self.until_date.strftime('%Y') + ')')
+        text += self.period_as_string()
         if self.status == STATUS_DRAFT:
             text += ' (In draft)'
         return text
 
+    def period_as_string(self):
+        if self.start_date.month == self.until_date.month:
+            return ' (' + self.until_date.strftime('%B') + ' ' + self.until_date.strftime('%Y') + ')'
+        else:
+            return (' (' + self.start_date.strftime('%B') + '-' + self.until_date.strftime('%B') +
+                    ' ' + self.until_date.strftime('%Y') + ')')
+
+    def is_current(self):
+        return self.start_date <= timezone.now().date() and\
+               self.until_date >= timezone.now().date()
+
     def period(self):
         text = 'up to {{ until_month }} {{ year }}'
         template = Template(text)
diff --git a/journals/templates/journals/_publication_single_short_summary.html b/journals/templates/journals/_publication_single_short_summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..0c500f171196dc6b224cd71c3ff05420ca70086f
--- /dev/null
+++ b/journals/templates/journals/_publication_single_short_summary.html
@@ -0,0 +1,3 @@
+<h3 class="pb-0"><a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">{{ publication.title }}</a></h3>
+<div>by {{ publication.author_list|truncatechars:30 }}</div>
+<div class="text-muted">published {{ publication.publication_date }}</div>
diff --git a/news/factories.py b/news/factories.py
new file mode 100644
index 0000000000000000000000000000000000000000..74dcad74481d0c0de0e9dfeaabba153673a29723
--- /dev/null
+++ b/news/factories.py
@@ -0,0 +1,14 @@
+import factory
+
+from .models import NewsItem
+
+
+class NewsItemFactory(factory.django.DjangoModelFactory):
+    class Meta:
+        model = NewsItem
+
+    date = factory.Faker('date_time')
+    headline = factory.Faker('sentence', nb_words=6)
+    blurb = factory.Faker('text', max_nb_chars=200)
+    followup_link = factory.Faker('url')
+    followup_link_text = factory.Faker('sentence', nb_words=4)
diff --git a/news/models.py b/news/models.py
index d421b8c4bbae2b55c595dd0d4fcec7347509dc6f..8f73d1be7c615125ae53c98b0f74a6f9b4d78748 100644
--- a/news/models.py
+++ b/news/models.py
@@ -44,7 +44,7 @@ class NewsItem(models.Model):
                            'date': self.date.strftime('%Y-%m-%d'),
                            'blurb': self.blurb, })
         if self.followup_link:
-            descriptor += '<p><a href="{{ followup_link }}">{{ followup_link_text }}</a></p>'
+            descriptor += '<a href="{{ followup_link }}">{{ followup_link_text }}</a>'
             context['followup_link'] = self.followup_link
             context['followup_link_text'] = self.followup_link_text
         descriptor += '</div>'
diff --git a/package.json b/package.json
index 370a2c2c8e412e6a843cbefe6548b41e7bfdfe2e..903c1b0cbca65a7153672f3895dd591d30c1ca3d 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
   "homepage": "https://www.scipost.org",
   "devDependencies": {
     "bootstrap": "^4.0.0-alpha.6",
-    "bootstrap-loader": "^2.0.0-beta.19",
+    "bootstrap-loader": "^2.0.0",
     "clean-webpack-plugin": "^0.1.15",
     "css-loader": "^0.26.1",
     "exports-loader": "^0.6.3",
@@ -35,7 +35,7 @@
     "style-loader": "^0.13.1",
     "tether": "^1.4.0",
     "url-loader": "^0.5.7",
-    "webpack": "^2.1.0-beta.19",
+    "webpack": "^2.2.1",
     "webpack-bundle-tracker": "^0.2.0",
     "webpack-glob-entry": "^2.1.1",
     "extract-text-webpack-plugin": "2.0.0-beta.5"
diff --git a/scipost/admin.py b/scipost/admin.py
index ccb5be7f2600f04a7c149736635d12225bef97aa..87df8ce71cbb0db9e7a7289f731f4639c396f6a8 100644
--- a/scipost/admin.py
+++ b/scipost/admin.py
@@ -1,15 +1,16 @@
+import datetime
+
 from django.contrib import admin
 
 from django.contrib.auth.admin import UserAdmin
 from django.contrib.auth.models import User, Permission
 
-from guardian.admin import GuardedModelAdmin
-
-from scipost.models import Contributor, Remark, List,\
-                           DraftInvitation, Node, Arc, Graph, Team, AffiliationObject,\
+from scipost.models import Contributor, Remark,\
+                           DraftInvitation,\
+                           AffiliationObject,\
                            SupportingPartner, SPBMembershipAgreement, RegistrationInvitation,\
-                           AuthorshipClaim, PrecookedEmail
-from virtualmeetings.models import VGM, Feedback, Nomination, Motion
+                           AuthorshipClaim, PrecookedEmail,\
+                           EditorialCollege, EditorialCollegeFellowship
 
 
 class ContributorInline(admin.StackedInline):
@@ -27,34 +28,6 @@ admin.site.unregister(User)
 admin.site.register(User, UserAdmin)
 
 
-# class VGMAdmin(admin.ModelAdmin):
-#     search_fields = ['start_date']
-#
-#
-# admin.site.register(VGM, VGMAdmin)
-#
-#
-# class FeedbackAdmin(admin.ModelAdmin):
-#     search_fields = ['feedback', 'by']
-#
-#
-# admin.site.register(Feedback, FeedbackAdmin)
-#
-#
-# class NominationAdmin(admin.ModelAdmin):
-#     search_fields = ['last_name', 'first_name', 'by']
-#
-#
-# admin.site.register(Nomination, NominationAdmin)
-#
-#
-# class MotionAdmin(admin.ModelAdmin):
-#     search_fields = ['background', 'motion', 'put_forward_by']
-#
-#
-# admin.site.register(Motion, MotionAdmin)
-
-
 class RemarkAdmin(admin.ModelAdmin):
     search_fields = ['contributor', 'remark']
 
@@ -87,33 +60,6 @@ class PrecookedEmailAdmin(admin.ModelAdmin):
 admin.site.register(PrecookedEmail, PrecookedEmailAdmin)
 
 
-class ListAdmin(GuardedModelAdmin):
-    search_fields = ['owner', 'title']
-
-
-admin.site.register(List, ListAdmin)
-admin.site.register(Team)
-
-
-class NodeInline(admin.StackedInline):
-    model = Node
-
-
-class ArcInline(admin.StackedInline):
-    model = Arc
-
-
-class GraphAdmin(GuardedModelAdmin):
-    inlines = [
-        NodeInline,
-        ArcInline,
-        ]
-    search_fields = ['owner___user__last_name', 'title']
-
-
-admin.site.register(Graph, GraphAdmin)
-
-
 class AffiliationObjectAdmin(admin.ModelAdmin):
     search_fields = ['country', 'institution', 'subunit']
 
@@ -134,3 +80,28 @@ class SupportingPartnerAdmin(admin.ModelAdmin):
 
 
 admin.site.register(SupportingPartner, SupportingPartnerAdmin)
+
+
+class EditorialCollegeAdmin(admin.ModelAdmin):
+    search_fields = ['discipline', 'member']
+
+
+admin.site.register(EditorialCollege, EditorialCollegeAdmin)
+
+
+def college_fellow_is_active(fellow):
+    '''Check if fellow is currently active.'''
+    return fellow.is_active()
+
+
+class EditorialCollegeFellowshipAdmin(admin.ModelAdmin):
+    list_display = ('__str__', 'college', college_fellow_is_active)
+    list_filter = ('college', 'contributor__user')
+    search_fields = ['college__discipline',
+                     'contributor__user__first_name', 'contributor__user__last_name']
+    fields = ('contributor', 'college', 'start_date', 'until_date')
+
+    college_fellow_is_active.boolean = True
+
+
+admin.site.register(EditorialCollegeFellowship, EditorialCollegeFellowshipAdmin)
diff --git a/scipost/db/constants_migration_0043.py b/scipost/db/constants_migration_0043.py
new file mode 100644
index 0000000000000000000000000000000000000000..deeea736aa2e6bd5cf8bc87c293bb76fabddb815
--- /dev/null
+++ b/scipost/db/constants_migration_0043.py
@@ -0,0 +1,49 @@
+collegeMembers = (
+    {'name': 'Sabine Andergassen', 'title': 'Prof.', 'link': 'https://www.uni-tuebingen.de/en/faculties/faculty-of-science/departments/physics/institutes/institute-for-theoretical-physics/research-groups/andergassen-group.html', 'subtitle': 'Tübingen'},
+    {'name': 'Fakher Assaad', 'title': 'Prof.', 'link': 'http://www.physik.uni-wuerzburg.de/~assaad/', 'subtitle': 'Würzbrug'},
+    {'name': 'Claudio Attaccalite', 'title': 'Dr', 'link': 'http://www.attaccalite.com', 'subtitle': 'Marseille'},
+    {'name': 'Denis Bartolo', 'title': 'Prof.', 'link': 'https://denis114.wordpress.com', 'subtitle': 'ENS Lyon'},
+    {'name': 'Laura Baudis', 'title': 'Prof.', 'link': 'http://www.physik.unizh.ch/~lbaudis/index.html', 'subtitle': 'Zurich'},
+    {'title': 'Prof.', 'link': 'http://www.lorentz.leidenuniv.nl/beenakker/', 'subtitle': 'Leiden', 'name': 'Carlo Beenakker'},
+    {'title': 'Prof.', 'link': 'https://www.coulomb.univ-montp2.fr/perso/ludovic.berthier/', 'subtitle': 'Montpellier', 'name': 'Ludovic Berthier'},
+    {'title': 'Prof.', 'link': 'http://ipht.cea.fr/Pisp/giulio.biroli/index_en.php', 'subtitle': 'CEA Saclay', 'name': 'Giulio Biroli'},
+    {'title': 'Prof.', 'link': 'http://www.en.physik.uni-muenchen.de/personen/professoren/bloch/index.html', 'subtitle': 'LMU Munich', 'name': 'Immanuel Bloch'},
+    {'title': 'Prof.', 'link': 'https://staff.fnwi.uva.nl/j.deboer/', 'subtitle': 'U. van Amsterdam', 'name': 'Jan de Boer'},
+    {'title': 'Prof.', 'link': 'http://www.uva.nl/en/about-the-uva/organisation/staff-members/content/b/o/d.bonn/d.bonn.html', 'subtitle': 'U. van Amsterdam', 'name': 'Daniel Bonn'},
+    {'title': 'Prof.', 'link': 'http://www.statphys.sissa.it/wordpress/?page_id=1731', 'subtitle': 'SISSA', 'name': 'Pasquale Calabrese'},
+    {'title': 'Prof.', 'link': 'http://personalpages.to.infn.it/~caselle/index_en.html', 'subtitle': 'Torino', 'name': 'Michele Caselle'},
+    {'title': 'Prof.', 'link': 'http://www.saha.ac.in/cmp/bikask.chakrabarti/bikas.html', 'subtitle': 'Kolkata', 'name': 'Bikas Chakrabarti'},
+    {'title': 'Prof.', 'link': 'http://www.tcm.phy.cam.ac.uk/~nrc25/', 'subtitle': 'Cambridge', 'name': 'Nigel Cooper'},
+    {'title': 'Prof.', 'link': 'http://physics.cornell.edu/csaba-csaki', 'subtitle': 'Cornell', 'name': 'Csaba Csaki'},
+    {'title': 'Prof.', 'link': 'http://theory.tifr.res.in/~kedar/', 'subtitle': 'TIFR Mumbai', 'name': 'Kedar Damle'},
+    {'title': 'Prof.', 'link': 'http://researchers.uq.edu.au/researcher/1134', 'subtitle': 'U. of Queensland', 'name': 'Matthew Davis'},
+    {'title': 'Prof.', 'link': 'http://www-thphys.physics.ox.ac.uk/people/FabianEssler/', 'subtitle': 'U. of Oxford', 'name': 'Fabian Essler'},
+    {'title': 'Prof.', 'link': 'http://www.pd.infn.it/~feruglio/', 'subtitle': 'Padova, INFN', 'name': 'Ferruccio Feruglio'},
+    {'title': 'Prof.', 'link': 'http://www.ms.unimelb.edu.au/~jdgier@unimelb/', 'subtitle': 'U. of Melbourne', 'name': 'Jan de Gier'},
+    {'title': 'Prof.', 'link': 'http://www.desy.de/about_desy/leading_scientists/beate_heinemann/index_eng.html', 'subtitle': 'DESY; Freiburg', 'name': 'Beate Heinemann'},
+    {'title': 'Prof.', 'link': 'http://katzgraber.org', 'subtitle': 'Texas A&M', 'name': 'Helmut Katzgraber'},
+    {'title': 'Prof.', 'link': 'https://web.physik.rwth-aachen.de/~mkraemer/', 'subtitle': 'RWTH Aachen', 'name': 'Michael Krämer'},
+    {'title': 'Prof.', 'link': 'https://www.pmmh.espci.fr/~jorge/', 'subtitle': 'PMMH Paris, CNRS', 'name': 'Jorge Kurchan'},
+    {'title': 'Prof.', 'link': 'https://vivo.brown.edu/display/glandsbe', 'subtitle': 'Brown Univ.', 'name': 'Greg Landsberg'},
+    {'title': 'Prof.', 'link': 'https://www.mpg.de/6812374/chem_physik_fester_stoffe_mackenzie', 'subtitle': 'MPICPS Dresden, St-Andrews', 'name': 'Andrew P. MacKenzie'},
+    {'title': 'Prof.', 'link': 'http://www.ens-lyon.fr/PHYSIQUE/presentation/annuaire/maillet-jean-michel', 'subtitle': 'ENS Lyon', 'name': 'Jean Michel Maillet'},
+    {'title': 'Prof.', 'link': 'https://www.mpg.de/343435/physik_komplexer_systeme_wissM28', 'subtitle': 'MPIPKS Dresden', 'name': 'Roderich Moessner'},
+    {'title': 'Prof.', 'link': 'https://www.uibk.ac.at/exphys/ultracold/people/christoph.naegerl/', 'subtitle': 'Innsbruck', 'name': 'Hanns-Christoph Nägerl'},
+    {'title': 'Prof.', 'link': 'http://www.physics.miami.edu/~nepomechie/', 'subtitle': 'U. of Miami', 'name': 'Rafael Nepomechie'},
+    {'title': 'Prof.', 'link': 'https://staff.fnwi.uva.nl/b.nienhuis/', 'subtitle': 'U. van Amsterdam', 'name': 'Bernard Nienhuis'},
+    {'title': 'Prof.', 'link': 'http://www.lpthe.jussieu.fr/~pioline/', 'subtitle': 'LPTHE Jussieu', 'name': 'Boris Pioline'},
+    {'title': 'Prof.', 'link': 'https://www.uu.nl/staff/RHHGvanRoij/0', 'subtitle': 'Utrecht', 'name': 'René van Roij'},
+    {'title': 'Prof.', 'link': 'http://www.thp.uni-koeln.de/rosch', 'subtitle': 'U. of Cologne', 'name': 'Achim Rosch'},
+    {'title': 'Prof.', 'link': 'http://saleur.sandvox.net', 'subtitle': 'CEA Saclay/USC', 'name': 'Hubert Saleur'},
+    {'title': 'Prof.', 'link': 'http://www.phy.ohiou.edu/people/faculty/sandler.html', 'subtitle': 'Ohio', 'name': 'Nancy Sandler'},
+    {'title': 'Dr.', 'link': 'http://www.sussex.ac.uk/profiles/320359', 'subtitle': 'Sussex', 'name': 'Veronica Sanz'},
+    {'title': 'Prof.', 'link': 'http://www-thphys.physics.ox.ac.uk/people/SubirSarkar/', 'subtitle': 'Oxford; Niels Bohr Institute', 'name': 'Subir Sarkar'},
+    {'title': 'Prof.', 'link': 'https://staff.fnwi.uva.nl/c.j.m.schoutens/', 'subtitle': 'U. van Amsterdam', 'name': 'Kareljan Schoutens'},
+    {'title': 'Dr', 'link': 'http://www.phys.ens.fr/~guilhem/', 'subtitle': 'ENS Paris', 'name': 'Guilhem Semerjian'},
+    {'title': 'Prof.', 'link': 'http://www-thphys.physics.ox.ac.uk/people/SteveSimon/', 'subtitle': 'U. of Oxford', 'name': 'Steve Simon'},
+    {'title': 'Prof.', 'link': 'http://bec.science.unitn.it/infm-bec/people/stringari.html', 'subtitle': 'Trento', 'name': 'Sandro Stringari'},
+    {'title': 'Prof.', 'link': 'http://www.damtp.cam.ac.uk/user/tong/', 'subtitle': 'Cambridge', 'name': 'David Tong'},
+    {'title': 'Prof.', 'link': 'http://www.physique.usherbrooke.ca/pages/en/node/3412', 'subtitle': 'Sherbrooke', 'name': 'André-Marie Tremblay'},
+    {'title': 'Prof.', 'link': 'http://trivediresearch.org.ohio-state.edu', 'subtitle': 'Ohio State U.', 'name': 'Nandini Trivedi'},
+    {'title': 'Prof.', 'link': 'http://vergassolalab.ucsd.edu', 'subtitle': 'UC Sand Diego', 'name': 'Massimo Vergassola'},
+)
diff --git a/scipost/factories.py b/scipost/factories.py
index e32c408deb837497d49cfbffff1e8e8c49b76b23..62eb21c81e74b9fa81c6d0c7892f06ef578bbc8c 100644
--- a/scipost/factories.py
+++ b/scipost/factories.py
@@ -1,19 +1,25 @@
 import factory
+import random
 
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 
-from .models import Contributor
+from django_countries.data import COUNTRIES
+
+from .models import Contributor, EditorialCollege, EditorialCollegeFellowship, TITLE_CHOICES
 
 
 class ContributorFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Contributor
 
-    title = "MR"
+    title = random.choice(list(dict(TITLE_CHOICES).keys()))
     user = factory.SubFactory('scipost.factories.UserFactory', contributor=None)
     status = 1  # normal user
     vetted_by = factory.SubFactory('scipost.factories.ContributorFactory', vetted_by=None)
+    personalwebpage = factory.Faker('url')
+    country_of_employment = factory.Iterator(list(COUNTRIES))
+    affiliation = factory.Faker('company')
 
 
 class VettingEditorFactory(ContributorFactory):
@@ -48,3 +54,20 @@ class UserFactory(factory.django.DjangoModelFactory):
                 self.groups.add(group)
         else:
             self.groups.add(Group.objects.get(name="Registered Contributors"))
+
+
+class EditorialCollegeFactory(factory.django.DjangoModelFactory):
+    class Meta:
+        model = EditorialCollege
+        django_get_or_create = ('discipline', )
+
+    discipline = random.choice(['Physics', 'Chemistry', 'Medicine'])
+
+
+class EditorialCollegeFellowshipFactory(factory.django.DjangoModelFactory):
+    class Meta:
+        model = EditorialCollegeFellowship
+
+    college = factory.Iterator(EditorialCollege.objects.all())
+    contributor = factory.Iterator(Contributor.objects.exclude(
+                                   user__username='deleted').order_by('?'))
diff --git a/scipost/forms.py b/scipost/forms.py
index b1fb349c3b77db8289ca530b3eb26ea3b02409e3..3a85ac22032944518aae6cb8a7230eee68005bb9 100644
--- a/scipost/forms.py
+++ b/scipost/forms.py
@@ -1,7 +1,6 @@
 from django import forms
 
 from django.contrib.auth.models import User, Group
-from django.db.models import Q
 
 from django_countries import countries
 from django_countries.widgets import CountrySelectWidget
@@ -12,11 +11,10 @@ from crispy_forms.helper import FormHelper
 from crispy_forms.layout import Layout, Div, Field, HTML, Submit
 
 from .constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS
-from .models import TITLE_CHOICES, SCIPOST_FROM_ADDRESSES, ARC_LENGTHS,\
-                     Contributor, DraftInvitation, RegistrationInvitation,\
-                     SupportingPartner, SPBMembershipAgreement,\
-                     UnavailabilityPeriod, PrecookedEmail,\
-                     List, Team, Graph, Node
+from .models import TITLE_CHOICES, SCIPOST_FROM_ADDRESSES,\
+                    Contributor, DraftInvitation, RegistrationInvitation,\
+                    SupportingPartner, SPBMembershipAgreement,\
+                    UnavailabilityPeriod, PrecookedEmail
 from virtualmeetings.models import Feedback, Nomination, Motion
 
 from journals.models import Publication
@@ -260,80 +258,6 @@ class SendPrecookedEmailForm(forms.Form):
     from_address = forms.ChoiceField(choices=SCIPOST_FROM_ADDRESSES)
 
 
-class CreateListForm(forms.ModelForm):
-    class Meta:
-        model = List
-        fields = ['title', 'description', 'private']
-
-    def __init__(self, *args, **kwargs):
-        super(CreateListForm, self).__init__(*args, **kwargs)
-        self.fields['title'].widget.attrs.update(
-            {'size': 30, 'placeholder': 'Descriptive title for the new List'})
-        self.fields['private'].widget.attrs.update({'placeholder': 'Private?'})
-
-
-class CreateTeamForm(forms.ModelForm):
-    class Meta:
-        model = Team
-        fields = ['name']
-
-    def __init__(self, *args, **kwargs):
-        super(CreateTeamForm, self).__init__(*args, **kwargs)
-        self.fields['name'].widget.attrs.update(
-            {'size': 30, 'placeholder': 'Descriptive name for the new Team'})
-
-
-class AddTeamMemberForm(forms.Form):
-    def __init__(self, *args, **kwargs):
-        super(AddTeamMemberForm, self).__init__(*args, **kwargs)
-        self.fields['last_name'].widget.attrs.update(
-            {'size': 20, 'placeholder': 'Search in contributors database'})
-
-    last_name = forms.CharField()
-
-
-class CreateGraphForm(forms.ModelForm):
-    class Meta:
-        model = Graph
-        fields = ['title', 'description', 'private']
-
-    def __init__(self, *args, **kwargs):
-        super(CreateGraphForm, self).__init__(*args, **kwargs)
-        self.fields['title'].widget.attrs.update(
-            {'size': 30, 'placeholder': 'Descriptive title for the new Graph'})
-        self.fields['description'].widget.attrs.update({'placeholder': 'Detailed description'})
-
-
-class ManageTeamsForm(forms.Form):
-    teams_with_access = forms.ModelMultipleChoiceField(queryset=None)
-
-    def __init__(self, *args, **kwargs):
-        contributor = kwargs.pop('contributor')
-        super(ManageTeamsForm, self).__init__(*args, **kwargs)
-        self.fields['teams_with_access'].queryset = Team.objects.filter(
-            Q(leader=contributor) | Q(members__in=[contributor]))
-        self.fields['teams_with_access'].widget.attrs.update(
-            {'placeholder': 'Team(s) to be given access rights:'})
-
-
-class CreateNodeForm(forms.ModelForm):
-    class Meta:
-        model = Node
-        fields = ['name', 'description']
-
-
-class CreateArcForm(forms.Form):
-    source = forms.ModelChoiceField(queryset=None)
-    target = forms.ModelChoiceField(queryset=None)
-    length = forms.ChoiceField(choices=ARC_LENGTHS)
-
-    def __init__(self, *args, **kwargs):
-        graph = kwargs.pop('graph')
-        super(CreateArcForm, self).__init__(*args, **kwargs)
-        self.fields['source'].queryset = Node.objects.filter(graph=graph)
-        self.fields['target'].queryset = Node.objects.filter(graph=graph)
-
-
 #############################
 # Supporting Partners Board #
 #############################
@@ -392,59 +316,59 @@ class SPBMembershipForm(forms.ModelForm):
                 css_class="row"),
         )
 
-
-#################
-# VGMs, Motions #
-#################
-
-class FeedbackForm(forms.ModelForm):
-    class Meta:
-        model = Feedback
-        fields = ['feedback']
-
-
-class NominationForm(forms.ModelForm):
-    class Meta:
-        model = Nomination
-        fields = ['first_name', 'last_name',
-                  'discipline', 'expertises', 'webpage']
-
-    def __init__(self, *args, **kwargs):
-        super(NominationForm, self).__init__(*args, **kwargs)
-        self.fields['expertises'].widget = forms.SelectMultiple(choices=SCIPOST_SUBJECT_AREAS)
-
-
-class MotionForm(forms.ModelForm):
-    class Meta:
-        model = Motion
-        fields = ['category', 'background', 'motion']
-
-    def __init__(self, *args, **kwargs):
-        super(MotionForm, self).__init__(*args, **kwargs)
-        self.fields['background'].label = ''
-        self.fields['background'].widget.attrs.update(
-            {'rows': 8, 'cols': 100,
-             'placeholder': 'Provide useful background information on your Motion.'})
-        self.fields['motion'].label = ''
-        self.fields['motion'].widget.attrs.update(
-            {'rows': 8, 'cols': 100,
-             'placeholder': 'Phrase your Motion as clearly and succinctly as possible.'})
-        self.helper = FormHelper()
-        self.helper.layout = Layout(
-            Field('category'),
-            Div(
-                Div(HTML('<p>Background:</p>'),
-                    css_class="col-2"),
-                Div(
-                    Field('background'),
-                    css_class="col-10"),
-                css_class="row"),
-            Div(
-                Div(HTML('<p>Motion:</p>'),
-                    css_class="col-2"),
-                Div(
-                    Field('motion'),
-                    css_class="col-10"),
-                css_class="row"),
-            Submit('submit', 'Submit'),
-        )
+#
+# #################
+# # VGMs, Motions #
+# #################
+#
+# class FeedbackForm(forms.ModelForm):
+#     class Meta:
+#         model = Feedback
+#         fields = ['feedback']
+#
+#
+# class NominationForm(forms.ModelForm):
+#     class Meta:
+#         model = Nomination
+#         fields = ['first_name', 'last_name',
+#                   'discipline', 'expertises', 'webpage']
+#
+#     def __init__(self, *args, **kwargs):
+#         super(NominationForm, self).__init__(*args, **kwargs)
+#         self.fields['expertises'].widget = forms.SelectMultiple(choices=SCIPOST_SUBJECT_AREAS)
+#
+#
+# class MotionForm(forms.ModelForm):
+#     class Meta:
+#         model = Motion
+#         fields = ['category', 'background', 'motion']
+#
+#     def __init__(self, *args, **kwargs):
+#         super(MotionForm, self).__init__(*args, **kwargs)
+#         self.fields['background'].label = ''
+#         self.fields['background'].widget.attrs.update(
+#             {'rows': 8, 'cols': 100,
+#              'placeholder': 'Provide useful background information on your Motion.'})
+#         self.fields['motion'].label = ''
+#         self.fields['motion'].widget.attrs.update(
+#             {'rows': 8, 'cols': 100,
+#              'placeholder': 'Phrase your Motion as clearly and succinctly as possible.'})
+#         self.helper = FormHelper()
+#         self.helper.layout = Layout(
+#             Field('category'),
+#             Div(
+#                 Div(HTML('<p>Background:</p>'),
+#                     css_class="col-2"),
+#                 Div(
+#                     Field('background'),
+#                     css_class="col-10"),
+#                 css_class="row"),
+#             Div(
+#                 Div(HTML('<p>Motion:</p>'),
+#                     css_class="col-2"),
+#                 Div(
+#                     Field('motion'),
+#                     css_class="col-10"),
+#                 css_class="row"),
+#             Submit('submit', 'Submit'),
+#         )
diff --git a/scipost/management/commands/populate_db.py b/scipost/management/commands/populate_db.py
index 26e2d1a3ac72011e41781b943cedfd7e015b137d..4880a671c3f06ff63e924fa0ffdb591a89638e89 100644
--- a/scipost/management/commands/populate_db.py
+++ b/scipost/management/commands/populate_db.py
@@ -1,20 +1,62 @@
 from django.core.management.base import BaseCommand
-from django.contrib.auth.models import User
 
-from ...models import Contributor
+from news.factories import NewsItemFactory
+
+from ...factories import ContributorFactory, EditorialCollegeFactory, EditorialCollegeFellowshipFactory
 
 
 class Command(BaseCommand):
     def add_arguments(self, parser):
         parser.add_argument(
-            '--username', type=str, required=True,
-            help='Username of user to use for contributor model')
+            '--news',
+            action='store_true',
+            dest='news',
+            default=False,
+            help='Add NewsItems',
+        )
+        parser.add_argument(
+            '--contributor',
+            action='store_true',
+            dest='contributor',
+            default=False,
+            help='Add Contributors',
+        )
+        parser.add_argument(
+            '--college',
+            action='store_true',
+            dest='editorial-college',
+            default=False,
+            help='Add Editorial College and Fellows (Contributors required)',
+        )
+        parser.add_argument(
+            '--all',
+            action='store_true',
+            dest='all',
+            default=False,
+            help='Add all available',
+        )
+
+    def handle(self, *args, **kwargs):
+        if kwargs['contributor'] or kwargs['all']:
+            self.create_contributors()
+        if kwargs['editorial-college'] or kwargs['all']:
+            self.create_editorial_college()
+            self.create_editorial_college_fellows()
+        if kwargs['news'] or kwargs['all']:
+            self.create_news_items()
+
+    def create_contributors(self):
+        ContributorFactory.create_batch(5)
+        self.stdout.write(self.style.SUCCESS('Successfully created Contributors.'))
+
+    def create_editorial_college(self):
+        EditorialCollegeFactory.create_batch(5)
+        self.stdout.write(self.style.SUCCESS('Successfully created Editorial College\'s.'))
 
-    def create_contributor(self, username):
-        user = User.objects.get(username=username)
-        contributor = Contributor(user=user, status=1, title="MR")
-        contributor.vetted_by = contributor
-        contributor.save()
+    def create_editorial_college_fellows(self):
+        EditorialCollegeFellowshipFactory.create_batch(5)
+        self.stdout.write(self.style.SUCCESS('Successfully created Editorial College Fellows.'))
 
-    def handle(self, *args, **options):
-        self.create_contributor(options['username'])
+    def create_news_items(self):
+        NewsItemFactory.create_batch(5)
+        self.stdout.write(self.style.SUCCESS('Successfully created News items.'))
diff --git a/scipost/management/commands/setup_contributor.py b/scipost/management/commands/setup_contributor.py
new file mode 100644
index 0000000000000000000000000000000000000000..26e2d1a3ac72011e41781b943cedfd7e015b137d
--- /dev/null
+++ b/scipost/management/commands/setup_contributor.py
@@ -0,0 +1,20 @@
+from django.core.management.base import BaseCommand
+from django.contrib.auth.models import User
+
+from ...models import Contributor
+
+
+class Command(BaseCommand):
+    def add_arguments(self, parser):
+        parser.add_argument(
+            '--username', type=str, required=True,
+            help='Username of user to use for contributor model')
+
+    def create_contributor(self, username):
+        user = User.objects.get(username=username)
+        contributor = Contributor(user=user, status=1, title="MR")
+        contributor.vetted_by = contributor
+        contributor.save()
+
+    def handle(self, *args, **options):
+        self.create_contributor(options['username'])
diff --git a/scipost/migrations/0040_auto_20170317_1659.py b/scipost/migrations/0040_auto_20170317_1659.py
new file mode 100644
index 0000000000000000000000000000000000000000..69ce2c10f3d5e8411bc1311db64e802bd9a5b399
--- /dev/null
+++ b/scipost/migrations/0040_auto_20170317_1659.py
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-17 15:59
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0039_auto_20170306_0804'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='arc',
+            name='added_by',
+        ),
+        migrations.RemoveField(
+            model_name='arc',
+            name='graph',
+        ),
+        migrations.RemoveField(
+            model_name='arc',
+            name='source',
+        ),
+        migrations.RemoveField(
+            model_name='arc',
+            name='target',
+        ),
+        migrations.RemoveField(
+            model_name='graph',
+            name='owner',
+        ),
+        migrations.RemoveField(
+            model_name='graph',
+            name='teams_with_access',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='commentaries',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='comments',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='owner',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='submissions',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='teams_with_access',
+        ),
+        migrations.RemoveField(
+            model_name='list',
+            name='thesislinks',
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='added_by',
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='commentaries',
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='graph',
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='submissions',
+        ),
+        migrations.RemoveField(
+            model_name='node',
+            name='thesislinks',
+        ),
+        migrations.RemoveField(
+            model_name='team',
+            name='leader',
+        ),
+        migrations.RemoveField(
+            model_name='team',
+            name='members',
+        ),
+        migrations.DeleteModel(
+            name='Arc',
+        ),
+        migrations.DeleteModel(
+            name='Graph',
+        ),
+        migrations.DeleteModel(
+            name='List',
+        ),
+        migrations.DeleteModel(
+            name='Node',
+        ),
+        migrations.DeleteModel(
+            name='Team',
+        ),
+    ]
diff --git a/scipost/migrations/0041_editorialcollege_editorialcollegemember.py b/scipost/migrations/0041_editorialcollege_editorialcollegemember.py
new file mode 100644
index 0000000000000000000000000000000000000000..8fd915aa3ac27a8311554631bbfb25a306338886
--- /dev/null
+++ b/scipost/migrations/0041_editorialcollege_editorialcollegemember.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-18 20:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0040_auto_20170317_1659'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='EditorialCollege',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('discipline', models.CharField(max_length=255)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='EditorialCollegeMember',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('title', models.CharField(blank=True, max_length=10)),
+                ('link', models.URLField(blank=True)),
+                ('subtitle', models.CharField(blank=True, max_length=255)),
+                ('discipline', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='member', to='scipost.EditorialCollege')),
+            ],
+        ),
+    ]
diff --git a/scipost/migrations/0042_auto_20170318_2119.py b/scipost/migrations/0042_auto_20170318_2119.py
new file mode 100644
index 0000000000000000000000000000000000000000..faa0e56370414289d2a3988a3c3e166c5c2131d1
--- /dev/null
+++ b/scipost/migrations/0042_auto_20170318_2119.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-18 20:19
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0041_editorialcollege_editorialcollegemember'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='editorialcollege',
+            name='discipline',
+            field=models.CharField(max_length=255, unique=True),
+        ),
+    ]
diff --git a/scipost/migrations/0043_auto_20170318_2237.py b/scipost/migrations/0043_auto_20170318_2237.py
new file mode 100644
index 0000000000000000000000000000000000000000..e8bcfa55845b746bc3b616fc4418fc75af9aed1f
--- /dev/null
+++ b/scipost/migrations/0043_auto_20170318_2237.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-18 21:37
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+from ..db.constants_migration_0043 import collegeMembers
+
+
+def fill_editorial_college(apps, schema_editor):
+    EditorialCollege = apps.get_model('scipost', 'EditorialCollege')
+    EditorialMember = apps.get_model('scipost', 'EditorialCollegeMember')
+    college, new = EditorialCollege.objects.get_or_create(discipline='Physics')
+    for member in collegeMembers:
+        EditorialMember.objects.get_or_create(discipline=college, **member)
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0042_auto_20170318_2119'),
+    ]
+
+    operations = [
+        migrations.RunPython(fill_editorial_college),
+    ]
diff --git a/scipost/migrations/0044_auto_20170319_0940.py b/scipost/migrations/0044_auto_20170319_0940.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a7dae3567634825d7841eb7b8ec774a27eafa1b
--- /dev/null
+++ b/scipost/migrations/0044_auto_20170319_0940.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-19 08:40
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0043_auto_20170318_2237'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='editorialcollegemember',
+            old_name='discipline',
+            new_name='college',
+        ),
+    ]
diff --git a/scipost/migrations/0045_auto_20170319_2008.py b/scipost/migrations/0045_auto_20170319_2008.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f3ef75bf489d60a9f2d01268f96ee1be59d963a
--- /dev/null
+++ b/scipost/migrations/0045_auto_20170319_2008.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-19 19:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import scipost.db.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0044_auto_20170319_0940'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='EditorialCollegeFellow',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('latest_activity', scipost.db.fields.AutoDateTimeField(blank=True, default=django.utils.timezone.now, editable=False)),
+                ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fellows', to='scipost.EditorialCollege')),
+                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='scipost.Contributor')),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.RemoveField(
+            model_name='editorialcollegemember',
+            name='college',
+        ),
+        migrations.DeleteModel(
+            name='EditorialCollegeMember',
+        ),
+    ]
diff --git a/scipost/migrations/0046_auto_20170319_2032.py b/scipost/migrations/0046_auto_20170319_2032.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e15e2bf9227f7829767346cb859b22f916819d2
--- /dev/null
+++ b/scipost/migrations/0046_auto_20170319_2032.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-19 19:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0045_auto_20170319_2008'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='editorialcollegefellow',
+            name='start_date',
+            field=models.DateField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='editorialcollegefellow',
+            name='until_date',
+            field=models.DateField(blank=True, null=True),
+        ),
+    ]
diff --git a/scipost/migrations/0047_auto_20170319_2110.py b/scipost/migrations/0047_auto_20170319_2110.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f24286a6a95caf53970bf1af944d02067f2a526
--- /dev/null
+++ b/scipost/migrations/0047_auto_20170319_2110.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-19 20:10
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import scipost.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0046_auto_20170319_2032'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='vetted_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=models.SET(scipost.models.get_sentinel_user), related_name='contrib_vetted_by', to='scipost.Contributor'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='editorialcollegefellow',
+            unique_together=set([('contributor', 'college', 'start_date', 'until_date')]),
+        ),
+    ]
diff --git a/scipost/migrations/0048_auto_20170320_1934.py b/scipost/migrations/0048_auto_20170320_1934.py
new file mode 100644
index 0000000000000000000000000000000000000000..59d4ca6352d2cdd5d71dd37c3f90064da8755c15
--- /dev/null
+++ b/scipost/migrations/0048_auto_20170320_1934.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-20 18:34
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import scipost.db.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0047_auto_20170319_2110'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='EditorialCollegeFellowship',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created', models.DateTimeField(default=django.utils.timezone.now)),
+                ('latest_activity', scipost.db.fields.AutoDateTimeField(blank=True, default=django.utils.timezone.now, editable=False)),
+                ('start_date', models.DateField(blank=True, null=True)),
+                ('until_date', models.DateField(blank=True, null=True)),
+                ('college', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fellowships', to='scipost.EditorialCollege')),
+                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='scipost.Contributor')),
+            ],
+        ),
+        migrations.AlterUniqueTogether(
+            name='editorialcollegefellow',
+            unique_together=set([]),
+        ),
+        migrations.RemoveField(
+            model_name='editorialcollegefellow',
+            name='college',
+        ),
+        migrations.RemoveField(
+            model_name='editorialcollegefellow',
+            name='contributor',
+        ),
+        migrations.DeleteModel(
+            name='EditorialCollegeFellow',
+        ),
+        migrations.AlterUniqueTogether(
+            name='editorialcollegefellowship',
+            unique_together=set([('contributor', 'college', 'start_date', 'until_date')]),
+        ),
+    ]
diff --git a/scipost/models.py b/scipost/models.py
index 119cd4ca97bba8bcb05694673499dc7ba9965a07..2bb4c15cfb9b6ca2c262301852f55f68dbdad5c1 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -4,9 +4,10 @@ from django import forms
 from django.contrib.auth.models import User
 from django.contrib.postgres.fields import ArrayField
 from django.db import models
-from django.shortcuts import get_object_or_404
+from django.db.models import Q
 from django.template import Template, Context
 from django.utils import timezone
+from django.utils.encoding import force_text
 from django.utils.safestring import mark_safe
 
 from django_countries.fields import CountryField
@@ -73,6 +74,12 @@ class TimeStampedModel(models.Model):
         abstract = True
 
 
+def get_sentinel_user():
+    '''Fallback user for models relying on Contributor that is being deleted.'''
+    user, new = User.objects.get_or_create(username='deleted')
+    return Contributor.objects.get_or_create(status=-4, user=user)[0]
+
+
 class Contributor(models.Model):
     """
     All users of SciPost are Contributors.
@@ -99,7 +106,7 @@ class Contributor(models.Model):
                                default='', blank=True)
     personalwebpage = models.URLField(verbose_name='personal web page',
                                       blank=True)
-    vetted_by = models.ForeignKey('self', on_delete=models.CASCADE,
+    vetted_by = models.ForeignKey('self', on_delete=models.SET(get_sentinel_user),
                                   related_name="contrib_vetted_by",
                                   blank=True, null=True)
     accepts_SciPost_emails = models.BooleanField(
@@ -191,11 +198,9 @@ class Contributor(models.Model):
         return mark_safe(output)
 
     def expertises_as_string(self):
-        output = ''
         if self.expertises:
-            for exp in self.expertises:
-                output += subject_areas_dict[exp] + ', '
-        return output
+            return ', '.join([subject_areas_dict[exp].lower() for exp in self.expertises])
+        return ''
 
     def assignments_summary_as_td(self):
         assignments = self.editorialassignment_set.all()
@@ -428,233 +433,6 @@ class PrecookedEmail(models.Model):
         return self.email_subject
 
 
-#########
-# Lists #
-#########
-
-class List(models.Model):
-    """
-    A collection of commentaries, submissions, thesislinks, comments, etc
-    defined by a Contributor, for use in Graphs, etc
-    """
-    owner = models.ForeignKey(Contributor, on_delete=models.CASCADE)
-    private = models.BooleanField(default=True)
-    teams_with_access = models.ManyToManyField('scipost.Team', blank=True)
-    title = models.CharField(max_length=100)
-    description = models.TextField(blank=True, null=True)
-    created = models.DateTimeField(default=timezone.now)
-    submissions = models.ManyToManyField('submissions.Submission', blank=True,
-                                         related_name='list_submissions')
-    commentaries = models.ManyToManyField('commentaries.Commentary', blank=True,
-                                          related_name='list_commentaries')
-    thesislinks = models.ManyToManyField('theses.ThesisLink', blank=True,
-                                         related_name='list_thesislinks')
-    comments = models.ManyToManyField('comments.Comment', blank=True,
-                                      related_name='list_comments')
-
-    class Meta:
-        default_permissions = ['add', 'view', 'change', 'delete']
-
-    def __str__(self):
-        return '%s (owner: %s %s)' % (self.title[:30],
-                                      self.owner.user.first_name, self.owner.user.last_name)
-
-    def header(self):
-        context = Context({'id': self.id, 'title': self.title,
-                           'first_name': self.owner.user.first_name,
-                           'last_name': self.owner.user.last_name})
-        template = Template('''
-        <p>List <a href="{% url 'scipost:list' list_id=id %}">{{ title }}
-        </a> (owner: {{ first_name }} {{ last_name }})</p>
-        ''')
-        return template.render(context)
-
-    def header_as_li(self):
-        context = Context({'id': self.id, 'title': self.title,
-                           'first_name': self.owner.user.first_name,
-                           'last_name': self.owner.user.last_name})
-        template = Template('''
-        <li><p>List <a href="{% url 'scipost:list' list_id=id %}">
-        {{ title }}</a> (owner: {{ first_name }} {{ last_name }})</p></li>
-        ''')
-        return template.render(context)
-
-    def contents(self):
-        context = Context({})
-        output = '<p>' + self.description + '</p>'
-        output += '<hr class="hr6"/>'
-        emptylist = True
-        if self.submissions.exists():
-            emptylist = False
-            output += '<p>Submissions:<ul>'
-            for submission in self.submissions.all():
-                output += submission.simple_header_as_li()
-            output += '</ul></p>'
-        if self.commentaries.exists():
-            emptylist = False
-            output += '<p>Commentaries:<ul>'
-            for commentary in self.commentaries.all():
-                output += commentary.simple_header_as_li()
-            output += '</ul></p>'
-        if self.thesislinks.exists():
-            emptylist = False
-            output += '<p>Thesislinks:<ul>'
-            for thesislink in self.thesislinks.all():
-                output += thesislink.simple_header_as_li()
-            output += '</ul></p>'
-        if self.comments.exists():
-            emptylist = False
-            output += '<p>Comments:<ul>'
-            for comment in self.comments.all():
-                output += comment.simple_header_as_li()
-            output += '</ul></p>'
-        if emptylist:
-            output += '<br/><h3>This List is empty.</h3>'
-        template = Template(output)
-        return template.render(context)
-
-
-#########
-# Teams #
-#########
-
-class Team(models.Model):
-    """
-    Team of Contributors, to enable private collaborations.
-    """
-    leader = models.ForeignKey(Contributor, on_delete=models.CASCADE)
-    members = models.ManyToManyField(Contributor, blank=True, related_name='team_members')
-    name = models.CharField(max_length=100)
-    established = models.DateField(default=timezone.now)
-
-    class Meta:
-        default_permissions = ['add', 'view', 'change', 'delete']
-
-    def __str__(self):
-        return (self.name + ' (led by ' + self.leader.user.first_name + ' '
-                + self.leader.user.last_name + ')')
-
-    def header_as_li(self):
-        context = Context({'name': self.name, })
-        output = ('<li><p>Team {{ name }}, led by ' + self.leader.user.first_name + ' '
-                  + self.leader.user.last_name + '</p>')
-        output += '<p>Members: '
-        if not self.members.all():
-            output += '(none yet, except for the leader)'
-        else:
-            for member in self.members.all():
-                output += member.user.first_name + ' ' + member.user.last_name + ', '
-        output += '</p></li>'
-        template = Template(output)
-        return template.render(context)
-
-
-##########
-# Graphs #
-##########
-
-class Graph(models.Model):
-    """
-    A Graph is a collection of Nodes with directed arrows,
-    representing e.g. a reading list, exploration path, etc.
-    If private, only the teams in teams_with_access can see/edit it.
-    """
-    owner = models.ForeignKey(Contributor, on_delete=models.CASCADE)
-    private = models.BooleanField(default=True)
-    teams_with_access = models.ManyToManyField(Team, blank=True)
-    title = models.CharField(max_length=100)
-    description = models.TextField(blank=True, null=True)
-    created = models.DateTimeField(default=timezone.now)
-
-    class Meta:
-        default_permissions = ['add', 'view', 'change', 'delete']
-
-    def __str__(self):
-        return '%s (owner: %s %s)' % (self.title[:30],
-                                      self.owner.user.first_name, self.owner.user.last_name)
-
-    def header_as_li(self):
-        context = Context({'id': self.id, 'title': self.title,
-                           'first_name': self.owner.user.first_name,
-                           'last_name': self.owner.user.last_name})
-        template = Template('''
-        <li><p>Graph <a href="{% url 'scipost:graph' graph_id=id %}">
-        {{ title }}</a> (owner: {{ first_name }} {{ last_name }})</li>
-        ''')
-        return template.render(context)
-
-    def contents(self):
-        context = Context({})
-        output = self.description
-        template = Template(output)
-        return template.render(context)
-
-
-class Node(models.Model):
-    """
-    Node of a graph (directed).
-    Each node is composed of a set of submissions, commentaries, thesislinks.
-    Accessibility rights are set in the Graph ForeignKey.
-    """
-    graph = models.ForeignKey(Graph, on_delete=models.CASCADE, default=None)
-    added_by = models.ForeignKey(Contributor, on_delete=models.CASCADE, default=None)
-    created = models.DateTimeField(default=timezone.now)
-    name = models.CharField(max_length=100)
-    description = models.TextField(blank=True, null=True)
-    submissions = models.ManyToManyField('submissions.Submission', blank=True,
-                                         related_name='node_submissions')
-    commentaries = models.ManyToManyField('commentaries.Commentary', blank=True,
-                                          related_name='node_commentaries')
-    thesislinks = models.ManyToManyField('theses.ThesisLink', blank=True,
-                                         related_name='node_thesislinks')
-
-    class Meta:
-        default_permissions = ['add', 'view', 'change', 'delete']
-
-    def __str__(self):
-        return self.graph.title[:20] + ': ' + self.name[:20]
-
-    def header_as_p(self):
-        context = Context({'graph_id': self.graph.id, 'id': self.id, 'name': self.name})
-        output = ('<p class="node_p" id="node_id{{ id }}">'
-                  '<a href="{% url \'scipost:graph\' graph_id=graph_id %}">{{ name }}</a></p>')
-        template = Template(output)
-        return template.render(context)
-
-    def contents(self):
-        context = Context({'graph_id': self.graph.id,
-                           'id': self.id, 'name': self.name,
-                           'description': self.description})
-        output = ('<div class="node_contents node_id{{ id }}">'
-                  + '<h3>{{ name }}</h3><p>{{ description }}</p></div>')
-        template = Template(output)
-        return template.render(context)
-
-    def contents_small(self):
-        output = '<div style="font-size: 60%">' + self.contents + '</div>'
-        template = Template(output)
-        return template.render()
-
-
-ARC_LENGTHS = [
-    # (4, '4'), (8, '8'), (16, '16'), (32, '32'), (64, '64'), (128, '128')
-    (1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7'), (8, '8'),
-    ]
-
-
-class Arc(models.Model):
-    """
-    Arc of a graph, linking two nodes.
-    The length is user-adjustable.
-    """
-    graph = models.ForeignKey(Graph, on_delete=models.CASCADE, default=None)
-    added_by = models.ForeignKey(Contributor, on_delete=models.CASCADE, default=None)
-    created = models.DateTimeField(default=timezone.now)
-    source = models.ForeignKey(Node, on_delete=models.CASCADE, related_name='source')
-    target = models.ForeignKey(Node, on_delete=models.CASCADE, related_name='target')
-    length = models.PositiveSmallIntegerField(choices=ARC_LENGTHS, default=32)
-
-
 #######################
 # Affiliation Objects #
 #######################
@@ -739,3 +517,60 @@ class SPBMembershipAgreement(models.Model):
         return (str(self.partner) +
                 ' [' + spb_membership_duration_dict[self.duration] +
                 ' from ' + self.start_date.strftime('%Y-%m-%d') + ']')
+
+
+######################
+# Static info models #
+######################
+
+class FellowManager(models.Manager):
+    def active(self, *args, **kwargs):
+        today = datetime.date.today()
+        return self.filter(
+            Q(start_date__lte=today, until_date__isnull=True) |
+            Q(start_date__isnull=True, until_date__gte=today) |
+            Q(start_date__lte=today, until_date__gte=today) |
+            Q(start_date__isnull=True, until_date__isnull=True),
+            **kwargs).order_by('contributor__user__last_name')
+
+
+class EditorialCollege(models.Model):
+    '''A SciPost Editorial College for a specific discipline.'''
+    discipline = models.CharField(max_length=255, unique=True)
+
+    def __str__(self):
+        return self.discipline
+
+    def active_fellowships(self):
+        return self.fellowships.current_fellowships()
+
+
+class EditorialCollegeFellowship(TimeStampedModel):
+    """
+    Editorial College Fellowship connecting Editorial College and Contributors,
+    maybe with a limiting start/until date.
+    """
+    contributor = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE,
+                                    related_name='+')
+    college = models.ForeignKey('scipost.EditorialCollege', on_delete=models.CASCADE,
+                                related_name='fellowships')
+    start_date = models.DateField(null=True, blank=True)
+    until_date = models.DateField(null=True, blank=True)
+
+    objects = FellowManager()
+
+    class Meta:
+        unique_together = ('contributor', 'college', 'start_date', 'until_date')
+
+    def __str__(self):
+        return self.contributor.__str__()
+
+    def is_active(self):
+        today = datetime.date.today()
+        if not self.start_date:
+            if not self.until_date:
+                return True
+            return today <= self.until_date
+        elif not self.until_date:
+            return today >= self.start_date
+        return today >= self.start_date and today <= self.until_date
diff --git a/scipost/static/scipost/about.js b/scipost/static/scipost/about.js
new file mode 100644
index 0000000000000000000000000000000000000000..748aaa14a672c770beaba534a7f9d1306956bd8c
--- /dev/null
+++ b/scipost/static/scipost/about.js
@@ -0,0 +1,51 @@
+
+$(function() {
+    // Toggle Specialization codes block
+    $('[data-toggle="toggle-show"]').on('click', function(){
+        var el = $($(this).attr('data-target'));
+        el.toggle();
+
+        // Reset active search after closing the box
+        if(!el.is(':visible')) {
+            $('.all-specializations .specialization')
+            .removeClass('active-search')
+            .trigger('search-specialization');
+        }
+    });
+
+    // Hover/Click class to Contributors on hovering specializations
+    $('.all-specializations .specialization')
+    .on('mouseover', function() {
+        var code = $(this).attr('data-specialization');
+        $('.single[data-specialization="'+code+'"]')
+        .parents('.contributor')
+        .addClass('hover-active');
+    })
+    .on('mouseleave', function() {
+        $('.contributor.hover-active').removeClass('hover-active');
+    })
+    .on('click', function() {
+        // Remove hover-class
+        $(this)
+        .toggleClass('active-search')
+        .trigger('search-specialization');
+    })
+    .on('search-specialization', function() {
+        // Reset: searching multiple specializations is not supported
+        $('.search-contributors.active-search').removeClass('active-search');
+        $('.contributor-col.active').removeClass('active');
+        $('.specialization.active-search').not(this).removeClass('active-search');
+
+        var el = $(this);
+        if( el.hasClass('active-search') ) {
+            // Add general 'click-active' class
+            $('.search-contributors').addClass('active-search');
+
+            // Add class to specialized Contributors
+            var code = el.attr('data-specialization');
+            $('.single[data-specialization="' + code + '"]')
+            .parents('.contributor-col')
+            .addClass('active');
+        }
+    });
+});
diff --git a/scipost/static/scipost/assets/config/preconfig.scss b/scipost/static/scipost/assets/config/preconfig.scss
index f42196c54f4b213910ad48974fb68c15c601b79a..0ca0434f571a37fc3d31d816d25957730b6091f2 100644
--- a/scipost/static/scipost/assets/config/preconfig.scss
+++ b/scipost/static/scipost/assets/config/preconfig.scss
@@ -16,6 +16,12 @@ $container-max-widths: (
     margin-bottom: 1rem;
 }
 
+// Cards
+//
+$card-spacer-x: 0.75rem;
+$card-border-radius: 0.15rem;
+$card-border-color: rgba(238, 238, 238, 0.5);
+
 // Colors
 //
 $scipost-lightblue: #6884C2;
@@ -33,6 +39,13 @@ $btn-transition: none;
 $input-padding-x: .5rem;
 $input-padding-y: .25rem;
 
+// Lists
+//
+$list-group-bg: transparent;
+$list-group-item-padding-x: 0;
+$list-group-item-padding-y: 0;
+$list-group-border-color: #f1f1f1;
+
 // Fonts
 //
 $font-family-sans-serif: 'Merriweather Sans', "Helvetica Neue", Arial, sans-serif !default;
@@ -43,11 +56,11 @@ $font-family-base:       $font-family-sans-serif !default;
 $font-size-base: 0.8rem !default;
 $font-size-sm: 0.75rem;
 
-$font-size-h1: 2.0rem;
-$font-size-h2: 1.75rem;
-$font-size-h3: 1.5rem;
-$font-size-h4: 1.25rem;
-$font-size-h5: 1.0rem;
+$font-size-h1: 2.0em;
+$font-size-h2: 1.5em;
+$font-size-h3: 1.17em;
+$font-size-h4: 0.8rem;
+$font-size-h5: 0.8rem;
 $font-size-h6: 0.8rem;
 
 
diff --git a/scipost/static/scipost/assets/css/_about.scss b/scipost/static/scipost/assets/css/_about.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c7c0b58d2f159bb6de4ea6e180f7aaf6a8598f86
--- /dev/null
+++ b/scipost/static/scipost/assets/css/_about.scss
@@ -0,0 +1,34 @@
+.search-contributors.active-search .contributor-col {
+    display: none;
+
+    &.active {
+        display: block;
+    }
+}
+
+.contributor {
+    margin: 0.25rem 0;
+    padding: 0.05rem 0.75rem;
+    border-radius: 0.15rem;
+    -webkit-transition: all 0.05s ease-in-out;
+         -o-transition: all 0.05s ease-in-out;
+            transition: all 0.05s ease-in-out;
+
+    &.hover-active {
+        background-color: rgba(104, 132, 194, 0.3);
+    }
+}
+
+.all-specializations {
+    border: 1px solid $scipost-darkblue;
+    border-radius: 0.15rem;
+    padding: 1rem;
+}
+
+.specialization {
+    &.active-search,
+    &:hover {
+        cursor: pointer;
+        color: $scipost-lightblue;
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_cards.scss b/scipost/static/scipost/assets/css/_cards.scss
new file mode 100644
index 0000000000000000000000000000000000000000..2fe5f997e617af4967c022c0c15eb03bb448fd0a
--- /dev/null
+++ b/scipost/static/scipost/assets/css/_cards.scss
@@ -0,0 +1,16 @@
+.card {
+    margin-bottom: 10px;
+
+    &.card-grey {
+        background-color: #F4F4F4;
+    }
+}
+
+.list-group-item > .card-block {
+    padding: 0.5rem;
+}
+
+.card-title,
+.card-text {
+    margin-bottom: 0.25rem;
+}
diff --git a/scipost/static/scipost/assets/css/_grid.scss b/scipost/static/scipost/assets/css/_grid.scss
index 9f8d9574581db91ece9e89b40e2d8252fe74c1b9..4ae928dd18265da1c82a7325a7131c59a3fb46eb 100644
--- a/scipost/static/scipost/assets/css/_grid.scss
+++ b/scipost/static/scipost/assets/css/_grid.scss
@@ -1,16 +1,19 @@
+.min-height-190 {
+    // Safari hack!
+    min-height: 190px;
+}
 
 .panel {
     padding: 0.75rem;
     height: 100%;
     background-color: #f4f4f4;
     border-bottom: 10px solid #fff;
-
-    &.page-header-panel {
-        // Safari hack!
-        min-height: 190px;
-    }
 }
 
 img {
     max-width: 100%;
 }
+
+.col-md-0 {
+    display: none;
+}
diff --git a/scipost/static/scipost/assets/css/_journals.scss b/scipost/static/scipost/assets/css/_journals.scss
index 75632e01e3847f59c38b7b70bc9b794e512580d8..0ec7c0ef26bd3cccb08f7418e972aa37a86f79cb 100644
--- a/scipost/static/scipost/assets/css/_journals.scss
+++ b/scipost/static/scipost/assets/css/_journals.scss
@@ -11,7 +11,8 @@
 
     a {
         color: #FFA300;
-        padding: 4px;
+        padding: 0 4px;
+        display: block;
 
         &.active {
             background-color: #eeeeee;
@@ -23,6 +24,11 @@
             border: none;
         }
     }
+
+    .banner-subtitle {
+        font-size: 0.7rem;
+        color: #fff;
+    }
 }
 
 
diff --git a/scipost/static/scipost/assets/css/_modal.scss b/scipost/static/scipost/assets/css/_modal.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f992b94c05ff09133c42327fc9bfd0f40cbc6141
--- /dev/null
+++ b/scipost/static/scipost/assets/css/_modal.scss
@@ -0,0 +1,6 @@
+.modal-content {
+    border-radius: 0.15rem;
+}
+.modal-backdrop {
+    opacity: 0.5 !important;
+}
diff --git a/scipost/static/scipost/assets/css/_submissions.scss b/scipost/static/scipost/assets/css/_submissions.scss
index db0039ca92b28e01e449b07ebfd1158911441d89..a2c299931cd9ce9a2306612835ffb2cc03deee72 100644
--- a/scipost/static/scipost/assets/css/_submissions.scss
+++ b/scipost/static/scipost/assets/css/_submissions.scss
@@ -21,3 +21,10 @@ table.submission_header {
 .reportRatings {
     margin: 0 0 1rem;
 }
+
+.required-actions {
+    padding: 0.5rem;
+    background-color: $brand-danger;
+    color: $white;
+    border-radius: $card-border-radius;
+}
diff --git a/scipost/static/scipost/assets/css/_tooltip.scss b/scipost/static/scipost/assets/css/_tooltip.scss
new file mode 100644
index 0000000000000000000000000000000000000000..dd8445262fc4f7e9b5d1ce039a73a942668e3561
--- /dev/null
+++ b/scipost/static/scipost/assets/css/_tooltip.scss
@@ -0,0 +1,11 @@
+[data-toggle="tooltip"] {
+    cursor: pointer;
+
+    &:hover {
+        color: $scipost-lightblue;
+    }
+}
+
+.tooltip-inner {
+    border-radius: 0.15rem;
+}
diff --git a/scipost/static/scipost/assets/css/_type.scss b/scipost/static/scipost/assets/css/_type.scss
index b26184a133ac489c3526fe2feaa860951a00d1cc..f352738152fabc94e77a394155b560e9946840c1 100644
--- a/scipost/static/scipost/assets/css/_type.scss
+++ b/scipost/static/scipost/assets/css/_type.scss
@@ -18,15 +18,21 @@ h1, h2, h3, h4, h5, h6 {
     text-shadow: none;
     font-weight: 500;
 }
-h3.highlight {
+
+.highlight {
     background-color: #f4f4f4;
+    margin: 10px 0;
 
     &.tight {
         display: inline-block;
         padding: 3px 5px;
-        margin-bottom: 3px;
     }
 }
+h1.highlight,
+h2.highlight {
+    padding: 15px;
+}
+
 hr,
 hr.hr12 {
     height: 3px;
@@ -39,3 +45,7 @@ hr.hr12 {
         height: 1px;
     }
 }
+
+.text-blue {
+    color: $scipost-lightblue;
+}
diff --git a/scipost/static/scipost/assets/css/style.scss b/scipost/static/scipost/assets/css/style.scss
index 703b5f6defb6f1f604583bc2d2bdab3d9a7a6703..50ebdb189857fbc100f2cd5e0b7f5098941bafa0 100644
--- a/scipost/static/scipost/assets/css/style.scss
+++ b/scipost/static/scipost/assets/css/style.scss
@@ -19,18 +19,22 @@
 
 @import "alert";
 @import "buttons";
+@import "cards";
 @import "form";
 @import "grid";
 @import "labels";
 @import "messages";
+// @import "modal";
 @import "navbar";
 @import "page_header";
+@import "tooltip";
 @import "type";
 
 /**
  * SciPost Specific
  *
  */
+@import "about";
 @import "comments";
 @import "journals";
 @import "personal_page";
diff --git a/scipost/static/scipost/assets/js/modal.js b/scipost/static/scipost/assets/js/modal.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdf325ec39455b2bffa1cf60ff4c30a5759ef91b
--- /dev/null
+++ b/scipost/static/scipost/assets/js/modal.js
@@ -0,0 +1,6 @@
+require('bootstrap-loader');
+
+jQuery('[data-toggle="modal"]').on('click', function(){
+    var target = $(this).attr('data-target');
+    $(target).modal('show');
+});
diff --git a/scipost/static/scipost/assets/js/tooltip.js b/scipost/static/scipost/assets/js/tooltip.js
new file mode 100644
index 0000000000000000000000000000000000000000..eaba2651c063e2e54a6be9787186e46b0d61c249
--- /dev/null
+++ b/scipost/static/scipost/assets/js/tooltip.js
@@ -0,0 +1,5 @@
+require('bootstrap-loader');
+
+jQuery('[data-toggle="tooltip"]').tooltip({
+    animation: false,
+});
diff --git a/scipost/templates/scipost/FAQ.html b/scipost/templates/scipost/FAQ.html
index 69a01b61c2ca97bbd07c651a451e04ccf41b6701..fb3f7f91c91b41a66f8d5a421a3bf0a9a9d27e77 100644
--- a/scipost/templates/scipost/FAQ.html
+++ b/scipost/templates/scipost/FAQ.html
@@ -4,181 +4,167 @@
 
 {% load staticfiles %}
 
-{% block bodysup %}
-
-
-<section>
-  <div class="flex-greybox">
-    <h1>Frequently asked questions</h1>
-  </div>
-  <div class="row">
-    <div class="col-5">
-
-      <div class="flex-greybox">
-	<h2>SciPost</h2>
-      </div>
-      <h3>What is SciPost?</h3>
-      <p>SciPost is a complete online publication portal managed by and for scientists.</p>
-      <p>
-	Preprint handling and circulation occurs through the well-established arXiv;
-	the rest of the publication process, from peer refereeing through publication
-	all the way to post-publication commenting, is offered by SciPost.
-      </p>
-      <p>Thus, simply stated: share your preprint on <a href="http://www.arxiv.org">arXiv</a>,
-	publish it in <a href="https://scipost.org">SciPost</a>.
-      </p>
-
-      <div class="flex-greybox">
-	<h2>SciPost Journals</h2>
-      </div>
-      <h3>Which Journals does SciPost publish?</h3>
-      <p>In the startup phase, two Journals are being offered:</p>
-      <ul>
-	<li>SciPost Physics</li>
-	<li>SciPost Physics Lecture Notes</li>
-      </ul>
-      <p>Both Journals cover all domains and subject areas within the field of Physics.</p>
-      <p>SciPost Physics Select, the editorially-selected highlights Journal, will be introduced
-	in the near future.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>What are the distinguishing features of SciPost Journals?</h3>
-      <p>All SciPost Journals are subscription-free, two-way open access (free for readers, free for authors) online journals.</p>
-      <p>Manuscripts submitted to SciPost undergo the extremely stringent <a href="/FAQ#pwr">peer-witnessed refereeing</a> process, guaranteeing that papers published in SciPost Journals meet the highest possible academic standards.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Why should I submit my manuscripts to SciPost?</h3>
-      <p>Because:</p>
-      <ul>
-	<li>you think your work can withstand the strictest form of pre-publication scrutiny: <a href="/FAQ#pwr">peer-witnessed refereeing</a></li>
-	<li>you want your referees to have to adhere to the same standards of professionalism which are expected of you as an author</li>
-	<li>you want the editorial process to be handled by professional scientists</li>
-	<li>you think that copyright should be held by authors, not publishers</li>
-	<li>you want your published work to be openly accessible and not hidden behind a paywall</li>
-	<li>you do not think publishers should exploit your work for profit-making</li>
-	<li>you do not think that author(s) should be paying publication costs</li>
-      </ul>
-      <br/>
-      <hr class="hr6">
-      <h3>How do I submit my manuscript to SciPost?</h3>
-      <p>After registering as a Contributor, simply follow the <a href="{% url 'submissions:sub_and_ref_procedure' %}">submission procedure</a>.</p>
-      <br/>
-      <hr class="hr6">
-      <h3 id="pwr">How does peer-witnessed refereeing work?</h3>
-      <p>This is a short summary; for a more detailed description, see our <a href="{% url 'submissions:sub_and_ref_procedure' %}">submission and refereeing procedure</a>.</p>
-      <ul>
-	<li>Reports are gathered from editorially-invited referees, but can also be volunteered by registered SciPost Contributors during refereeing rounds.</li>
-	<li>Reports are posted online (after rapid editorial vetting) on the Submission's Page, and can be replied to (privilege of Authors only) or commented on by all Contributors.</li>
-	<li>Anonymity can be preserved at all meaningful stages if desired (as a referee, you can choose to remain anonymous on a particular Report, but named on another).</li>
-      </ul>
-      <p>Contributors thus have additional incentives to actively participate and provide not only high-quality Submissions,
-	but also Reports and Comments of the highest achievable professional caliber.
-	Quality is moreover promoted by Editorial vetting of all Reports, Replies and Comments before public posting.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Will my SciPost publications be citable?</h3>
-      <p>Yes. All SciPost publications will obtain a unique DOI, enabling citations and metrics as per other journals.
-      Membership of <a href="http://crossref.org">Crossref</a> means that SciPost papers directly benefit from a set of citation metrics.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Will SciPost papers be listed in citation databases?</h3>
-      <p>
-	Inclusion in standard citation databases can be applied for once the Journals have been operating for a short while (at least 3 months). Past experience with other new journals shows that listing typically occurs within a year of launch. Search engine-based listings are expected to pick our Journals up on a shorter timescale.
-      </p>
-      <br/>
-      <hr class="hr6">
-      <h3>Can I also submit my papers somewhere else?</h3>
-      <p>No. SciPost publications or submissions under consideration for publication in SciPost Journals must not be submitted elsewhere.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Under what license do SciPost Journals publish articles?</h3>
-      <p>All SciPost contents are licensed under the <a href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International (CC BY 4.0) License</a>. Under this license, the copyright remains the property of the authors, who then agree to make their articles available for reuse without permission or fees, for virtually any purpose. Anyone may copy, distribute or reuse these articles as long as the author(s) and original source are properly cited. This is the standard license used worldwide in open access journals. You can read more about the details in the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a>.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Will my papers always be available?</h3>
-      <p>Yes. SciPost is here to stay, and authors should not worry that their SciPost publications could potentially disappear.
-	SciPost has institutional backing guaranteeing perpetuity of access to its journals database.
-      </p>
+{% block content %}
 
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Frequently asked questions</h1>
     </div>
-    <div class="col-1"></div>
-    <div class="col-5">
-
-      <div class="flex-greybox">
-	<h2>SciPost Commentaries</h2>
-      </div>
-      <h3>What are Commentaries?</h3>
-      <p>SciPost Commentaries is a searchable repository of Commentary Pages on scientific publications. Each Commentary Page contains some relevant summary info about the publication (such as Title, Author(s), DOI link to published version, abstract, ...), followed by Comments from Contributors and Author and Contributor Replies. </p>
-      <br/>
-      <hr class="hr6">
-      <h3>How are Commentary Pages activated?</h3>
-      <p>Any registered Contributor can request the activation of a Commentary Page by filling in the <a href="{% url 'commentaries:request_commentary' %}">Commentary request page</a>.</p>
-      <br/>
-      <div class="flex-greybox">
-	<h2>SciPost Theses</h2>
-      </div>
-      <h3>What are Theses?</h3>
-      <p>SciPost Theses is a searchable repository of external links to Master's, Ph.D. and Habilitation theses. Besides a validated URL pointing to the original document, each Thesis Link page contains some relevant summary info (such as title, author, degree granting institution, abstract, ...), followed by Comments from Contributors and Author and Contributor Replies. </p>
-      <br/>
-      <hr class="hr6">
-      <h3>How are Thesis Link pages activated?</h3>
-      <p>As a registered Contributor, the author of the thesis (or, if unavailable, the supervisor or a colleague) can request the activation of a Thesis Link by filling in the <a href="{% url 'theses:request_thesislink' %}">Thesis Link request page</a>.</p>
-
-      <br/>
-      <div class="flex-greybox">
-	<h2>SciPost Contributors</h2>
-      </div>
-      <h3>Why should I become an active Contributor?</h3>
-      <p>Because:</p>
-      <ul>
-	<li>you subscribe to the values underlining SciPost's <a href="{% url 'scipost:about' %}">guiding principles</a></li>
-	<li>you would like the quantity and quality of your refereeing and commenting work to be recognized and credited</li>
-	<li>you would like to be entitled to report on submissions, even if you haven't been explicitly invited to do so by an editor</li>
-	<li>you are interested in building useful extra content (comments, rederivations, etc) on existing literature</li>
-	<li>you are willing to make your contributions as author and (anonymously) as reviewer and commenter openly accessible</li>
-      </ul>
-      <br/>
-      <div class="flex-greybox">
-	<h2>SciPost Comments</h2>
-      </div>
-      <h3>What can be commented on?</h3>
-      <p>All categories of contents can be commented on: Publications, Submissions, Commentaries and Thesis Links. In addition, Comments themselves can be replied to.</p>
-      <h3>Who can submit Comments?</h3>
-      <p>Only registered Contributors can submit Comments.</p>
-      <h3>What about privacy?</h3>
-      <p>Comments posted on SciPost carry an identifier including the Contributor's full name.</p>
-      <p>Reports on Submissions are anonymous by default. If the Contributor providing the Report wishes it, anonymity can be waived.</p>
-      <p>More details can be found in our <a href="{% url 'scipost:privacy_policy' %}">Privacy Policy</a>.</p>
-      <br/>
-      <div class="flex-greybox">
-	<h2>About SciPost</h2>
-      </div>
-      <h3>Who is behind SciPost?</h3>
-      <ul>
-	<li>SciPost was founded by <a href="http://staff.fnwi.uva.nl/j.s.caux">J.-S. Caux</a>, Professor of Theoretical Physics at the University of Amsterdam.</li>
-	<li>The legal entity behind SciPost is <a href="{% url 'scipost:foundation' %}">Stichting SciPost</a>, a not-for-profit Foundation established in Amsterdam. Its (non-remunerated) personnel consists in Prof. J.-S. Caux (chairman), Dr J. van Mameren (secretary) and Dr J. van Wezel (treasurer). The portal is run by a team of volunteer officers coordinated by the Foundation.</li>
-      </ul>
-      <br/>
-      <hr class="hr6">
-      <h3>Why was SciPost started?</h3>
-      <p>The publishing landscape is evolving rapidly, and it is not clear that the best interests of science and scientists are being represented. SciPost offers a grassroots solution to the problem of scientific publishing, designed and implemented by scientists in the best interests of science itself.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Which fields of science does SciPost cater to?</h3>
-      <p>The initial rollout of SciPost offers a Physics portal.</p>
-      <p>Portals in other disciplines will be opened if the SciPost model proves to be successful.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>Is SciPost moderated?</h3>
-      <p>Yes. All content is vetted by the editorial team before being made public. Only meaningful, professional-level scientific content is accepted. SciPost does not take any responsibility for the actual contents of postings.</p>
-      <br/>
-      <hr class="hr6">
-      <h3>How is SciPost funded?</h3>
-      <p>SciPost operates non-commercially, incurring minimal costs. Contributors, who are by definition all academically employed, provide all the content and perform all editorial tasks as part of their normal institutional academic duties. Operations are kept running by a team of volunteer officers, themselves academically employed.</p>
-      <p>Support for operational costs is initially provided by the <a href="http://www.nwo.nl/en">NWO</a> in the Netherlands. Long-term operations will be financed by donations from national funding agencies, universities, societies, foundations and individuals. If you are interested in financially supporting SciPost, <a href="mailto:J.S.Caux@uva.nl">contact us</a>.</p>
+</div>
+
+<div class="row">
+    <div class="col-md-6">
+    	<h2 class="highlight">SciPost</h2>
+        <h3>What is SciPost?</h3>
+        <p>SciPost is a complete online publication portal managed by and for scientists.</p>
+        <p>
+            Preprint handling and circulation occurs through the well-established arXiv;
+            the rest of the publication process, from peer refereeing through publication
+            all the way to post-publication commenting, is offered by SciPost.
+        </p>
+        <p>
+            Thus, simply stated: share your preprint on <a target="_blank" href="http://www.arxiv.org">arXiv</a>, publish it in <a href="https://scipost.org">SciPost</a>.
+        </p>
+
+        <!-- SciPost Journals -->
+        <h2 class="highlight">SciPost Journals</h2>
+        <h3>Which Journals does SciPost publish?</h3>
+        <p>In the startup phase, two Journals are being offered:</p>
+          <ul>
+    	<li>SciPost Physics</li>
+    	<li>SciPost Physics Lecture Notes</li>
+          </ul>
+        <p>Both Journals cover all domains and subject areas within the field of Physics.</p>
+        <p>SciPost Physics Select, the editorially-selected highlights Journal, will be introduced
+        in the near future.</p>
+
+        <hr>
+        <h3>What are the distinguishing features of SciPost Journals?</h3>
+        <p>All SciPost Journals are subscription-free, two-way open access (free for readers, free for authors) online journals.</p>
+        <p>Manuscripts submitted to SciPost undergo the extremely stringent <a href="#pwr">peer-witnessed refereeing</a> process, guaranteeing that papers published in SciPost Journals meet the highest possible academic standards.</p>
+
+        <hr>
+        <h3>Why should I submit my manuscripts to SciPost?</h3>
+        <p>Because:</p>
+        <ul>
+            <li>you think your work can withstand the strictest form of pre-publication scrutiny: <a href="#pwr">peer-witnessed refereeing</a></li>
+            <li>you want your referees to have to adhere to the same standards of professionalism which are expected of you as an author</li>
+            <li>you want the editorial process to be handled by professional scientists</li>
+            <li>you think that copyright should be held by authors, not publishers</li>
+            <li>you want your published work to be openly accessible and not hidden behind a paywall</li>
+            <li>you do not think publishers should exploit your work for profit-making</li>
+            <li>you do not think that author(s) should be paying publication costs</li>
+        </ul>
+
+        <hr>
+        <h3>How do I submit my manuscript to SciPost?</h3>
+        <p>After registering as a Contributor, simply follow the <a href="{% url 'submissions:sub_and_ref_procedure' %}">submission procedure</a>.</p>
+
+        <hr>
+        <h3 id="pwr">How does peer-witnessed refereeing work?</h3>
+        <p>This is a short summary; for a more detailed description, see our <a href="{% url 'submissions:sub_and_ref_procedure' %}">submission and refereeing procedure</a>.</p>
+        <ul>
+            <li>Reports are gathered from editorially-invited referees, but can also be volunteered by registered SciPost Contributors during refereeing rounds.</li>
+            <li>Reports are posted online (after rapid editorial vetting) on the Submission's Page, and can be replied to (privilege of Authors only) or commented on by all Contributors.</li>
+            <li>Anonymity can be preserved at all meaningful stages if desired (as a referee, you can choose to remain anonymous on a particular Report, but named on another).</li>
+        </ul>
+        <p>Contributors thus have additional incentives to actively participate and provide not only high-quality Submissions,
+        but also Reports and Comments of the highest achievable professional caliber.
+        Quality is moreover promoted by Editorial vetting of all Reports, Replies and Comments before public posting.</p>
+
+        <hr>
+        <h3>Will my SciPost publications be citable?</h3>
+        <p>Yes. All SciPost publications will obtain a unique DOI, enabling citations and metrics as per other journals.
+        Membership of <a target="_blank" href="http://crossref.org">Crossref</a> means that SciPost papers directly benefit from a set of citation metrics.</p>
+
+        <hr>
+        <h3>Will SciPost papers be listed in citation databases?</h3>
+        <p>
+        Inclusion in standard citation databases can be applied for once the Journals have been operating for a short while (at least 3 months). Past experience with other new journals shows that listing typically occurs within a year of launch. Search engine-based listings are expected to pick our Journals up on a shorter timescale.
+        </p>
+
+        <hr>
+        <h3>Can I also submit my papers somewhere else?</h3>
+        <p>No. SciPost publications or submissions under consideration for publication in SciPost Journals must not be submitted elsewhere.</p>
+
+        <hr>
+        <h3>Under what license do SciPost Journals publish articles?</h3>
+        <p>All SciPost contents are licensed under the <a target="_blank" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International (CC BY 4.0) License</a>. Under this license, the copyright remains the property of the authors, who then agree to make their articles available for reuse without permission or fees, for virtually any purpose. Anyone may copy, distribute or reuse these articles as long as the author(s) and original source are properly cited. This is the standard license used worldwide in open access journals. You can read more about the details in the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a>.</p>
+
+        <hr>
+        <h3>Will my papers always be available?</h3>
+        <p>Yes. SciPost is here to stay, and authors should not worry that their SciPost publications could potentially disappear.
+        SciPost has institutional backing guaranteeing perpetuity of access to its journals database.
+        </p>
+
     </div>
-  </div>
-</section>
+    <div class="col-md-6">
+    	<h2 class="highlight">SciPost Commentaries</h2>
+
+        <h3>What are Commentaries?</h3>
+        <p>SciPost Commentaries is a searchable repository of Commentary Pages on scientific publications. Each Commentary Page contains some relevant summary info about the publication (such as Title, Author(s), DOI link to published version, abstract, ...), followed by Comments from Contributors and Author and Contributor Replies. </p>
 
+        <hr>
+        <h3>How are Commentary Pages activated?</h3>
+        <p>Any registered Contributor can request the activation of a Commentary Page by filling in the <a href="{% url 'commentaries:request_commentary' %}">Commentary request page</a>.</p>
+
+        <h2 class="highlight">SciPost Theses</h2>
+            <h3>What are Theses?</h3>
+            <p>SciPost Theses is a searchable repository of external links to Master's, Ph.D. and Habilitation theses. Besides a validated URL pointing to the original document, each Thesis Link page contains some relevant summary info (such as title, author, degree granting institution, abstract, ...), followed by Comments from Contributors and Author and Contributor Replies. </p>
+
+            <hr>
+            <h3>How are Thesis Link pages activated?</h3>
+            <p>As a registered Contributor, the author of the thesis (or, if unavailable, the supervisor or a colleague) can request the activation of a Thesis Link by filling in the <a href="{% url 'theses:request_thesislink' %}">Thesis Link request page</a>.</p>
+
+        <h2 class="highlight">SciPost Contributors</h2>
+
+            <h3>Why should I become an active Contributor?</h3>
+            <p>Because:</p>
+            <ul>
+                <li>you subscribe to the values underlining SciPost's <a href="{% url 'scipost:about' %}">guiding principles</a></li>
+                <li>you would like the quantity and quality of your refereeing and commenting work to be recognized and credited</li>
+                <li>you would like to be entitled to report on submissions, even if you haven't been explicitly invited to do so by an editor</li>
+                <li>you are interested in building useful extra content (comments, rederivations, etc) on existing literature</li>
+                <li>you are willing to make your contributions as author and (anonymously) as reviewer and commenter openly accessible</li>
+            </ul>
+
+        <h2 class="highlight">SciPost Comments</h2>
+
+            <h3>What can be commented on?</h3>
+            <p>All categories of contents can be commented on: Publications, Submissions, Commentaries and Thesis Links. In addition, Comments themselves can be replied to.</p>
+            <h3>Who can submit Comments?</h3>
+            <p>Only registered Contributors can submit Comments.</p>
+            <h3>What about privacy?</h3>
+            <p>Comments posted on SciPost carry an identifier including the Contributor's full name.</p>
+            <p>Reports on Submissions are anonymous by default. If the Contributor providing the Report wishes it, anonymity can be waived.</p>
+            <p>More details can be found in our <a href="{% url 'scipost:privacy_policy' %}">Privacy Policy</a>.</p>
+
+        <h2 class="highlight">About SciPost</h2>
+
+            <h3>Who is behind SciPost?</h3>
+            <ul>
+                <li>SciPost was founded by <a target="_blank" href="http://staff.fnwi.uva.nl/j.s.caux">J.-S. Caux</a>, Professor of Theoretical Physics at the University of Amsterdam.</li>
+                <li>The legal entity behind SciPost is <a href="{% url 'scipost:foundation' %}">Stichting SciPost</a>, a not-for-profit Foundation established in Amsterdam. Its (non-remunerated) personnel consists in Prof. J.-S. Caux (chairman), Dr J. van Mameren (secretary) and Dr J. van Wezel (treasurer). The portal is run by a team of volunteer officers coordinated by the Foundation.</li>
+            </ul>
+
+            <hr>
+            <h3>Why was SciPost started?</h3>
+            <p>The publishing landscape is evolving rapidly, and it is not clear that the best interests of science and scientists are being represented. SciPost offers a grassroots solution to the problem of scientific publishing, designed and implemented by scientists in the best interests of science itself.</p>
+
+            <hr>
+            <h3>Which fields of science does SciPost cater to?</h3>
+            <p>The initial rollout of SciPost offers a Physics portal.</p>
+            <p>Portals in other disciplines will be opened if the SciPost model proves to be successful.</p>
+
+            <hr>
+            <h3>Is SciPost moderated?</h3>
+            <p>Yes. All content is vetted by the editorial team before being made public. Only meaningful, professional-level scientific content is accepted. SciPost does not take any responsibility for the actual contents of postings.</p>
+
+            <hr>
+            <h3>How is SciPost funded?</h3>
+            <p>SciPost operates non-commercially, incurring minimal costs. Contributors, who are by definition all academically employed, provide all the content and perform all editorial tasks as part of their normal institutional academic duties. Operations are kept running by a team of volunteer officers, themselves academically employed.</p>
+            <p>Support for operational costs is initially provided by the <a target="_blank" href="http://www.nwo.nl/en">NWO</a> in the Netherlands. Long-term operations will be financed by donations from national funding agencies, universities, societies, foundations and individuals. If you are interested in financially supporting SciPost, <a href="mailto:J.S.Caux@uva.nl">contact us</a>.</p>
+    </div>
+</div>
 
-{% endblock bodysup %}
+{% endblock content %}
diff --git a/scipost/templates/scipost/VGMs.html b/scipost/templates/scipost/VGMs.html
index 493eefde5df67e226514048c5410da811aae0b57..a482a21dfadd11a7121e88458dd9bdb2df7ef9a0 100644
--- a/scipost/templates/scipost/VGMs.html
+++ b/scipost/templates/scipost/VGMs.html
@@ -16,7 +16,7 @@
 
   <ul>
     {% for VGM in VGM_list %}
-    <li><a href="{% url 'scipost:VGM_detail' VGM_id=VGM.id %}">{{ VGM }}</a></li>
+    <li><a href="{% url 'virtualmeetings:VGM_detail' VGM_id=VGM.id %}">{{ VGM }}</a></li>
     {% endfor %}
   </ul>
 
diff --git a/scipost/templates/scipost/_contributor_short.html b/scipost/templates/scipost/_contributor_short.html
new file mode 100644
index 0000000000000000000000000000000000000000..412c56712c22cb699f7b4093889d015ec46bf7e8
--- /dev/null
+++ b/scipost/templates/scipost/_contributor_short.html
@@ -0,0 +1,22 @@
+{% load scipost_extras %}
+
+{% load static %}
+
+<h3 class="mb-0 py-0 d-block">
+    {% if contributor.personalwebpage %}
+        <a target="_blank" href="{{ contributor.personalwebpage }}">
+    {% endif %}
+        {{ contributor.get_title_display }} {{ contributor.user.first_name }} {{ contributor.user.last_name }}
+    {% if contributor.personalwebpage %}
+        </a>
+    {% endif %}
+</h3>
+
+{% if contributor.affiliation %}
+    <span class="text-muted">({{contributor.affiliation}})</span>
+{% endif %}
+<div class="d-block">
+    {% for expertise in contributor.expertises %}
+        <div class="single d-inline" data-specialization="{{expertise|lower}}" data-toggle="tooltip" data-placement="bottom" title="{{expertise|get_specialization_display}}">{{expertise|get_specialization_code}}</div>
+    {% endfor %}
+</div>
diff --git a/scipost/templates/scipost/about.html b/scipost/templates/scipost/about.html
index 03d7103478b3c093637a4c33bcfb65cda022698a..e28a3a313129b13d4c4b0901df30660ba0f513fa 100644
--- a/scipost/templates/scipost/about.html
+++ b/scipost/templates/scipost/about.html
@@ -1,42 +1,69 @@
 {% extends 'scipost/base.html' %}
-
+{% load render_bundle from webpack_loader %}
 {% block pagetitle %}: About{% endblock pagetitle %}
 
 {% load staticfiles %}
 
-{% block bodysup %}
+{% load scipost_extras %}
+
+{% block content %}
 
 
-<section>
-  <div class="row">
-    <div class="col-6">
-      <div class="flex-container">
-        <div class="flex-greybox">
-          <h1>About SciPost</h1>
+<div class="row">
+    <div class="col-md-6">
+        <div class="row">
+            <div class="col-12">
+              <div class="panel">
+                  <h2>About SciPost</h2>
+              </div>
+            </div>
+            <div class="col-12">
+                <a href="{% url 'scipost:FAQ' %}">Frequently asked questions</a>
+            </div>
         </div>
-      </div>
-      {#<h4>Read the original <a href="{% static 'scipost/info/SciPost_Description.pdf' %}">SciPost description document</a>.</h4>#}
-      <h4><a href="{% url 'scipost:FAQ' %}">Frequently asked questions</a>.</h4>
+
+        <p>SciPost is a complete scientific publication portal.</p>
+        <p>It is purely online-based, and offers freely, openly, globally and perpetually accessible science.</p>
+        <p>Being managed by professional scientists, and making use of editor-solicited and contributed reviews, its Journals aim at the highest achievable standards of refereeing.</p>
+        <p>SciPost Commentaries allow Contributors to seamlessly comment on all existing literature.</p>
     </div>
-    <div class="col-6">
-      <p>SciPost is a complete scientific publication portal.</p>
-      <p>It is purely online-based, and offers freely, openly, globally and perpetually accessible science.</p>
-      <p>Being managed by professional scientists, and making use of editor-solicited and contributed reviews, its Journals aim at the highest achievable standards of refereeing.</p>
-      <p>SciPost Commentaries allow Contributors to seamlessly comment on all existing literature.</p>
+    <div class="col-md-6">
+
+        <div class="row">
+            <div class="col-12">
+                <div class="panel">
+                    <h2>Acknowledgements</h2>
+                </div>
+            </div>
+        </div>
+
+        <h2>SciPost is endorsed by</h2>
+
+        <div class="row">
+            <div class="col-md-6">
+              <a target="_blank" href="http://www.nwo.nl/en"><img src="{% static 'scipost/images/NWO_logo_EN.jpg' %}" alt="NWO logo" width='300px' /></a>
+              <p id="NWOOpenAccess" class="mt-3">All articles published in SciPost Journals fulfill the Gold standard Open Access requirements of the NWO, as stipulated on the NWO’s <a href="http://www.nwo.nl/en/policies/open+science">Open Science page</a>.</p>
+            </div>
+            <div class="col-md-6">
+                <a target="_blank" href="http://www.fom.nl/live/english/home.pag"><img src="{% static 'scipost/images/FOMlogo_fc.jpg' %}" alt="FOM logo" width='100px' /></a>
+                <p style="font-size: 50%">FOM is part of NWO</p>
+            </div>
+        </div>
     </div>
-  </div>
-</section>
+</div>
 
-<section>
-  <hr class="hr12">
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>Guiding principles</h1>
+<hr>
+<div class="row">
+  <div class="col-12">
+    <div class="panel">
+      <h2>Guiding principles</h2>
     </div>
   </div>
+</div>
 
-  <div class="row">
-    <div class="col-5">
+
+<div class="row">
+    <div class="col-md-6">
       <ul>
         <li><em>Two-way open access</em><br/> Publicly-funded science should be openly accessible to scientists and the general public, perpetually, worldwide. Conversely, scientists should not have to pay publishing charges to disseminate the fruits of their research efforts.</li>
         <li><em>Non-profit</em><br/>Academics do not perform research for profit, and by extension the publication of their scientific results should not involve commercial profit-making.</li>
@@ -46,178 +73,197 @@
         <li><em>Post-publication evaluation</em><br/> Peer evaluation does not stop at the moment of publication.</li>
       </ul>
     </div>
-    <div class="col-1"></div>
-    <div class="col-6">
-      <br/><br/>
-      <p>The first principle is reflected in the fact that all publications and related content on SciPost.org are accessible to anybody with an internet connection. Moreover, publishing in SciPost entails no author charges.</p>
+    <div class="col-md-6">
+      <p class="mt-md-4">The first principle is reflected in the fact that all publications and related content on SciPost.org are accessible to anybody with an internet connection. Moreover, publishing in SciPost entails no author charges.</p>
       <p>The second principle is reflected in SciPost’s not-for-profit status. SciPost is financially backed by national granting agencies, universities, foundations and individuals.</p>
       <p>The third principle is implemented by having only active scientists involved in SciPost’s decision-making and editorial processes.</p>
       <p>The fourth and fifth principles are implemented using SciPost’s maximally stringent peer-witnessed refereeing process.</p>
       <p>The sixth principle is implemented in the form of Commentary Pages associated to publications. These can either be SciPost Publications, or papers published elsewhere.</p>
     </div>
-  </div>
-</section>
-
-<section>
-  <hr class="hr12">
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h2>Acknowledgements</h2>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-3">
-      <h1>SciPost is endorsed by</h1>
-    </div>
-    <div class="col-4">
-      <a href="http://www.nwo.nl/en"><img src="{% static 'scipost/images/NWO_logo_EN.jpg' %}" alt="NWO logo" width='300px' /></a>
-      <p id="NWOOpenAccess">All articles published in SciPost Journals fulfill the Gold standard Open Access requirements of the NWO, as stipulated on the NWO’s <a href="http://www.nwo.nl/en/policies/open+science">Open Science page</a>.</p>
-    </div>
-    <div class="col-1">
-    </div>
-    <div class="col-4">
-      <a href="http://www.fom.nl/live/english/home.pag"><img src="{% static 'scipost/images/FOMlogo_fc.jpg' %}" alt="FOM logo" width='100px' /></a>
-      <p style="font-size: 50%">FOM is part of NWO</p>
-    </div>
+</div>
 
-  </div>
 
-</section>
-<section>
-  <hr class="hr12">
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>The SciPost Team</h1>
+<hr>
+<div class="row">
+    <div class="col-12">
+        <div class="panel">
+      <h2>The SciPost Team</h2>
+        </div>
     </div>
-  </div>
-
-  <div class="flex-container">
-    <div class="flex-whitebox">
+</div>
+<div class="row">
+    <div class="col-md-3 offset-md-1">
       <h3><a href="{% url 'scipost:foundation' %}">The SciPost Foundation</a></h3>
       <ul>
-	<li>Chairman: Prof. J.-S. Caux</li>
-	<li>Secretary: Dr J. van Mameren</li>
-	<li>Treasurer: Dr J. van Wezel</li>
+    	<li>Chairman: Prof. J.-S. Caux</li>
+    	<li>Secretary: Dr J. van Mameren</li>
+    	<li>Treasurer: Dr J. van Wezel</li>
       </ul>
     </div>
-    <div class="flex-whitebox">
+    <div class="col-md-6">
       <h3>Code Development and Server Maintenance</h3>
       <ul>
-	<li>Lead programmer: J.-S. Caux</li>
-	<li>Dev team: J. de Wit, G. Kapteijns, M. Moeys and B. Ponsioen</li>
+    	<li>Lead programmer: J.-S. Caux</li>
+    	<li>Dev team: J. de Wit, G. Kapteijns, M. Moeys and B. Ponsioen</li>
       </ul>
     </div>
-  </div>
+</div>
 
-  <hr class="hr12">
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1 id="advisory_board">Advisory Board</h1>
+<hr>
+<div class="row">
+  <div class="col-12">
+    <div class="panel">
+      <h2 id="advisory_board">Advisory Board</h2>
     </div>
   </div>
-  <div class="flex-container">
-    <div class="flex-whitebox">
+</div>
+
+<div class="row">
+    <div class="col-md-3 offset-md-1">
       <ul>
-	<li>Prof. <a href="http://www.nikhef.nl/~h02/">J. J. Engelen</a><br/>(U. van Amsterdam)</li>
-	<li>Prof. <a href="https://www.asc.ox.ac.uk/person/18">P. Fendley</a><br/>(Oxford; <a href="https://www.asc.ox.ac.uk/all-souls-college-oxford">All Souls College</a>)</li>
-	<li>Prof. <a href="http://www.ru.nl/highenergyphysics/ehep/persons/sijbrand_de_jong/">S. J. de Jong</a><br/>(Radboud Univ. Nijmegen,<br/>President CERN Council)</li>
+	<li>Prof. <a target="_blank" href="http://www.nikhef.nl/~h02/">J. J. Engelen</a><br/>(U. van Amsterdam)</li>
+	<li>Prof. <a target="_blank" href="https://www.asc.ox.ac.uk/person/18">P. Fendley</a><br/>(Oxford; <a href="https://www.asc.ox.ac.uk/all-souls-college-oxford">All Souls College</a>)</li>
+	<li>Prof. <a target="_blank" href="http://www.ru.nl/highenergyphysics/ehep/persons/sijbrand_de_jong/">S. J. de Jong</a><br/>(Radboud Univ. Nijmegen,<br/>President CERN Council)</li>
       </ul>
     </div>
-    <div class="flex-whitebox">
+    <div class="col-md-3">
       <ul>
-	<li>Prof. <a href="http://www.ens-lyon.fr/PHYSIQUE/presentation/annuaire/maillet-jean-michel">J. M. Maillet</a><br/>(ENS Lyon)</li>
-	<li>Prof. <a href="http://people.sissa.it/~mussardo/">G. Mussardo</a><br/>(SISSA)</li>
-	<li>Prof. <a href="http://www.ru.nl/ssi/members/theo_rasing/">T. Rasing</a><br/>(Radboud Univ. Nijmegen)</li>
-	<li>Prof. <a href="http://atomchip.org/general-information/people/schmiedmayer/">J. Schmiedmayer</a><br/>(TU Vienna)</li>
+	<li>Prof. <a target="_blank" href="http://www.ens-lyon.fr/PHYSIQUE/presentation/annuaire/maillet-jean-michel">J. M. Maillet</a><br/>(ENS Lyon)</li>
+	<li>Prof. <a target="_blank" href="http://people.sissa.it/~mussardo/">G. Mussardo</a><br/>(SISSA)</li>
+	<li>Prof. <a target="_blank" href="http://www.ru.nl/ssi/members/theo_rasing/">T. Rasing</a><br/>(Radboud Univ. Nijmegen)</li>
+	<li>Prof. <a target="_blank" href="http://atomchip.org/general-information/people/schmiedmayer/">J. Schmiedmayer</a><br/>(TU Vienna)</li>
       </ul>
     </div>
-    <div class="flex-whitebox">
+    <div class="col-md-3">
       <ul>
-	<li>Prof. <a href="http://www.professoren.tum.de/en/spohn-herbert/">H. Spohn</a><br/>(TU Munich)</li>
-	<li>Prof. <a href="http://www.comp.phys.ethz.ch/people/troyer.html">M. Troyer</a><br/>(ETH Zurich)</li>
-	<li>Prof. <a href="http://www.uva.nl/over-de-uva/organisatie/medewerkers/content/v/e/e.p.verlinde/e.p.verlinde.html">E. P. Verlinde</a><br/>(U. van Amsterdam)</li>
-	<li>Prof. <a href="https://staff.fnwi.uva.nl/j.t.m.walraven/walraven/JookWalraven.htm">J. T. M. Walraven</a><br/>(U. van Amsterdam)</li>
+	<li>Prof. <a target="_blank" href="http://www.professoren.tum.de/en/spohn-herbert/">H. Spohn</a><br/>(TU Munich)</li>
+	<li>Prof. <a target="_blank" href="http://www.comp.phys.ethz.ch/people/troyer.html">M. Troyer</a><br/>(ETH Zurich)</li>
+	<li>Prof. <a target="_blank" href="http://www.uva.nl/over-de-uva/organisatie/medewerkers/content/v/e/e.p.verlinde/e.p.verlinde.html">E. P. Verlinde</a><br/>(U. van Amsterdam)</li>
+	<li>Prof. <a target="_blank" href="https://staff.fnwi.uva.nl/j.t.m.walraven/walraven/JookWalraven.htm">J. T. M. Walraven</a><br/>(U. van Amsterdam)</li>
       </ul>
     </div>
-  </div>
+</div>
 
+<hr>
 
-  <hr class="hr12">
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1 id="editorial_college_physics">Editorial College (Physics)</h1>
-    </div>
-  </div>
-  <div class="flex-container">
-    <div class="flex-whitebox">
-      <ul>
-	<li>Prof. <a href="https://www.uni-tuebingen.de/en/faculties/faculty-of-science/departments/physics/institutes/institute-for-theoretical-physics/research-groups/andergassen-group.html">Sabine Andergassen</a><br/>(Tübingen)</li>
-	<li>Prof. <a href="http://www.physik.uni-wuerzburg.de/~assaad/">Fakher Assaad</a><br/>(Würzbrug)</li>
-	<li>Dr <a href="http://www.attaccalite.com">Claudio Attaccalite</a><br/>(Marseille)</li>
-	<li>Prof. <a href="https://denis114.wordpress.com">Denis Bartolo</a><br/>(ENS Lyon)</li>
-	<li>Prof. <a href="http://www.physik.unizh.ch/~lbaudis/index.html">Laura Baudis</a><br/>(Zurich)</li>
-	<li>Prof. <a href="http://www.lorentz.leidenuniv.nl/beenakker/">Carlo Beenakker</a><br/>(Leiden)</li>
-	<li>Prof. <a href="https://www.coulomb.univ-montp2.fr/perso/ludovic.berthier/">Ludovic Berthier</a><br/>(Montpellier)</li>
-	<li>Prof. <a href="http://ipht.cea.fr/Pisp/giulio.biroli/index_en.php">Giulio Biroli</a><br/>(CEA Saclay)</li>
-	<li>Prof. <a href="http://www.en.physik.uni-muenchen.de/personen/professoren/bloch/index.html">Immanuel Bloch</a><br/>(LMU Munich)</li>
-	<li>Prof. <a href="https://staff.fnwi.uva.nl/j.deboer/">Jan de Boer</a><br/>(U. van Amsterdam)</li>
-	<li>Prof. <a href="http://www.uva.nl/en/about-the-uva/organisation/staff-members/content/b/o/d.bonn/d.bonn.html">Daniel Bonn</a><br/>(U. van Amsterdam)</li>
-	<li>Prof. <a href="http://www.statphys.sissa.it/wordpress/?page_id=1731">Pasquale Calabrese</a><br/>(SISSA)</li>
-	<li>Prof. <a href="http://personalpages.to.infn.it/~caselle/index_en.html">Michele Caselle</a><br/>(Torino)</li>
-	<li>Prof. <a href="http://www.saha.ac.in/cmp/bikask.chakrabarti/bikas.html">Bikas Chakrabarti</a><br/>(Kolkata)</li>
-	<li>Prof. <a href="http://www.tcm.phy.cam.ac.uk/~nrc25/">Nigel Cooper</a><br/>(Cambridge)</li>
-      </ul>
-    </div>
-    <div class="flex-whitebox">
-      <ul>
-	<li>Prof. <a href="http://physics.cornell.edu/csaba-csaki">Csaba Csaki</a><br/>(Cornell)</li>
-	<li>Prof. <a href="http://theory.tifr.res.in/~kedar/">Kedar Damle</a><br/>(TIFR Mumbai)</li>
-	<li>Prof. <a href="http://researchers.uq.edu.au/researcher/1134">Matthew Davis</a><br/>(U. of Queensland)</li>
-	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/FabianEssler/">Fabian Essler</a><br/>(U. of Oxford)</li>
-	<li>Prof. <a href="http://www.pd.infn.it/~feruglio/">Ferruccio Feruglio</a><br/>(Padova, INFN)</li>
-	<li>Prof. <a href="http://www.ms.unimelb.edu.au/~jdgier@unimelb/">Jan de Gier</a><br/>(U. of Melbourne)</li>
-	<li>Prof. <a href="http://www.desy.de/about_desy/leading_scientists/beate_heinemann/index_eng.html">Beate Heinemann</a><br/>(DESY; Freiburg)</li>
-	<li>Prof. <a href="http://katzgraber.org">Helmut Katzgraber</a><br/>(Texas A&amp;M)</li>
-	<li>Prof. <a href="https://web.physik.rwth-aachen.de/~mkraemer/">Michael Kr&auml;mer</a><br/>(RWTH Aachen)</li>
-	<li>Prof. <a href="https://www.pmmh.espci.fr/~jorge/">Jorge Kurchan</a><br/>(<a href="https://www.pmmh.espci.fr/?-Home-">PMMH</a> Paris, CNRS)</li>
-	<li>Prof. <a href="https://vivo.brown.edu/display/glandsbe">Greg Landsberg</a><br/>(Brown Univ.)</li>
-	<li>Prof. <a href="https://www.mpg.de/6812374/chem_physik_fester_stoffe_mackenzie">Andrew P. MacKenzie</a><br/>(MPICPS Dresden, St-Andrews)</li>
-	<li>Prof. <a href="http://www.ens-lyon.fr/PHYSIQUE/presentation/annuaire/maillet-jean-michel">Jean Michel Maillet</a><br/>(ENS Lyon)</li>
-	<li>Prof. <a href="https://www.mpg.de/343435/physik_komplexer_systeme_wissM28">Roderich Moessner</a><br/>(MPIPKS Dresden)</li>
-	<li>Prof. <a href="https://www.uibk.ac.at/exphys/ultracold/people/christoph.naegerl/">Hanns-Christoph N&auml;gerl</a><br/>(Innsbruck)</li>
-	<li>Prof. <a href="http://www.physics.miami.edu/~nepomechie/">Rafael Nepomechie</a><br/>(U. of Miami)</li>
-      </ul>
-    </div>
-    <div class="flex-whitebox">
-      <ul>
-	<li>Prof. <a href="https://staff.fnwi.uva.nl/b.nienhuis/">Bernard Nienhuis</a><br/>(U. van Amsterdam)</li>
-	<!--<li>Prof. <a href="http://www.kip.uni-heidelberg.de/people/index.php?num=552">Markus Oberthaler</a><br/>(U. Heidelberg)</li>-->
-	<li>Prof. <a href="http://www.lpthe.jussieu.fr/~pioline/">Boris Pioline</a><br/>(LPTHE Jussieu)</li>
-	<li>Prof. <a href="https://www.uu.nl/staff/RHHGvanRoij/0">René van Roij</a><br/>(Utrecht)</li>
-	<li>Prof. <a href="http://www.thp.uni-koeln.de/rosch">Achim Rosch</a><br/>(U. of Cologne)</li>
-	<li>Prof. <a href="http://saleur.sandvox.net">Hubert Saleur</a><br/>(CEA Saclay/USC)</li>
-	<li>Prof. <a href="http://www.phy.ohiou.edu/people/faculty/sandler.html">Nancy Sandler</a><br/>(Ohio)</li>
-	<li>Dr. <a href="http://www.sussex.ac.uk/profiles/320359">Veronica Sanz</a><br/>(Sussex)</li>
-	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/SubirSarkar/">Subir Sarkar</a><br/>(Oxford; Niels Bohr Institute)</li>
-	<li>Prof. <a href="https://staff.fnwi.uva.nl/c.j.m.schoutens/">Kareljan Schoutens</a><br/>(U. van Amsterdam)</li>
-	<li>Dr <a href="http://www.phys.ens.fr/~guilhem/">Guilhem Semerjian</a><br/>(ENS Paris)</li>
-	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/SteveSimon/">Steve Simon</a><br/>(U. of Oxford)</li>
-	<li>Prof. <a href="http://bec.science.unitn.it/infm-bec/people/stringari.html">Sandro Stringari</a><br/>(Trento)</li>
-	<li>Prof. <a href="http://www.damtp.cam.ac.uk/user/tong/">David Tong</a><br/>(Cambridge)</li>
-	<li>Prof. <a href="http://www.physique.usherbrooke.ca/pages/en/node/3412">Andr&eacute;-Marie Tremblay</a><br/>(Sherbrooke)</li>
-	<li>Prof. <a href="http://trivediresearch.org.ohio-state.edu">Nandini Trivedi</a><br/>(Ohio State U.)</li>
-	<li>Prof. <a href="http://vergassolalab.ucsd.edu">Massimo Vergassola</a><br/>(UC Sand Diego)</li>
-      </ul>
-    </div>
+{% if request.user.is_staff %}
+    {% for college, codes in object_list %}
 
-    <br/>
-    <div>
-      <h2 style="color: red">We are currently building our Editorial College</h2>
-      <h3 style="color: red">We welcome your nominations for Editorial Fellows in all fields of Physics</h3>
+        <div class="row">
+            <div class="col-12">
+                <div class="panel">
+                  <h2 id="editorial_college_{{ college|lower }}">Editorial College ({{ college }})</h2>
+                </div>
+            </div>
+        </div>
+
+        {% if codes %}
+        <div class="row">
+            <div class="col-12">
+                <a href="javascript:;" class="d-block mb-1" data-toggle="toggle-show" data-target="#specializations-{{college|lower}}">Show all specialization codes</a>
+                <div id="specializations-{{college|lower}}" class="all-specializations" style="border: 1px solid; display: none;">
+                    {% for code in codes %}
+                        <div class="specialization" data-specialization="{{code.0|lower}}">{{code.0}} - {{code.1}}</div>
+                    {% endfor %}
+                </div>
+            </div>
+        </div>
+        {% endif %}
+
+        <div class="row search-contributors" data-contributors="{{ college|lower }}">
+            {% for fellowship in college.current_fellows|reorder_list_three %}
+                <div class="col-md-4 contributor-col">
+                    <div class="contributor">
+                        {% include 'scipost/_contributor_short.html' with contributor=fellowship.contributor %}
+                    </div>
+                </div>
+            {% endfor %}
+        </div>
+
+    {% endfor %}
+{% else %}
+    <div class="row">
+        <div class="col-12">
+              <h2 class="highlight" id="editorial_college_physics">Editorial College (Physics)</h2>
+        </div>
     </div>
+
+      <div class="row">
+        <div class="col-md-4">
+          <ul>
+    	<li>Prof. <a href="https://www.uni-tuebingen.de/en/faculties/faculty-of-science/departments/physics/institutes/institute-for-theoretical-physics/research-groups/andergassen-group.html">Sabine Andergassen</a><br/>(Tübingen)</li>
+    	<li>Prof. <a href="http://www.physik.uni-wuerzburg.de/~assaad/">Fakher Assaad</a><br/>(Würzbrug)</li>
+    	<li>Dr <a href="http://www.attaccalite.com">Claudio Attaccalite</a><br/>(Marseille)</li>
+    	<li>Prof. <a href="https://denis114.wordpress.com">Denis Bartolo</a><br/>(ENS Lyon)</li>
+    	<li>Prof. <a href="http://www.physik.unizh.ch/~lbaudis/index.html">Laura Baudis</a><br/>(Zurich)</li>
+    	<li>Prof. <a href="http://www.lorentz.leidenuniv.nl/beenakker/">Carlo Beenakker</a><br/>(Leiden)</li>
+    	<li>Prof. <a href="https://www.coulomb.univ-montp2.fr/perso/ludovic.berthier/">Ludovic Berthier</a><br/>(Montpellier)</li>
+    	<li>Prof. <a href="http://ipht.cea.fr/Pisp/giulio.biroli/index_en.php">Giulio Biroli</a><br/>(CEA Saclay)</li>
+    	<li>Prof. <a href="http://www.en.physik.uni-muenchen.de/personen/professoren/bloch/index.html">Immanuel Bloch</a><br/>(LMU Munich)</li>
+    	<li>Prof. <a href="https://staff.fnwi.uva.nl/j.deboer/">Jan de Boer</a><br/>(U. van Amsterdam)</li>
+    	<li>Prof. <a href="http://www.uva.nl/en/about-the-uva/organisation/staff-members/content/b/o/d.bonn/d.bonn.html">Daniel Bonn</a><br/>(U. van Amsterdam)</li>
+    	<li>Prof. <a href="http://www.statphys.sissa.it/wordpress/?page_id=1731">Pasquale Calabrese</a><br/>(SISSA)</li>
+    	<li>Prof. <a href="http://personalpages.to.infn.it/~caselle/index_en.html">Michele Caselle</a><br/>(Torino)</li>
+    	<li>Prof. <a href="http://www.saha.ac.in/cmp/bikask.chakrabarti/bikas.html">Bikas Chakrabarti</a><br/>(Kolkata)</li>
+    	<li>Prof. <a href="http://www.tcm.phy.cam.ac.uk/~nrc25/">Nigel Cooper</a><br/>(Cambridge)</li>
+          </ul>
+        </div>
+        <div class="col-md-4">
+          <ul>
+    	<li>Prof. <a href="http://physics.cornell.edu/csaba-csaki">Csaba Csaki</a><br/>(Cornell)</li>
+    	<li>Prof. <a href="http://theory.tifr.res.in/~kedar/">Kedar Damle</a><br/>(TIFR Mumbai)</li>
+    	<li>Prof. <a href="http://researchers.uq.edu.au/researcher/1134">Matthew Davis</a><br/>(U. of Queensland)</li>
+    	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/FabianEssler/">Fabian Essler</a><br/>(U. of Oxford)</li>
+    	<li>Prof. <a href="http://www.pd.infn.it/~feruglio/">Ferruccio Feruglio</a><br/>(Padova, INFN)</li>
+    	<li>Prof. <a href="http://www.ms.unimelb.edu.au/~jdgier@unimelb/">Jan de Gier</a><br/>(U. of Melbourne)</li>
+    	<li>Prof. <a href="http://www.desy.de/about_desy/leading_scientists/beate_heinemann/index_eng.html">Beate Heinemann</a><br/>(DESY; Freiburg)</li>
+    	<li>Prof. <a href="http://katzgraber.org">Helmut Katzgraber</a><br/>(Texas A&amp;M)</li>
+    	<li>Prof. <a href="https://web.physik.rwth-aachen.de/~mkraemer/">Michael Kr&auml;mer</a><br/>(RWTH Aachen)</li>
+    	<li>Prof. <a href="https://www.pmmh.espci.fr/~jorge/">Jorge Kurchan</a><br/>(<a href="https://www.pmmh.espci.fr/?-Home-">PMMH</a> Paris, CNRS)</li>
+    	<li>Prof. <a href="https://vivo.brown.edu/display/glandsbe">Greg Landsberg</a><br/>(Brown Univ.)</li>
+    	<li>Prof. <a href="https://www.mpg.de/6812374/chem_physik_fester_stoffe_mackenzie">Andrew P. MacKenzie</a><br/>(MPICPS Dresden, St-Andrews)</li>
+    	<li>Prof. <a href="http://www.ens-lyon.fr/PHYSIQUE/presentation/annuaire/maillet-jean-michel">Jean Michel Maillet</a><br/>(ENS Lyon)</li>
+    	<li>Prof. <a href="https://www.mpg.de/343435/physik_komplexer_systeme_wissM28">Roderich Moessner</a><br/>(MPIPKS Dresden)</li>
+    	<li>Prof. <a href="https://www.uibk.ac.at/exphys/ultracold/people/christoph.naegerl/">Hanns-Christoph N&auml;gerl</a><br/>(Innsbruck)</li>
+    	<li>Prof. <a href="http://www.physics.miami.edu/~nepomechie/">Rafael Nepomechie</a><br/>(U. of Miami)</li>
+          </ul>
+        </div>
+        <div class="col-md-4">
+          <ul>
+    	<li>Prof. <a href="https://staff.fnwi.uva.nl/b.nienhuis/">Bernard Nienhuis</a><br/>(U. van Amsterdam)</li>
+    	<!--<li>Prof. <a href="http://www.kip.uni-heidelberg.de/people/index.php?num=552">Markus Oberthaler</a><br/>(U. Heidelberg)</li>-->
+    	<li>Prof. <a href="http://www.lpthe.jussieu.fr/~pioline/">Boris Pioline</a><br/>(LPTHE Jussieu)</li>
+    	<li>Prof. <a href="https://www.uu.nl/staff/RHHGvanRoij/0">René van Roij</a><br/>(Utrecht)</li>
+    	<li>Prof. <a href="http://www.thp.uni-koeln.de/rosch">Achim Rosch</a><br/>(U. of Cologne)</li>
+    	<li>Prof. <a href="http://saleur.sandvox.net">Hubert Saleur</a><br/>(CEA Saclay/USC)</li>
+    	<li>Prof. <a href="http://www.phy.ohiou.edu/people/faculty/sandler.html">Nancy Sandler</a><br/>(Ohio)</li>
+    	<li>Dr. <a href="http://www.sussex.ac.uk/profiles/320359">Veronica Sanz</a><br/>(Sussex)</li>
+    	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/SubirSarkar/">Subir Sarkar</a><br/>(Oxford; Niels Bohr Institute)</li>
+    	<li>Prof. <a href="https://staff.fnwi.uva.nl/c.j.m.schoutens/">Kareljan Schoutens</a><br/>(U. van Amsterdam)</li>
+    	<li>Dr <a href="http://www.phys.ens.fr/~guilhem/">Guilhem Semerjian</a><br/>(ENS Paris)</li>
+    	<li>Prof. <a href="http://www-thphys.physics.ox.ac.uk/people/SteveSimon/">Steve Simon</a><br/>(U. of Oxford)</li>
+    	<li>Prof. <a href="http://bec.science.unitn.it/infm-bec/people/stringari.html">Sandro Stringari</a><br/>(Trento)</li>
+    	<li>Prof. <a href="http://www.damtp.cam.ac.uk/user/tong/">David Tong</a><br/>(Cambridge)</li>
+    	<li>Prof. <a href="http://www.physique.usherbrooke.ca/pages/en/node/3412">Andr&eacute;-Marie Tremblay</a><br/>(Sherbrooke)</li>
+    	<li>Prof. <a href="http://trivediresearch.org.ohio-state.edu">Nandini Trivedi</a><br/>(Ohio State U.)</li>
+    	<li>Prof. <a href="http://vergassolalab.ucsd.edu">Massimo Vergassola</a><br/>(UC Sand Diego)</li>
+          </ul>
+        </div>
   </div>
+{% endif %}
 
-</section>
+<br/>
+<div class="row">
+    <div class="col-12">
+        <h2 style="color: red">We are currently building our Editorial College</h2>
+        <h3 style="color: red">We welcome your nominations for Editorial Fellows in all fields of Physics</h3>
+    </div>
+</div>
 
+{% endblock content %}
 
-{% endblock bodysup %}
+{% block footer_script %}
+{{block.super}}
+    {% render_bundle 'tooltip' 'js' %}
+    <script src="{% static 'scipost/about.js' %}"></script>
+{% endblock %}
diff --git a/scipost/templates/scipost/add_team_member.html b/scipost/templates/scipost/add_team_member.html
deleted file mode 100644
index a8a592cc75873ed4bb3ea444d03660988266219f..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/add_team_member.html
+++ /dev/null
@@ -1,40 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: add team member{% endblock pagetitle %}
-
-{% block bodysup %}
-
-<section>
-  <h1>Add Members to Team</h1>
-  <ul>
-    {{ team.header_as_li }}
-  </ul>
-
-  {% if contributors_found %}
-    <h3>Identified as contributor:</h3>
-    <table>
-      {% for contributor in contributors_found %}
-        <tr>
-          <td>{{ contributor.user.first_name }} {{ contributor.user.last_name }}</td>
-          <td>&nbsp;</td>
-          <td><a href="{% url 'scipost:add_team_member' team_id=team.id contributor_id=contributor.id %}">Add to the Team</a></td>
-        </tr>
-      {% endfor %}
-    </table>
-  {% elif add_team_member_form.has_changed %}
-    <p>No Contributor with this last name could be identified.</p>
-  {% else %}
-    <p>Add a member to the Team:</p>
-    <form action="{% url 'scipost:add_team_member' team_id=team.id %}" method="post">
-      {% csrf_token %}
-      <table>
-        {{ add_team_member_form.as_table }}
-      </table>
-      <input type="submit" value="Search" />
-    </form>
-  {% endif %}
-
-
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/create_graph.html b/scipost/templates/scipost/create_graph.html
deleted file mode 100644
index e3c4bc54d4127179a5af4f5ff3e6a2da7f8711a6..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/create_graph.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: create graph{% endblock pagetitle %}
-
-{% block bodysup %}
-
-<section>
-  {% if graphcreated %}
-    <p>{{ message }}</p>
-  {% else %}
-  <h1>Create a new Graph</h1>
-  <form action="{% url 'scipost:create_graph' %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ create_graph_form.as_table }}
-    </table>
-    <input type="submit" value="Create Graph" />
-  </form>
-  {% endif %}
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/create_list.html b/scipost/templates/scipost/create_list.html
deleted file mode 100644
index 68a59e631271c4f617cfca562dfa01fa1dae786d..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/create_list.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: create list{% endblock pagetitle %}
-
-{% block bodysup %}
-
-<section>
-  {% if listcreated %}
-  <p>{{ message }}</p>
-  {% else %}
-  <h1>Create a new List</h1>
-  <form action="{% url 'scipost:create_list' %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ create_list_form.as_table }}
-    </table>
-    <input type="submit" value="Create List" />
-  </form>
-  {% endif %}
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/create_team.html b/scipost/templates/scipost/create_team.html
deleted file mode 100644
index 97559b0057663c046b9971c85c643e2090f23889..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/create_team.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: create team{% endblock pagetitle %}
-
-{% block bodysup %}
-
-<section>
-  {% if teamcreated %}
-  <p>{{ message }}</p>
-
-  <form action="{% url 'scipost:add_team_member' team_id=team.id %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ add_team_member_form.as_table }}
-    </table>
-    <input type="submit" value="Search" />
-  </form>
-  {% else %}
-  <h1>Create a new collaborative Team</h1>
-  <form action="{% url 'scipost:create_team' %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ create_team_form.as_table }}
-    </table>
-    <input type="submit" value="Create Team" />
-  </form>
-  {% endif %}
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/edit_graph_node.html b/scipost/templates/scipost/edit_graph_node.html
deleted file mode 100644
index 09e9db0715bcd8aa10e8a0d945860607fd3d1846..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/edit_graph_node.html
+++ /dev/null
@@ -1,27 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: edit graph node{% endblock pagetitle %}
-
-{% block bodysup %}
-
-<section>
-  <h1>Edit Graph Node</h1>
-
-  {% if errormessage %}
-  <p>{{ errormessage }}</p>
-
-  {% else %}
-
-  <form action="{% url 'scipost:edit_graph_node' node_id=node.id %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ edit_node_form.as_table }}
-    </table>
-    <input type="submit" value="Submit" />
-  </form>
-
-  {% endif %}
-
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/graph.html b/scipost/templates/scipost/graph.html
deleted file mode 100644
index 19679c37de056cc2074777d62ed8810462f1b08b..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/graph.html
+++ /dev/null
@@ -1,263 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: graph{% endblock pagetitle %}
-
-{% block headsup %}
-
-<style>
-
-  .overlay {
-  fill: none;
-  pointer-events: all;
-  }
-
-.arc {
-  fill: none;
-  stroke: #666;
-  stroke-width: 1.5px;
-}
-
-circle {
-  fill: #ccc;
-  stroke: #333;
-  stroke-width: 1.5px;
-}
-
-text {
-  font: 12px sans-serif;
-  pointer-events: none;
-  text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
-}
-</style>
-
-{% endblock headsup %}
-
-{% block bodysup %}
-
-
-<script src="//d3js.org/d3.v3.min.js"></script>
-<script>
-
-$(document).ready(function(){
-
-$(".node_contents").hide();
-$(".delete_node").hide();
-
-$("#NodeForm").hide();
-$("#ArcForm").hide();
-$("#ManageTeamsForm").hide();
-
-$("#ManageTeamsFormButton").click(function(){
-$("#ManageTeamsForm").toggle();
-$("#NodeForm").hide();
-$("#ArcForm").hide();
-});
-
-$("#NodeFormButton").click(function(){
-$("#ManageTeamsForm").hide();
-$("#NodeForm").toggle();
-$("#ArcForm").hide();
-});
-
-$("#ArcFormButton").click(function(){
-$("#ManageTeamsForm").hide();
-$("#NodeForm").hide();
-$("#ArcForm").toggle();
-});
-});
-
-
-d3.json("{% url 'scipost:api_graph' graph_id=graph.id %}", function(error, json) {
-  if (error) return console.warn(error);
-
-var nodesjson = json['nodes'];
-var nodes = [];
-nodesjson.forEach(function(node) {
-  nodes[node.name] = node;
-  nodes[node.name].x = 300 + 100 * Math.random();
-  nodes[node.name].y = 150 + 100 * Math.random();
-});
-
-var arcsjson = json['arcs'];
-var arcs = [];
-arcsjson.forEach(function(arc) {
-  arcs[arc.id] = arc;
-  arcs[arc.id].source = nodes[arc.source];
-  arcs[arc.id].target = nodes[arc.target];
-  arcs[arc.id].length = arc.length;
-});
-
-function arclength(arc) {
-  return arc.length * 50;
-}
-
-var width = 600;
-var height = 300;
-
-var force = d3.layout.force()
-    .nodes(d3.values(nodes))
-//    .links(arcs)
-    .links(d3.values(arcs))
-    .size([width, height])
-    .friction(0.9)
-    .linkStrength(1)
-//    .linkDistance(80)
-    .linkDistance(arclength)
-    .charge(-40)
-    .gravity(0.1)
-    .theta(0.8)
-    .alpha(0.1)
-    .on("tick", tick)
-    .start();
-
-
-var svg = d3.select("#graphic").append("svg")
-    .attr("width", width)
-.attr("height", height)
-.append("g")
-.call(d3.behavior.zoom().on("zoom", zoom))
-.on("dblclick.zoom", null)
-//.on("mousedown.zoom", null)
-.append("g");
-
-svg.append("rect")
-.attr("class", "overlay")
-.attr("width", width)
-.attr("height", height);
-
-function zoom() {
-svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
-}
-
-svg.append("defs").append("marker")
-    .attr("id", "arrowhead")
-    .attr("viewBox", "0 -5 10 10")
-    .attr("refX", 15)
-    .attr("refY", -1.5)
-    .attr("markerWidth", 6)
-    .attr("markerHeight", 6)
-    .attr("orient", "auto")
-    .append("path")
-     .attr("d", "M0,-5L10,0L0,5");
-
-var path = svg.append("g").selectAll("path")
-    .data(force.links())
-  .enter().append("path")
-    .attr("class", "arc")
-    .attr("marker-end", "url(#arrowhead)");
-
-var circle = svg.append("g").selectAll("circle")
-    .data(force.nodes())
-  .enter().append("circle")
-    .attr("r", 6)
-    .attr("id", function(d) { return d.id; })
-.call(force.drag);
-
-
-circle.on("click", function(){
-  d3.selectAll("circle").style("fill", "#ccc");
-  d3.select(this).style("fill", "blue");
-  $(".node_contents").hide();
-  $(".delete_node").hide();
-  $(".node_id" + $(this).attr("id")).show();
-});
-
-var text = svg.append("g").selectAll("text")
-    .data(force.nodes())
-  .enter().append("text")
-    .attr("x", 8)
-    .attr("y", ".31em")
-    .text(function(d) { return d.name; });
-
-// Use elliptical arc path segments to doubly-encode directionality.
-function tick() {
-  path.attr("d", linkArc);
-  circle.attr("transform", transform);
-  text.attr("transform", transform);
-}
-
-function linkArc(d) {
-  var dx = d.target.x - d.source.x,
-      dy = d.target.y - d.source.y,
-      dr = Math.sqrt(dx * dx + dy * dy);
-  return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
-}
-
-function transform(d) {
-  return "translate(" + d.x + "," + d.y + ")";
-}
-
-
-});
-
-
-</script>
-
-
-
-<section>
-  <h1>Graph</h1>
-  {{ graph }}
-  {% if graph.private %}
-  <h3>Teams with access:</h3>
-  <ul>
-    {% for team in graph.teams_with_access.all %}
-    {{ team.header_as_li }}
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-
-  {% load guardian_tags %}
-  {% get_obj_perms request.user for graph as "graph_perms" %}
-  {% if "change_graph" in graph_perms %}
-
-  <div class="row">
-    <div class="col-2">
-      {% if graph.private %}
-      <button class="GraphButton" id="ManageTeamsFormButton"><h1>Manage Team(s)</h1></button>
-      <form action="{% url 'scipost:graph' graph_id=graph.id %}" method="post" id="ManageTeamsForm">
-	{% csrf_token %}
-	{{ attach_teams_form }}
-	<input type="submit" value="Submit" />
-      </form>
-      {% endif %}
-      <button class="GraphButton" id="NodeFormButton"><h1>Add a Node</h1></button>
-      <form action="{% url 'scipost:graph' graph_id=graph.id %}" method="post" id="NodeForm">
-	{% csrf_token %}
-	<table>
-	  {{ create_node_form.as_table }}
-	</table>
-	<input type="submit" value="Create Node" />
-      </form>
-      <button class="GraphButton" id="ArcFormButton"><h1>Add an Arc</h1></button>
-      <form action="{% url 'scipost:graph' graph_id=graph.id %}" method="post" id="ArcForm">
-	{% csrf_token %}
-	<table>
-	  {{ create_arc_form.as_table }}
-	</table>
-	<input type="submit" value="Create Arc" />
-      </form>
-    </div>
-    <div class="col-10">
-      <div id="graphic"></div>
-    </div>
-  </div>
-  <hr class="hr6"/>
-  <br/>
-
-  {% endif %}
-
-  {{ graph.contents }}
-
-
-  {% for node in nodes %}
-  {{ node.contents }}
-  <a href="{% url 'scipost:edit_graph_node' node_id=node.id %}" class="node_contents node_id{{ node.id }}" style="margin: 10px;">Edit this Node's contents</a>
-  <a href="{% url 'scipost:delete_graph_node' node_id=node.id %}" class="delete_node node_id{{ node.id }}" style="color: red; margin: 10px;">Delete this Node</a>
-  {% endfor %}
-
-
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html
index 13a32d48dfa43b1cd37fb8e0d6af8bb5c5fa36cc..2b03326f8a296976e7827f58156adc9d4c42cc8a 100644
--- a/scipost/templates/scipost/index.html
+++ b/scipost/templates/scipost/index.html
@@ -8,13 +8,18 @@
     <div class="row">
         {% if latest_newsitems %}
         <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
-            <div class="panel">
-                <h1><a href="{% url 'news:news' %}">News</a><a style="float: right;" href="{% url 'scipost:feeds' %}"><img src="{% static 'scipost/images/feed-icon-14x14.png' %}" alt="Feed logo" width="14"></a></h1>
-                <p>Latest news and announcements.</p>
-                {# <hr class="hr6"/>#}
-                <ul class="NewsItemsList">
+            <div class="card card-grey">
+                <div class="card-block">
+                    <h1 class="card-title mb-0"><a href="{% url 'news:news' %}">News</a><a style="float: right;" href="{% url 'scipost:feeds' %}"><img src="{% static 'scipost/images/feed-icon-14x14.png' %}" alt="Feed logo" width="14"></a></h1>
+                    <h4 class="card-subtitle mb-0 pb-0 text-muted">Latest news and announcements.</h4>
+                </div>
+                <ul class="list-group list-group-flush">
                 {% for item in latest_newsitems %}
-                    <li>{{ item.descriptor_small }}</li>
+                    <li class="list-group-item">
+                        <div class="card-block">
+                            {{ item.descriptor_small }}
+                        </div>
+                    </li>
                 {% endfor %}
                 </ul>
             </div>
@@ -22,101 +27,112 @@
         {% endif %}
 
         <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
-            <div class="panel">
-                <h1><a href="{% url 'scipost:about' %}">About SciPost</a></h1>
-                <p>SciPost is a complete scientific publication portal managed by active professional scientists.</p>
-                <p>It is purely online-based and offers openly, globally and perpetually accessible science.</p>
-                <h3><a href="{% url 'scipost:about' %}#advisory_board">Advisory Board</a></h3>
-                <h3><a href="{% url 'scipost:call' %}">A call for openness</a></h3>
-                <h3><a href="{% url 'scipost:quick_tour' %}">Quick Tour</a></h3>
-                <h3><a href="{% url 'scipost:FAQ' %}">Frequently asked questions</a></h3>
-                <h3><a href="{% url 'scipost:about' %}">Read more</a></h3>
-                <h4><em>In the press:</em></h4>
-                <ul>
-                    <li><a href="{% static 'scipost/press/SciPost_in_FOM_expres_mei_2016.pdf' %}">FOM expres 5/2016</a> (<a href="{% static 'scipost/press/SciPost_in_FOM_expres_mei_2016_eng.pdf' %}">English vn</a>)</li>
-                    <li><a href="http://www.uva.nl/en/news-events/news/uva-news/content/news/2016/10/open-access-platform-scipost-launches-inaugural-edition-of-first-journal.html">Inaugural issue 10/2016</a></li>
-                </ul>
+            <div class="card card-grey">
+                <div class="card-block">
+                    <h1 class="card-title mb-0"><a href="{% url 'scipost:about' %}">About SciPost</a></h1>
+                    <h4 class="card-subtitle mb-2 text-muted">SciPost is a complete scientific publication portal managed by active professional scientists.</h4>
+                    <p>It is purely online-based and offers openly, globally and perpetually accessible science.</p>
+                    <h3><a href="{% url 'scipost:about' %}#advisory_board">Advisory Board</a></h3>
+                    <h3><a href="{% url 'scipost:call' %}">A call for openness</a></h3>
+                    <h3><a href="{% url 'scipost:quick_tour' %}">Quick Tour</a></h3>
+                    <h3><a href="{% url 'scipost:FAQ' %}">Frequently asked questions</a></h3>
+                    <h3><a href="{% url 'scipost:about' %}">Read more</a></h3>
+                    <h4><em>In the press:</em></h4>
+                    <ul>
+                        <li><a href="{% static 'scipost/press/SciPost_in_FOM_expres_mei_2016.pdf' %}">FOM expres 5/2016</a> (<a href="{% static 'scipost/press/SciPost_in_FOM_expres_mei_2016_eng.pdf' %}">English vn</a>)</li>
+                        <li><a href="http://www.uva.nl/en/news-events/news/uva-news/content/news/2016/10/open-access-platform-scipost-launches-inaugural-edition-of-first-journal.html">Inaugural issue 10/2016</a></li>
+                    </ul>
+                </div>
             </div>
         </div>
 
         {% if not user.is_authenticated %}
         <div class="col-md-6 col-lg-3">
-            <div class="panel">
-                <h1><a href="{% url 'scipost:register' %}">Register</a></h1>
-                <p>Professional scientists (PhD students and above) can become Contributors to SciPost by filling the
-                <a href="{% url 'scipost:register' %}">registration form</a>.</p>
-                <h4>Registered contributors can among others:</h4>
-                <ul>
-                    <li>Submit manuscripts to SciPost Journals</li>
-                    <li>Post reports and comments</li>
-                    <li>Express opinions on contributions</li>
-                    <li>Subscribe to feeds</li>
-                    <li>Use productivity tools</li>
-                </ul>
+            <div class="card card-grey">
+                <div class="card-block">
+                    <h1 class="card-title mb-0"><a href="{% url 'scipost:register' %}">Register</a></h1>
+                    <p>Professional scientists (PhD students and above) can become Contributors to SciPost by filling the
+                    <a href="{% url 'scipost:register' %}">registration form</a>.</p>
+                    <h4>Registered contributors can among others:</h4>
+                    <ul>
+                        <li>Submit manuscripts to SciPost Journals</li>
+                        <li>Post reports and comments</li>
+                        <li>Express opinions on contributions</li>
+                        <li>Subscribe to feeds</li>
+                        <li>Use productivity tools</li>
+                    </ul>
+                </div>
             </div>
         </div>
         {% endif %}
 
         <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
-            <div class="panel">
-              <h1><a href="{% url 'journals:journals' %}">Journals</a></h1>
-              <p>SciPost publishes a portfolio of high-quality two-way open access scientific journals.</p>
-              <p>All SciPost Journals implement the stringent <a href="/FAQ#pwr">peer-witnessed refereeing</a> principle.</p>
-              <p>All Journals are fully managed by professional scientists.</p>
-              <h3><a href="{% url 'scipost:about' %}#editorial_college_physics">Editorial College (Physics)</a></h3>
-              <h3><a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and refereeing procedure</a></h3>
+            <div class="card card-grey">
+                <div class="card-block">
+                  <h1 class="card-title mb-0"><a href="{% url 'journals:journals' %}">Journals</a></h1>
+                  <h4 class="card-subtitle mb-2 text-muted">SciPost publishes a portfolio of high-quality two-way open access scientific journals.</h4>
+                      <div class="SciPostPhysicsBanner">
+                    	<h2 class="py-0">
+                            <a class="pb-0" href="{% url 'journals:scipost_physics' %}">SciPost Physics</a>
+                        </h2>
+                      </div>
+                      {% if issue and publications %}
+                      <h4 class="card-text text-center">A selection from the {% if issue.is_current %}current{% else %}last{% endif %} issue:</h4>
+                      {% if issue %}
+                      <div class="text-muted text-center">Vol. {{ issue.in_volume.number }} issue {{ issue.number }} {{issue.period_as_string}}</div>
+                      {% endif %}
 
-              <br/>
+                      <ul class="list-group list-group-flush">
+                          {% for publication in publications %}
+                              <li class="list-group-item">
+                                  <div class="card-block">
+                                      {% include 'journals/_publication_single_short_summary.html' with publication=publication %}
+                                  </div>
+                              </li>
+                          {% endfor %}
+                      </ul>
+                      {% endif %}
+                      <p class="text-center mt-3" style="color: red;"><em>If you support and believe in our mission, <br/>be a pioneer and submit a manuscript!</em></p>
+                </div>
+            </div>
+        </div>
+    </div>
 
-              <p>View and comment on (login required) recent <a href="{% url 'submissions:submissions' %}">Submissions</a></p>
+    <div class="row">
+        <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
+            <div class="card card-grey">
+                <div class="card-block">
+                  <h1 class="card-title"><a href="{% url 'journals:journals' %}">Journals</a></h1>
+                  <p>All SciPost Journals implement the stringent <a href="/FAQ#pwr">peer-witnessed refereeing</a> principle.</p>
+                  <p>All Journals are fully managed by professional scientists.</p>
+                  <h3><a href="{% url 'scipost:about' %}#editorial_college_physics">Editorial College (Physics)</a></h3>
+                  <h3><a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and refereeing procedure</a></h3>
 
-              <br/>
+                  <br/>
 
-              <div class="SciPostPhysicsBanner">
-            	<h3><a href="{% url 'journals:scipost_physics' %}">SciPost Physics</a></h3>
+                  <p>View and comment on (login required) recent <a href="{% url 'submissions:submissions' %}">Submissions</a></p>
               </div>
-              <br/>
-              <p style="color: red;"><em>If you support and believe in our mission, <br/>be a pioneer and submit a manuscript!</em></p>
             </div>
         </div>
-    </div>
-
-    <div class="row">
-        <div class="col-md-6 col-lg-3">
-            <div class="panel">
-              <h1><a href="{% url 'commentaries:commentaries' %}">Commentaries</a></h1>
-              <p>SciPost Commentaries allow Contributors to comment and build on all existing literature.</p>
-              <br/>
-              {% comment %}
-                  <h3>Search SciPost Commentaries:</h3>
-                  <form action="{% url 'commentaries:commentaries' %}" method="post">
-                {% csrf_token %}
-                <table>
-                  {{ commentary_search_form.as_table }}
-                </table>
-                <input type="submit" name="Submit" />
-                  </form>
-              {% endcomment %}
-              <h3><a href="{% url 'commentaries:howto' %}">SciPost Commentaries how-to</a></h3>
-              <h3><a href="{% url 'commentaries:request_commentary' %}">Request a new Commentary Page</a></h3>
+        <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
+            <div class="card card-grey">
+                <div class="card-block">
+                  <h1 class="card-title"><a href="{% url 'commentaries:commentaries' %}">Commentaries</a></h1>
+                  <p>SciPost Commentaries allow Contributors to comment and build on all existing literature.</p>
+                  <br/>
+                  <h3><a href="{% url 'commentaries:howto' %}">SciPost Commentaries how-to</a></h3>
+                  <h3><a href="{% url 'commentaries:request_commentary' %}">Request a new Commentary Page</a></h3>
+              </div>
             </div>
         </div>
-        <div class="col-md-6 col-lg-3">
-            <div class="panel">
-              <h1><a href="{% url 'theses:theses' %}">Theses</a></h1>
-              <p>SciPost Theses allow Contributors to find Master's, Ph.D. and Habilitation theses relevant to their work.</p>
-              <br/>
-              {% comment %}
-                  <h3>Search SciPost Theses:</h3>
-                  <form action="{% url 'theses:theses' %}" method="post">
-                {% csrf_token %}
-                <table>
-                  {{ thesislink_search_form.as_table }}
-                </table>
-                <input type="submit" name="Submit" />
-                  </form>
-              {% endcomment %}
-              <h3><a href="{% url 'theses:request_thesislink' %}">Request a new Thesis Link</a></h3>
+        <div class="col-md-6 {% if user.is_authenticated %}col-lg-4{% else %}col-lg-3{% endif %}">
+            <div class="card card-grey">
+                <div class="card-block">
+                  <h1 class="card-title"><a href="{% url 'theses:theses' %}">Theses</a></h1>
+                  <p>SciPost Theses allow Contributors to find Master's, Ph.D. and Habilitation theses relevant to their work.</p>
+                  <br/>
+                  <h3><a href="{% url 'theses:request_thesislink' %}">Request a new Thesis Link</a></h3>
+              </div>
             </div>
         </div>
     </div>
@@ -124,7 +140,7 @@
 
 
 <div class="container">
-    <hr class="hr12">
+    <hr>
     <div class="row">
         <div class="col-md-6">
             <h1>SciPost is endorsed by</h1>
diff --git a/scipost/templates/scipost/list.html b/scipost/templates/scipost/list.html
deleted file mode 100644
index 2ef95a3ddec56248a25e0ace8db3bc053675d9aa..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/list.html
+++ /dev/null
@@ -1,103 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: list{% endblock pagetitle %}
-
-{% block headsup %}
-
-{% endblock headsup %}
-
-{% block bodysup %}
-
-
-<section>
-  <h1>List detail</h1>
-
-  {{ list.header }}
-  <br/>
-
-  {% load guardian_tags %}
-  {% get_obj_perms request.user for list as "list_perms" %}
-
-  {% include 'scipost/list_contents.html' %}
-
-  {% if "change_list" in list_perms %}
-
-  <hr class="hr6"/>
-  <h3>Add elements to this List</h3>
-  <form action="{% url 'scipost:list' list_id=list.id %}" method="post">
-    {% csrf_token %}
-    <table>
-      {{ search_for_list_form.as_table }}
-    </table>
-    <input type="submit" name="Submit">
-  </form>
-
-  {% if search_for_list_form.has_changed %}
-  <h1>Search results</h1>
-  {% endif %}
-
-  {% if commentary_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Commentaries:</h3>
-  <ul>
-    {% for commentary in commentary_search_list %}
-    {{ commentary.header_as_li }}
-    <form action="{% url 'scipost:list_add_element' list_id=list.id type='C' element_id=commentary.id %}" method="post">
-      {% csrf_token %}
-      <input class="AddItemToList" type="submit" value="Add"/>
-    </form>
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-  {% if submission_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Submissions:</h3>
-  <ul>
-    {% for submission in submission_search_list %}
-    {{ submission.header_as_li }}
-    <form action="{% url 'scipost:list_add_element' list_id=list.id type='S' element_id=submission.id %}" method="post">
-      {% csrf_token %}
-      <input class="AddItemToList" type="submit" value="Add"/>
-    </form>
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-  {% if thesislink_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Theses:</h3>
-  <ul>
-    {% for thesislink in thesislink_search_list %}
-
-        {% include 'theses/_thesislink_header_as_li.html' with thesislink=thesislink %}
-    <form action="{% url 'scipost:list_add_element' list_id=list.id type='T' element_id=thesislink.id %}" method="post">
-      {% csrf_token %}
-      <input class="AddItemToList" type="submit" value="Add"/>
-    </form>
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-  {% if comment_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Comments:</h3>
-  <ul>
-    {% for comment in comment_search_list %}
-    {{ comment.header_as_li }}
-    <form action="{% url 'scipost:list_add_element' list_id=list.id type='c' element_id=comment.id %}" method="post">
-      {% csrf_token %}
-      <input class="AddItemToList" type="submit" value="Add"/>
-    </form>
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-  {% endif %}
-</section>
-
-{% endblock bodysup %}
diff --git a/scipost/templates/scipost/list_contents.html b/scipost/templates/scipost/list_contents.html
deleted file mode 100644
index 8d4f05232cf3576286743794cfc6962bcbffb857..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/list_contents.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-{% if not "change_list" in list_perms %}
-
-  {{ list.contents }}
-
-{% else %}
-
-  <p>Description:
-  <p>{{ list.description }}</p>
-  </p>
-
-
-  <hr class="hr6"/>
-
-  {% if list.submissions.exists or list.commentaries.exists or list.thesislinks.exists or list.comments.exists %}
-
-    {% if list.submissions.exists %}
-    <p>Submissions:
-      <ul>
-        {% for sub in list.submissions.all %}
-          {{ sub.simple_header_as_li }}
-          {% if "change_list" in list_perms %}
-            <form action="{% url 'scipost:list_remove_element' list_id=list.id type='S' element_id=sub.id %}" method="post">
-              {% csrf_token %}
-              <input class="RemoveItemFromList" type="submit" value="Remove"/>
-            </form>
-          {% endif %}
-        {% endfor %}
-      </ul>
-    </p>
-    {% endif %}
-
-    {% if list.commentaries.exists %}
-      <p>Commentaries:
-        <ul>
-          {% for com in list.commentaries.all %}
-            {{ com.simple_header_as_li }}
-            {% if "change_list" in list_perms %}
-              <form action="{% url 'scipost:list_remove_element' list_id=list.id type='C' element_id=com.id %}" method="post">
-                {% csrf_token %}
-                <input class="RemoveItemFromList" type="submit" value="Remove"/>
-              </form>
-            {% endif %}
-          {% endfor %}
-        </ul>
-      </p>
-    {% endif %}
-
-    {% if list.thesislinks.exists %}
-      <p>Thesis links:
-        <ul>
-          {% for tl in list.thesislinks.all %}
-            {{ tl.simple_header_as_li }}
-            {% if "change_list" in list_perms %}
-              <form action="{% url 'scipost:list_remove_element' list_id=list.id type='T' element_id=tl.id %}" method="post">
-                {% csrf_token %}
-                <input class="RemoveItemFromList" type="submit" value="Remove"/>
-              </form>
-            {% endif %}
-          {% endfor %}
-        </ul>
-      </p>
-    {% endif %}
-
-    {% if list.comments.exists %}
-      <p>Comments:
-        <ul>
-          {% for comment in list.comments.all %}
-            {{ comment.simple_header_as_li }}
-            {% if "change_list" in list_perms %}
-              <form action="{% url 'scipost:list_remove_element' list_id=list.id type='c' element_id=comment.id %}" method="post">
-                {% csrf_token %}
-                <input class="RemoveItemFromList" type="submit" value="Remove"/>
-              </form>
-            {% endif %}
-          {% endfor %}
-        </ul>
-      </p>
-    {% endif %}
-
-  {% else %}
-    <br/><h3>This List is empty.</h3>
-  {% endif %}
-
-{% endif %}
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index 2506e6f5f49f8fddd69695fc4e08fee6b2a39079..8969b01a8ce301c6bddb8bac6625ce3f8a127410 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -62,24 +62,6 @@
     $(".TabSection").hide();
     $("#AuthorReplies").show();
    });
-   $("#ListsTab").click(function(){
-    $(".TabItem").attr("class", "TabItem inactive");
-    $("#ListsTab").attr("class", "TabItem active");
-    $(".TabSection").hide();
-    $("#Lists").show();
-   });
-   $("#TeamsTab").click(function(){
-    $(".TabItem").attr("class", "TabItem inactive");
-    $("#TeamsTab").attr("class", "TabItem active");
-    $(".TabSection").hide();
-    $("#Teams").show();
-   });
-   $("#GraphsTab").click(function(){
-    $(".TabItem").attr("class", "TabItem inactive");
-    $("#GraphsTab").attr("class", "TabItem active");
-    $(".TabSection").hide();
-    $("#Graphs").show();
-   });
   });
 </script>
 
@@ -110,7 +92,7 @@
     <div class="col-12">
         <ul class="personalTabMenu">
             <li><a class="TabItem" id="AccountTab">Account</a></li>
-            {% if 'Editorial Administrators' not in user_groups or 'Advisory Board' not in user_groups or 'Editorial College' not in user_groups or 'Vetting Editors' not in user_groups or 'Ambassadors' not in user_groups or 'Junior Ambassadors' not in user_groups %}
+            {% if 'Editorial Administrators' in user_groups or 'Advisory Board' in user_groups or 'Editorial College' in user_groups or 'Vetting Editors' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %}
                 <li><a class="TabItem" id="EdActionTab">Editorial Actions</a></li>
             {% endif %}
             <li><a class="TabItem" id="RefereeingTab">Refereeing</a></li>
@@ -119,15 +101,6 @@
             <li><a class="TabItem" id="ThesesTab">Theses</a></li>
             <li><a class="TabItem" id="CommentsTab">Comments</a></li>
             <li><a class="TabItem" id="AuthorRepliesTab">Author Replies</a></li>
-            {% if 'Testers' in user_groups %}
-                <li><a class="TabItem" id="ListsTab">Lists</a></li>
-            {% endif %}
-            {% if 'Testers' in user_groups %}
-                <li><a class="TabItem" id="TeamsTab">Teams</a></li>
-            {% endif %}
-            {% if 'Testers' in user_groups %}
-                <li><a class="TabItem" id="GraphsTab">Graphs</a></li>
-            {% endif %}
         </ul>
     </div>
 </div>
@@ -310,7 +283,7 @@
             {% if perms.scipost.can_attend_VGMs %}
             <h3>Virtual General Meetings</h3>
             <ul>
-                <li><a href="{% url 'scipost:VGMs' %}">List of VGMs</a></li>
+                <li><a href="{% url 'virtualmeetings:VGMs' %}">List of VGMs</a></li>
             </ul>
             {% endif %}
         </div>
@@ -521,108 +494,6 @@
 </div>
 {% endif %}
 
-<div class="TabSection" id="Lists">
-    <div class="row">
-        <div class="col-12">
-            <div class="panel">
-                <h2>Lists</h2>
-                <ul class="mb-0">
-                    <li><a href="{% url 'scipost:create_list' %}">Create a new List</a></li>
-                </ul>
-            </div>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-12">
-            {% if lists_owned %}
-                <h3>Lists you own:</h3>
-                <ul>
-                {% for list in lists_owned %}
-                {{ list.header_as_li }}
-                {% endfor %}
-                </ul>
-            {% endif %}
-            {% if lists %}
-                <h3>Lists to which you have access:</h3>
-                <ul>
-                    {% for list in lists %}
-                        {{ list.header_as_li }}
-                    {% endfor %}
-                </ul>
-            {% endif %}
-        </div>
-    </div>
-</div>
-
-<div class="TabSection" id="Teams">
-    <div class="row">
-        <div class="col-12">
-            <div class="panel">
-                <h2>Teams</h2>
-                <ul class="mb-0">
-                    <li><a href="{% url 'scipost:create_team' %}">Create a new Team</a></li>
-                </ul>
-            </div>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-12">
-            {% if teams_led %}
-            <h3>Teams you are leading:</h3>
-            <ul>
-                {% for team in teams_led %}
-                    {{ team.header_as_li }}
-                    <a href="{% url 'scipost:add_team_member' team_id=team.id %}">Add a member</a>
-                {% endfor %}
-            </ul>
-            {% endif %}
-            {% if teams %}
-                <h3>Teams of which you are a member:</h3>
-                <ul>
-                {% for team in teams %}
-                    {{ team.header_as_li }}
-                {% endfor %}
-                </ul>
-            {% endif %}
-        </div>
-    </div>
-</div>
-
-<div class="TabSection" id="Graphs">
-    <div class="row">
-        <div class="col-12">
-            <div class="panel">
-                <h2>Graphs</h2>
-                <ul class="mb-0">
-                  <li><a href="{% url 'scipost:create_graph' %}">Create a new Graph</a></li>
-                </ul>
-            </div>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-12">
-
-          {% if graphs_owned %}
-              <h3>Graphs you own:</h3>
-              <ul>
-                {% for graph in graphs_owned %}
-                {{ graph.header_as_li }}
-                {% endfor %}
-              </ul>
-          {% endif %}
-          {% if graphs_private %}
-              <h3>Private graphs which you can access:</h3>
-              <ul>
-                {% for graph in graphs_private %}
-                {{ graph.header_as_li }}
-                {% endfor %}
-              </ul>
-          {% endif %}
-
-        </div>
-    </div>
-</div>
-
 {% endif %}
 
 {% endblock content %}
diff --git a/scipost/templatetags/scipost_extras.py b/scipost/templatetags/scipost_extras.py
index 40863a5f2d987024c06caeb3c480f2477293a174..2a7074041510dbb5b0c63c4fe0a4d81804e14f7e 100644
--- a/scipost/templatetags/scipost_extras.py
+++ b/scipost/templatetags/scipost_extras.py
@@ -1,7 +1,8 @@
 from django import template
 from django.contrib.auth.models import Group
 
-from scipost.models import Contributor
+from ..constants import subject_areas_dict
+from ..models import Contributor
 
 register = template.Library()
 
@@ -28,3 +29,20 @@ def is_in_group(user, group_name):
 def associated_contributors(draft):
     return Contributor.objects.filter(
         user__last_name__icontains=draft.last_name)
+
+
+@register.filter(name='reorder_list_three')
+def reorder_list_three(ul):
+    return ul[::3] + ul[1::3] + ul[2::3]
+
+
+@register.filter(name='get_specialization_code')
+def get_specialization_code(code):
+    # Get the specialization code without the main subject identifier
+    return code.split(':')[1]
+
+
+@register.filter(name='get_specialization_display')
+def get_specialization_display(code):
+    # Due to the ArrayField construction, one is not able to use get_FOO_display in the template
+    return subject_areas_dict[code]
diff --git a/scipost/test_views.py b/scipost/test_views.py
new file mode 100644
index 0000000000000000000000000000000000000000..5b764927f0baa855389a30b22dafd751cfaa6a2a
--- /dev/null
+++ b/scipost/test_views.py
@@ -0,0 +1,154 @@
+from django.core.urlresolvers import reverse
+from django.contrib.auth.models import Group
+from django.test import TestCase, Client, tag
+
+from commentaries.factories import UnvettedCommentaryFactory, VettedCommentaryFactory,\
+                                   UnpublishedVettedCommentaryFactory
+from commentaries.forms import CommentarySearchForm
+from commentaries.models import Commentary
+
+from .factories import ContributorFactory,\
+                       EditorialCollegeFellowFactory, EditorialCollegeFactory
+from .models import EditorialCollege, EditorialCollegeFellow
+
+
+class RequestCommentaryTest(TestCase):
+    """Test cases for `request_commentary` view method"""
+    fixtures = ['permissions', 'groups', 'contributors']
+
+    def setUp(self):
+        self.view_url = reverse('commentaries:request_commentary')
+        self.login_url = reverse('scipost:login')
+        self.redirected_login_url = '%s?next=%s' % (self.login_url, self.view_url)
+
+    def test_get_requests(self):
+        """Test different GET requests on view"""
+        # Anoymous user should redirect to login page
+        request = self.client.get(self.view_url)
+        self.assertRedirects(request, self.redirected_login_url)
+
+        # Registered Contributor should get 200
+        self.client.login(username="Test", password="testpw")
+        request = self.client.get(self.view_url)
+        self.assertEquals(request.status_code, 200)
+
+    def test_post_invalid_forms(self):
+        """Test different kind of invalid RequestCommentaryForm submits"""
+        self.client.login(username="Test", password="testpw")
+        request = self.client.post(self.view_url)
+        self.assertEquals(request.status_code, 200)
+
+
+class VetCommentaryRequestsTest(TestCase):
+    """Test cases for `vet_commentary_requests` view method"""
+    fixtures = ['groups', 'permissions']
+
+    def setUp(self):
+        self.view_url = reverse('commentaries:vet_commentary_requests')
+        self.login_url = reverse('scipost:login')
+        self.password = 'test123'
+        self.contributor = ContributorFactory(user__password=self.password)
+
+    def set_required_permissions_and_login(self):
+        '''Set the required permissions to testuser to access vet_commentary_requests.'''
+        group = Group.objects.get(name="Vetting Editors")
+        self.contributor.user.groups.add(group)
+        self.client.login(username=self.contributor.user.username, password=self.password)
+
+    def test_user_permissions(self):
+        """Test view permission is restricted to Vetting Editors."""
+        # Anoymous user
+        response = self.client.get(self.view_url)
+        self.assertEquals(response.status_code, 403)
+
+        # Wrong permissions group
+        self.client.login(username=self.contributor.user.username, password=self.password)
+        response = self.client.get(self.view_url)
+        self.assertEquals(response.status_code, 403)
+
+        # Right permissions group
+        self.set_required_permissions_and_login()
+        response = self.client.get(self.view_url)
+        self.assertEquals(response.status_code, 200)
+
+    def test_get_valid_unvetted_commentaries(self):
+        """Test if valid commentaries are sent back to user, if exists."""
+        self.set_required_permissions_and_login()
+
+        # No Commentary exists!
+        response = self.client.get(self.view_url)
+        self.assertTrue('commentary_to_vet' in response.context)
+        self.assertEquals(response.context['commentary_to_vet'], None)
+
+        # Only vetted Commentaries exist!
+        VettedCommentaryFactory()
+        response = self.client.get(self.view_url)
+        self.assertEquals(response.context['commentary_to_vet'], None)
+
+        # Unvetted Commentaries do exist!
+        UnvettedCommentaryFactory()
+        response = self.client.get(self.view_url)
+        self.assertTrue(type(response.context['commentary_to_vet']) is Commentary)
+
+
+class BrowseCommentariesTest(TestCase):
+    """Test cases for `browse` view."""
+    fixtures = ['groups', 'permissions']
+
+    def setUp(self):
+        VettedCommentaryFactory(discipline='physics')
+        self.view_url = reverse('commentaries:browse', kwargs={
+            'discipline': 'physics',
+            'nrweeksback': '1'
+            })
+
+    def test_response_list(self):
+        '''Test if the browse view is passing commentaries to anoymous users.'''
+        response = self.client.get(self.view_url)
+        self.assertEquals(response.status_code, 200)
+
+        # The created vetted Commentary is found!
+        self.assertTrue(response.context['commentary_browse_list'].count() >= 1)
+        # The search form is passed trough the view...
+        self.assertTrue(type(response.context['form']) is CommentarySearchForm)
+
+
+class CommentaryDetailTest(TestCase):
+    fixtures = ['permissions', 'groups']
+
+    def setUp(self):
+        self.client = Client()
+        self.commentary = UnpublishedVettedCommentaryFactory()
+        self.target = reverse(
+            'commentaries:commentary',
+            kwargs={'arxiv_or_DOI_string': self.commentary.arxiv_or_DOI_string}
+        )
+
+    def test_status_code_200(self):
+        response = self.client.get(self.target)
+        self.assertEqual(response.status_code, 200)
+
+
+@tag('static-info', 'full')
+class AboutViewTest(TestCase):
+    def setUp(self):
+        self.client = Client()
+        self.target = reverse('scipost:about')
+
+        # Create College with 10 members
+        self.college = EditorialCollegeFactory()
+        EditorialCollegeFellowFactory.create_batch(10)
+
+    def test_status_code_200_including_members(self):
+        response = self.client.get(self.target)
+        self.assertEqual(response.status_code, 200)
+
+        # College exists in context
+        self.assertTrue('object_list' in response.context)
+        college = response.context['object_list'][0]
+        self.assertTrue(isinstance(college, EditorialCollege))
+
+        # Members exist in college
+        self.assertTrue(college.member.count() >= 10)
+        last_member = college.member.last()
+        self.assertTrue(isinstance(last_member, EditorialCollegeFellow))
diff --git a/scipost/urls.py b/scipost/urls.py
index 1ed0f1b6a55fccc4f199d49d5b767102ec62833b..a26c8e095200ce2820533e6bb50a0edd08632c92 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -17,7 +17,7 @@ urlpatterns = [
         name='acknowledgement'),
 
     ## Info
-    url(r'^about$', TemplateView.as_view(template_name='scipost/about.html'), name='about'),
+    url(r'^about$', views.AboutView.as_view(), name='about'),
     url(r'^call$', TemplateView.as_view(template_name='scipost/call.html'), name='call'),
     url(r'^foundation$', TemplateView.as_view(template_name='scipost/foundation.html'),
         name='foundation'),
@@ -171,27 +171,6 @@ urlpatterns = [
         views.Fellow_activity_overview,
         name='Fellow_activity_overview'),
 
-    ############################
-    # Virtual General Meetings #
-    ############################
-    url(r'^VGMs$', views.VGMs, name='VGMs'),
-    url(r'^VGM/(?P<VGM_id>[0-9]+)/$', views.VGM_detail, name='VGM_detail'),
-    url(r'^feedback/(?P<VGM_id>[0-9]+)$',
-        views.feedback, name='feedback'),
-    url(r'^add_remark_on_feedback/(?P<VGM_id>[0-9]+)/(?P<feedback_id>[0-9]+)$',
-        views.add_remark_on_feedback, name='add_remark_on_feedback'),
-    url(r'^nominate_Fellow/(?P<VGM_id>[0-9]+)$',
-        views.nominate_Fellow, name='nominate_Fellow'),
-    url(r'^add_remark_on_nomination/(?P<VGM_id>[0-9]+)/(?P<nomination_id>[0-9]+)$',
-        views.add_remark_on_nomination, name='add_remark_on_nomination'),
-    url(r'^vote_on_nomination/(?P<nomination_id>[0-9]+)/(?P<vote>[AND])$',
-        views.vote_on_nomination, name='vote_on_nomination'),
-    url(r'^put_motion_forward/(?P<VGM_id>[0-9]+)$',
-        views.put_motion_forward, name='put_motion_forward'),
-    url(r'^add_remark_on_motion/(?P<motion_id>[0-9]+)$',
-        views.add_remark_on_motion, name='add_remark_on_motion'),
-    url(r'^vote_on_motion/(?P<motion_id>[0-9]+)/(?P<vote>[AND])$',
-        views.vote_on_motion, name='vote_on_motion'),
 
     ################
     # Publications #
@@ -236,33 +215,6 @@ urlpatterns = [
         name='howto_production'),
 
 
-    #########
-    # Lists #
-    #########
-
-    url(r'^create_list$', views.create_list, name='create_list'),
-    url(r'^list/(?P<list_id>[0-9]+)$', views.list, name='list'),
-    url(r'^list_add_element/(?P<list_id>[0-9]+)/(?P<type>[SCTc])/(?P<element_id>[0-9]+)$',
-        views.list_add_element, name='list_add_element'),
-    url(r'^list_remove_element/(?P<list_id>[0-9]+)/(?P<type>[SCTc])/(?P<element_id>[0-9]+)$',
-        views.list_remove_element, name='list_remove_element'),
-
-    # Teams
-    url(r'^create_team$', views.create_team, name='create_team'),
-    url(r'^add_team_member/(?P<team_id>[0-9]+)$', views.add_team_member, name='add_team_member'),
-    url(r'^add_team_member/(?P<team_id>[0-9]+)/(?P<contributor_id>[0-9]+)$',
-        views.add_team_member, name='add_team_member'),
-
-    # Graphs
-    url(r'^create_graph$', views.create_graph, name='create_graph'),
-    url(r'^graph/(?P<graph_id>[0-9]+)$', views.graph, name='graph'),
-    url(r'^edit_graph_node/(?P<node_id>[0-9]+)$',
-        views.edit_graph_node, name='edit_graph_node'),
-    url(r'^delete_graph_node/(?P<node_id>[0-9]+)$',
-        views.delete_graph_node, name='delete_graph_node'),
-    url(r'^api/graph/(?P<graph_id>[0-9]+)$', views.api_graph, name='api_graph'),
-
-
     #############################
     # Supporting Partners Board #
     #############################
diff --git a/scipost/views.py b/scipost/views.py
index 295f62b52a930e54af13098bbcc530adb54e488e..16fe27bf23c0e91f4685aac54438831a17cf3e39 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -10,52 +10,43 @@ from django.contrib.auth import authenticate, login, logout
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import Group
 from django.contrib.auth.views import password_reset, password_reset_confirm
-from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist, PermissionDenied
+from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
 from django.core import mail
 from django.core.mail import EmailMessage, EmailMultiAlternatives
 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 from django.core.urlresolvers import reverse
 from django.db.models import Q
-from django.http import HttpResponseRedirect, JsonResponse
+from django.http import HttpResponseRedirect
 from django.shortcuts import redirect
 from django.template import Context, Template
 from django.utils.http import is_safe_url
+from django.views.generic.list import ListView
+
+from django.db.models import Prefetch
 
 from guardian.decorators import permission_required
-from guardian.decorators import permission_required_or_403
-from guardian.shortcuts import assign_perm
 
-from .constants import SCIPOST_SUBJECT_AREAS
+from .constants import SCIPOST_SUBJECT_AREAS, subject_areas_raw_dict
 from .models import Contributor, CitationNotification, UnavailabilityPeriod,\
-                    DraftInvitation, RegistrationInvitation, Remark,\
-                    List, Team, Graph, Node, Arc,\
+                    DraftInvitation, RegistrationInvitation,\
                     title_dict, SciPost_from_addresses_dict,\
-                    AuthorshipClaim, SupportingPartner, SPBMembershipAgreement
+                    AuthorshipClaim, SupportingPartner, SPBMembershipAgreement, EditorialCollege, EditorialCollegeFellowship
 from .forms import AuthenticationForm, DraftInvitationForm, UnavailabilityPeriodForm,\
                    RegistrationForm, RegistrationInvitationForm, AuthorshipClaimForm,\
                    ModifyPersonalMessageForm, SearchForm, VetRegistrationForm, reg_ref_dict,\
                    UpdatePersonalDataForm, UpdateUserDataForm, PasswordChangeForm,\
                    EmailGroupMembersForm, EmailParticularForm, SendPrecookedEmailForm,\
-                   CreateListForm, CreateTeamForm,\
-                   AddTeamMemberForm, CreateGraphForm,\
-                   ManageTeamsForm, CreateNodeForm, CreateArcForm,\
-                   SupportingPartnerForm, SPBMembershipForm,\
-                   FeedbackForm, MotionForm, NominationForm, RemarkForm
+                   SupportingPartnerForm, SPBMembershipForm
 from .utils import Utils, EMAIL_FOOTER, SCIPOST_SUMMARY_FOOTER, SCIPOST_SUMMARY_FOOTER_HTML
 
 from commentaries.models import Commentary
-from commentaries.forms import CommentarySearchForm
 from comments.models import Comment
-from journals.models import Publication
+from journals.models import Publication, Issue
 from news.models import NewsItem
 from submissions.models import SUBMISSION_STATUS_PUBLICLY_UNLISTED
 from submissions.models import Submission, EditorialAssignment
 from submissions.models import RefereeInvitation, Report, EICRecommendation
-from submissions.forms import SubmissionSearchForm
 from theses.models import ThesisLink
-from theses.forms import ThesisLinkSearchForm
-from virtualmeetings.models import VGM, Feedback, Nomination, Motion
-from virtualmeetings.constants import motion_categories_dict
 
 
 ##############
@@ -211,15 +202,13 @@ def search(request):
 
 def index(request):
     """ Main page """
-    latest_newsitems = NewsItem.objects.all().order_by('-date')[:2]
-    submission_search_form = SubmissionSearchForm(request.POST)
-    commentary_search_form = CommentarySearchForm(request.POST)
-    thesislink_search_form = ThesisLinkSearchForm(request.POST)
-    context = {'latest_newsitems': latest_newsitems,
-               'submission_search_form': submission_search_form,
-               'commentary_search_form': commentary_search_form,
-               'thesislink_search_form': thesislink_search_form,
-               }
+    context = {}
+    context['latest_newsitems'] = NewsItem.objects.all().order_by('-date')[:2]
+    context['issue'] = Issue.objects.get_last_filled_issue(in_volume__in_journal__name='SciPost Physics')
+    if context['issue']:
+        context['publications'] = context['issue'].publication_set.filter(doi_string__isnull=False
+                                    ).order_by('-publication_date')[:4]
+
     return render(request, 'scipost/index.html', context)
 
 
@@ -1022,13 +1011,7 @@ def personal_page(request):
     own_authorreplies = (Comment.objects
                          .filter(author=contributor, is_author_reply=True)
                          .order_by('-date_submitted'))
-    lists_owned = List.objects.filter(owner=contributor)
-    lists = List.objects.filter(teams_with_access__members__in=[contributor])
-    teams_led = Team.objects.select_related('leader__user').filter(leader=contributor)
-    teams = Team.objects.select_related('leader__user').filter(members__in=[contributor])
-    graphs_owned = Graph.objects.filter(owner=contributor)
-    graphs_private = Graph.objects.filter(Q(teams_with_access__leader=contributor)
-                                          | Q(teams_with_access__members__in=[contributor]))
+
     appellation = title_dict[contributor.title] + ' ' + contributor.user.last_name
     context = {
         'contributor': contributor,
@@ -1056,12 +1039,6 @@ def personal_page(request):
         'own_commentaries': own_commentaries,
         'own_thesislinks': own_thesislinks,
         'own_comments': own_comments, 'own_authorreplies': own_authorreplies,
-        'lists_owned': lists_owned,
-        'lists': lists,
-        'teams_led': teams_led,
-        'teams': teams,
-        'graphs_owned': graphs_owned,
-        'graphs_private': graphs_private,
     }
     return render(request, 'scipost/personal_page.html', context)
 
@@ -1485,501 +1462,6 @@ def Fellow_activity_overview(request, Fellow_id=None):
     return render(request, 'scipost/Fellow_activity_overview.html', context)
 
 
-@login_required
-@permission_required('scipost.can_attend_VGMs', return_403=True)
-def VGMs(request):
-    VGM_list = VGM.objects.all().order_by('start_date')
-    context = {'VGM_list': VGM_list}
-    return render(request, 'scipost/VGMs.html', context)
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', return_403=True)
-def VGM_detail(request, VGM_id):
-    VGM_instance = get_object_or_404(VGM, id=VGM_id)
-    VGM_information = Template(VGM_instance.information).render(Context({}))
-    feedback_received = Feedback.objects.filter(VGM=VGM_instance).order_by('date')
-    feedback_form = FeedbackForm()
-    current_Fellows = Contributor.objects.filter(
-        user__groups__name='Editorial College').order_by('user__last_name')
-    sent_inv_Fellows = RegistrationInvitation.objects.filter(
-        invitation_type='F', responded=False)
-    pending_inv_Fellows = sent_inv_Fellows.filter(declined=False).order_by('last_name')
-    declined_inv_Fellows = sent_inv_Fellows.filter(declined=True).order_by('last_name')
-    nomination_form = NominationForm()
-    nominations = Nomination.objects.filter(accepted=None).order_by('last_name')
-    motion_form = MotionForm()
-    remark_form = RemarkForm()
-    context = {
-        'VGM': VGM_instance,
-        'VGM_information': VGM_information,
-        'feedback_received': feedback_received,
-        'feedback_form': feedback_form,
-        'current_Fellows': current_Fellows,
-        'pending_inv_Fellows': pending_inv_Fellows,
-        'declined_inv_Fellows': declined_inv_Fellows,
-        'nominations': nominations,
-        'nomination_form': nomination_form,
-        'motion_categories_dict': motion_categories_dict,
-        'motion_form': motion_form,
-        'remark_form': remark_form,
-    }
-    return render(request, 'scipost/VGM_detail.html', context)
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', return_403=True)
-def feedback(request, VGM_id=None):
-    if request.method == 'POST':
-        feedback_form = FeedbackForm(request.POST)
-        if feedback_form.is_valid():
-            feedback = Feedback(by=request.user.contributor,
-                                date=timezone.now().date(),
-                                feedback=feedback_form.cleaned_data['feedback'],)
-            if VGM_id:
-                VGM_instance = get_object_or_404(VGM, id=VGM_id)
-                feedback.VGM = VGM_instance
-            feedback.save()
-            ack_message = 'Your feedback has been received.'
-            context = {'ack_message': ack_message}
-            if VGM_id:
-                context['followup_message'] = 'Return to the '
-                context['followup_link'] = reverse('scipost:VGM_detail',
-                                                   kwargs={'VGM_id': VGM_id})
-                context['followup_link_label'] = 'VGM page'
-            return render(request, 'scipost/acknowledgement.html', context)
-        else:
-            errormessage = 'The form was not filled properly.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', raise_exception=True)
-def add_remark_on_feedback(request, VGM_id, feedback_id):
-    # contributor = request.user.contributor
-    feedback = get_object_or_404(Feedback, pk=feedback_id)
-    if request.method == 'POST':
-        remark_form = RemarkForm(request.POST)
-        if remark_form.is_valid():
-            remark = Remark(contributor=request.user.contributor,
-                            feedback=feedback,
-                            date=timezone.now(),
-                            remark=remark_form.cleaned_data['remark'])
-            remark.save()
-            return HttpResponseRedirect('/VGM/' + str(VGM_id) +
-                                        '/#feedback_id' + str(feedback.id))
-        else:
-            errormessage = 'The form was invalidly filled.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', return_403=True)
-def nominate_Fellow(request, VGM_id):
-    VGM_instance = get_object_or_404(VGM, id=VGM_id)
-    if request.method == 'POST':
-        nomination_form = NominationForm(request.POST)
-        if nomination_form.is_valid():
-            nomination = Nomination(
-                VGM=VGM_instance,
-                by=request.user.contributor,
-                date=timezone.now().date(),
-                first_name=nomination_form.cleaned_data['first_name'],
-                last_name=nomination_form.cleaned_data['last_name'],
-                discipline=nomination_form.cleaned_data['discipline'],
-                expertises=nomination_form.cleaned_data['expertises'],
-                webpage=nomination_form.cleaned_data['webpage'],
-                voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7),
-            )
-            nomination.save()
-            nomination.update_votes(request.user.contributor.id, 'A')
-            ack_message = 'The nomination has been registered.'
-            context = {'ack_message': ack_message,
-                       'followup_message': 'Return to the ',
-                       'followup_link': reverse('scipost:VGM_detail', kwargs={'VGM_id': VGM_id}),
-                       'followup_link_label': 'VGM page'}
-            return render(request, 'scipost/acknowledgement.html', context)
-        else:
-            errormessage = 'The form was not filled properly.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', raise_exception=True)
-def add_remark_on_nomination(request, VGM_id, nomination_id):
-    # contributor = request.user.contributor
-    nomination = get_object_or_404(Nomination, pk=nomination_id)
-    if request.method == 'POST':
-        remark_form = RemarkForm(request.POST)
-        if remark_form.is_valid():
-            remark = Remark(contributor=request.user.contributor,
-                            nomination=nomination,
-                            date=timezone.now(),
-                            remark=remark_form.cleaned_data['remark'])
-            remark.save()
-            return HttpResponseRedirect('/VGM/' + str(VGM_id) +
-                                        '/#nomination_id' + str(nomination.id))
-        else:
-            errormessage = 'The form was invalidly filled.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', raise_exception=True)
-def vote_on_nomination(request, nomination_id, vote):
-    contributor = request.user.contributor
-    nomination = get_object_or_404(Nomination, pk=nomination_id)
-    if timezone.now() > nomination.voting_deadline:
-        errormessage = 'The voting deadline on this nomination has passed.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    nomination.update_votes(contributor.id, vote)
-    return HttpResponseRedirect('/VGM/' + str(nomination.VGM.id) +
-                                '/#nomination_id' + str(nomination.id))
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', return_403=True)
-def put_motion_forward(request, VGM_id):
-    VGM_instance = get_object_or_404(VGM, id=VGM_id)
-    if timezone.now().date() > VGM_instance.end_date:
-        errormessage = 'This VGM has ended. No new motions can be put forward.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    if request.method == 'POST':
-        motion_form = MotionForm(request.POST)
-        if motion_form.is_valid():
-            motion = Motion(
-                category=motion_form.cleaned_data['category'],
-                VGM=VGM_instance,
-                background=motion_form.cleaned_data['background'],
-                motion=motion_form.cleaned_data['motion'],
-                put_forward_by=request.user.contributor,
-                date=timezone.now().date(),
-                voting_deadline=VGM_instance.end_date + datetime.timedelta(days=7),
-            )
-            motion.save()
-            motion.update_votes(request.user.contributor.id, 'A')
-            ack_message = 'Your motion has been registered.'
-            context = {'ack_message': ack_message,
-                       'followup_message': 'Return to the ',
-                       'followup_link': reverse('scipost:VGM_detail', kwargs={'VGM_id': VGM_id}),
-                       'followup_link_label': 'VGM page'}
-            return render(request, 'scipost/acknowledgement.html', context)
-        else:
-            errormessage = 'The form was not filled properly.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', raise_exception=True)
-def add_remark_on_motion(request, motion_id):
-    # contributor = request.user.contributor
-    motion = get_object_or_404(Motion, pk=motion_id)
-    if request.method == 'POST':
-        remark_form = RemarkForm(request.POST)
-        if remark_form.is_valid():
-            remark = Remark(contributor=request.user.contributor,
-                            motion=motion,
-                            date=timezone.now(),
-                            remark=remark_form.cleaned_data['remark'])
-            remark.save()
-            return HttpResponseRedirect('/VGM/' + str(motion.VGM.id) +
-                                        '/#motion_id' + str(motion.id))
-        else:
-            errormessage = 'The form was invalidly filled.'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    else:
-        errormessage = 'This view can only be posted to.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-
-
-@login_required
-@permission_required('scipost.can_attend_VGMs', raise_exception=True)
-def vote_on_motion(request, motion_id, vote):
-    contributor = request.user.contributor
-    motion = get_object_or_404(Motion, pk=motion_id)
-    if timezone.now() > motion.voting_deadline:
-        errormessage = 'The voting deadline on this motion has passed.'
-        return render(request, 'scipost/error.html', {'errormessage': errormessage})
-    motion.update_votes(contributor.id, vote)
-    return HttpResponseRedirect('/VGM/' + str(motion.VGM.id) +
-                                '/#motion_id' + str(motion.id))
-
-
-#########
-# Lists #
-#########
-
-@permission_required('scipost.add_list', return_403=True)
-def create_list(request):
-    listcreated = False
-    message = None
-    if request.method == "POST":
-        create_list_form = CreateListForm(request.POST)
-        if create_list_form.is_valid():
-            newlist = List(owner=request.user.contributor,
-                           title=create_list_form.cleaned_data['title'],
-                           description=create_list_form.cleaned_data['description'],
-                           private=create_list_form.cleaned_data['private'],
-                           created=timezone.now())
-            newlist.save()
-            listcreated = True
-            assign_perm('scipost.change_list', request.user, newlist)
-            assign_perm('scipost.view_list', request.user, newlist)
-            assign_perm('scipost.delete_list', request.user, newlist)
-            message = 'List %s was successfully created.' % create_list_form.cleaned_data['title']
-    else:
-        create_list_form = CreateListForm()
-    context = {'create_list_form': create_list_form, 'listcreated': listcreated,
-               'message': message}
-    return render(request, 'scipost/create_list.html', context)
-
-
-@permission_required_or_403('scipost.view_list', (List, 'id', 'list_id'))
-def list(request, list_id):
-    list = get_object_or_404(List, pk=list_id)
-    context = {'list': list}
-    if request.method == "POST":
-        search_for_list_form = SearchForm(request.POST)
-        if search_for_list_form.is_valid():
-            context.update(documentsSearchResults(search_for_list_form.cleaned_data['query']))
-    else:
-        search_for_list_form = SearchForm()
-    context.update({'search_for_list_form': search_for_list_form})
-    return render(request, 'scipost/list.html', context)
-
-
-@permission_required_or_403('scipost.change_list', (List, 'id', 'list_id'))
-def list_add_element(request, list_id, type, element_id):
-    list = get_object_or_404(List, pk=list_id)
-    if type == 'C':
-        commentary = get_object_or_404(Commentary, pk=element_id)
-        list.commentaries.add(commentary)
-    elif type == 'S':
-        submission = get_object_or_404(Submission, pk=element_id)
-        list.submissions.add(submission)
-    elif type == 'T':
-        thesislink = get_object_or_404(ThesisLink, pk=element_id)
-        list.thesislinks.add(thesislink)
-    elif type == 'c':
-        comment = get_object_or_404(Comment, pk=element_id)
-        list.comments.add(comment)
-    return redirect(reverse('scipost:list', kwargs={'list_id': list_id}))
-
-
-@permission_required_or_403('scipost.change_list', (List, 'id', 'list_id'))
-def list_remove_element(request, list_id, type, element_id):
-    list = get_object_or_404(List, pk=list_id)
-    if type == 'C':
-        commentary = get_object_or_404(Commentary, pk=element_id)
-        list.commentaries.remove(commentary)
-    elif type == 'S':
-        submission = get_object_or_404(Submission, pk=element_id)
-        list.submissions.remove(submission)
-    elif type == 'T':
-        thesislink = get_object_or_404(ThesisLink, pk=element_id)
-        list.thesislinks.remove(thesislink)
-    elif type == 'c':
-        comment = get_object_or_404(Comment, pk=element_id)
-        list.comments.remove(comment)
-    return redirect(reverse('scipost:list', kwargs={'list_id': list_id}))
-
-
-#########
-# Teams #
-#########
-
-@permission_required('scipost.add_team', return_403=True)
-def create_team(request):
-    if request.method == "POST":
-        create_team_form = CreateTeamForm(request.POST)
-        if create_team_form.is_valid():
-            newteam = Team(leader=request.user.contributor,
-                           name=create_team_form.cleaned_data['name'],
-                           established=timezone.now())
-            newteam.save()
-            assign_perm('scipost.change_team', request.user, newteam)
-            assign_perm('scipost.view_team', request.user, newteam)
-            assign_perm('scipost.delete_team', request.user, newteam)
-            return redirect(reverse('scipost:add_team_member', kwargs={'team_id': newteam.id}))
-    else:
-        create_team_form = CreateTeamForm()
-    add_team_member_form = AddTeamMemberForm()
-    context = {'create_team_form': create_team_form,
-               'add_team_member_form': add_team_member_form}
-    return render(request, 'scipost/create_team.html', context)
-
-
-@permission_required_or_403('scipost.change_team', (Team, 'id', 'team_id'))
-def add_team_member(request, team_id, contributor_id=None):
-    team = get_object_or_404(Team, pk=team_id)
-    contributors_found = None
-    if contributor_id is not None:
-        contributor = get_object_or_404(Contributor, pk=contributor_id)
-        team.members.add(contributor)
-        team.save()
-        assign_perm('scipost.view_team', contributor.user, team)
-        return redirect(reverse('scipost:add_team_member', kwargs={'team_id': team_id}))
-    if request.method == "POST":
-        add_team_member_form = AddTeamMemberForm(request.POST)
-        if add_team_member_form.is_valid():
-            contributors_found = Contributor.objects.filter(
-                user__last_name__icontains=add_team_member_form.cleaned_data['last_name'])
-    else:
-        add_team_member_form = AddTeamMemberForm()
-    context = {'team': team, 'add_team_member_form': add_team_member_form,
-               'contributors_found': contributors_found}
-    return render(request, 'scipost/add_team_member.html', context)
-
-
-##########
-# Graphs #
-##########
-
-@permission_required('scipost.add_graph', return_403=True)
-def create_graph(request):
-    graphcreated = False
-    message = None
-    if request.method == "POST":
-        create_graph_form = CreateGraphForm(request.POST)
-        if create_graph_form.is_valid():
-            newgraph = Graph(owner=request.user.contributor,
-                             title=create_graph_form.cleaned_data['title'],
-                             description=create_graph_form.cleaned_data['description'],
-                             private=create_graph_form.cleaned_data['private'],
-                             created=timezone.now())
-            newgraph.save()
-            assign_perm('scipost.change_graph', request.user, newgraph)
-            assign_perm('scipost.view_graph', request.user, newgraph)
-            assign_perm('scipost.delete_graph', request.user, newgraph)
-            graphcreated = True
-            message = ('Graph ' + create_graph_form.cleaned_data['title']
-                       + ' was successfully created.')
-    else:
-        create_graph_form = CreateGraphForm()
-    context = {'create_graph_form': create_graph_form, 'graphcreated': graphcreated,
-               'message': message}
-    return render(request, 'scipost/create_graph.html', context)
-
-
-@permission_required_or_403('scipost.view_graph', (Graph, 'id', 'graph_id'))
-def graph(request, graph_id):
-    graph = get_object_or_404(Graph, pk=graph_id)
-    nodes = Node.objects.filter(graph=graph)
-    if request.method == "POST":
-        attach_teams_form = ManageTeamsForm(request.POST,
-                                            contributor=request.user.contributor,
-                                            initial={
-                                                'teams_with_access': graph.teams_with_access.all()}
-                                            )
-        create_node_form = CreateNodeForm(request.POST)
-        create_arc_form = CreateArcForm(request.POST, graph=graph)
-        if attach_teams_form.has_changed() and attach_teams_form.is_valid():
-            graph.teams_with_access = attach_teams_form.cleaned_data['teams_with_access']
-            graph.save()
-        elif create_node_form.has_changed() and create_node_form.is_valid():
-            newnode = Node(graph=graph,
-                           added_by=request.user.contributor,
-                           created=timezone.now(),
-                           name=create_node_form.cleaned_data['name'],
-                           description=create_node_form.cleaned_data['description'])
-            newnode.save()
-        elif create_arc_form.has_changed() and create_arc_form.is_valid():
-            sourcenode = create_arc_form.cleaned_data['source']
-            targetnode = create_arc_form.cleaned_data['target']
-            if sourcenode != targetnode:
-                newarc = Arc(graph=graph,
-                             added_by=request.user.contributor,
-                             created=timezone.now(),
-                             source=sourcenode,
-                             target=targetnode,
-                             length=create_arc_form.cleaned_data['length']
-                             )
-                newarc.save()
-    else:
-        attach_teams_form = ManageTeamsForm(contributor=request.user.contributor,
-                                            initial={
-                                                'teams_with_access': graph.teams_with_access.all()}
-                                            )
-        create_node_form = CreateNodeForm()
-        create_arc_form = CreateArcForm(graph=graph)
-    context = {'graph': graph, 'nodes': nodes,
-               'attach_teams_form': attach_teams_form,
-               'create_node_form': create_node_form,
-               'create_arc_form': create_arc_form}
-    return render(request, 'scipost/graph.html', context)
-
-
-def edit_graph_node(request, node_id):
-    node = get_object_or_404(Node, pk=node_id)
-    errormessage = ''
-    if not request.user.has_perm('scipost.change_graph', node.graph):
-        errormessage = 'You do not have permission to edit this graph.'
-    elif request.method == "POST":
-        edit_node_form = CreateNodeForm(request.POST, instance=node)
-        if edit_node_form.is_valid():
-            node.name = edit_node_form.cleaned_data['name']
-            node.description = edit_node_form.cleaned_data['description']
-            node.save()
-            create_node_form = CreateNodeForm()
-            create_arc_form = CreateArcForm(graph=node.graph)
-            context = {'create_node_form': create_node_form,
-                       'create_arc_form': create_arc_form}
-            return redirect(reverse('scipost:graph', kwargs={'graph_id': node.graph.id}), context)
-    else:
-        edit_node_form = CreateNodeForm(instance=node)
-    context = {'graph': graph, 'node': node, 'edit_node_form': edit_node_form,
-               'errormessage': errormessage}
-    return render(request, 'scipost/edit_graph_node.html', context)
-
-
-def delete_graph_node(request, node_id):
-    node = get_object_or_404(Node, pk=node_id)
-    if not request.user.has_perm('scipost.change_graph', node.graph):
-        raise PermissionDenied
-    else:
-        # Remove all the graph arcs
-        Arc.objects.filter(source=node).delete()
-        Arc.objects.filter(target=node).delete()
-        # Delete node itself
-        node.delete()
-    return redirect(reverse('scipost:graph', kwargs={'graph_id': node.graph.id}))
-
-
-@permission_required_or_403('scipost.view_graph', (Graph, 'id', 'graph_id'))
-def api_graph(request, graph_id):
-    """ Produce JSON data to plot graph """
-    graph = get_object_or_404(Graph, pk=graph_id)
-    nodes = Node.objects.filter(graph=graph)
-    arcs = Arc.objects.filter(graph=graph)
-    nodesjson = []
-    arcsjson = []
-
-    for node in nodes:
-        nodesjson.append({'name': node.name, 'id': node.id})
-
-    for arc in arcs:
-        arcsjson.append({'id': arc.id,
-                         'source': arc.source.name, 'source_id': arc.source.id,
-                         'target': arc.target.name, 'target_id': arc.target.id,
-                         'length': arc.length})
-    return JsonResponse({'nodes': nodesjson, 'arcs': arcsjson}, safe=False)
-
-
 #############################
 # Supporting Partners Board #
 #############################
@@ -2031,3 +1513,28 @@ def SPB_membership_request(request):
                'SP_form': SP_form,
                'membership_form': membership_form, }
     return render(request, 'scipost/SPB_membership_request.html', context)
+
+
+class AboutView(ListView):
+    model = EditorialCollege
+    template_name = 'scipost/about.html'
+    queryset = EditorialCollege.objects.prefetch_related(
+                Prefetch('fellowships',
+                         queryset=EditorialCollegeFellowship.objects.active().select_related(
+                            'contributor__user'),
+                         to_attr='current_fellows'))
+
+    def get_context_data(self, *args, **kwargs):
+        context = super().get_context_data(*args, **kwargs)
+        object_list = []
+        for college in context['object_list']:
+            try:
+                spec_list = subject_areas_raw_dict[str(college)]
+            except KeyError:
+                spec_list = None
+            object_list.append((
+                college,
+                spec_list,
+            ))
+        context['object_list'] = object_list
+        return context
diff --git a/submissions/migrations/0030_auto_20170313_1643.py b/submissions/migrations/0030_auto_20170313_1643.py
new file mode 100644
index 0000000000000000000000000000000000000000..efe09bb63ba9a8c5faada45bf663b180cd5b0b02
--- /dev/null
+++ b/submissions/migrations/0030_auto_20170313_1643.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-13 15:43
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0029_auto_20170131_1425'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='report',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reports', to='submissions.Submission'),
+        ),
+    ]
diff --git a/submissions/migrations/0031_merge_20170325_1028.py b/submissions/migrations/0031_merge_20170325_1028.py
new file mode 100644
index 0000000000000000000000000000000000000000..f693ca0305a2b96c0a26f2f159835c3a1df13259
--- /dev/null
+++ b/submissions/migrations/0031_merge_20170325_1028.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-25 09:28
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0030_auto_20170313_1646'),
+        ('submissions', '0030_auto_20170313_1643'),
+    ]
+
+    operations = [
+    ]
diff --git a/submissions/models.py b/submissions/models.py
index 7aea9adab2567057eb7c7753c025fa62f2e26c4b..f720ae1baa5310d8db70a8c3716bfd2768d3111f 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -2,6 +2,7 @@ import datetime
 
 from django.utils import timezone
 from django.db import models, transaction
+from django.db.models import Q
 from django.contrib.postgres.fields import JSONField
 from django.template import Template, Context
 
@@ -77,19 +78,6 @@ SUBMISSION_STATUS_VOTING_DEPRECATED = [
     'withdrawn',
 ]
 
-
-# SUBMISSION_ACTION_REQUIRED = (
-#     ('assign_EIC', 'Editor-in-charge to be assigned'),
-#     ('Fellow_accepts_or_refuse_assignment', 'Fellow must accept or refuse assignment'),
-#     ('EIC_runs_refereeing_round', 'Editor-in-charge to run refereeing round (inviting referees)'),
-#     ('EIC_closes_refereeing_round', 'Editor-in-charge to close refereeing round'),
-#     ('EIC_invites_author_response', 'Editor-in-charge invites authors to complete their replies'),
-#     ('EIC_formulates_editorial_recommendation',
-#      'Editor-in-charge to formulate editorial recommendation'),
-#     ('EC_ratification', 'Editorial College ratifies editorial recommendation'),
-#     ('Decision_to_authors', 'Editor-in-charge forwards decision to authors'),
-#     )
-
 SUBMISSION_TYPE = (
     ('Letter', 'Letter (broad-interest breakthrough results)'),
     ('Article', 'Article (in-depth reports on specialized research)'),
@@ -98,6 +86,16 @@ SUBMISSION_TYPE = (
 submission_type_dict = dict(SUBMISSION_TYPE)
 
 
+class SubmissionManager(models.Manager):
+    def get_pool(self, user):
+        return self.exclude(status__in=SUBMISSION_STATUS_OUT_OF_POOL)\
+                .exclude(is_current=False)\
+                .exclude(authors=user.contributor)\
+                .exclude(Q(author_list__icontains=user.last_name),
+                         ~Q(authors_false_claims=user.contributor))\
+                .order_by('-submission_date')
+
+
 class Submission(ArxivCallable, models.Model):
     # Main submission fields
     author_comments = models.TextField(blank=True, null=True)
@@ -147,6 +145,8 @@ class Submission(ArxivCallable, models.Model):
     submission_date = models.DateField(verbose_name='submission date', default=timezone.now)
     latest_activity = models.DateTimeField(default=timezone.now)
 
+    objects = SubmissionManager()
+
     class Meta:
         permissions = (
             ('can_take_editorial_actions', 'Can take editorial actions'),
@@ -321,6 +321,30 @@ class Submission(ArxivCallable, models.Model):
         template = Template(header)
         return template.render(context)
 
+    def count_accepted_invitations(self):
+        return self.refereeinvitation_set.filter(accepted=True).count()
+
+    def count_declined_invitations(self):
+        return self.refereeinvitation_set.filter(accepted=False).count()
+
+    def count_pending_invitations(self):
+        return self.refereeinvitation_set.filter(accepted=None).count()
+
+    def count_invited_reports(self):
+        return self.reports.filter(status=1, invited=True).count()
+
+    def count_contrib_reports(self):
+        return self.reports.filter(status=1, invited=False).count()
+
+    def count_obtained_reports(self):
+        return self.reports.filter(status=1, invited__isnull=False).count()
+
+    def count_refused_resports(self):
+        return self.reports.filter(status__lte=-1).count()
+
+    def count_awaiting_vetting(self):
+        return self.reports.filter(status=0).count()
+
     def refereeing_status_as_p(self):
         nr_ref_invited = RefereeInvitation.objects.filter(submission=self).count()
         nr_ref_accepted = RefereeInvitation.objects.filter(submission=self, accepted=True).count()
@@ -802,6 +826,13 @@ class EditorialCommunication(models.Model):
 # Editorial Recommendation #
 ############################
 
+class EICRecommendationManager(models.Manager):
+    def get_for_user_in_pool(self, user):
+        return self.exclude(submission__authors=user.contributor)\
+                .exclude(Q(submission__author_list__icontains=user.last_name),
+                         ~Q(submission__authors_false_claims=user.contributor))
+
+
 # From the Editor-in-charge of a Submission
 class EICRecommendation(models.Model):
     submission = models.ForeignKey(Submission, on_delete=models.CASCADE)
@@ -820,6 +851,8 @@ class EICRecommendation(models.Model):
     voted_abstain = models.ManyToManyField(Contributor, blank=True, related_name='voted_abstain')
     voting_deadline = models.DateTimeField('date submitted', default=timezone.now)
 
+    objects = EICRecommendationManager()
+
     def __str__(self):
         return (self.submission.title[:20] + ' by ' + self.submission.author_list[:30] +
                 ', ' + report_rec_dict[self.recommendation])
diff --git a/submissions/templates/submissions/_recommendation_fellow_content.html b/submissions/templates/submissions/_recommendation_fellow_content.html
new file mode 100644
index 0000000000000000000000000000000000000000..3ee1572de1ee79da41f0751b8a84edf9bf8e7e61
--- /dev/null
+++ b/submissions/templates/submissions/_recommendation_fellow_content.html
@@ -0,0 +1,15 @@
+<div class="card-block">
+    <h3 class="card-title text-blue">By {{recommendation.submission.editor_in_charge.get_title_display}} {{recommendation.submission.editor_in_charge.user.first_name}} {{recommendation.submission.editor_in_charge.user.last_name}}, formulated on {{recommendation.date_submitted}}</h3>
+
+    <h3 class="pb-0">Remarks for authors</h3>
+    <p class="pl-md-3">{{recommendation.remarks_for_authors}}</p>
+
+    <h3 class="pb-0">Requested changes</h3>
+    <p class="pl-md-3">{{recommendation.requested_changes}}</p>
+
+    <h3 class="pb-0">Remarks for Editorial College</h3>
+    <p class="pl-md-3">{{recommendation.remarks_for_editorial_college}}</p>
+
+    <h3 class="pb-0">Recommendation</h3>
+    <p class="pl-md-3 mb-0">{{recommendation.get_recommendation_display}}</p>
+</div>
diff --git a/submissions/templates/submissions/_submission_card_content.html b/submissions/templates/submissions/_submission_card_content.html
new file mode 100644
index 0000000000000000000000000000000000000000..324763720467f6f4fdfb49f023246eb5f6ee4679
--- /dev/null
+++ b/submissions/templates/submissions/_submission_card_content.html
@@ -0,0 +1,8 @@
+<div class="card-block">
+    <h3 class="card-title">
+        <a href="{% url 'submissions:submission' submission.arxiv_identifier_w_vn_nr %}">{{submission.title}}</a>
+    </h3>
+    <p class="card-text">by {{submission.author_list}}</p>
+    <p class="card-text text-muted">Version {{submission.arxiv_vn_nr}} ({% if submission.is_current %}current version{% else %}deprecated version {{submission.arxiv_vn_nr}}{% endif %})</p>
+    <p class="card-text text-muted">Submitted {{submission.submission_date}} to {{submission.get_submitted_to_journal_display}} - latest activity: {{submission.latest_activity}}</p>
+</div>
diff --git a/submissions/templates/submissions/_submission_card_fellow_content.html b/submissions/templates/submissions/_submission_card_fellow_content.html
new file mode 100644
index 0000000000000000000000000000000000000000..e75e6caf6aafae299b180123a9fb87817d074084
--- /dev/null
+++ b/submissions/templates/submissions/_submission_card_fellow_content.html
@@ -0,0 +1,19 @@
+<div class="card-block">
+    <h3 class="card-title">
+        <a href="{% url 'submissions:submission' submission.arxiv_identifier_w_vn_nr %}">{{submission.title}}</a>
+    </h3>
+    <p class="card-text">by {{submission.author_list}}</p>
+    <p class="card-text text-muted">Version {{submission.arxiv_vn_nr}} ({% if submission.is_current %}current version{% else %}deprecated version {{submission.arxiv_vn_nr}}{% endif %})</p>
+    <p class="card-text text-muted">Submitted {{submission.submission_date}} to {{submission.get_submitted_to_journal_display}} - latest activity: {{submission.latest_activity}}</p>
+
+    <!-- Fellow specific info -->
+    {% if submission.status == 'unassigned' %}
+        <p class="card-text text-danger">Status: {{ submission.get_status_display }}. You can volunteer to become Editor-in-charge by <a href="{% url 'submissions:volunteer_as_EIC' submission.arxiv_identifier_w_vn_nr %}">clicking here</a>.</p>
+    {% else %}
+        <p class="card-text">Editor-in-charge: <em>{{ submission.editor_in_charge }}</em></p>
+        <p class="card-text">Status: {{ submission.get_status_display }}</p>
+    {% endif %}
+
+    {% include 'submissions/_submission_refereeing_status.html' with submission=submission %}
+    {# {{submission.refereeing_status_as_p}}#}
+</div>
diff --git a/submissions/templates/submissions/_submission_refereeing_status.html b/submissions/templates/submissions/_submission_refereeing_status.html
new file mode 100644
index 0000000000000000000000000000000000000000..68736208cf500daa45206848b5e6ae54ae8019e9
--- /dev/null
+++ b/submissions/templates/submissions/_submission_refereeing_status.html
@@ -0,0 +1,4 @@
+<div class="card-block">
+    <p class="card-text">Nr referees invited: {{submission.refereeinvitation_set.count}} <span>[{{submission.count_accepted_invitations}} acccepted / {{submission.count_declined_invitations}} declined / {{submission.count_pending_invitations}} response pending]</span></p>
+    <p class="card-text">Nr reports obtained: {{submission.count_obtained_reports}} [{{submission.count_invited_reports}} invited / {{submission.count_contrib_reports}} contributed], nr refused: {{submission.count_refused_resports}}, nr awaiting vetting: {{submission.count_awaiting_vetting}}</p>
+</div>
diff --git a/submissions/templates/submissions/communication.html b/submissions/templates/submissions/communication.html
index 60ef4953b439375f877fa8503436fbfbf02e028b..55543c0c7385735c488eec54a203abbd1b28e34f 100644
--- a/submissions/templates/submissions/communication.html
+++ b/submissions/templates/submissions/communication.html
@@ -2,48 +2,56 @@
 
 {% block pagetitle %}: communication{% endblock pagetitle %}
 
-{% block headsup %}
-
 {% load scipost_extras %}
 
-{% endblock headsup %}
-
-{% block bodysup %}
-
-<section>
-  {% if errormessage %}
-  <p>{{ errormessage }}</p>
-  {% else %}
-  <div class="flex-greybox">
-    <h1>Send a Communication</h1>
-  </div>
-  {% if comtype == 'EtoA' %}
-  <p>to the submitting Author of Submission</p>
-  {% elif comtype == 'AtoE' or comtype == 'RtoE' or comtype == 'StoE' %}
-  <p>to the Editor-in-charge of Submission</p>
-  {% elif comtype == 'EtoR' %}
-  <p>to Referee of Submission</p>
-  {% elif comtype == 'EtoS' %}
-  <p>to SciPost Editorial Administrators</p>
-  {% endif %}
-  <ul>{{ submission.header_as_li }}</ul>
-
-  <br/>
-  {% if referee_id %}
-  <form action="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype=comtype referee_id=referee_id %}" method="post">
-    {% csrf_token %}
-    {{ form }}
-    <input type="submit" value="Send communication"/>
-  </form>
-  {% else %}
-  <form action="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype=comtype %}" method="post">
-    {% csrf_token %}
-    {{ form }}
-    <input type="submit" value="Send communication"/>
-  </form>
-  {% endif %}
-
-  {% endif %}
-</section>
-
-{% endblock bodysup %}
+{% load bootstrap %}
+
+{% block content %}
+
+{% if errormessage %}
+<div class="row">
+    <div class="col-12">
+        <p>{{ errormessage }}</p>
+    </div>
+</div>
+{% else %}
+<div class="row">
+  <div class="col-12">
+    <h1 class="highlight">Send a Communication</h1>
+      {% if comtype == 'EtoA' %}
+          <p>to the submitting Author of Submission</p>
+      {% elif comtype == 'AtoE' or comtype == 'RtoE' or comtype == 'StoE' %}
+          <h3>to the Editor-in-charge of Submission</h3>
+      {% elif comtype == 'EtoR' %}
+          <p>to Referee of Submission</p>
+      {% elif comtype == 'EtoS' %}
+          <p>to SciPost Editorial Administrators</p>
+      {% endif %}
+
+        <div class="card">
+            {% include 'submissions/_submission_card_content.html' with submission=submission %}
+        </div>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        {% if referee_id %}
+          <form action="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype=comtype referee_id=referee_id %}" method="post">
+            {% csrf_token %}
+            {{ form|bootstrap:'0,12' }}
+            <input class="btn btn-secondary" type="submit" value="Send communication"/>
+          </form>
+          {% else %}
+          <form action="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype=comtype %}" method="post">
+            {% csrf_token %}
+            {{ form|bootstrap:'0,12' }}
+            <input class="btn btn-secondary" type="submit" value="Send communication"/>
+          </form>
+          {% endif %}
+
+      {% endif %}
+    </div>
+</div>
+
+{% endblock content %}
diff --git a/submissions/templates/submissions/pool.html b/submissions/templates/submissions/pool.html
index 6f7db2515e4d59490572adf53ae5429908a88898..b0a5e39d7226ed24706fb783a3480814a559bc27 100644
--- a/submissions/templates/submissions/pool.html
+++ b/submissions/templates/submissions/pool.html
@@ -2,7 +2,12 @@
 
 {% block pagetitle %}: Submissions Pool{% endblock pagetitle %}
 
-{% block bodysup %}
+{% load bootstrap %}
+{% load guardian_tags %}
+{% load scipost_extras %}
+{% load submissions_extras %}
+
+{% block content %}
 
 <script>
 $(document).ready(function(){
@@ -24,286 +29,326 @@ $(document).ready(function(){
      $(this).next("div").toggle();
   });
   });
-
 </script>
 
-{% load guardian_tags %}
-{% load scipost_extras %}
-{% load submissions_extras %}
-
-
 {% if request.user|is_in_group:'Editorial Administrators' and recommendations_undergoing_voting %}
-<section>
-  <div class="flex-container">
-    <div class="flex-whitebox">
-      <h3>Administrative actions on recommendations undergoing voting:</h3>
-      <ul>
-	<li>To send an email reminder to each Fellow with at least one voting duty, <a href="{% url 'submissions:remind_Fellows_to_vote' %}">click here</a></li>
-      </ul>
+    <div class="row">
+        <div class="col-12">
+            <h3 class="highlight">Administrative actions on recommendations undergoing voting:</h3>
+            <ul>
+                <li>To send an email reminder to each Fellow with at least one voting duty, <a href="{% url 'submissions:remind_Fellows_to_vote' %}">click here</a></li>
+            </ul>
+        </div>
     </div>
-  </div>
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>Recommendations undergoing voting</h1>
+
+    <div class="row">
+        <div class="col-12">
+            <h1 class="highlight d-block">Recommendations undergoing voting</h1>
+        </div>
     </div>
-  </div>
-  <ul>
+
     {% for rec in recommendations_undergoing_voting %}
-    {% if request.user|is_not_author_of_submission:rec.submission.arxiv_identifier_w_vn_nr %}
-    {{ rec.submission.header_as_li_for_Fellows }}
-    <div class="flex-greybox">
-      <h3>Editorial recommendation:</h3>
-      <ul>
-	<li>{{ rec.print_for_Fellows }}</li>
-      </ul>
+        {% if not forloop.first %}
+            <hr>
+        {% endif %}
+
+        <div class="row">
+            <div class="col-12">
+                <div class="card card-outline-secondary">
+                    {% include 'submissions/_submission_card_fellow_content.html' with submission=rec.submission %}
+                </div>
+
+                <div class="card card-outline-secondary">
+                    <div class="card-header">
+                        <h3>Editorial recommendation</h3>
+                    </div>
+                    <div class="card-block">
+                        {# {{ rec.print_for_Fellows }}#}
+                        <div class="card card-outline-secondary">
+                            {% include 'submissions/_recommendation_fellow_content.html' with recommendation=rec %}
+                        </div>
+
+                        {% if rec.remark_set.all %}
+                            <h3 class="card-title">Remarks by Fellows:</h3>
+                            <ul>
+                              {% for remark in rec.remark_set.all|sort_by:'date' %}
+                                  {{ remark.as_li }}
+                              {% endfor %}
+                            </ul>
+                        {% endif %}
+
+                        <h3 class="card-title">Fellows eligible to vote:</h3>
+                        <ul>
+                          <li>
+                        	  {% for eligible in rec.eligible_to_vote.all|sort_by:'user__last_name' %}
+                            	  {{ eligible.user.last_name }},&nbsp;
+                        	  {% endfor %}
+                            </li>
+                        </ul>
+
+                        <h3 class="card-title">Voting results up to now:</h3>
+                        <ul>
+                            <li>
+                                Agreed:&nbsp;({{ rec.voted_for.all.count }})
+                                {% for agreed in rec.voted_for.all|sort_by:'user__last_name' %}
+                                    {{ agreed.user.last_name }},&nbsp;
+                                {% endfor %}
+                            </li>
+                            <li>
+                                Disagreed:&nbsp;({{ rec.voted_against.all.count }})
+                                {% for disagreed in rec.voted_against.all|sort_by:'user__last_name' %}
+                                    {{ disagreed.user.last_name }},&nbsp;
+                                {% endfor %}
+                            </li>
+                            <li>
+                                Abstained:&nbsp;({{ rec.voted_abstain.all.count }})
+                                {% for abstained in rec.voted_abstain.all|sort_by:'user__last_name' %}
+                                    {{ abstained.user.last_name }},&nbsp;
+                                {% endfor %}
+                            </li>
+                        </ul>
+
+                        {% if rec.remark_set %}
+                            <h4 class="card-title">Remarks:</h4>
+                            <ul>
+                              {% for rem in rec.remark_set.all %}
+                                  <li>{{ rem }}</li>
+                              {% endfor %}
+                            </ul>
+                        {% endif %}
+                    </div>
+                    <div class="card-footer">
+                        <h3 class="card-title">Actions:</h3>
+                        <ul>
+                            <li>To fix the College decision and follow the Editorial Recommendation as is: <a href="{% url 'submissions:fix_College_decision' rec_id=rec.id %}">click here</a></li>
+                            <li>To request a modification of the Recommendation to request for revision: click here</li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        {% endfor %}
     </div>
-    {% if rec.remark_set.all %}
-    <h3>Remarks by Fellows:</h3>
-    <ul>
-      {% for remark in rec.remark_set.all|sort_by:'date' %}
-      {{ remark.as_li }}
-      {% endfor %}
-    </ul>
-    {% endif %}
-
-    <h3>Fellows eligible to vote:</h3>
-    <ul>
-      <li>
-	<p>
-	  {% for eligible in rec.eligible_to_vote.all|sort_by:'user__last_name' %}
-	  {{ eligible.user.last_name }},&nbsp;
-	  {% endfor %}
-	</p>
-      </li>
-    </ul>
-    <h3>Voting results up to now:</h3>
-    <ul>
-      <li>
-	<p>Agreed:&nbsp;({{ rec.voted_for.all.count }})
-	{% for agreed in rec.voted_for.all|sort_by:'user__last_name' %}
-	{{ agreed.user.last_name }},&nbsp;
-	{% endfor %}
-	</p>
-      </li>
-      <li>
-	<p>Disagreed:&nbsp;({{ rec.voted_against.all.count }})
-	{% for disagreed in rec.voted_against.all|sort_by:'user__last_name' %}
-	{{ disagreed.user.last_name }},&nbsp;
-	{% endfor %}
-	</p>
-      </li>
-      <li>
-	<p>Abstained:&nbsp;({{ rec.voted_abstain.all.count }})
-	{% for abstained in rec.voted_abstain.all|sort_by:'user__last_name' %}
-	{{ abstained.user.last_name }},&nbsp;
-	{% endfor %}
-	</p>
-      </li>
-    </ul>
-    {% if rec.remark_set %}
-    <h4>Remarks:</h4>
-    <ul>
-      {% for rem in rec.remark_set.all %}
-      <li>{{ rem }}</li>
-      {% endfor %}
-    </ul>
-    {% endif %}
-    <h4>Actions:</h4>
-    <ul>
-      <li>To fix the College decision and follow the Editorial Recommendation as is: <a href="{% url 'submissions:fix_College_decision' rec_id=rec.id %}">click here</a></li>
-      <li>To request a modification of the Recommendation to request for revision: click here</li>
-    </ul>
-    <br/>
-    <hr class="hr6"/>
-    {% endif %}
-    {% endfor %}
-  </ul>
-</section>
-<hr class="hr12"/>
+    <hr>
 {% endif %}
 
 
 {% if assignments_to_consider %}
-<section>
-
-  {% for assignment_to_consider in assignments_to_consider %}
-
-  <div class="flex-greybox">
-    <h1>Assignment request: can you act as Editor-in-charge? (see below to accept/decline):</h1>
-  </div>
-  <br>
-  <hr>
-
-  {{ assignment_to_consider.submission.header_as_table }}
-  <br />
-  <h4>Abstract:</h4>
-  <p>{{ assignment_to_consider.submission.abstract }}</p>
-  <br/>
-
-  <hr>
-  <div class="flex-greybox">
-    <h1>Accept or Decline this Assignment</h1>
-  </div>
-  <h3>By accepting, you will be required to start a refereeing round on the next screen.</h3>
-  <form action="{% url 'submissions:accept_or_decline_assignment_ack' assignment_id=assignment_to_consider.id %}" method="post">
-    {% csrf_token %}
-    {{ consider_assignment_form.accept }}
-    <div id="ref_reason">
-      <p>Please select a reason for declining this assignment:</p>
-      {{ consider_assignment_form.refusal_reason }}
+    <div class="row">
+        <div class="col-12">
+            <div class="highlight d-block p-3">
+                <h1 class="p-0">Assignment request</h1>
+                <h3 class="p-0 mt-1 d-block text-muted">Can you act as Editor-in-charge? (see below to accept/decline)</h3>
+            </div>
+        </div>
     </div>
-    <input type="submit" value="Submit" />
-  </form>
+    {% for assignment_to_consider in assignments_to_consider %}
+        <div class="row">
+            <div class="col-12">
+                <div class="card">
+                    <div class="card-block">
+                        {{ assignment_to_consider.submission.header_as_table }}
+                        <br />
 
-  <hr class="hr6"/>
-  {% endfor %}
+                        <h4>Abstract:</h4>
+                        <p>{{ assignment_to_consider.submission.abstract }}</p>
+                    </div>
+                    <div class="card-footer">
+                        <h1>Accept or Decline this Assignment</h1>
+                        <h3 class="mb-2">By accepting, you will be required to start a refereeing round on the next screen.</h3>
 
-</section>
-<hr class="hr12"/>
+                        <form action="{% url 'submissions:accept_or_decline_assignment_ack' assignment_id=assignment_to_consider.id %}" method="post">
+                            {% csrf_token %}
+                            <div class="form-group row">
+                                <div class="col-12">
+                                    {{ consider_assignment_form.accept }}
+                                </div>
+                            </div>
+                            <div class="row" id="ref_reason">
+                                <div class="col-12">
+                                    <p>Please select a reason for declining this assignment</p>
+                                    {{ consider_assignment_form.refusal_reason|bootstrap:'0,12' }}
+                                </div>
+                            </div>
+                            <input class="btn btn-secondary" type="submit" value="Submit" />
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+    {% endfor %}
+    <hr>
 {% endif %}
 
 {% if request.user|is_in_group:'Editorial Administrators' and recommendations_to_prepare_for_voting %}
-<section>
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>Recommendations to prepare for voting</h1>
+    <div class="row">
+        <div class="col-12">
+            <h1 class="highlight d-block">Recommendations to prepare for voting</h1>
+        </div>
     </div>
-  </div>
-  <ul>
+
     {% for rec in recommendations_to_prepare_for_voting %}
-    {% if request.user|is_not_author_of_submission:rec.submission.arxiv_identifier_w_vn_nr %}
-    {{ rec.submission.header_as_li_for_Fellows }}
-    <div class="flex-greybox">
-      <h3>Editorial recommendation:</h3>
-      <ul>
-	<li>{{ rec.print_for_Fellows }}</li>
-      </ul>
-    </div>
-    <h4>Actions:</h4>
-    <ul>
-      <li><a href="{% url 'submissions:prepare_for_voting' rec_id=rec.id %}">Prepare for voting</a></li>
-    </ul>
-    {% endif %}
+        {% if not forloop.first %}
+            <hr>
+        {% endif %}
+
+        <div class="row">
+            <div class="col-12">
+                <div class="card card-outline-secondary">
+                    {% include 'submissions/_submission_card_fellow_content.html' with submission=rec.submission %}
+                </div>
+
+                <div class="card card-outline-secondary">
+                    <div class="card-header">
+                        <h3>Editorial recommendation</h3>
+                    </div>
+                    <div class="card-block">
+                        {{ rec.print_for_Fellows }}
+                    </div>
+                    <div class="card-footer">
+                        <h3>Actions:</h3>
+                        <ul>
+                            <li><a href="{% url 'submissions:prepare_for_voting' rec_id=rec.id %}">Prepare for voting</a></li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        </div>
     {% endfor %}
-  </ul>
-</section>
-<hr class="hr12"/>
+    <hr>
 {% endif %}
 
 {% if recs_to_vote_on %}
-<section>
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>Recommendations to vote on</h1>
+    <div class="row">
+        <div class="col-12">
+            <h1 class="highlight d-block">Recommendations to vote on</h1>
+        </div>
     </div>
-  </div>
-  <ul>
     {% for rec in recs_to_vote_on %}
-    {% if request.user|is_not_author_of_submission:rec.submission.arxiv_identifier_w_vn_nr %}
-    {{ rec.submission.header_as_li_for_Fellows }}
-    <div class="flex-greybox">
-      <h3>Editorial recommendation:</h3>
-      <ul>
-	<li>{{ rec.print_for_Fellows }}</li>
-      </ul>
-    </div>
-    <form action="{% url 'submissions:vote_on_rec' rec_id=rec.id %}" method="post">
-      {% csrf_token %}
-      {% load crispy_forms_tags %}
-      {% crispy rec_vote_form %}
-    </form>
-    <hr class="hr6"/>
-    <br/>
-    {% endif %}
+        {% if not forloop.first %}
+            <hr>
+        {% endif %}
+
+        <div class="row">
+            <div class="col-12">
+                <div class="card card-outline-secondary">
+                    {% include 'submissions/_submission_card_fellow_content.html' with submission=rec.submission %}
+                </div>
+
+                <div class="card card-outline-secondary">
+                    <div class="card-header">
+                        <h3>Editorial recommendation</h3>
+                    </div>
+                    <div class="card-block">
+                        {{ rec.print_for_Fellows }}
+                    </div>
+                    <div class="card-footer">
+                        <h3>Your position on this recommendation</h3>
+                        <form action="{% url 'submissions:vote_on_rec' rec_id=rec.id %}" method="post">
+                            {% csrf_token %}
+                            {{ rec_vote_form|bootstrap:'0,12' }}
+                            <input type="submit" name="submit" value="Cast your vote" class="btn btn-primary submitButton" id="submit-id-submit">
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
     {% endfor %}
-  </ul>
-</section>
-<hr class="hr12"/>
+    <hr>
 {% endif %}
 
-<section>
-  <div class="flex-container">
-    <div class="flex-greybox">
-      <h1>SciPost Submissions Pool</h1>
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">SciPost Submissions Pool</h1>
     </div>
-  </div>
+</div>
 
-  <h3>Submissions by status:</h3>
-  <ul>
-    {% for key, val in submission_status %}
-    <li><a href="{% url 'submissions:submissions_by_status' status=key %}">{{ val }}</a></li>
-    {% endfor %}
-  </ul>
-  <hr class="hr6"/>
-
-
-  <ul>
-    {% for sub in submissions_in_pool %}
-    {% if request.user|is_not_author_of_submission:sub.arxiv_identifier_w_vn_nr %}
-    <br/>
-    {{ sub.header_as_li_for_Fellows }}
-    {% if sub.remark_set.all %}
-    <h4>Remarks on this submission:</h4>
-    <ul>
-      {% for rem in sub.remark_set.all %}
-      {{ rem.as_li }}
-      {% endfor %}
-    </ul>
-    {% endif %}
-    <button class="submitRemarkButton" id="remarkButton{{ submission.id }}">Add a remark on this Submission</button>
-    <div class="submitRemarkForm" id="remarkForm{{ submission.id }}">
-      <form action="{% url 'submissions:add_remark' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}" method="post">
-	{% csrf_token %}
-	{{ remark_form.as_p }}
-	<input type="submit" value="Submit" />
-      </form>
-    </div>
-    {% get_obj_perms request.user for sub as "sub_perms" %}
-    {% if "can_take_editorial_actions" in sub_perms or request.user|is_in_group:'Editorial Administrators' %}
-    <br/>
-    {% if sub|required_actions %}
-    <div class="flex-container">
-      <div class-"flex-whitebox" style="background-color: #ffaaaa;">
-	<h3>Required actions:</h3>
-	<ul>
-	  {% for todoitem in sub|required_actions %}
-	  <li>{{ todoitem }}</li>
-	  {% endfor %}
-	</ul>
-      </div>
+<div class="row">
+    <div class="col-12">
+        <h3>Submissions by status:</h3>
+        <ul>
+        {% for key, val in submission_status %}
+            <li>
+                <a href="{% url 'submissions:submissions_by_status' status=key %}">{{ val }}</a>
+            </li>
+        {% endfor %}
+        </ul>
     </div>
-    {% endif %}
-    <h4><a href="{% url 'submissions:editorial_page' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">
-      Go to this Submission's Editorial Page</a></h4>
-    {% endif %}
-    {% if perms.scipost.can_assign_submissions %}
-    {% if sub.editorialassignment_set.all %}
-    <h4>EIC Assignment requests:</h4>
-    <ul>
-      {% for assignment in sub.editorialassignment_set.all %}
-      {{ assignment.info_as_li }}
-      {% endfor %}
-    </ul>
-    {% endif %}
-    {% if sub.editor_in_charge == None %}
-    <h4>Actions:</h4>
-    <ul>
-      <li><a href="{% url 'submissions:assign_submission' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li>
-      <li><a href="{% url 'submissions:assignment_failed' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li>
-    </ul>
-    {% endif %}
-    {% endif %}
-    {% if request.user|is_in_group:'Editorial Administrators' %}
-    <h4><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></h4>
-    {% if sub.status == 'accepted' %}
-    <h4>After proofs have been accepted, you can
-      <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</h4>
-    {% endif %}
-    {% endif %}
-    {% endif %}
-    {% endfor %}
-  </ul>
+</div>
+
+<hr>
+<div class="row">
+    <div class="col-12">
+        <!-- Submissions list -->
+        {% for sub in submissions_in_pool %}
+            <div class="card card-outline-secondary mt-1">
+                {% include 'submissions/_submission_card_fellow_content.html' with submission=sub %}
+
+                <div class="card-block">
+                    {% if sub.remark_set.all %}
+                        <h4>Remarks on this submission:</h4>
+                        <ul>
+                          {% for rem in sub.remark_set.all %}
+                              {{ rem.as_li }}
+                          {% endfor %}
+                        </ul>
+                    {% endif %}
+                    <button class="btn btn-secondary mb-2 submitRemarkButton" id="remarkButton{{ submission.id }}">Add a remark on this Submission</button>
+                    <div class="submitRemarkForm pb-2" id="remarkForm{{ submission.id }}">
+                      <form action="{% url 'submissions:add_remark' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}" method="post">
+                    	{% csrf_token %}
+                    	{{ remark_form|bootstrap:'0,12' }}
+                    	<input class="btn btn-secondary" type="submit" value="Submit" />
+                      </form>
+                    </div>
 
-</section>
+                    {% get_obj_perms request.user for sub as "sub_perms" %}
+                    {% if "can_take_editorial_actions" in sub_perms or request.user|is_in_group:'Editorial Administrators' %}
+                        {% if sub|required_actions %}
+                            <div class="required-actions">
+                            	<h3 class="pt-0">Required actions:</h3>
+                            	<ul>
+                            	  {% for todoitem in sub|required_actions %}
+                                	  <li>{{ todoitem }}</li>
+                            	  {% endfor %}
+                            	</ul>
+                            </div>
+                        {% endif %}
+
+                        <h4>
+                            <a href="{% url 'submissions:editorial_page' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a>
+                        </h4>
+                    {% endif %}
+
+                    {% if perms.scipost.can_assign_submissions %}
+                        {% if sub.editorialassignment_set.all %}
+                            <h4>EIC Assignment requests:</h4>
+                            <ul>
+                              {% for assignment in sub.editorialassignment_set.all %}
+                                  {{ assignment.info_as_li }}
+                              {% endfor %}
+                            </ul>
+                        {% endif %}
+                        {% if sub.editor_in_charge == None %}
+                            <h4>Actions:</h4>
+                            <ul>
+                              <li><a href="{% url 'submissions:assign_submission' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li>
+                              <li><a href="{% url 'submissions:assignment_failed' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li>
+                            </ul>
+                        {% endif %}
+                    {% endif %}
+
+                    {% if request.user|is_in_group:'Editorial Administrators' %}
+                        <h4>
+                            <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a>
+                        </h4>
+                        {% if sub.status == 'accepted' %}
+                            <h4>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</h4>
+                        {% endif %}
+                    {% endif %}
+                </div>
+            </div>
+        {% endfor %}
+    </div>
+</div>
 
-{% endblock bodysup %}
+{% endblock content %}
diff --git a/submissions/templates/submissions/submissions.html b/submissions/templates/submissions/submissions.html
index 0307dacacd39c88bd18e39a2e497de1c92868d6e..4abd6ffd43c7d5e22b2ce747a91ecfd61cc48bd5 100644
--- a/submissions/templates/submissions/submissions.html
+++ b/submissions/templates/submissions/submissions.html
@@ -9,27 +9,33 @@
 {% block content %}
 <div class="row">
     <div class="col-md-4">
-        <div class="panel page-header-panel">
-          <h1>SciPost Submissions</h1>
-          <h3><a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and refereeing procedure</a></h3>
-          <h3><a href="{% url 'submissions:submit_manuscript' %}">Submit a manuscript to SciPost</a></h3>
+        <div class="card card-grey">
+            <div class="card-block min-height-190">
+              <h1 class="card-title">SciPost Submissions</h1>
+              <h3><a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and refereeing procedure</a></h3>
+              <h3><a href="{% url 'submissions:submit_manuscript' %}">Submit a manuscript to SciPost</a></h3>
+            </div>
         </div>
     </div>
     <div class="col-md-4">
-        <div class="panel page-header-panel">
-          <h2>Search SciPost Submissions:</h2>
-          <form action="{% url 'submissions:submissions' %}" class="small" method="get">
-            {{ form|bootstrap:'4,8,sm' }}
-            <input class="btn btn-sm btn-secondary" type="submit" name="Submit" />
-          </form>
+        <div class="card card-grey">
+            <div class="card-block min-height-190">
+              <h2 class="card-title">Search SciPost Submissions:</h2>
+              <form action="{% url 'submissions:submissions' %}" class="small" method="get">
+                {{ form|bootstrap:'4,8,sm' }}
+                <input class="btn btn-sm btn-secondary" type="submit" name="Submit" />
+              </form>
+            </div>
         </div>
     </div>
     <div class="col-md-4">
-        <div class="panel page-header-panel">
-            <h2>View SciPost Submissions</h2>
-            <ul>
-                <li>Physics: last <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=1 %}">week</a> <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=4 %}">month</a> <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=52 %}">year</a></li>
-            </ul>
+        <div class="card card-grey">
+            <div class="card-block min-height-190">
+                <h2>View SciPost Submissions</h2>
+                <ul>
+                    <li>Physics: last <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=1 %}">week</a> <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=4 %}">month</a> <a href="{% url 'submissions:browse' discipline='physics' nrweeksback=52 %}">year</a></li>
+                </ul>
+            </div>
         </div>
     </div>
 </div>
@@ -56,9 +62,11 @@
               {% endif %}
               </p>
             {% endif %}
-            <ul>
+            <ul class="list-group list-group-flush">
                 {% for submission in object_list %}
-                {{ submission.header_as_li }}
+                    <li class="list-group-item">
+                        {% include 'submissions/_submission_card_content.html' with submission=submission %}
+                    </li>
                 {% endfor %}
             </ul>
         {% else %}
diff --git a/submissions/views.py b/submissions/views.py
index fd8559e688adff194b8afa51bb376be3dccdbcde..93e008ea3a86bbeff4ce7cc9d51a55cefbfc2c99 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -344,25 +344,26 @@ def pool(request):
     to publication acceptance or rejection.
     All members of the Editorial College have access.
     """
-    submissions_in_pool = (Submission.objects.all()
-                           .exclude(status__in=SUBMISSION_STATUS_OUT_OF_POOL)
-                           .exclude(is_current=False)
-                           .order_by('-submission_date'))
-    recommendations_undergoing_voting = (EICRecommendation.objects.filter(
-        submission__status__in=['put_to_EC_voting']))
-    recommendations_to_prepare_for_voting = (EICRecommendation.objects.filter(
-        submission__status__in=['voting_in_preparation']))
+    submissions_in_pool = Submission.objects.get_pool(request.user)
+    recommendations_undergoing_voting = (EICRecommendation.objects
+                                         .get_for_user_in_pool(request.user)
+                                         .filter(submission__status__in=['put_to_EC_voting']))
+    recommendations_to_prepare_for_voting = (EICRecommendation.objects
+                                             .get_for_user_in_pool(request.user)
+                                             .filter(submission__status__in=
+                                                     ['voting_in_preparation']))
     contributor = Contributor.objects.get(user=request.user)
     assignments_to_consider = EditorialAssignment.objects.filter(
         to=contributor, accepted=None, deprecated=False)
     consider_assignment_form = ConsiderAssignmentForm()
-    recs_to_vote_on = EICRecommendation.objects.filter(
-        eligible_to_vote__in=[contributor]).exclude(
-        recommendation=-1).exclude(recommendation=-2).exclude(
-            voted_for__in=[contributor]).exclude(
-            voted_against__in=[contributor]).exclude(
-            voted_abstain__in=[contributor]).exclude(
-            submission__status__in=SUBMISSION_STATUS_VOTING_DEPRECATED)
+    recs_to_vote_on = (EICRecommendation.objects.get_for_user_in_pool(request.user)
+                       .filter(eligible_to_vote__in=[contributor])
+                       .exclude(recommendation=-1)
+                       .exclude(recommendation=-2)
+                       .exclude(voted_for__in=[contributor])
+                       .exclude(voted_against__in=[contributor])
+                       .exclude(voted_abstain__in=[contributor])
+                       .exclude(submission__status__in=SUBMISSION_STATUS_VOTING_DEPRECATED))
     rec_vote_form = RecommendationVoteForm()
     remark_form = RemarkForm()
     context = {'submissions_in_pool': submissions_in_pool,
diff --git a/virtualmeetings/urls.py b/virtualmeetings/urls.py
index 556a7eb2b1e4dca34f7330c19ab6779aaac8a080..3a83c873c8df2e5747441ea9a6a7c2d00390e4b8 100644
--- a/virtualmeetings/urls.py
+++ b/virtualmeetings/urls.py
@@ -1,6 +1,4 @@
-
-from django.conf.urls import include, url
-from django.views.generic import TemplateView
+from django.conf.urls import url
 
 from . import views
 
diff --git a/webpack.config.js b/webpack.config.js
index 2b29fc5ea351cb1b77f543f2d3f053c5982c49be..f9175f5386badff05540d955f991c81d68778427 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -12,7 +12,8 @@ module.exports = {
             "./scipost/static/scipost/assets/js/scripts.js",
             "./scipost/static/scipost/assets/css/style.scss"
         ],
-        bootstrap: 'bootstrap-loader'
+        bootstrap: 'bootstrap-loader',
+        tooltip: "./scipost/static/scipost/assets/js/tooltip.js",
     },
     output: {
         path: path_bundles,