diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index 7b8ff62620b0c8458f3fb02453cdcea7160d752c..8ebf484e7fc1fc9a24538d50ebed5d52da11423b 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -55,7 +55,8 @@ class Subject(models.Model):
 class Room(models.Model):
     short_name = models.CharField(verbose_name=_(
         'Short name, e.g. room number'), max_length=10, unique=True)
-    name = models.CharField(verbose_name=_('Long name'), max_length=30, unique=True)
+    name = models.CharField(verbose_name=_('Long name'),
+                            max_length=30, unique=True)
 
     def __str__(self):
         return '%s (%s)' % (self.name, self.short_name)
@@ -80,3 +81,15 @@ class LessonPeriod(models.Model):
     period = models.ForeignKey('TimePeriod', models.CASCADE)
 
     room = models.ForeignKey('Room', models.CASCADE, null=True)
+
+    substitution = models.OneToOneField('LessonSubstitution', models.CASCADE,
+                                        'lesson_period', null=True)
+
+
+class LessonSubstitution(models.Model):
+    subject = models.ForeignKey(
+        'Subject', on_delete=models.CASCADE,
+        related_name='lesson_substitutions', null=True)
+    teachers = models.ManyToManyField('core.Person',
+                                      related_name='lesson_substitutions')
+    room = models.ForeignKey('Room', models.CASCADE, null=True)