diff --git a/biscuit/apps/chronos/migrations/0005_school_related.py b/biscuit/apps/chronos/migrations/0005_school_related.py
new file mode 100644
index 0000000000000000000000000000000000000000..d30597a55d45f3f8998675d4a0853c7309efaeac
--- /dev/null
+++ b/biscuit/apps/chronos/migrations/0005_school_related.py
@@ -0,0 +1,78 @@
+# Generated by Django 2.2.4 on 2019-09-03 14:10
+
+import biscuit.apps.chronos.util
+import biscuit.core.util.core_helpers
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('chronos', '0004_auto_20190821_1550'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='lesson',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AddField(
+            model_name='lessonperiod',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AddField(
+            model_name='lessonsubstitution',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AddField(
+            model_name='room',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AddField(
+            model_name='timeperiod',
+            name='school',
+            field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'),
+        ),
+        migrations.AlterField(
+            model_name='room',
+            name='name',
+            field=models.CharField(max_length=30, verbose_name='Long name'),
+        ),
+        migrations.AlterField(
+            model_name='room',
+            name='short_name',
+            field=models.CharField(max_length=10, verbose_name='Short name, e.g. room number'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='abbrev',
+            field=models.CharField(max_length=10, verbose_name='Abbreviation of subject in timetable'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='name',
+            field=models.CharField(max_length=30, verbose_name='Long name of subject'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='room',
+            unique_together={('school', 'name'), ('school', 'short_name')},
+        ),
+        migrations.AlterUniqueTogether(
+            name='subject',
+            unique_together={('school', 'abbrev'), ('school', 'name')},
+        ),
+        migrations.AlterUniqueTogether(
+            name='timeperiod',
+            unique_together={('school', 'weekday', 'period')},
+        ),
+    ]
diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index 756391b38cbccc779420d14375bb71e289ca0e21..0242663d63070a238b4f3b253a321d051a14c637 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -5,10 +5,12 @@ from django.core import validators
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 
+from biscuit.core.mixins import SchoolRelated
+
 from .util import current_week
 
 
-class TimePeriod(models.Model):
+class TimePeriod(SchoolRelated):
     WEEKDAY_CHOICES = [
         (0, _('Sunday')),
         (1, _('Monday')),
@@ -39,15 +41,15 @@ class TimePeriod(models.Model):
         return periods
 
     class Meta:
-        unique_together = [['weekday', 'period']]
+        unique_together = [['school', 'weekday', 'period']]
         ordering = ['weekday', 'period']
 
 
-class Subject(models.Model):
+class Subject(SchoolRelated):
     abbrev = models.CharField(verbose_name=_(
-        'Abbreviation of subject in timetable'), max_length=10, unique=True)
+        'Abbreviation of subject in timetable'), max_length=10)
     name = models.CharField(verbose_name=_(
-        'Long name of subject'), max_length=30, unique=True)
+        'Long name of subject'), max_length=30)
 
     colour_fg = models.CharField(verbose_name=_('Foreground colour in timetable'), blank=True, validators=[
                                  validators.RegexValidator(r'#[0-9A-F]{6}')], max_length=7)
@@ -59,22 +61,24 @@ class Subject(models.Model):
 
     class Meta:
         ordering = ['name', 'abbrev']
+        unique_together = [['school', 'abbrev'], ['school', 'name']]
 
 
-class Room(models.Model):
+class Room(SchoolRelated):
     short_name = models.CharField(verbose_name=_(
-        'Short name, e.g. room number'), max_length=10, unique=True)
+        'Short name, e.g. room number'), max_length=10)
     name = models.CharField(verbose_name=_('Long name'),
-                            max_length=30, unique=True)
+                            max_length=30)
 
     def __str__(self) -> str:
         return '%s (%s)' % (self.name, self.short_name)
 
     class Meta:
         ordering = ['name', 'short_name']
+        unique_together = [['school', 'short_name'], ['school', 'name']]
 
 
-class Lesson(models.Model):
+class Lesson(SchoolRelated):
     subject = models.ForeignKey(
         'Subject', on_delete=models.CASCADE, related_name='lessons')
     teachers = models.ManyToManyField('core.Person', related_name='lessons')
@@ -99,7 +103,7 @@ class Lesson(models.Model):
         ordering = ['date_start']
 
 
-class LessonSubstitution(models.Model):
+class LessonSubstitution(SchoolRelated):
     week = models.IntegerField(verbose_name=_('Week'),
                                default=current_week)
 
@@ -118,7 +122,7 @@ class LessonSubstitution(models.Model):
                     'lesson_period__period__weekday', 'lesson_period__period__period']
 
 
-class LessonPeriod(models.Model):
+class LessonPeriod(SchoolRelated):
     lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods')
     period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods')