diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index e1c0be7ef4f28e609c93f3b58208aa0ea4d58b3a..9297980c7cc8bbd494f6124ee914f6d542b1863f 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -5,7 +5,7 @@ from django.contrib.auth import get_user_model
 from django.core.exceptions import ValidationError
 from django.utils.translation import gettext_lazy as _
 
-from django_select2.forms import ModelSelect2MultipleWidget, Select2Widget
+from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget, Select2Widget
 from dynamic_preferences.forms import PreferenceForm
 from material import Fieldset, Layout, Row
 
@@ -24,7 +24,7 @@ class PersonAccountForm(forms.ModelForm):
     class Meta:
         model = Person
         fields = ["last_name", "first_name", "user"]
-        widgets = {"user": Select2Widget}
+        widgets = {"user": Select2Widget(attrs={"class": "browser-default"})}
 
     new_user = forms.CharField(required=False)
 
@@ -107,7 +107,19 @@ class EditPersonForm(ExtensibleForm):
             "primary_group",
         ]
         widgets = {
-            "user": Select2Widget,
+            "user": Select2Widget(attrs={"class": "browser-default"}),
+            "primary_group": ModelSelect2Widget(
+                search_fields=["name__icontains", "short_name__icontains"],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+            ),
+            "guardians": ModelSelect2MultipleWidget(
+                search_fields=[
+                    "first_name__icontains",
+                    "last_name__icontains",
+                    "short_name__icontains",
+                ],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+            ),
         }
 
     new_user = forms.CharField(
@@ -138,19 +150,25 @@ class EditGroupForm(SchoolTermRelatedExtensibleForm):
                     "first_name__icontains",
                     "last_name__icontains",
                     "short_name__icontains",
-                ]
+                ],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
             ),
             "owners": ModelSelect2MultipleWidget(
                 search_fields=[
                     "first_name__icontains",
                     "last_name__icontains",
                     "short_name__icontains",
-                ]
+                ],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
             ),
             "parent_groups": ModelSelect2MultipleWidget(
-                search_fields=["name__icontains", "short_name__icontains"]
+                search_fields=["name__icontains", "short_name__icontains"],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+            ),
+            "additional_fields": ModelSelect2MultipleWidget(
+                search_fields=["title__icontains",],
+                attrs={"data-minimum-input-length": 0, "class": "browser-default"},
             ),
-            "additional_fields": ModelSelect2MultipleWidget(search_fields=["title__icontains",]),
         }
 
 
@@ -167,9 +185,27 @@ 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, "class": "browser-default"},
+        ),
+    )
+    groups = forms.ModelMultipleChoiceField(
+        queryset=None,
+        label=_("Groups"),
+        required=False,
+        widget=ModelSelect2MultipleWidget(
+            search_fields=["name__icontains", "short_name__icontains",],
+            attrs={"data-minimum-input-length": 0, "class": "browser-default"},
+        ),
     )
-    groups = forms.ModelMultipleChoiceField(queryset=None, label=_("Groups"), required=False)
 
     layout = Layout(
         Fieldset(
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/core/group/edit.html b/aleksis/core/templates/core/group/edit.html
index b26a28d1efc5ee292a257220bca00754512c1b99..146a5d83abe78307c20f5f70aaff28dc82b62fed 100644
--- a/aleksis/core/templates/core/group/edit.html
+++ b/aleksis/core/templates/core/group/edit.html
@@ -1,7 +1,12 @@
 {# -*- engine:django -*- #}
 
 {% extends "core/base.html" %}
-{% load material_form i18n %}
+{% load material_form i18n any_js %}
+
+{% block extra_head %}
+    {{ edit_group_form.media.css }}
+    {% include_css "select2-materialize" %}
+{% endblock %}
 
 {% block browser_title %}{% blocktrans %}Edit group{% endblocktrans %}{% endblock %}
 {% block page_title %}{% blocktrans %}Edit group{% endblocktrans %}{% endblock %}
@@ -13,5 +18,7 @@
     {% form form=edit_group_form %}{% endform %}
     {% include "core/partials/save_button.html" %}
   </form>
+  {% include_js "select2-materialize" %}
+  {{ edit_group_form.media.js }}
 
 {% endblock %}
diff --git a/aleksis/core/templates/core/person/accounts.html b/aleksis/core/templates/core/person/accounts.html
index 672b089aaa949560e958d829597e1b7abd986265..03725518dfcbf8552a53199790daa44d541bac32 100644
--- a/aleksis/core/templates/core/person/accounts.html
+++ b/aleksis/core/templates/core/person/accounts.html
@@ -2,7 +2,12 @@
 
 {% extends "core/base.html" %}
 
-{% load i18n %}
+{% load i18n any_js %}
+
+{% block extra_head %}
+  {{ persons_accounts_formset.media.css }}
+  {% include_css "select2-materialize" %}
+{% endblock %}
 
 {% block browser_title %}{% blocktrans %}Link persons to accounts{% endblocktrans %}{% endblock %}
 {% block page_title %}
@@ -55,4 +60,6 @@
       {% blocktrans %}Update{% endblocktrans %}
     </button>
   </form>
+  {% include_js "select2-materialize" %}
+  {{ persons_accounts_formset.media.js }}
 {% endblock %}
diff --git a/aleksis/core/templates/core/person/edit.html b/aleksis/core/templates/core/person/edit.html
index 261249f6867a4370745f66d3bd0abc05891442cf..3bf16ca3521ea744acfe48c6829dfae21db06eb5 100644
--- a/aleksis/core/templates/core/person/edit.html
+++ b/aleksis/core/templates/core/person/edit.html
@@ -2,10 +2,11 @@
 
 {% extends "core/base.html" %}
 
-{% load material_form i18n %}
+{% load material_form i18n any_js %}
 
 {% block extra_head %}
   {{ edit_person_form.media }}
+  {% include_css "select2-materialize" %}
 {% endblock %}
 
 {% block browser_title %}{% blocktrans %}Edit person{% endblocktrans %}{% endblock %}
@@ -19,5 +20,7 @@
     {% form form=edit_person_form %}{% endform %}
     {% include "core/partials/save_button.html" %}
   </form>
+  {% include_js "select2-materialize" %}
+  {{ edit_group_form.media.js }}
 
 {% endblock %}
diff --git a/aleksis/core/templates/material/fields/django_select2_modelselect2multiplewidget.html b/aleksis/core/templates/material/fields/django_select2_modelselect2multiplewidget.html
new file mode 100644
index 0000000000000000000000000000000000000000..1b19d8ec88bf72a694e32066c935327691c00738
--- /dev/null
+++ b/aleksis/core/templates/material/fields/django_select2_modelselect2multiplewidget.html
@@ -0,0 +1,21 @@
+{% load l10n material_form material_form_internal %}
+{% part bound_field.field %}<{{ field.widget.component|default:'dmc-select' }}>
+  <label>{{ bound_field.label }}</label>
+  <div class="row">
+    <div{% attrs bound_field 'group' %}
+        id="id_{{ bound_field.html_name }}_container"
+        class="input-field col s12{% if field.required %} required{% endif %}{% if bound_field.errors %} has-error{% endif %}"
+        style="margin-top: 0"
+    {% endattrs %}>
+        {% part field prefix %}{% endpart %}
+        {% part field control %}
+        {{ bound_field }}
+        {% endpart %}
+        {% part field help_text %}{% if field.help_text %}
+            <div class="help-block">{{ bound_field.help_text|safe }}</div>
+        {% endif %}{% endpart %}{% part field errors %}
+        {% if bound_field.errors %}
+            {% include  'material/field_errors.html' %}
+        {% endif %}{% endpart %}{{ hidden_initial }}
+    </div>
+</div></{{ field.widget.component|default:'dmc-select' }}>{% endpart %}
diff --git a/aleksis/core/templates/material/fields/django_select2_select2widget.html b/aleksis/core/templates/material/fields/django_select2_select2widget.html
new file mode 100644
index 0000000000000000000000000000000000000000..1b19d8ec88bf72a694e32066c935327691c00738
--- /dev/null
+++ b/aleksis/core/templates/material/fields/django_select2_select2widget.html
@@ -0,0 +1,21 @@
+{% load l10n material_form material_form_internal %}
+{% part bound_field.field %}<{{ field.widget.component|default:'dmc-select' }}>
+  <label>{{ bound_field.label }}</label>
+  <div class="row">
+    <div{% attrs bound_field 'group' %}
+        id="id_{{ bound_field.html_name }}_container"
+        class="input-field col s12{% if field.required %} required{% endif %}{% if bound_field.errors %} has-error{% endif %}"
+        style="margin-top: 0"
+    {% endattrs %}>
+        {% part field prefix %}{% endpart %}
+        {% part field control %}
+        {{ bound_field }}
+        {% endpart %}
+        {% part field help_text %}{% if field.help_text %}
+            <div class="help-block">{{ bound_field.help_text|safe }}</div>
+        {% endif %}{% endpart %}{% part field errors %}
+        {% if bound_field.errors %}
+            {% include  'material/field_errors.html' %}
+        {% endif %}{% endpart %}{{ hidden_initial }}
+    </div>
+</div></{{ field.widget.component|default:'dmc-select' }}>{% endpart %}