diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index e1c0be7ef4f28e609c93f3b58208aa0ea4d58b3a..199a0cbca99ae59339b4c31156cfe284655302d1 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -108,6 +108,8 @@ class EditPersonForm(ExtensibleForm):
         ]
         widgets = {
             "user": Select2Widget,
+            "primary_group": Select2Widget,
+            "guardians": Select2Widget,
         }
 
     new_user = forms.CharField(
@@ -167,9 +169,24 @@ class AnnouncementForm(ExtensibleForm):
     valid_until_time = forms.TimeField(label=_("Time"))
 
     persons = forms.ModelMultipleChoiceField(
-        Person.objects.all(), label=_("Persons"), required=False
+        queryset=Person.objects.all(), label=_("Persons"), required=False, widget=ModelSelect2MultipleWidget(
+            search_fields=[
+                "first_name__icontains",
+                "last_name__icontains",
+                "short_name__icontains",
+            ],
+            attrs={"data-minimum-input-length": 0},
+        )
+    )
+    groups = forms.ModelMultipleChoiceField(
+        queryset=None, label=_("Groups"), required=False, widget=ModelSelect2MultipleWidget(
+            search_fields=[
+                "name__icontains",
+                "short_name__icontains",
+            ],
+            attrs={"data-minimum-input-length": 0},
+        )
     )
-    groups = forms.ModelMultipleChoiceField(queryset=None, label=_("Groups"), required=False)
 
     layout = Layout(
         Fieldset(
@@ -264,7 +281,7 @@ class AnnouncementForm(ExtensibleForm):
 class ChildGroupsForm(forms.Form):
     """Inline form for group editing to select child groups."""
 
-    child_groups = forms.ModelMultipleChoiceField(queryset=Group.objects.all())
+    child_groups = forms.ModelMultipleChoiceField(queryset=Group.objects.all(), widget=ModelSelect2MultipleWidget)
 
 
 class SitePreferenceForm(PreferenceForm):
diff --git a/aleksis/core/templates/core/announcement/form.html b/aleksis/core/templates/core/announcement/form.html
index 0cd31cdefc11e8f1a2d29a30fb72a001357a946f..44d60280c6d358f74c60cb9c5ccff2c7aba89b07 100644
--- a/aleksis/core/templates/core/announcement/form.html
+++ b/aleksis/core/templates/core/announcement/form.html
@@ -2,8 +2,12 @@
 
 {% extends "core/base.html" %}
 
-{% load i18n material_form %}
+{% load i18n material_form any_js %}
 
+{% block extra_head %}
+    {{ form.media.css }}
+    {% include_css "select2-materialize" %}
+{% endblock %}
 
 {% block browser_title %}
   {% if mode == "edit" %}
@@ -30,4 +34,6 @@
       {% trans "Save und publish announcement" %}
     </button>
   </form>
+  {% include_js "select2-materialize" %}
+  {{ form.media.js }}
 {% endblock %}
diff --git a/aleksis/core/templates/fields/django_select2_modelselect2multiplewidget.html b/aleksis/core/templates/fields/django_select2_modelselect2multiplewidget.html
new file mode 100644
index 0000000000000000000000000000000000000000..d0b2c5c36cc1e06daf7cc4682c13655f617c3fb9
--- /dev/null
+++ b/aleksis/core/templates/fields/django_select2_modelselect2multiplewidget.html
@@ -0,0 +1,3 @@
+{% load l10n material_form material_form_internal %}
+{% part bound_field.field %}<{{ field.widget.component|default:'dmc-select' }}><div class="row">
+</div></{{ field.widget.component|default:'dmc-select' }}>{% endpart %}