diff --git a/AKModel/admin.py b/AKModel/admin.py
index ae8da12f3a60f47c64cb21b6611ead2b7b099059..39fc678db42611d3b2192a006179a46524805f6a 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -1,8 +1,9 @@
 from django import forms
 from django.apps import apps
-from django.contrib import admin
-from django.contrib.admin import SimpleListFilter, RelatedFieldListFilter
+from django.contrib import admin, messages
+from django.contrib.admin import SimpleListFilter, RelatedFieldListFilter, action
 from django.db.models import Count, F
+from django.db.models.functions import Now
 from django.shortcuts import render, redirect
 from django.urls import reverse_lazy
 from django.utils import timezone
@@ -31,11 +32,12 @@ class EventRelatedFieldListFilter(RelatedFieldListFilter):
 @admin.register(Event)
 class EventAdmin(admin.ModelAdmin):
     model = Event
-    list_display = ['name', 'status_url', 'place', 'start', 'end', 'active']
+    list_display = ['name', 'status_url', 'place', 'start', 'end', 'active', 'plan_hidden']
     list_filter = ['active']
     list_editable = ['active']
     ordering = ['-start']
-    readonly_fields = ['status_url']
+    readonly_fields = ['status_url', 'plan_hidden', 'plan_published_at']
+    actions = ['publish', 'unpublish']
 
     def add_view(self, request, form_url='', extra_context=None):
         # Always use wizard to create new events (the built-in form wouldn't work anyways since the timezone cannot
@@ -62,6 +64,16 @@ class EventAdmin(admin.ModelAdmin):
         timezone.activate(obj.timezone)
         return super().get_form(request, obj, change, **kwargs)
 
+    @action(description=_('Publish plan'))
+    def publish(self, request, queryset):
+        queryset.update(plan_published_at=Now(), plan_hidden=False)
+        self.message_user(request, _('Plan published'), messages.SUCCESS)
+
+    @action(description=_('Unpublish plan'))
+    def unpublish(self, request, queryset):
+        queryset.update(plan_published_at=None, plan_hidden=True)
+        self.message_user(request, _('Plan unpublished'), messages.SUCCESS)
+
 
 @admin.register(AKOwner)
 class AKOwnerAdmin(admin.ModelAdmin):
diff --git a/AKModel/forms.py b/AKModel/forms.py
index 0f897cd5dff24c0fe7c8d7e492e0f9616cb74dbc..e756c611f8f97e693ea739cf5e2ba8f992fbcb6b 100644
--- a/AKModel/forms.py
+++ b/AKModel/forms.py
@@ -29,6 +29,7 @@ class NewEventWizardSettingsForm(forms.ModelForm):
             'start': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
             'end': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
             'reso_deadline': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
+            'plan_hidden': forms.HiddenInput(),
         }
 
 
diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po
index 6e3bc74de86b2df3c5f0acc1e3d65fcfe5fbf0bf..3cb7485906c5752a2f0f033c53ea3bc641aaad89 100644
--- a/AKModel/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-08-17 22:41+0200\n"
+"POT-Creation-Date: 2022-10-15 12:52+0200\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"
@@ -11,7 +11,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: .\AKModel\admin.py:56 .\AKModel\admin.py:58
+#: .\AKModel\admin.py:58 .\AKModel\admin.py:60
 #: .\AKModel\templates\admin\AKModel\event_wizard\activate.html:32
 #: .\AKModel\templates\admin\AKModel\event_wizard\created_prepare_import.html:48
 #: .\AKModel\templates\admin\AKModel\event_wizard\finish.html:21
@@ -21,23 +21,39 @@ msgstr ""
 msgid "Status"
 msgstr "Status"
 
-#: .\AKModel\admin.py:132
+#: .\AKModel\admin.py:67
+msgid "Publish plan"
+msgstr "Plan veröffentlichen"
+
+#: .\AKModel\admin.py:70
+msgid "Plan published"
+msgstr "Plan veröffentlicht"
+
+#: .\AKModel\admin.py:72
+msgid "Unpublish plan"
+msgstr "Plan verbergen"
+
+#: .\AKModel\admin.py:75
+msgid "Plan unpublished"
+msgstr "Plan verborgen"
+
+#: .\AKModel\admin.py:144
 msgid "Wish"
 msgstr "AK-Wunsch"
 
-#: .\AKModel\admin.py:138
+#: .\AKModel\admin.py:150
 msgid "Is wish"
 msgstr "Ist ein Wunsch"
 
-#: .\AKModel\admin.py:139
+#: .\AKModel\admin.py:151
 msgid "Is not a wish"
 msgstr "Ist kein Wunsch"
 
-#: .\AKModel\admin.py:185
+#: .\AKModel\admin.py:197
 msgid "Export to wiki syntax"
 msgstr "In Wiki-Syntax exportieren"
 
-#: .\AKModel\admin.py:279
+#: .\AKModel\admin.py:291
 msgid "AK Details"
 msgstr "AK-Details"
 
@@ -65,17 +81,17 @@ msgstr "Die eingegebene Verfügbarkeit enthält ein ungültiges Datum."
 msgid "Please fill in your availabilities!"
 msgstr "Bitte Verfügbarkeiten eintragen!"
 
-#: .\AKModel\availability\models.py:38 .\AKModel\models.py:53
-#: .\AKModel\models.py:117 .\AKModel\models.py:172 .\AKModel\models.py:191
-#: .\AKModel\models.py:223 .\AKModel\models.py:277 .\AKModel\models.py:343
-#: .\AKModel\models.py:376 .\AKModel\models.py:447 .\AKModel\models.py:488
+#: .\AKModel\availability\models.py:38 .\AKModel\models.py:55
+#: .\AKModel\models.py:119 .\AKModel\models.py:174 .\AKModel\models.py:193
+#: .\AKModel\models.py:225 .\AKModel\models.py:279 .\AKModel\models.py:345
+#: .\AKModel\models.py:378 .\AKModel\models.py:449 .\AKModel\models.py:490
 msgid "Event"
 msgstr "Event"
 
-#: .\AKModel\availability\models.py:39 .\AKModel\models.py:118
-#: .\AKModel\models.py:173 .\AKModel\models.py:192 .\AKModel\models.py:224
-#: .\AKModel\models.py:278 .\AKModel\models.py:344 .\AKModel\models.py:377
-#: .\AKModel\models.py:448 .\AKModel\models.py:489
+#: .\AKModel\availability\models.py:39 .\AKModel\models.py:120
+#: .\AKModel\models.py:175 .\AKModel\models.py:194 .\AKModel\models.py:226
+#: .\AKModel\models.py:280 .\AKModel\models.py:346 .\AKModel\models.py:379
+#: .\AKModel\models.py:450 .\AKModel\models.py:491
 msgid "Associated event"
 msgstr "Zugehöriges Event"
 
@@ -87,8 +103,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:347
-#: .\AKModel\models.py:366 .\AKModel\models.py:497
+#: .\AKModel\availability\models.py:56 .\AKModel\models.py:349
+#: .\AKModel\models.py:368 .\AKModel\models.py:499
 msgid "Room"
 msgstr "Raum"
 
@@ -96,8 +112,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:283
-#: .\AKModel\models.py:365 .\AKModel\models.py:442
+#: .\AKModel\availability\models.py:65 .\AKModel\models.py:285
+#: .\AKModel\models.py:367 .\AKModel\models.py:444
 msgid "AK"
 msgstr "AK"
 
@@ -105,8 +121,8 @@ msgstr "AK"
 msgid "AK whose availability this is"
 msgstr "Verfügbarkeiten"
 
-#: .\AKModel\availability\models.py:74 .\AKModel\models.py:176
-#: .\AKModel\models.py:503
+#: .\AKModel\availability\models.py:74 .\AKModel\models.py:178
+#: .\AKModel\models.py:505
 msgid "AK Category"
 msgstr "AK-Kategorie"
 
@@ -118,26 +134,26 @@ msgstr "AK-Kategorie, deren Verfügbarkeit hier abgebildet wird"
 msgid "Availabilities"
 msgstr "Verfügbarkeiten"
 
-#: .\AKModel\forms.py:38
+#: .\AKModel\forms.py:39
 msgid "Copy ak requirements and ak categories of existing event"
 msgstr "AK-Anforderungen und AK-Kategorien eines existierenden Events kopieren"
 
-#: .\AKModel\forms.py:39
+#: .\AKModel\forms.py:40
 msgid "You can choose what to copy in the next step"
 msgstr ""
 "Im nächsten Schritt kann ausgewählt werden, was genau kopiert werden soll"
 
-#: .\AKModel\forms.py:47
+#: .\AKModel\forms.py:48
 msgid "Copy ak categories"
 msgstr "AK-Kategorien kopieren"
 
-#: .\AKModel\forms.py:54
+#: .\AKModel\forms.py:55
 msgid "Copy ak requirements"
 msgstr "AK-Anforderungen kopieren"
 
-#: .\AKModel\models.py:17 .\AKModel\models.py:164 .\AKModel\models.py:188
-#: .\AKModel\models.py:207 .\AKModel\models.py:221 .\AKModel\models.py:239
-#: .\AKModel\models.py:335
+#: .\AKModel\models.py:17 .\AKModel\models.py:166 .\AKModel\models.py:190
+#: .\AKModel\models.py:209 .\AKModel\models.py:223 .\AKModel\models.py:241
+#: .\AKModel\models.py:337
 msgid "Name"
 msgstr "Name"
 
@@ -235,31 +251,39 @@ msgstr "Plan verborgen"
 msgid "Hides plan for non-staff users"
 msgstr "Verbirgt den Plan für Nutzer*innen ohne erweiterte Rechte"
 
+#: .\AKModel\models.py:42
+msgid "Plan published at"
+msgstr "Plan veröffentlicht am/um"
+
 #: .\AKModel\models.py:43
+msgid "Timestamp at which the plan was published"
+msgstr "Zeitpunkt, zu dem der Plan veröffentlicht wurde"
+
+#: .\AKModel\models.py:45
 msgid "Base URL"
 msgstr "URL-Prefix"
 
-#: .\AKModel\models.py:43
+#: .\AKModel\models.py:45
 msgid "Prefix for wiki link construction"
 msgstr "Prefix für die automatische Generierung von Wiki-Links"
 
-#: .\AKModel\models.py:44
+#: .\AKModel\models.py:46
 msgid "Wiki Export Template Name"
 msgstr "Wiki-Export Templatename"
 
-#: .\AKModel\models.py:45
+#: .\AKModel\models.py:47
 msgid "Default Slot Length"
 msgstr "Standardslotlänge"
 
-#: .\AKModel\models.py:46
+#: .\AKModel\models.py:48
 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:48
+#: .\AKModel\models.py:50
 msgid "Contact email address"
 msgstr "E-Mail Kontaktadresse"
 
-#: .\AKModel\models.py:50
+#: .\AKModel\models.py:52
 msgid ""
 "An email address that is displayed on every page and can be used for all "
 "kinds of questions"
@@ -267,75 +291,75 @@ msgstr ""
 "Eine Mailadresse die auf jeder Seite angezeigt wird und für alle Arten von "
 "Fragen genutzt werden kann"
 
-#: .\AKModel\models.py:54
+#: .\AKModel\models.py:56
 msgid "Events"
 msgstr "Events"
 
-#: .\AKModel\models.py:112
+#: .\AKModel\models.py:114
 msgid "Nickname"
 msgstr "Spitzname"
 
-#: .\AKModel\models.py:112
+#: .\AKModel\models.py:114
 msgid "Name to identify an AK owner by"
 msgstr "Name, durch den eine AK-Leitung identifiziert wird"
 
-#: .\AKModel\models.py:113
+#: .\AKModel\models.py:115
 msgid "Slug"
 msgstr "Slug"
 
-#: .\AKModel\models.py:113
+#: .\AKModel\models.py:115
 msgid "Slug for URL generation"
 msgstr "Slug für URL-Generierung"
 
-#: .\AKModel\models.py:114
+#: .\AKModel\models.py:116
 msgid "Institution"
 msgstr "Instutution"
 
-#: .\AKModel\models.py:114
+#: .\AKModel\models.py:116
 msgid "Uni etc."
 msgstr "Universität o.ä."
 
-#: .\AKModel\models.py:115 .\AKModel\models.py:248
+#: .\AKModel\models.py:117 .\AKModel\models.py:250
 msgid "Web Link"
 msgstr "Internet Link"
 
-#: .\AKModel\models.py:115
+#: .\AKModel\models.py:117
 msgid "Link to Homepage"
 msgstr "Link zu Homepage oder Webseite"
 
-#: .\AKModel\models.py:121 .\AKModel\models.py:496
+#: .\AKModel\models.py:123 .\AKModel\models.py:498
 msgid "AK Owner"
 msgstr "AK-Leitung"
 
-#: .\AKModel\models.py:122
+#: .\AKModel\models.py:124
 msgid "AK Owners"
 msgstr "AK-Leitungen"
 
-#: .\AKModel\models.py:164
+#: .\AKModel\models.py:166
 msgid "Name of the AK Category"
 msgstr "Name der AK-Kategorie"
 
-#: .\AKModel\models.py:165 .\AKModel\models.py:189
+#: .\AKModel\models.py:167 .\AKModel\models.py:191
 msgid "Color"
 msgstr "Farbe"
 
-#: .\AKModel\models.py:165 .\AKModel\models.py:189
+#: .\AKModel\models.py:167 .\AKModel\models.py:191
 msgid "Color for displaying"
 msgstr "Farbe für die Anzeige"
 
-#: .\AKModel\models.py:166 .\AKModel\models.py:242
+#: .\AKModel\models.py:168 .\AKModel\models.py:244
 msgid "Description"
 msgstr "Beschreibung"
 
-#: .\AKModel\models.py:167
+#: .\AKModel\models.py:169
 msgid "Short description of this AK Category"
 msgstr "Beschreibung der AK-Kategorie"
 
-#: .\AKModel\models.py:168
+#: .\AKModel\models.py:170
 msgid "Present by default"
 msgstr "Defaultmäßig präsentieren"
 
-#: .\AKModel\models.py:170
+#: .\AKModel\models.py:172
 msgid ""
 "Present AKs of this category by default if AK owner did not specify whether "
 "this AK should be presented?"
@@ -343,152 +367,152 @@ msgstr ""
 "AKs dieser Kategorie standardmäßig vorstellen, wenn die Leitungen das für "
 "ihren AK nicht explizit spezifiziert haben?"
 
-#: .\AKModel\models.py:177
+#: .\AKModel\models.py:179
 msgid "AK Categories"
 msgstr "AK-Kategorien"
 
-#: .\AKModel\models.py:188
+#: .\AKModel\models.py:190
 msgid "Name of the AK Track"
 msgstr "Name des AK-Tracks"
 
-#: .\AKModel\models.py:195
+#: .\AKModel\models.py:197
 msgid "AK Track"
 msgstr "AK-Track"
 
-#: .\AKModel\models.py:196
+#: .\AKModel\models.py:198
 msgid "AK Tracks"
 msgstr "AK-Tracks"
 
-#: .\AKModel\models.py:207
+#: .\AKModel\models.py:209
 msgid "Name of the AK Tag"
 msgstr "Name das AK-Tags"
 
-#: .\AKModel\models.py:210
+#: .\AKModel\models.py:212
 msgid "AK Tag"
 msgstr "AK-Tag"
 
-#: .\AKModel\models.py:211
+#: .\AKModel\models.py:213
 msgid "AK Tags"
 msgstr "AK-Tags"
 
-#: .\AKModel\models.py:221
+#: .\AKModel\models.py:223
 msgid "Name of the Requirement"
 msgstr "Name der Anforderung"
 
-#: .\AKModel\models.py:227 .\AKModel\models.py:500
+#: .\AKModel\models.py:229 .\AKModel\models.py:502
 msgid "AK Requirement"
 msgstr "AK-Anforderung"
 
-#: .\AKModel\models.py:228
+#: .\AKModel\models.py:230
 msgid "AK Requirements"
 msgstr "AK-Anforderungen"
 
-#: .\AKModel\models.py:239
+#: .\AKModel\models.py:241
 msgid "Name of the AK"
 msgstr "Name des AKs"
 
-#: .\AKModel\models.py:240
+#: .\AKModel\models.py:242
 msgid "Short Name"
 msgstr "Kurzer Name"
 
-#: .\AKModel\models.py:241
+#: .\AKModel\models.py:243
 msgid "Name displayed in the schedule"
 msgstr "Name zur Anzeige im AK-Plan"
 
-#: .\AKModel\models.py:242
+#: .\AKModel\models.py:244
 msgid "Description of the AK"
 msgstr "Beschreibung des AKs"
 
-#: .\AKModel\models.py:244
+#: .\AKModel\models.py:246
 msgid "Owners"
 msgstr "Leitungen"
 
-#: .\AKModel\models.py:245
+#: .\AKModel\models.py:247
 msgid "Those organizing the AK"
 msgstr "Menschen, die den AK organisieren und halten"
 
-#: .\AKModel\models.py:248
+#: .\AKModel\models.py:250
 msgid "Link to wiki page"
 msgstr "Link zur Wiki Seite"
 
-#: .\AKModel\models.py:249
+#: .\AKModel\models.py:251
 msgid "Protocol Link"
 msgstr "Protokolllink"
 
-#: .\AKModel\models.py:249
+#: .\AKModel\models.py:251
 msgid "Link to protocol"
 msgstr "Link zum Protokoll"
 
-#: .\AKModel\models.py:251
+#: .\AKModel\models.py:253
 msgid "Category"
 msgstr "Kategorie"
 
-#: .\AKModel\models.py:252
+#: .\AKModel\models.py:254
 msgid "Category of the AK"
 msgstr "Kategorie des AKs"
 
-#: .\AKModel\models.py:253
+#: .\AKModel\models.py:255
 msgid "Tags"
 msgstr "Tags"
 
-#: .\AKModel\models.py:253
+#: .\AKModel\models.py:255
 msgid "Tags provided by owners"
 msgstr "Tags, die durch die AK-Leitung vergeben wurden"
 
-#: .\AKModel\models.py:254
+#: .\AKModel\models.py:256
 msgid "Track"
 msgstr "Track"
 
-#: .\AKModel\models.py:255
+#: .\AKModel\models.py:257
 msgid "Track the AK belongs to"
 msgstr "Track zu dem der AK gehört"
 
-#: .\AKModel\models.py:257
+#: .\AKModel\models.py:259
 msgid "Resolution Intention"
 msgstr "Resolutionsabsicht"
 
-#: .\AKModel\models.py:258
+#: .\AKModel\models.py:260
 msgid "Intends to submit a resolution"
 msgstr "Beabsichtigt eine Resolution einzureichen"
 
-#: .\AKModel\models.py:259
+#: .\AKModel\models.py:261
 msgid "Present this AK"
 msgstr "AK präsentieren"
 
-#: .\AKModel\models.py:260
+#: .\AKModel\models.py:262
 msgid "Present results of this AK"
 msgstr "Die Ergebnisse dieses AKs vorstellen"
 
-#: .\AKModel\models.py:262 .\AKModel\templates\admin\AKModel\status.html:97
+#: .\AKModel\models.py:264 .\AKModel\templates\admin\AKModel\status.html:97
 msgid "Requirements"
 msgstr "Anforderungen"
 
-#: .\AKModel\models.py:263
+#: .\AKModel\models.py:265
 msgid "AK's Requirements"
 msgstr "Anforderungen des AKs"
 
-#: .\AKModel\models.py:265
+#: .\AKModel\models.py:267
 msgid "Conflicting AKs"
 msgstr "AK-Konflikte"
 
-#: .\AKModel\models.py:266
+#: .\AKModel\models.py:268
 msgid "AKs that conflict and thus must not take place at the same time"
 msgstr ""
 "AKs, die Konflikte haben und deshalb nicht gleichzeitig stattfinden dürfen"
 
-#: .\AKModel\models.py:267
+#: .\AKModel\models.py:269
 msgid "Prerequisite AKs"
 msgstr "Vorausgesetzte AKs"
 
-#: .\AKModel\models.py:268
+#: .\AKModel\models.py:270
 msgid "AKs that should precede this AK in the schedule"
 msgstr "AKs die im AK-Plan vor diesem AK stattfinden müssen"
 
-#: .\AKModel\models.py:270
+#: .\AKModel\models.py:272
 msgid "Organizational Notes"
 msgstr "Notizen zur Organisation"
 
-#: .\AKModel\models.py:271
+#: .\AKModel\models.py:273
 #, fuzzy
 #| msgid ""
 #| "Notes to organizers. These are public. For private notes, please send an "
@@ -502,258 +526,258 @@ msgstr ""
 "Anmerkungen bitte den Button für Direktnachrichten verwenden (nach dem "
 "Anlegen/Bearbeiten)."
 
-#: .\AKModel\models.py:273
+#: .\AKModel\models.py:275
 msgid "Interest"
 msgstr "Interesse"
 
-#: .\AKModel\models.py:273
+#: .\AKModel\models.py:275
 msgid "Expected number of people"
 msgstr "Erwartete Personenzahl"
 
-#: .\AKModel\models.py:274
+#: .\AKModel\models.py:276
 msgid "Interest Counter"
 msgstr "Interessenszähler"
 
-#: .\AKModel\models.py:275
+#: .\AKModel\models.py:277
 msgid "People who have indicated interest online"
 msgstr "Anzahl Personen, die online Interesse bekundet haben"
 
-#: .\AKModel\models.py:284 .\AKModel\models.py:491
+#: .\AKModel\models.py:286 .\AKModel\models.py:493
 #: .\AKModel\templates\admin\AKModel\status.html:49
 #: .\AKModel\templates\admin\AKModel\status.html:56 .\AKModel\views.py:337
 msgid "AKs"
 msgstr "AKs"
 
-#: .\AKModel\models.py:335
+#: .\AKModel\models.py:337
 msgid "Name or number of the room"
 msgstr "Name oder Nummer des Raums"
 
-#: .\AKModel\models.py:336
+#: .\AKModel\models.py:338
 msgid "Location"
 msgstr "Ort"
 
-#: .\AKModel\models.py:337
+#: .\AKModel\models.py:339
 msgid "Name or number of the location"
 msgstr "Name oder Nummer des Ortes"
 
-#: .\AKModel\models.py:338
+#: .\AKModel\models.py:340
 msgid "Capacity"
 msgstr "Kapazität"
 
-#: .\AKModel\models.py:339
+#: .\AKModel\models.py:341
 msgid "Maximum number of people (-1 for unlimited)."
 msgstr "Maximale Personenzahl (-1 wenn unbeschränkt)."
 
-#: .\AKModel\models.py:340
+#: .\AKModel\models.py:342
 msgid "Properties"
 msgstr "Eigenschaften"
 
-#: .\AKModel\models.py:341
+#: .\AKModel\models.py:343
 msgid "AK requirements fulfilled by the room"
 msgstr "AK-Anforderungen, die dieser Raum erfüllt"
 
-#: .\AKModel\models.py:348 .\AKModel\templates\admin\AKModel\status.html:33
+#: .\AKModel\models.py:350 .\AKModel\templates\admin\AKModel\status.html:33
 msgid "Rooms"
 msgstr "Räume"
 
-#: .\AKModel\models.py:365
+#: .\AKModel\models.py:367
 msgid "AK being mapped"
 msgstr "AK, der zugeordnet wird"
 
-#: .\AKModel\models.py:367
+#: .\AKModel\models.py:369
 msgid "Room the AK will take place in"
 msgstr "Raum in dem der AK stattfindet"
 
-#: .\AKModel\models.py:368
+#: .\AKModel\models.py:370
 msgid "Slot Begin"
 msgstr "Beginn des Slots"
 
-#: .\AKModel\models.py:368
+#: .\AKModel\models.py:370
 msgid "Time and date the slot begins"
 msgstr "Zeit und Datum zu der der AK beginnt"
 
-#: .\AKModel\models.py:370
+#: .\AKModel\models.py:372
 msgid "Duration"
 msgstr "Dauer"
 
-#: .\AKModel\models.py:371
+#: .\AKModel\models.py:373
 msgid "Length in hours"
 msgstr "Länge in Stunden"
 
-#: .\AKModel\models.py:373
+#: .\AKModel\models.py:375
 msgid "Scheduling fixed"
 msgstr "Planung fix"
 
-#: .\AKModel\models.py:374
+#: .\AKModel\models.py:376
 msgid "Length and time of this AK should not be changed"
 msgstr "Dauer und Zeit dieses AKs sollten nicht verändert werden"
 
-#: .\AKModel\models.py:379
+#: .\AKModel\models.py:381
 msgid "Last update"
 msgstr "Letzte Aktualisierung"
 
-#: .\AKModel\models.py:382
+#: .\AKModel\models.py:384
 msgid "AK Slot"
 msgstr "AK-Slot"
 
-#: .\AKModel\models.py:383 .\AKModel\models.py:493
+#: .\AKModel\models.py:385 .\AKModel\models.py:495
 msgid "AK Slots"
 msgstr "AK-Slot"
 
-#: .\AKModel\models.py:405 .\AKModel\models.py:414
+#: .\AKModel\models.py:407 .\AKModel\models.py:416
 msgid "Not scheduled yet"
 msgstr "Noch nicht geplant"
 
-#: .\AKModel\models.py:443
+#: .\AKModel\models.py:445
 msgid "AK this message belongs to"
 msgstr "AK zu dem die Nachricht gehört"
 
-#: .\AKModel\models.py:444
+#: .\AKModel\models.py:446
 msgid "Message text"
 msgstr "Nachrichtentext"
 
-#: .\AKModel\models.py:445
+#: .\AKModel\models.py:447
 msgid "Message to the organizers. This is not publicly visible."
 msgstr ""
 "Nachricht an die Organisator*innen. Diese ist nicht öffentlich sichtbar."
 
-#: .\AKModel\models.py:451
+#: .\AKModel\models.py:453
 msgid "AK Orga Message"
 msgstr "AK-Organachricht"
 
-#: .\AKModel\models.py:452
+#: .\AKModel\models.py:454
 msgid "AK Orga Messages"
 msgstr "AK-Organachrichten"
 
-#: .\AKModel\models.py:461
+#: .\AKModel\models.py:463
 msgid "Constraint Violation"
 msgstr "Constraintverletzung"
 
-#: .\AKModel\models.py:462 .\AKModel\templates\admin\AKModel\status.html:79
+#: .\AKModel\models.py:464 .\AKModel\templates\admin\AKModel\status.html:79
 msgid "Constraint Violations"
 msgstr "Constraintverletzungen"
 
-#: .\AKModel\models.py:466
+#: .\AKModel\models.py:468
 msgid "Owner has two parallel slots"
 msgstr "Leitung hat zwei Slots parallel"
 
-#: .\AKModel\models.py:467
+#: .\AKModel\models.py:469
 msgid "AK Slot was scheduled outside the AK's availabilities"
 msgstr "AK Slot wurde außerhalb der Verfügbarkeit des AKs platziert"
 
-#: .\AKModel\models.py:468
+#: .\AKModel\models.py:470
 msgid "Room has two AK slots scheduled at the same time"
 msgstr "Raum hat zwei AK Slots gleichzeitig"
 
-#: .\AKModel\models.py:469
+#: .\AKModel\models.py:471
 msgid "Room does not satisfy the requirement of the scheduled AK"
 msgstr "Room erfüllt die Anforderungen des platzierten AKs nicht"
 
-#: .\AKModel\models.py:470
+#: .\AKModel\models.py:472
 msgid "AK Slot is scheduled at the same time as an AK listed as a conflict"
 msgstr ""
 "AK Slot wurde wurde zur gleichen Zeit wie ein Konflikt des AKs platziert"
 
-#: .\AKModel\models.py:471
+#: .\AKModel\models.py:473
 msgid "AK Slot is scheduled before an AK listed as a prerequisite"
 msgstr "AK Slot wurde vor einem als Voraussetzung gelisteten AK platziert"
 
-#: .\AKModel\models.py:473
+#: .\AKModel\models.py:475
 msgid ""
 "AK Slot for AK with intention to submit a resolution is scheduled after "
 "resolution deadline"
 msgstr ""
 "AK Slot eines AKs mit Resoabsicht wurde nach der Resodeadline platziert"
 
-#: .\AKModel\models.py:474
+#: .\AKModel\models.py:476
 msgid "AK Slot in a category is outside that categories availabilities"
 msgstr "AK Slot wurde außerhalb der Verfügbarkeiten seiner Kategorie"
 
-#: .\AKModel\models.py:475
+#: .\AKModel\models.py:477
 msgid "Two AK Slots for the same AK scheduled at the same time"
 msgstr "Zwei AK Slots eines AKs wurden zur selben Zeit platziert"
 
-#: .\AKModel\models.py:476
+#: .\AKModel\models.py:478
 msgid "Room does not have enough space for interest in scheduled AK Slot"
 msgstr "Room hat nicht genug Platz für das Interesse am geplanten AK-Slot"
 
-#: .\AKModel\models.py:477
+#: .\AKModel\models.py:479
 msgid "AK Slot is scheduled outside the event's availabilities"
 msgstr "AK Slot wurde außerhalb der Verfügbarkeit des Events platziert"
 
-#: .\AKModel\models.py:480
+#: .\AKModel\models.py:482
 msgid "Warning"
 msgstr "Warnung"
 
-#: .\AKModel\models.py:481
+#: .\AKModel\models.py:483
 msgid "Violation"
 msgstr "Verletzung"
 
-#: .\AKModel\models.py:483
+#: .\AKModel\models.py:485
 msgid "Type"
 msgstr "Art"
 
-#: .\AKModel\models.py:484
+#: .\AKModel\models.py:486
 msgid "Type of violation, i.e. what kind of constraint was violated"
 msgstr "Art der Verletzung, gibt an welche Art Constraint verletzt wurde"
 
-#: .\AKModel\models.py:485
+#: .\AKModel\models.py:487
 msgid "Level"
 msgstr "Level"
 
-#: .\AKModel\models.py:486
+#: .\AKModel\models.py:488
 msgid "Severity level of the violation"
 msgstr "Schweregrad der Verletzung"
 
-#: .\AKModel\models.py:492
+#: .\AKModel\models.py:494
 msgid "AK(s) belonging to this constraint"
 msgstr "AK(s), die zu diesem Constraint gehören"
 
-#: .\AKModel\models.py:494
+#: .\AKModel\models.py:496
 msgid "AK Slot(s) belonging to this constraint"
 msgstr "AK Slot(s), die zu diesem Constraint gehören"
 
-#: .\AKModel\models.py:496
+#: .\AKModel\models.py:498
 msgid "AK Owner belonging to this constraint"
 msgstr "AK Leitung(en), die zu diesem Constraint gehören"
 
-#: .\AKModel\models.py:498
+#: .\AKModel\models.py:500
 msgid "Room belonging to this constraint"
 msgstr "Raum, der zu diesem Constraint gehört"
 
-#: .\AKModel\models.py:501
+#: .\AKModel\models.py:503
 msgid "AK Requirement belonging to this constraint"
 msgstr "AK Anforderung, die zu diesem Constraint gehört"
 
-#: .\AKModel\models.py:503
+#: .\AKModel\models.py:505
 msgid "AK Category belonging to this constraint"
 msgstr "AK Kategorie, di zu diesem Constraint gehört"
 
-#: .\AKModel\models.py:505
+#: .\AKModel\models.py:507
 msgid "Comment"
 msgstr "Kommentar"
 
-#: .\AKModel\models.py:505
+#: .\AKModel\models.py:507
 msgid "Comment or further details for this violation"
 msgstr "Kommentar oder weitere Details zu dieser Vereletzung"
 
-#: .\AKModel\models.py:508
+#: .\AKModel\models.py:510
 msgid "Timestamp"
 msgstr "Timestamp"
 
-#: .\AKModel\models.py:508
+#: .\AKModel\models.py:510
 msgid "Time of creation"
 msgstr "Zeitpunkt der ERstellung"
 
-#: .\AKModel\models.py:509
+#: .\AKModel\models.py:511
 msgid "Manually Resolved"
 msgstr "Manuell behoben"
 
-#: .\AKModel\models.py:510
+#: .\AKModel\models.py:512
 msgid "Mark this violation manually as resolved"
 msgstr "Markiere diese Verletzung manuell als behoben"
 
-#: .\AKModel\models.py:537
+#: .\AKModel\models.py:539
 #: .\AKModel\templates\admin\AKModel\requirements_overview.html:27
 msgid "Details"
 msgstr "Details"
@@ -967,15 +991,15 @@ msgstr "Alle Nachrichten löschen"
 msgid "Active Events"
 msgstr "Aktive Events"
 
-#: .\AKModel\templates\admin\login.html:23
+#: .\AKModel\templates\admin\login.html:8
 msgid "Please correct the error below."
 msgstr "Bitte den untenstehenden Fehler korrigieren."
 
-#: .\AKModel\templates\admin\login.html:23
+#: .\AKModel\templates\admin\login.html:8
 msgid "Please correct the errors below."
 msgstr "Bitte die unten stehenden Fehler korrigieren."
 
-#: .\AKModel\templates\admin\login.html:39
+#: .\AKModel\templates\admin\login.html:24
 #, python-format
 msgid ""
 "You are authenticated as %(username)s, but are not authorized to access this "
@@ -984,15 +1008,15 @@ msgstr ""
 "Du bist als %(username)s eingeloggt, aber bist nicht authorisiert, auf diese "
 "Seite zuzugreifen. Möchtest du dich mit einem anderem Account einloggen?"
 
-#: .\AKModel\templates\admin\login.html:59
+#: .\AKModel\templates\admin\login.html:44
 msgid "Forgotten your password or username?"
 msgstr "Passwort oder Username vergessen"
 
-#: .\AKModel\templates\admin\login.html:63
+#: .\AKModel\templates\admin\login.html:48
 msgid "Log in"
 msgstr "Login"
 
-#: .\AKModel\templates\admin\login.html:66
+#: .\AKModel\templates\admin\login.html:51
 msgid "Register"
 msgstr "Registrieren"
 
diff --git a/AKModel/migrations/0053_plan_published_at.py b/AKModel/migrations/0053_plan_published_at.py
new file mode 100644
index 0000000000000000000000000000000000000000..80e8eb8e463b6a1c63797b9326fb117ef166c836
--- /dev/null
+++ b/AKModel/migrations/0053_plan_published_at.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.16 on 2022-10-15 10:18
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('AKModel', '0052_history_upgrade'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='event',
+            name='plan_published_at',
+            field=models.DateTimeField(blank=True, help_text='Timestamp at which the plan was published', null=True, verbose_name='Plan published at'),
+        ),
+    ]
diff --git a/AKModel/models.py b/AKModel/models.py
index 7f82cbd6ec510736265d6238a39417327c936675..a9b2089d936205fb92bac21410362d65844b888b 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -39,6 +39,8 @@ class Event(models.Model):
     active = models.BooleanField(verbose_name=_('Active State'), help_text=_('Marks currently active events'))
     plan_hidden = models.BooleanField(verbose_name=_('Plan Hidden'), help_text=_('Hides plan for non-staff users'),
                                       default=True)
+    plan_published_at = models.DateTimeField(verbose_name=_('Plan published at'), blank=True, null=True,
+                                         help_text=_('Timestamp at which the plan was published'))
 
     base_url = models.URLField(verbose_name=_("Base URL"), help_text=_("Prefix for wiki link construction"), blank=True)
     wiki_export_template_name = models.CharField(verbose_name=_("Wiki Export Template Name"), blank=True, max_length=50)
diff --git a/AKPlan/templatetags/tags_AKPlan.py b/AKPlan/templatetags/tags_AKPlan.py
index c4d5b32bf0d704703680eb3b74f96fdcad403e4a..8b30bfabd34b501a858351d6b1e384b4fe39e5bb 100644
--- a/AKPlan/templatetags/tags_AKPlan.py
+++ b/AKPlan/templatetags/tags_AKPlan.py
@@ -11,6 +11,11 @@ register = template.Library()
 
 @register.filter
 def highlight_change_colors(akslot):
+    # Do not highlight in preview mode or when changes occurred before the plan was published
+    if akslot.event.plan_hidden or (akslot.event.plan_published_at is not None
+                                    and akslot.event.plan_published_at > akslot.updated):
+        return akslot.ak.category.color
+
     seconds_since_update = akslot.seconds_since_last_update
 
     # Last change long ago? Use default color