diff --git a/AKModel/admin.py b/AKModel/admin.py
index bf8cd7ccac53747a4a419b839738eb88023ddf1b..9427710f3894d17dcc22163efcd003886f771dc7 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -169,6 +169,24 @@ class WishFilter(SimpleListFilter):
         return queryset
 
 
+class AKAdminForm(forms.ModelForm):
+    class Meta:
+        widgets = {
+            'requirements': forms.CheckboxSelectMultiple,
+        }
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Filter possible values for foreign keys & m2m when event is specified
+        if hasattr(self.instance, "event") and self.instance.event is not None:
+            self.fields["category"].queryset = AKCategory.objects.filter(event=self.instance.event)
+            self.fields["track"].queryset = AKTrack.objects.filter(event=self.instance.event)
+            self.fields["owners"].queryset = AKOwner.objects.filter(event=self.instance.event)
+            self.fields["requirements"].queryset = AKRequirement.objects.filter(event=self.instance.event)
+            self.fields["conflicts"].queryset = AK.objects.filter(event=self.instance.event)
+            self.fields["prerequisites"].queryset = AK.objects.filter(event=self.instance.event)
+
+
 @admin.register(AK)
 class AKAdmin(SimpleHistoryAdmin):
     model = AK
@@ -177,6 +195,7 @@ class AKAdmin(SimpleHistoryAdmin):
     list_editable = ['short_name', 'track', 'interest']
     ordering = ['pk']
     actions = ['wiki_export']
+    form = AKAdminForm
 
     def is_wish(self, obj):
         return obj.wish
@@ -213,6 +232,10 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
         kwargs['initial'] = dict()
         super().__init__(*args, **kwargs)
         self.initial = {**self.initial, **kwargs['initial']}
+        # Filter possible values for m2m when event is specified
+        if hasattr(self.instance, "event") and self.instance.event is not None:
+            self.fields["properties"].queryset = AKRequirement.objects.filter(event=self.instance.event)
+
 
 
 @admin.register(Room)
@@ -237,15 +260,23 @@ class RoomAdmin(admin.ModelAdmin):
         )
 
 
+class AKSlotAdminForm(forms.ModelForm):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Filter possible values for foreign keys when event is specified
+        if hasattr(self.instance, "event") and self.instance.event is not None:
+            self.fields["ak"].queryset = AK.objects.filter(event=self.instance.event)
+            self.fields["room"].queryset = Room.objects.filter(event=self.instance.event)
+
+
 @admin.register(AKSlot)
 class AKSlotAdmin(admin.ModelAdmin):
     model = AKSlot
     list_display = ['id', 'ak', 'room', 'start', 'duration', 'event']
     list_filter = ['room', 'event']
-    list_editable = ['ak', 'room', 'start', 'duration']
     ordering = ['start']
-
     readonly_fields = ['ak_details_link', 'updated']
+    form = AKSlotAdminForm
 
     def get_urls(self):
         urls = super().get_urls()
@@ -302,8 +333,22 @@ class AKOrgaMessageAdmin(admin.ModelAdmin):
     readonly_fields = ['timestamp', 'ak', 'text']
 
 
+class ConstraintViolationAdminForm(forms.ModelForm):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        # Filter possible values for foreign keys & m2m when event is specified
+        if hasattr(self.instance, "event") and self.instance.event is not None:
+            self.fields["ak_owner"].queryset = AKOwner.objects.filter(event=self.instance.event)
+            self.fields["room"].queryset = Room.objects.filter(event=self.instance.event)
+            self.fields["requirement"].queryset = AKRequirement.objects.filter(event=self.instance.event)
+            self.fields["category"].queryset = AKCategory.objects.filter(event=self.instance.event)
+            self.fields["aks"].queryset = AK.objects.filter(event=self.instance.event)
+            self.fields["ak_slots"].queryset = AKSlot.objects.filter(event=self.instance.event)
+
+
 @admin.register(ConstraintViolation)
 class ConstraintViolationAdmin(admin.ModelAdmin):
     list_display = ['type', 'level', 'get_details']
     list_filter = ['event']
     readonly_fields = ['timestamp']
+    form = ConstraintViolationAdminForm