diff --git a/aleksis/apps/alsijil/migrations/0001_initial.py b/aleksis/apps/alsijil/migrations/0001_initial.py
index f7fb4a0c056dd4af708dae04555368a3d7546fe6..9c09fe176a2917b5b08d77863b9bd8adb07826eb 100644
--- a/aleksis/apps/alsijil/migrations/0001_initial.py
+++ b/aleksis/apps/alsijil/migrations/0001_initial.py
@@ -1,9 +1,10 @@
-# Generated by Django 2.2.5 on 2019-09-03 18:30
+# Generated by Django 3.0.6 on 2020-05-11 13:19
 
-import django.db.models.deletion
+import aleksis.apps.alsijil.models
+import django.contrib.postgres.fields.jsonb
+import django.contrib.sites.managers
 from django.db import migrations, models
-
-import aleksis.core.util.core_helpers
+import django.db.models.deletion
 
 
 class Migration(migrations.Migration):
@@ -11,114 +12,68 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ("chronos", "0001_initial"),
-        ("core", "0001_initial"),
+        ('chronos', '0001_initial'),
+        ('sites', '0002_alter_domain_unique'),
+        ('core', '0001_initial'),
     ]
 
     operations = [
         migrations.CreateModel(
-            name="PersonalNote",
+            name='PersonalNoteFilter',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('identifier', models.CharField(max_length=30, unique=True, validators=[aleksis.apps.alsijil.models.isidentifier], verbose_name='Identifier')),
+                ('description', models.CharField(blank=True, max_length=60, unique=True, verbose_name='Description')),
+                ('regex', models.CharField(max_length=100, unique=True, verbose_name='Match expression')),
+                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
+            ],
+            options={
+                'ordering': ['identifier'],
+            },
+            managers=[
+                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='PersonalNote',
             fields=[
-                (
-                    "id",
-                    models.AutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("week", models.IntegerField()),
-                ("absent", models.BooleanField(default=False)),
-                ("late", models.IntegerField(default=0)),
-                ("excused", models.BooleanField(default=False)),
-                ("remarks", models.CharField(blank=True, max_length=200)),
-                (
-                    "lesson_period",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        to="chronos.LessonPeriod",
-                    ),
-                ),
-                (
-                    "person",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="personal_notes",
-                        to="core.Person",
-                    ),
-                ),
-                (
-                    "school",
-                    models.ForeignKey(
-                        default=1,
-                        on_delete=django.db.models.deletion.CASCADE,
-                        to="core.School",
-                    ),
-                ),
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('week', models.IntegerField()),
+                ('absent', models.BooleanField(default=False)),
+                ('late', models.IntegerField(default=0)),
+                ('excused', models.BooleanField(default=False)),
+                ('remarks', models.CharField(blank=True, max_length=200)),
+                ('lesson_period', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='personal_notes', to='chronos.LessonPeriod')),
+                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='personal_notes', to='core.Person')),
+                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
             ],
             options={
-                "ordering": [
-                    "lesson_period__lesson__date_start",
-                    "week",
-                    "lesson_period__period__weekday",
-                    "lesson_period__period__period",
-                    "person__last_name",
-                    "person__first_name",
-                ],
-                "unique_together": {("school", "lesson_period", "week", "person")},
+                'ordering': ['lesson_period__lesson__date_start', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period', 'person__last_name', 'person__first_name'],
+                'unique_together': {('lesson_period', 'week', 'person')},
             },
+            managers=[
+                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
+            ],
         ),
         migrations.CreateModel(
-            name="LessonDocumentation",
+            name='LessonDocumentation',
             fields=[
-                (
-                    "id",
-                    models.AutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("week", models.IntegerField()),
-                (
-                    "topic",
-                    models.CharField(
-                        blank=True, max_length=200, verbose_name="Lesson topic"
-                    ),
-                ),
-                (
-                    "homework",
-                    models.CharField(
-                        blank=True, max_length=200, verbose_name="Homework"
-                    ),
-                ),
-                (
-                    "lesson_period",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="documentations",
-                        to="chronos.LessonPeriod",
-                    ),
-                ),
-                (
-                    "school",
-                    models.ForeignKey(
-                        default=1,
-                        on_delete=django.db.models.deletion.CASCADE,
-                        to="core.School",
-                    ),
-                ),
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('week', models.IntegerField()),
+                ('topic', models.CharField(blank=True, max_length=200, verbose_name='Lesson topic')),
+                ('homework', models.CharField(blank=True, max_length=200, verbose_name='Homework')),
+                ('lesson_period', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documentations', to='chronos.LessonPeriod')),
+                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
             ],
             options={
-                "ordering": [
-                    "lesson_period__lesson__date_start",
-                    "week",
-                    "lesson_period__period__weekday",
-                    "lesson_period__period__period",
-                ],
-                "unique_together": {("school", "lesson_period", "week")},
+                'ordering': ['lesson_period__lesson__date_start', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period'],
+                'unique_together': {('lesson_period', 'week')},
             },
+            managers=[
+                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
+            ],
         ),
     ]
diff --git a/aleksis/apps/alsijil/migrations/0002_add_personal_note_filter.py b/aleksis/apps/alsijil/migrations/0002_add_personal_note_filter.py
deleted file mode 100644
index 13782db55d6165bc17f3e1880164ef39e109395a..0000000000000000000000000000000000000000
--- a/aleksis/apps/alsijil/migrations/0002_add_personal_note_filter.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Generated by Django 2.2.5 on 2019-11-20 14:21
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-import aleksis.apps.alsijil.models
-import aleksis.core.util.core_helpers
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("core", "0002_activity_notification"),
-        ("alsijil", "0001_initial"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="PersonalNoteFilter",
-            fields=[
-                (
-                    "id",
-                    models.AutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "identifier",
-                    models.CharField(
-                        max_length=30,
-                        validators=[aleksis.apps.alsijil.models.isidentifier],
-                        verbose_name="Identifier",
-                    ),
-                ),
-                (
-                    "description",
-                    models.CharField(
-                        blank=True, max_length=60, verbose_name="Description"
-                    ),
-                ),
-                (
-                    "regex",
-                    models.CharField(max_length=100, verbose_name="Match expression"),
-                ),
-                (
-                    "school",
-                    models.ForeignKey(
-                        default=1,
-                        on_delete=django.db.models.deletion.CASCADE,
-                        to="core.School",
-                    ),
-                ),
-            ],
-            options={
-                "ordering": ["identifier"],
-                "unique_together": {
-                    ("school", "regex"),
-                    ("school", "description"),
-                    ("school", "identifier"),
-                },
-            },
-        ),
-    ]