diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1ec8b7c480968aa41c296de7641d2d58e9b55a1d
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,27 @@
+image: python:latest
+
+services:
+  - mysql:5.7
+
+variables:
+  MYSQL_DATABASE: "test"
+  MYSQL_ROOT_PASSWORD: "mysql"
+  MYSQL_USER: "django"
+  MYSQL_PASSWORD: "mysql"
+  MYSQL_HOST: "mysql"
+
+cache:
+  paths:
+    - ~/.cache/pip/
+
+before_script:
+  - python -V  # Print out python version for debugging
+  - apt-get -qq update
+  - apt-get -qq install -y python-virtualenv python3 python3-dev python3-pip gettext default-libmysqlclient-dev
+  - export DJANGO_SETTINGS_MODULE=AKPlanning.settings_ci
+  - ./Utils/setup.sh --prod
+
+test:
+  script:
+    - source venv/bin/activate
+    - python manage.py test --settings AKPlanning.settings_ci
diff --git a/AKDashboard/locale/de_DE/LC_MESSAGES/django.po b/AKDashboard/locale/de_DE/LC_MESSAGES/django.po
index 0ba6ef4f81583d6490b5dadaa378bc8727673384..b641a0390f938bff9519e523f82186b554ec586e 100644
--- a/AKDashboard/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKDashboard/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-12 22:53+0000\n"
+"POT-Creation-Date: 2020-05-16 20:26+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/AKModel/admin.py b/AKModel/admin.py
index 79513901a21704099724766d0ad472baa4b0389c..649ab4e512f279613bda9b96ec620ff771f6af49 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -156,10 +156,10 @@ class AKAdmin(SimpleHistoryAdmin):
 @admin.register(Room)
 class RoomAdmin(admin.ModelAdmin):
     model = Room
-    list_display = ['name', 'building', 'capacity', 'event']
-    list_filter = ['building', 'properties', 'event']
+    list_display = ['name', 'location', 'capacity', 'event']
+    list_filter = ['location', 'properties', 'event']
     list_editable = []
-    ordering = ['building', 'name']
+    ordering = ['location', 'name']
 
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
         if db_field.name == 'event':
diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po
index 436196640a8812fcc6f3c3e334337675f4b71213..5bb9eae145e5a932fa185858f86ffedddc49a0a0 100644
--- a/AKModel/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po
@@ -60,9 +60,9 @@ msgstr "Bitte Verfügbarkeiten eintragen!"
 msgid "Event"
 msgstr "Event"
 
-#: AKModel/availability/models.py:39 AKModel/models.py:70 AKModel/models.py:122
-#: AKModel/models.py:141 AKModel/models.py:173 AKModel/models.py:226
-#: AKModel/models.py:268 AKModel/models.py:298
+#: AKModel/availability/models.py:39 AKModel/models.py:69 AKModel/models.py:121
+#: AKModel/models.py:140 AKModel/models.py:172 AKModel/models.py:225
+#: AKModel/models.py:267 AKModel/models.py:297
 msgid "Associated event"
 msgstr "Zugehöriges Event"
 
@@ -74,8 +74,8 @@ msgstr "Person"
 msgid "Person whose availability this is"
 msgstr "Person deren Verfügbarkeit hier abgebildet wird"
 
-#: AKModel/availability/models.py:56 AKModel/models.py:271
-#: AKModel/models.py:290
+#: AKModel/availability/models.py:56 AKModel/models.py:270
+#: AKModel/models.py:289
 msgid "Room"
 msgstr "Raum"
 
@@ -83,8 +83,8 @@ msgstr "Raum"
 msgid "Room whose availability this is"
 msgstr "Raum dessen Verfügbarkeit hier abgebildet wird"
 
-#: AKModel/availability/models.py:65 AKModel/models.py:231
-#: AKModel/models.py:289
+#: AKModel/availability/models.py:65 AKModel/models.py:230
+#: AKModel/models.py:288
 msgid "AK"
 msgstr "AK"
 
@@ -92,7 +92,7 @@ msgstr "AK"
 msgid "AK whose availability this is"
 msgstr "Verfügbarkeiten"
 
-#: AKModel/availability/models.py:74 AKModel/models.py:125
+#: AKModel/availability/models.py:74 AKModel/models.py:124
 msgid "AK Category"
 msgstr "AK Kategorie"
 
@@ -104,87 +104,87 @@ msgstr "AK Kategorie dessen Verfügbarkeit hier abgebildet wird"
 msgid "Availabilities"
 msgstr "Verfügbarkeiten"
 
-#: AKModel/models.py:17 AKModel/models.py:116 AKModel/models.py:137
-#: AKModel/models.py:156 AKModel/models.py:170 AKModel/models.py:188
-#: AKModel/models.py:260
+#: AKModel/models.py:16 AKModel/models.py:115 AKModel/models.py:136
+#: AKModel/models.py:155 AKModel/models.py:169 AKModel/models.py:187
+#: AKModel/models.py:259
 msgid "Name"
 msgstr "Name"
 
-#: AKModel/models.py:18
+#: AKModel/models.py:17
 msgid "Name or iteration of the event"
 msgstr "Name oder Iteration des Events"
 
-#: AKModel/models.py:19
+#: AKModel/models.py:18
 msgid "Short Form"
 msgstr "Kurzer Name"
 
-#: AKModel/models.py:20
+#: AKModel/models.py:19
 msgid "Short name of letters/numbers/dots/dashes/underscores used in URLs."
 msgstr ""
 "Kurzname bestehend aus Buchstaben, Nummern, Punkten und Unterstrichen zur "
 "Nutzung in URLs"
 
-#: AKModel/models.py:22
+#: AKModel/models.py:21
 msgid "Place"
 msgstr "Ort"
 
-#: AKModel/models.py:23
+#: AKModel/models.py:22
 msgid "City etc. the event takes place in"
 msgstr "Stadt o.ä. in der das Event stattfindet"
 
-#: AKModel/models.py:25
+#: AKModel/models.py:24
 msgid "Time Zone"
 msgstr "Zeitzone"
 
-#: AKModel/models.py:25
+#: AKModel/models.py:24
 msgid "Time Zone where this event takes place in"
 msgstr "Zeitzone in der das Event stattfindet"
 
-#: AKModel/models.py:26
+#: AKModel/models.py:25
 msgid "Start"
 msgstr "Start"
 
-#: AKModel/models.py:26
+#: AKModel/models.py:25
 msgid "Time the event begins"
 msgstr "Zeit zu der das Event beginnt"
 
-#: AKModel/models.py:27
+#: AKModel/models.py:26
 msgid "End"
 msgstr "Ende"
 
-#: AKModel/models.py:27
+#: AKModel/models.py:26
 msgid "Time the event ends"
 msgstr "Zeit zu der das Event endet"
 
-#: AKModel/models.py:29
+#: AKModel/models.py:28
 msgid "Active State"
 msgstr "Aktiver Status"
 
-#: AKModel/models.py:29
+#: AKModel/models.py:28
 msgid "Marks currently active events"
 msgstr "Markiert aktuell aktive Events"
 
-#: AKModel/models.py:31
+#: AKModel/models.py:30
 msgid "Base URL"
 msgstr "URL-Prefix"
 
-#: AKModel/models.py:31
+#: AKModel/models.py:30
 msgid "Prefix for wiki link construction"
 msgstr "Prefix für die automatische Generierung von Wiki-Links"
 
-#: AKModel/models.py:32
+#: AKModel/models.py:31
 msgid "Default Slot Length"
 msgstr "Standardslotlänge"
 
-#: AKModel/models.py:33
+#: AKModel/models.py:32
 msgid "Default length in hours that is assumed for AKs in this event."
 msgstr "Standardlänge von Slots (in Stunden) für dieses Event"
 
-#: AKModel/models.py:35
+#: AKModel/models.py:34
 msgid "Contact email address"
 msgstr "E-Mail Kontaktadresse"
 
-#: AKModel/models.py:37
+#: AKModel/models.py:36
 msgid ""
 "An email address that is displayed on every page and can be used for all "
 "kinds of questions"
@@ -192,35 +192,35 @@ msgstr ""
 "Eine Mailadresse die auf jeder Seite angezeigt wird und für alle Arten von "
 "Fragen genutzt werden kann"
 
-#: AKModel/models.py:41
+#: AKModel/models.py:40
 msgid "Events"
 msgstr "Events"
 
-#: AKModel/models.py:64
+#: AKModel/models.py:63
 msgid "Nickname"
 msgstr "Spitzname"
 
-#: AKModel/models.py:64
+#: AKModel/models.py:63
 msgid "Name to identify an AK owner by"
 msgstr "Name durch den eine AK Leitung identifiziert wird"
 
-#: AKModel/models.py:65
+#: AKModel/models.py:64
 msgid "Slug"
 msgstr "Slug"
 
-#: AKModel/models.py:65
+#: AKModel/models.py:64
 msgid "Slug for URL generation"
 msgstr "Slug für URL-Generierung"
 
-#: AKModel/models.py:66
+#: AKModel/models.py:65
 msgid "Institution"
 msgstr "Instutution"
 
-#: AKModel/models.py:66
+#: AKModel/models.py:65
 msgid "Uni etc."
 msgstr "Universität o.ä."
 
-#: AKModel/models.py:67 AKModel/models.py:197
+#: AKModel/models.py:66 AKModel/models.py:196
 msgid "Web Link"
 msgstr "Internet Link"
 
@@ -426,15 +426,15 @@ msgstr "AKs"
 msgid "Name or number of the room"
 msgstr "Name oder Nummer des Raums"
 
+#: AKModel/models.py:260
+msgid "Location"
+msgstr "Ort"
+
 #: AKModel/models.py:261
-msgid "Building"
-msgstr "Gebäude"
+msgid "Name or number of the location"
+msgstr "Name oder Nummer des Ortes"
 
 #: AKModel/models.py:262
-msgid "Name or number of the building"
-msgstr "Name oder Nummer des Gebäudes"
-
-#: AKModel/models.py:263
 msgid "Capacity"
 msgstr "Kapazität"
 
@@ -498,18 +498,6 @@ msgstr "Noch nicht geplant"
 msgid "Administration"
 msgstr "Verwaltung"
 
-#: AKModel/templates/AKModel/user.html:31
-msgid "Hello"
-msgstr "Hallo"
-
-#: AKModel/templates/AKModel/user.html:34
-msgid "Go to backend"
-msgstr "Verwaltungsseite öffnen"
-
-#: AKModel/templates/AKModel/user.html:37
-msgid "Please wait for an administrator to confirm your account"
-msgstr "Bitte warten, bis ein Administrator den Account bestätigt hat"
-
 #: AKModel/templates/AKModel/user.html:40
 msgid "Logout"
 msgstr "Ausloggen"
@@ -560,6 +548,16 @@ msgstr "Eventstatus"
 
 #~ msgid "Notes to organizers"
 #~ msgstr "Notizen an die Organisator*innen"
+#: AKModel/templates/AKModel/user.html:31
+msgid "Hello"
+msgstr "Hallo"
+
+#: AKModel/templates/AKModel/user.html:34
+msgid "Go to backend"
+msgstr "Zum Backend"
+
+#: AKModel/templates/AKModel/user.html:37
+msgid "Please wait for an administrator to confirm your account"
+msgstr ""
+"Bitte warte darauf, dass ein*e Administrator*in deinen Account bestätigt"
 
-#~ msgid "E-Mail Address"
-#~ msgstr "E-Mail Adresse"
diff --git a/AKModel/migrations/0017_owner_slug.py b/AKModel/migrations/0017_owner_slug.py
index c4fbb31bf88f41938b1687c80df961f64ee3a828..2be7775a01d0e09533db1b85ef218276ecf38273 100644
--- a/AKModel/migrations/0017_owner_slug.py
+++ b/AKModel/migrations/0017_owner_slug.py
@@ -33,9 +33,8 @@ class Migration(migrations.Migration):
             migrate_data_forward,
             migrations.RunPython.noop,
         ),
-        migrations.AlterField(
-            model_name='akowner',
-            name='slug',
-            field=models.SlugField(blank=True, help_text='Slug for URL generation', unique=True, max_length=64, verbose_name='Slug')
+        migrations.AlterUniqueTogether(
+            name='akowner',
+            unique_together={('event', 'name', 'institution'), ('event', 'slug')},
         )
     ]
diff --git a/AKModel/migrations/0028_unique_constraints.py b/AKModel/migrations/0028_unique_constraints.py
index 2cba695a4379d44d4b0393d1a32d2a12a512b32c..112db71e5b4897e9f880829d4d4d0d744b6afa34 100644
--- a/AKModel/migrations/0028_unique_constraints.py
+++ b/AKModel/migrations/0028_unique_constraints.py
@@ -38,10 +38,6 @@ class Migration(migrations.Migration):
             name='akcategory',
             unique_together={('event', 'name')},
         ),
-        migrations.AlterUniqueTogether(
-            name='akowner',
-            unique_together={('event', 'name', 'institution'), ('event', 'slug')},
-        ),
         migrations.AlterUniqueTogether(
             name='akrequirement',
             unique_together={('event', 'name')},
diff --git a/AKModel/migrations/0033_AKOnline.py b/AKModel/migrations/0033_AKOnline.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3d4e6bcdf239d3a68d84f480dd66a6c088bf1a1
--- /dev/null
+++ b/AKModel/migrations/0033_AKOnline.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.0.6 on 2020-05-17 20:02
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ('AKModel', '0032_AK_history'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='room',
+            old_name='building',
+            new_name='location',
+        ),
+    ]
diff --git a/AKModel/models.py b/AKModel/models.py
index c46c90f9ddd3c9797a7bff58509d9d79b1569406..9d507ea3941474881e3cb1239b9b9a44131e8787 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -1,10 +1,9 @@
-from datetime import timedelta
-
-from django.utils.datetime_safe import datetime
 import itertools
+from datetime import timedelta
 
 from django.db import models
 from django.utils import timezone
+from django.utils.datetime_safe import datetime
 from django.utils.text import slugify
 from django.utils.translation import gettext_lazy as _
 from simple_history.models import HistoricalRecords
@@ -258,8 +257,8 @@ 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, blank=True, verbose_name=_('Building'),
-                                help_text=_('Name or number of the building'))
+    location = models.CharField(max_length=256, blank=True, verbose_name=_('Location'),
+                                help_text=_('Name or number of the location'))
     capacity = models.IntegerField(verbose_name=_('Capacity'), help_text=_('Maximum number of people'))
     properties = models.ManyToManyField(to=AKRequirement, blank=True, verbose_name=_('Properties'),
                                         help_text=_('AK requirements fulfilled by the room'))
@@ -270,13 +269,13 @@ class Room(models.Model):
     class Meta:
         verbose_name = _('Room')
         verbose_name_plural = _('Rooms')
-        ordering = ['building', 'name']
-        unique_together = ['event', 'name', 'building']
+        ordering = ['location', 'name']
+        unique_together = ['event', 'name', 'location']
 
     @property
     def title(self):
-        if self.building:
-            return f"{self.building} {self.name}"
+        if self.location:
+            return f"{self.location} {self.name}"
         return self.name
 
     def __str__(self):
diff --git a/AKOnline/__init__.py b/AKOnline/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/AKOnline/admin.py b/AKOnline/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..bdcd8d4d10358eed188cd06216220026ece2ac3c
--- /dev/null
+++ b/AKOnline/admin.py
@@ -0,0 +1,9 @@
+from django.contrib import admin
+
+from AKModel.admin import RoomAdmin
+from AKOnline.models import VirtualRoom
+
+
+@admin.register(VirtualRoom)
+class VirtualRoomAdmin(RoomAdmin):
+    model = VirtualRoom
diff --git a/AKOnline/apps.py b/AKOnline/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..16078585764016d5c291069a30b9f90022a89e16
--- /dev/null
+++ b/AKOnline/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class AkonlineConfig(AppConfig):
+    name = 'AKOnline'
diff --git a/AKOnline/migrations/0001_AKOnline.py b/AKOnline/migrations/0001_AKOnline.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6040731fac9a3f0ec515a816dc48fcb06f01f42
--- /dev/null
+++ b/AKOnline/migrations/0001_AKOnline.py
@@ -0,0 +1,29 @@
+# Generated by Django 3.0.6 on 2020-05-17 20:02
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    initial = True
+
+    dependencies = [
+        ('AKModel', '0033_AKOnline'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='VirtualRoom',
+            fields=[
+                ('room_ptr',
+                 models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
+                                      primary_key=True, serialize=False, to='AKModel.Room')),
+                ('url', models.URLField(blank=True, help_text='URL to the room or server', verbose_name='URL')),
+            ],
+            options={
+                'verbose_name': 'Virtual Room',
+                'verbose_name_plural': 'Virtual Rooms',
+            },
+            bases=('AKModel.room',),
+        ),
+    ]
diff --git a/AKOnline/migrations/__init__.py b/AKOnline/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/AKOnline/models.py b/AKOnline/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3496b01a719293920496c7b6432144114c71bf3
--- /dev/null
+++ b/AKOnline/models.py
@@ -0,0 +1,14 @@
+from django.db import models
+from django.utils.translation import gettext_lazy as _
+
+from AKModel.models import Event, Room
+
+
+class VirtualRoom(Room):
+    """ A virtual room where an AK can be held.
+    """
+    url = models.URLField(verbose_name=_("URL"), help_text=_("URL to the room or server"), blank=True)
+
+    class Meta:
+        verbose_name = _('Virtual Room')
+        verbose_name_plural = _('Virtual Rooms')
diff --git a/AKOnline/tests.py b/AKOnline/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..a39b155ac3ee946fb97efafe6ecbb42f571cd7ad
--- /dev/null
+++ b/AKOnline/tests.py
@@ -0,0 +1 @@
+# Create your tests here.
diff --git a/AKOnline/views.py b/AKOnline/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..60f00ef0ef347811e7b0c0921b7fda097acd9fcc
--- /dev/null
+++ b/AKOnline/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/AKPlan/locale/de_DE/LC_MESSAGES/django.po b/AKPlan/locale/de_DE/LC_MESSAGES/django.po
index 9abe99bdb6a65962a6697eee0caddf1dd3e6d8e3..bbe02474f0b06608332e3c1c6544d045feac7e6a 100644
--- a/AKPlan/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKPlan/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-14 22:48+0000\n"
+"POT-Creation-Date: 2020-05-16 20:26+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/AKPlan/views.py b/AKPlan/views.py
index 44aca464f4b177c191657d003b74582ed492f6a1..cf8589128a38eac4b240661110e1598a13424d89 100644
--- a/AKPlan/views.py
+++ b/AKPlan/views.py
@@ -38,8 +38,8 @@ class PlanIndexView(FilterByEventSlugMixin, ListView):
             if akslot.room is not None:
                 rooms.add(akslot.room)
                 # Store buildings for hierarchical view
-                if akslot.room.building != '':
-                    buildings.add(akslot.room.building)
+                if akslot.room.location != '':
+                    buildings.add(akslot.room.location)
 
             # Recent AKs: Started but not ended yet
             if akslot.start <= current_timestamp <= akslot.end:
diff --git a/AKPlanning/settings.py b/AKPlanning/settings.py
index f1421794acc9029b8de67bdf33007e261451b941..04302f411194498fbb5e327bec60cff6f6004915 100644
--- a/AKPlanning/settings.py
+++ b/AKPlanning/settings.py
@@ -37,6 +37,7 @@ INSTALLED_APPS = [
     'AKSubmission.apps.AksubmissionConfig',
     'AKScheduling.apps.AkschedulingConfig',
     'AKPlan.apps.AkplanConfig',
+    'AKOnline.apps.AkonlineConfig',
     'AKModel.apps.AKAdminConfig',
     'django.contrib.auth',
     'django.contrib.contenttypes',
diff --git a/AKPlanning/settings_ci.py b/AKPlanning/settings_ci.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c09856926dabffa495a333749719278a616d15c
--- /dev/null
+++ b/AKPlanning/settings_ci.py
@@ -0,0 +1,21 @@
+# noinspection PyUnresolvedReferences
+from AKPlanning.settings import *
+
+DEBUG = False
+SECRET_KEY = '+7#&=$grg7^x62m#3cuv)k$)tqx!xkj_o&y9sm)@@sgj7_7-!+'
+
+SESSION_COOKIE_SECURE = True
+CSRF_COOKIE_SECURE = True
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'HOST': 'mysql',
+        'NAME': 'test',
+        'USER': 'django',
+        'PASSWORD': 'mysql',
+        'OPTIONS': {
+            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
+        }
+    }
+}
diff --git a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
index 3a84696f47aad94a467a0fd9035b7ae34dbe3d3b..6eac88f8e50bd80dc3c4d619687ca763748ed8a3 100644
--- a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
@@ -81,105 +81,103 @@ msgid "Interest"
 msgstr "Interesse"
 
 #: AKSubmission/templates/AKSubmission/ak_detail.html:34
-#, fuzzy
-#| msgid "Interest"
 msgid "Show Interest"
-msgstr "Interesse"
+msgstr "Interesse bekunden"
 
 #: AKSubmission/templates/AKSubmission/ak_detail.html:40
 #: AKSubmission/templates/AKSubmission/ak_table.html:48
 msgid "Open external link"
 msgstr "Externen Link öffnen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:45
+#: AKSubmission/templates/AKSubmission/ak_detail.html:44
 #: AKSubmission/templates/AKSubmission/ak_history.html:19
 #: AKSubmission/templates/AKSubmission/ak_history.html:31
 msgid "History"
 msgstr "Versionsgeschichte"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:48
-#: AKSubmission/templates/AKSubmission/ak_detail.html:147
+#: AKSubmission/templates/AKSubmission/ak_detail.html:47
+#: AKSubmission/templates/AKSubmission/ak_detail.html:146
 #: AKSubmission/templates/AKSubmission/ak_edit.html:16
 #: AKSubmission/templates/AKSubmission/ak_table.html:53
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:53
+#: AKSubmission/templates/AKSubmission/ak_detail.html:52
 #: AKSubmission/templates/AKSubmission/ak_history.html:31
 #: AKSubmission/templates/AKSubmission/ak_table.html:35
 msgid "AK Wish"
 msgstr "AK-Wunsch"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:57
+#: AKSubmission/templates/AKSubmission/ak_detail.html:56
 #: AKSubmission/templates/AKSubmission/ak_table.html:10
 msgid "Who?"
 msgstr "Wer?"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:63
+#: AKSubmission/templates/AKSubmission/ak_detail.html:62
 #: AKSubmission/templates/AKSubmission/ak_history.html:36
 #: AKSubmission/templates/AKSubmission/ak_table.html:11
 msgid "Category"
 msgstr "Kategorie"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:69
+#: AKSubmission/templates/AKSubmission/ak_detail.html:68
 msgid "Present this AK"
 msgstr "Diesen AK vorstellen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:73
+#: AKSubmission/templates/AKSubmission/ak_detail.html:72
 #: AKSubmission/templates/AKSubmission/ak_table.html:12
 msgid "Tags"
 msgstr "Tags"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:79
+#: AKSubmission/templates/AKSubmission/ak_detail.html:78
 msgid "Reso?"
 msgstr "Reso?"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:86
+#: AKSubmission/templates/AKSubmission/ak_detail.html:85
 msgid "Requirements"
 msgstr "Anforderungen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:99
+#: AKSubmission/templates/AKSubmission/ak_detail.html:98
 msgid "Conflicting AKs"
 msgstr "AK Konflikte"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:107
+#: AKSubmission/templates/AKSubmission/ak_detail.html:106
 msgid "Prerequisite AKs"
 msgstr "AK Voraussetzungen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:115
+#: AKSubmission/templates/AKSubmission/ak_detail.html:114
 msgid "Notes"
 msgstr "Notizen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:132
+#: AKSubmission/templates/AKSubmission/ak_detail.html:131
 msgid "When?"
 msgstr "Wann?"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:133
+#: AKSubmission/templates/AKSubmission/ak_detail.html:132
 #: AKSubmission/templates/AKSubmission/akslot_delete.html:35
 msgid "Duration"
 msgstr "Dauer"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:134
+#: AKSubmission/templates/AKSubmission/ak_detail.html:133
 msgid "Room"
 msgstr "Raum"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:150
+#: AKSubmission/templates/AKSubmission/ak_detail.html:149
 msgid "Delete"
 msgstr "Löschen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:162
+#: AKSubmission/templates/AKSubmission/ak_detail.html:161
 msgid "Add another slot"
 msgstr "Einen neuen AK-Slot hinzufügen"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:166
+#: AKSubmission/templates/AKSubmission/ak_detail.html:165
 msgid "Possible Times"
 msgstr "Mögliche Zeiten"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:170
+#: AKSubmission/templates/AKSubmission/ak_detail.html:169
 msgid "Start"
 msgstr "Start"
 
-#: AKSubmission/templates/AKSubmission/ak_detail.html:171
+#: AKSubmission/templates/AKSubmission/ak_detail.html:170
 msgid "End"
 msgstr "Ende"
 
@@ -215,7 +213,7 @@ msgstr "Diesen AK vorstellen"
 msgid "Reso"
 msgstr "Reso"
 
-#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:34
+#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:30
 msgid "All AKs"
 msgstr "Alle AKs"
 
@@ -329,59 +327,56 @@ msgstr ""
 msgid "Submit"
 msgstr "Eintragen"
 
-#: AKSubmission/views.py:65
+#: AKSubmission/views.py:50
 msgid "Wishes"
 msgstr "Wünsche"
 
-#: AKSubmission/views.py:65
+#: AKSubmission/views.py:50
 msgid "AKs one would like to have"
 msgstr ""
 "AKs die sich gewünscht wurden, aber bei denen noch nicht klar ist, wer sie "
 "macht. Falls du dir das vorstellen kannst, trag dich einfach ein"
 
-#: AKSubmission/views.py:81
+#: AKSubmission/views.py:66
 msgid "Currently planned AKs"
 msgstr "Aktuell geplante AKs"
 
-#: AKSubmission/views.py:157
+#: AKSubmission/views.py:141
 msgid "Event inactive. Cannot create or update."
 msgstr "Event inaktiv. Hinzufügen/Bearbeiten nicht möglich."
 
-#: AKSubmission/views.py:173
+#: AKSubmission/views.py:157
 msgid "AK successfully created"
 msgstr "AK erfolgreich angelegt"
 
-#: AKSubmission/views.py:231
+#: AKSubmission/views.py:215
 msgid "AK successfully updated"
 msgstr "AK erfolgreich aktualisiert"
 
-#: AKSubmission/views.py:309
+#: AKSubmission/views.py:293
 msgid "Person Info successfully updated"
 msgstr "Personen-Info erfolgreich aktualisiert"
 
-#: AKSubmission/views.py:329
+#: AKSubmission/views.py:313
 msgid "No user selected"
 msgstr "Keine Person ausgewählt"
 
-#: AKSubmission/views.py:355
+#: AKSubmission/views.py:339
 msgid "AK Slot successfully added"
 msgstr "AK-Slot erfolgreich angelegt"
 
-#: AKSubmission/views.py:369
+#: AKSubmission/views.py:353
 msgid "You cannot edit a slot that has already been scheduled"
 msgstr "Bereits geplante AK-Slots können nicht mehr bearbeitet werden"
 
-#: AKSubmission/views.py:379
+#: AKSubmission/views.py:363
 msgid "AK Slot successfully updated"
 msgstr "AK-Slot erfolgreich aktualisiert"
 
-#: AKSubmission/views.py:392
+#: AKSubmission/views.py:376
 msgid "You cannot delete a slot that has already been scheduled"
 msgstr "Bereits geplante AK-Slots können nicht mehr gelöscht werden"
 
-#: AKSubmission/views.py:402
+#: AKSubmission/views.py:386
 msgid "AK Slot successfully deleted"
 msgstr "AK-Slot erfolgreich angelegt"
-
-#~ msgid "Categories"
-#~ msgstr "Kategorie"
diff --git a/Utils/setup.sh b/Utils/setup.sh
index 5ccdf50fb72881dcecae76c6db55f7a971da9a7a..aff0b60c07a878917f6031497cb5420c6416e97a 100755
--- a/Utils/setup.sh
+++ b/Utils/setup.sh
@@ -20,7 +20,7 @@ python manage.py migrate
 
 # Prepare static files and translations
 python manage.py collectstatic --noinput
-python manage.py compilemessages
+python manage.py compilemessages -l de_DE
 
 # Create superuser
 # Credentials are entered interactively on CLI
diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po
index 95f93235e7740d43012bb7e70dafcf970ef53a85..cff6314d53a95eeeaa80c95f6de6f0dfea58dc0d 100644
--- a/locale/de_DE/LC_MESSAGES/django.po
+++ b/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-18 09:42+0000\n"
+"POT-Creation-Date: 2020-05-17 21:09+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,22 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
+#: AKOnline/models.py:10
+msgid "URL"
+msgstr "URL"
+
+#: AKOnline/models.py:10
+msgid "URL to the room or server"
+msgstr "URL zum Raum/Server"
+
+#: AKOnline/models.py:13
+msgid "Virtual Room"
+msgstr "Virtueller Raum"
+
+#: AKOnline/models.py:14
+msgid "Virtual Rooms"
+msgstr "Virtuelle Räume"
+
 #: templates/base.html:78
 msgid "Impress"
 msgstr "Impressum"
diff --git a/requirements.txt b/requirements.txt
index 646382702dab0b482758fbe2f4d7985c37ef7dc8..ea1f26faff6c67ca94bbb2689b13c7675e65c224 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,3 +6,4 @@ django-timezone-field==4.0
 djangorestframework==3.11.0
 django-simple-history==2.10.0
 django-registration-redux==2.8
+mysqlclient==1.4.6  # for production deployment