diff --git a/AKModel/admin.py b/AKModel/admin.py
index 53d995823fbc95e53bb9d045b5501304b9ed9d8c..bcfb719c051a8a77978cae87e220787ab31fb72b 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -2,7 +2,7 @@
 
 from django.contrib import admin
 
-from AKModel.models import Event, AKOwner, AKType, AKTrack, AKTag, AKRequirement, AK
+from AKModel.models import Event, AKOwner, AKType, AKTrack, AKTag, AKRequirement, AK, Room
 
 admin.site.register(Event)
 
@@ -13,3 +13,4 @@ admin.site.register(AKTrack)
 admin.site.register(AKTag)
 admin.site.register(AKRequirement)
 admin.site.register(AK)
+admin.site.register(Room)
diff --git a/AKModel/models.py b/AKModel/models.py
index a46a4aeccad8008f0c2fb927a0f6c393a75af293..372ad917f0984a6d0d8497cb606c0cd644cad30c 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -117,3 +117,23 @@ class AK(models.Model):
     class Meta:
         verbose_name = 'AK'
         verbose_name_plural = 'AKs'
+
+
+class Room(models.Model):
+    """ A room describes where an AK can be held.
+    """
+    name = models.CharField(max_length=64, verbose_name='Name', help_text='Name or number of the room')
+    building = models.CharField(max_length=256, verbose_name='Building', help_text='Name or number of the building')
+    capacity = models.IntegerField(verbose_name='Capacity', help_text='Maximum number of people')
+    properties = models.ManyToManyField(to=AKRequirement, verbose_name='Properties',
+                                        help_text='AK requirements fulfilled by the room')
+
+    # TODO model availability
+
+    event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event')
+
+    class Meta:
+        verbose_name = 'Room'
+        verbose_name_plural = 'Rooms'
+        ordering = ['building', 'name']
+        unique_together = [['name', 'building']]