From d0de053f3e969ca00e9807a8291ff97468797b64 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 23 Mar 2022 11:21:37 +0100
Subject: [PATCH] Update translation files

---
 aleksis/core/locale/ar/LC_MESSAGES/django.po  | 686 +++++++++--------
 .../core/locale/ar/LC_MESSAGES/djangojs.po    |   4 +-
 .../core/locale/de_DE/LC_MESSAGES/django.po   | 721 ++++++++++--------
 .../core/locale/de_DE/LC_MESSAGES/djangojs.po |   4 +-
 aleksis/core/locale/fr/LC_MESSAGES/django.po  | 688 +++++++++--------
 .../core/locale/fr/LC_MESSAGES/djangojs.po    |   4 +-
 aleksis/core/locale/la/LC_MESSAGES/django.po  | 700 +++++++++--------
 .../core/locale/la/LC_MESSAGES/djangojs.po    |   4 +-
 .../core/locale/nb_NO/LC_MESSAGES/django.po   | 686 +++++++++--------
 .../core/locale/nb_NO/LC_MESSAGES/djangojs.po |   4 +-
 .../core/locale/tr_TR/LC_MESSAGES/django.po   | 686 +++++++++--------
 .../core/locale/tr_TR/LC_MESSAGES/djangojs.po |   4 +-
 12 files changed, 2259 insertions(+), 1932 deletions(-)

diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po
index a382635f2..ee356cc39 100644
--- a/aleksis/core/locale/ar/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ar/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\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"
@@ -38,10 +38,10 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
 msgstr ""
 
@@ -66,8 +66,8 @@ msgstr ""
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -91,11 +91,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr ""
 
@@ -131,7 +131,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr ""
 
@@ -140,7 +140,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -150,18 +150,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr ""
 
@@ -197,11 +197,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr ""
 
@@ -249,7 +249,15 @@ msgstr ""
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+msgid "The selected action does not exist."
+msgstr ""
+
+#: aleksis/core/forms.py:739
+msgid "You do not have permission to run {} on all selected objects."
+msgstr ""
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr ""
 
@@ -292,678 +300,698 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr ""
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr ""
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr ""
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr ""
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr ""
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr ""
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr ""
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr ""
-
-#: aleksis/core/menus.py:113
-msgid "Third-party accounts"
-msgstr ""
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr ""
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 msgid "Dashboard widgets"
 msgstr ""
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr ""
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr ""
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 msgid "Data checks"
 msgstr ""
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr ""
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 msgid "OAuth2 Applications"
 msgstr ""
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr ""
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr ""
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr ""
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr ""
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr ""
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr ""
+
+#: aleksis/core/menus.py:301
+msgid "Third-party accounts"
+msgstr ""
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr ""
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr ""
+
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+msgid "Help text / description"
+msgstr ""
+
+#: aleksis/core/models.py:468
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+msgid "Send notification at"
+msgstr ""
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+msgid "Content"
+msgstr ""
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1084,86 +1112,98 @@ msgid "Allow users to change their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:279
-msgid "Enable signup"
+msgid "Allow users to reset their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:287
-msgid "Enable invitations"
+msgid "Enable signup"
 msgstr ""
 
 #: aleksis/core/preferences.py:295
-msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgid "Regular expression for allowed usernames"
 msgstr ""
 
 #: aleksis/core/preferences.py:303
+msgid "Enable invitations"
+msgstr ""
+
+#: aleksis/core/preferences.py:311
+msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgstr ""
+
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr ""
 
@@ -1171,7 +1211,7 @@ msgstr ""
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
@@ -1189,7 +1229,7 @@ msgstr ""
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr ""
@@ -1236,6 +1276,10 @@ msgid ""
 "          "
 msgstr ""
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1494,19 +1538,15 @@ msgstr ""
 msgid "There are no announcements."
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr ""
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr ""
 
@@ -1727,7 +1767,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
@@ -1917,83 +1957,83 @@ msgstr ""
 msgid "System checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 msgid "Date done"
 msgstr ""
 
@@ -2034,6 +2074,18 @@ msgid ""
 "            "
 msgstr ""
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+msgid "Identicon"
+msgstr ""
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr ""
@@ -2124,24 +2176,24 @@ msgid "Edit person"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 msgid "Impersonate"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr ""
 
@@ -2346,13 +2398,11 @@ msgstr ""
 msgid "Network error"
 msgstr ""
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+msgid "No internet connection."
 msgstr ""
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2596,7 +2646,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr ""
 
@@ -2700,15 +2750,15 @@ msgstr ""
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr ""
 
@@ -2949,11 +2999,11 @@ msgid ""
 "      "
 msgstr ""
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr ""
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr ""
 
@@ -2977,156 +3027,156 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
index 8a53fc2fc..31b839fb2 100644
--- a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\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"
@@ -30,6 +30,6 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
index 56ff3ab65..5a14f0f13 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
@@ -7,11 +7,10 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\n"
 "PO-Revision-Date: 2022-02-08 23:24+0000\n"
 "Last-Translator: Tom Teichler <tom.teichler@teckids.org>\n"
-"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
-"aleksis-core/de/>\n"
+"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core/de/>\n"
 "Language: de_DE\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -39,10 +38,10 @@ msgstr "E-Mail-Adresse"
 msgid "Home and mobile phone"
 msgstr "Festnetz- und Mobilfunknummer"
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
 msgstr "Gruppen"
 
@@ -67,8 +66,8 @@ msgstr "Sicherstellen, dass es keine kaputten Dashboard-Widgets gibt."
 msgid "The DashboardWidget was reported broken automatically."
 msgstr "Das Dashboard-Widget wurde automatisch als kaputt gemeldet."
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -92,11 +91,11 @@ msgstr "Berechtigung"
 msgid "Content type"
 msgstr "Inhaltstyp"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr "Benutzer"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr "Gruppe"
 
@@ -132,7 +131,7 @@ msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen
 msgid "This username is already in use."
 msgstr "Dieser Benutzername wird bereits genutzt."
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr "Schuljahr"
 
@@ -141,7 +140,7 @@ msgid "Common data"
 msgstr "Allgemeine Daten"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -151,18 +150,18 @@ msgstr "Personen"
 msgid "Additional data"
 msgstr "Zusätzliche Datne"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr "Foto"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr "Datum"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr "Zeit"
 
@@ -198,11 +197,11 @@ msgstr "Einladungscode"
 msgid "Please enter your invitation code."
 msgstr "Bitte geben Sie Ihren Einladungscode ein."
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr "Vorname"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr "Nachname"
 
@@ -250,7 +249,19 @@ msgstr "Passwort"
 msgid "Password (again)"
 msgstr "Passwort wiederholen"
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+#, fuzzy
+#| msgid "The requested solve option does not exist"
+msgid "The selected action does not exist."
+msgstr "Die angeforderte Lösungsoption existiert nicht"
+
+#: aleksis/core/forms.py:739
+#, fuzzy
+#| msgid "You must grant the permission to all objects and/or to some objects."
+msgid "You do not have permission to run {} on all selected objects."
+msgstr "Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte vergeben."
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr "Keine gültige Auswahl."
 
@@ -293,678 +304,704 @@ msgstr "Einladung akzeptieren"
 msgid "Dashboard"
 msgstr "Dashboard"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr "Benachrichtigungen"
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr "Konto"
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr "Verkleidung beenden"
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr "Abmelden"
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr "2FA"
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr "Passwort ändern"
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr "Ich"
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr "Einstellungen"
-
-#: aleksis/core/menus.py:113
-msgid "Third-party accounts"
-msgstr "Drittanbieter-Konten"
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr "Autorisierte Anwendungen"
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr "Admin"
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Ankündigungen"
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr "Schuljahre"
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 msgid "Dashboard widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr "Datenverwaltung"
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr "Systemstatus"
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 msgid "Configuration"
 msgstr "Konfiguration"
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 msgid "Data checks"
 msgstr "Datenprüfungen"
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr "Berechtigungen verwalten"
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr "Backend-Administration"
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 msgid "OAuth2 Applications"
 msgstr "OAuth2-Anwendungen"
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr "Leute"
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr "Gruppentypen"
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr "Gruppen und Kindgruppen"
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr "Zusätzliche Felder"
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 msgid "Invite person"
 msgstr "Person einladen"
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr "Kindgruppen zu Gruppen zuordnen"
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr "Verkleidung beenden"
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr "Konto"
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr "2FA"
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr "Passwort ändern"
+
+#: aleksis/core/menus.py:301
+msgid "Third-party accounts"
+msgstr "Drittanbieter-Konten"
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr "Autorisierte Anwendungen"
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr "Abmelden"
+
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr "Zugeordnetes Schuljahr"
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr "Boolean (Ja/Nein)"
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr "Text (eine Zeile)"
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr "Datum und Uhrzeit"
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr "Dezimalzahl"
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr "Ganze Zahl"
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 msgid "IP address"
 msgstr "IP-Adresse"
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Boolean oder leer (Ja/Nein/weder)"
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr "Text (mehrzeilig)"
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr "URL / Link"
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr "Name"
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 msgid "Start date"
 msgstr "Startdatum"
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr "Enddatum"
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr "Das Startdatum muss vor dem Enddatum liegen."
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr "Es gibt bereits ein Schuljahr für diesen Zeitraum oder einen Teilzeitraum."
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr "Person"
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 msgid "Can view address"
 msgstr "Kann Adresse sehen"
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 msgid "Can view contact details"
 msgstr "Kann Kontaktdetails sehen"
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 msgid "Can view photo"
 msgstr "Kann Foto sehen"
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 msgid "Can view avatar image"
 msgstr "Kann Avatar-Bild sehen"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 msgid "Can view persons groups"
 msgstr "Kann Gruppen einer Person sehen"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 msgid "Can view personal details"
 msgstr "Kann persönliche Daten sehen"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr "weiblich"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr "männlich"
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr "Verknüpfter Benutzer"
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr "Zusätzliche Namen"
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 msgid "Short name"
 msgstr "Kurzname"
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr "Straße"
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr "Hausnummer"
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr "Postleitzahl"
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr "Ort"
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr "Festnetz"
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr "Handy"
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr "Geburtsdatum"
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 msgid "Place of birth"
 msgstr "Geburtsort"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr "Dies ist ein offizielles Foto, genutzt für offizielle Dokumente und interne Zwecke."
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr "Bild/Avatar anzeigen"
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr "Dies ist ein Bild oder ein Avatar für die öffentliche Darstellung."
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr "Erziehungsberechtigte / Eltern"
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr "Primärgruppe"
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr "Feldtitel"
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr "Feldtyp"
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+#, fuzzy
+#| msgid "Site description"
+msgid "Help text / description"
+msgstr "Seitenbeschreibung"
+
+#: aleksis/core/models.py:468
 msgid "Addtitional field for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 msgid "Addtitional fields for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr "Kann Kindgruppen zu Gruppen zuordnen"
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 msgid "Can view statistics about group."
 msgstr "Kann Statistiken über Gruppen sehen."
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 msgid "Long name"
 msgstr "Langname"
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr "Mitglieder"
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr "Leiter/-innen"
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr "Ãœbergeordnete Gruppen"
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titel"
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr "Anwendung"
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr "Aktivität"
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr "Aktivitäten"
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr "Absender"
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr "Empfänger"
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr "Link"
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+#, fuzzy
+#| msgid "New notification for"
+msgid "Send notification at"
+msgstr "Neue Benachrichtigung für"
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr "Gelesen"
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr "Versandt"
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 msgid "Notification"
 msgstr "Benachrichtigung"
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr "Link zur detaillierten Ansicht"
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr "Datum und Uhrzeit des Anzeigestarts"
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr "Anzeigezeitraum"
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 msgid "Announcement"
 msgstr "Ankündigung"
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 msgid "Announcement recipient"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 msgid "Announcement recipients"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 msgid "Widget Title"
 msgstr "Widget-Titel"
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr "Widget aktivieren"
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 msgid "Widget is broken"
 msgstr "Widget ist kaputt"
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr "Größe auf Mobilgeräten"
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 px, 12 Spalten"
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr "Größe auf Tablets"
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr "> 600px, 12 Spalten"
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr "Größe auf Desktopgeräten"
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr "> 992 px, 12 Spalten"
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr "Größe auf großen Desktopgeräten"
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 px, 12 Spalten"
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 msgid "Can edit default dashboard"
 msgstr "Kann Standarddashboard bearbeiten"
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 msgid "Dashboard Widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 msgid "Dashboard Widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 msgid "Icon URL"
 msgstr "Symbol-URL"
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr "Externer-Link-Widget"
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr "Externer-Link-Widgets"
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+#, fuzzy
+#| msgid "Content type"
+msgid "Content"
+msgstr "Inhaltstyp"
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 msgid "Dashboard widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr "Teil des Standarddashboards"
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 msgid "Dashboard widget order"
 msgstr "Reihenfolge der Dashboard-Widgets"
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 msgid "Dashboard widget orders"
 msgstr "Reihenfolgen der Dashboard-Widgets"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr "Menü-ID"
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr "Benutzerdefiniertes Menü"
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr "Benutzerdefinierte Menüs"
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr "Menü"
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Symbol"
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr "Benutzerdefiniertes Menüelement"
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr "Benutzerdefinierte Menüelemente"
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr "Titel des Typs"
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 msgid "Can view system status"
 msgstr "Kann Systemstatus sehen"
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 msgid "Can manage data"
 msgstr "Kann Daten verwalten"
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 msgid "Can impersonate"
 msgstr "Kann sich verkleiden"
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr "Kann Suche benutzen"
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr "Kann Konfiguration ändern"
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr "Kann Einstellungen einer Person verändern"
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr "Kann Einstellungen einer Gruppe verändern"
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr "Kann die PDF-Generierung testen"
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 msgid "Can invite persons"
 msgstr "Kann Personen einladen"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr "Zugehörige Datenprüfungsaufgabe"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr "Problem gelöst"
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 msgid "Notification sent"
 msgstr "Benachrichtigung gesendet"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr "Datenprüfungsergebnis"
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr "Datenprüfungsergebnisse"
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr "Kann Datenprüfungen ausführen"
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr "Kann Datenprüfungsprobleme lösen"
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 msgid "E-Mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 msgid "Owner"
 msgstr "Leiter"
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr "Datei abgelaufen am"
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr "Generierte HTML-Datei"
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr "Generierte PDF-Datei"
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr "PDF-Dateien"
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr "Task-Ergebnis"
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr "Task-Benutzer"
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr "Task-Benutzer-Zuordnung"
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr "Task-Benutzer-Zuordnungen"
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 msgid "Additional attributes"
 msgstr "Zusätzliche Attribute"
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr "Erlaubte Scopes, die ein Client anfordern kann"
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr "Dieses Bild wird im Autorisierungs-Vorgang als Symbol angezeigt werden. Es sollte rechteckig sein."
 
@@ -1085,86 +1122,100 @@ msgid "Allow users to change their passwords"
 msgstr "Erlaube Benutzern, ihr Passwort zu ändern"
 
 #: aleksis/core/preferences.py:279
+#, fuzzy
+#| msgid "Allow users to change their passwords"
+msgid "Allow users to reset their passwords"
+msgstr "Erlaube Benutzern, ihr Passwort zu ändern"
+
+#: aleksis/core/preferences.py:287
 msgid "Enable signup"
 msgstr "Registrierung aktivieren"
 
-#: aleksis/core/preferences.py:287
+#: aleksis/core/preferences.py:295
+msgid "Regular expression for allowed usernames"
+msgstr ""
+
+#: aleksis/core/preferences.py:303
 msgid "Enable invitations"
 msgstr "Einladungen aktivieren"
 
-#: aleksis/core/preferences.py:295
+#: aleksis/core/preferences.py:311
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
 msgstr "Länge des Einladungscodes. (Standard: 3: abcde-acbde-abcde)"
 
-#: aleksis/core/preferences.py:303
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr "Größe der Pakete. (Standard 5: abcde)"
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Erlaubte Grant Flows für OAuth-Anwendungen"
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr "Verfügbare Sprachen"
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr "E-Mails versenden, wenn Datenprüfungen Probleme finden"
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr "E-Mailempfänger für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr "E-Mail-Empfängergruppen für Datenprüfungsproblem-E-Mails"
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr "Zeige Dashboard für Benutzer ohne Login"
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten"
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr "Felder des Personen-Models welche von ihnen selbst editierbar sind."
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr "Editierbare Felder des Personen-Models welche eine Benachrichtigung für Änderungen auslösen soll"
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr "Kontakt für Benachrichtigung, wenn eine Person ihre Daten ändert"
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr "PDF-Datei-Ablaufdauer"
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr "in Minuten"
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr "Automatisch das Dashboard und seine Widgets aktualisieren"
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr "Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen Seite)"
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr "Land für das Einlesen von Telefonnummern"
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr "Englisch"
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr "Deutsch"
 
@@ -1172,7 +1223,7 @@ msgstr "Deutsch"
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr "Bearbeiten"
@@ -1190,7 +1241,7 @@ msgstr "Aktionen"
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr "Löschen"
@@ -1253,6 +1304,10 @@ msgstr ""
 "      Sie können diese auch direkt kontaktieren:\n"
 "          "
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1553,19 +1608,15 @@ msgstr "Empfänger"
 msgid "There are no announcements."
 msgstr "Es gibt aktuell keine Ankündigungen."
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr "Angemeldet als"
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr "Über AlekSIS® — The Free School Information System"
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr "Impressum"
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr "Datenschutzerklärung"
 
@@ -1817,7 +1868,7 @@ msgstr "Gruppe editieren"
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr "Einstellungen ändern"
 
@@ -2033,11 +2084,11 @@ msgstr "Zurück"
 msgid "System checks"
 msgstr "Systemprüfungen"
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr "Wartungsmodus aktiviert"
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
@@ -2047,19 +2098,19 @@ msgstr ""
 "                Nur Administratoren und Besucher von internen IP-Adressen können die Seite aufrufen.\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr "Wartungsmodus deaktiviert"
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr "Jeder kann die Seite aufrufen."
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr "Debug-Modus aktiviert"
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
@@ -2069,11 +2120,11 @@ msgstr ""
 "                Der Server gibt Debug-Informationen bei Fehlern zurück. Nicht im Produktivbetrieb nutzen!\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr "Debug-Modus deaktivert"
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
@@ -2083,42 +2134,42 @@ msgstr ""
 "                Debug-Modus ist deaktiviert. Standard-Fehlerseiten werden bei Fehlern angezeigt.\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
 msgstr "Systemprüfungen"
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr "Dienst"
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
 msgstr "Status"
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr "Dauer"
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr "Sekunden"
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr "Celery Task-Ergebnisse"
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr "Task"
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr "ID"
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 msgid "Date done"
 msgstr "Erledigungszeitpunkt"
 
@@ -2171,6 +2222,20 @@ msgstr ""
 "              Gültig von %(from)s – %(until)s\n"
 "            "
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+#, fuzzy
+#| msgid "Authentication"
+msgid "Identicon"
+msgstr "Authentifizierung"
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr "Verändert von"
@@ -2270,24 +2335,24 @@ msgid "Edit person"
 msgstr "Person editieren"
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 msgid "Impersonate"
 msgstr "Verkleiden"
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
 msgstr "Benutzer einladen"
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr "Kontaktdetails"
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr "Diese Person hat kein persönliches Foto hochgeladen."
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr "Kinder"
 
@@ -2337,9 +2402,7 @@ msgstr "Die Einladungsfunktion ist deaktiviert."
 
 #: aleksis/core/templates/invitations/disabled.html:15
 msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
-msgstr ""
-"Um sie zu aktivieren, nutzen Sie die Checkbox im Abschnitt \"Authentifikation"
-"\" der "
+msgstr "Um sie zu aktivieren, nutzen Sie die Checkbox im Abschnitt \"Authentifikation\" der "
 
 #: aleksis/core/templates/invitations/disabled.html:16
 msgid "site preferences page"
@@ -2498,15 +2561,17 @@ msgstr "Keine autorisierten Anwendungen."
 msgid "Network error"
 msgstr "Netzwerkfehler"
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+#, fuzzy
+#| msgid ""
+#| "No internet\n"
+#| "    connection."
+msgid "No internet connection."
 msgstr ""
 "Keine\n"
 "    Internetverbindung."
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2788,7 +2853,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr "Zwei-Faktor-Authentifizierung aktivieren"
 
@@ -2920,15 +2985,15 @@ msgstr "Gerät aktuell nicht verfügbar?"
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr "Oder, alternativ, nutzen Sie eins Ihrer Backup-Telefone:"
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr "Als letzte Möglichkeit können Sie einen Backup-Token nutzen:"
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr "Backup-Token nutzen"
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr "Alternative Anmeldemöglichkeiten nutzen"
 
@@ -3241,11 +3306,11 @@ msgstr ""
 "          Accountsicherheit.\n"
 "      "
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr "E-Mail"
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr "SMS"
 
@@ -3269,162 +3334,166 @@ msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 msgid "Download PDF"
 msgstr "PDF herunterladen"
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr "Das Schuljahr wurde erstellt."
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr "Das Schuljahr wurde gespeichert."
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr "Die Untergruppen wurden gespeichert."
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr "Die Person wurde gespeichert."
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr "Die Gruppe wurde gespeichert."
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr "Die Ankündigung wurde gespeichert."
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr "Ankündigung wurde gelöscht."
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr "Das angeforderte Einstellungsregister existiert nicht"
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr "Die Einstellungen wurde gespeichert."
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr "Die Person wurde gelöscht."
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr "Die Gruppe wurde gelöscht."
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr "Das zusätzliche Feld wurde gespeichert."
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr "Das zusätzliche Feld wurde gelöscht."
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr "Der Gruppentyp wurde gespeichert."
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr "Der Gruppentyp wurde gelöscht."
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr "Fortschritt: Datenprüfungen ausführen"
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 msgid "Run data checks …"
 msgstr "Datenprüfungen laufen …"
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr "Die Lösungsoption \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr "Die angeforderte Lösungsoption existiert nicht"
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr "Das Dashboard-Widget wurde gespeichert."
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr "Das Dashboard-Widget wurde erstellt."
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr "Das Dashboard-Widget wurde gelöscht."
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr "Die Einladung wurde erfolgreich erstellt. Der Einladungscode ist {code}"
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr "Die globale Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr "Die globale Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr "Die angeforderte PDF-Datei existiert nicht"
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr "Der angeforderte Task existiert nicht oder ist nicht abrufbar"
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr "Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige verfügbare Anmeldeoption ist."
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
-msgstr ""
-"Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren "
-"Anweisungen wurde an sie verschickt."
+msgstr "Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren Anweisungen wurde an sie verschickt."
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 msgid "Person was already invited."
 msgstr "Person wurde bereits eingeladen."
 
+#~ msgid "Me"
+#~ msgstr "Ich"
+
+#~ msgid "Logged in as"
+#~ msgstr "Angemeldet als"
+
 #~ msgid "Person was invited successfully."
 #~ msgstr "Person wurde erfolgreich eingeladen."
 
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
index 376788f8a..c0b719bf0 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\n"
 "PO-Revision-Date: 2021-10-28 14:37+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core-js/de/>\n"
@@ -30,6 +30,6 @@ msgstr "Abbrechen"
 msgid "OK"
 msgstr "OK"
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr "Diese Seite enthält vielleicht veraltete Informationen, da es keine Internetverbindung gibt."
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po
index ac9b5f99c..231a5f739 100644
--- a/aleksis/core/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\n"
 "PO-Revision-Date: 2021-06-16 12:00+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis/fr/>\n"
@@ -40,10 +40,10 @@ msgstr "Détails de contact"
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 #, fuzzy
 #| msgid "Group"
 msgid "Groups"
@@ -70,8 +70,8 @@ msgstr ""
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -97,11 +97,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr "groupe"
 
@@ -141,7 +141,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr "Cet nom est deja en utilisation."
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr ""
 
@@ -152,7 +152,7 @@ msgid "Common data"
 msgstr "Détails de contact"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 #, fuzzy
@@ -166,18 +166,18 @@ msgstr "Personne"
 msgid "Additional data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr "Date"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr ""
 
@@ -213,11 +213,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr "Prénom"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr "Nom de famille"
 
@@ -267,7 +267,15 @@ msgstr ""
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+msgid "The selected action does not exist."
+msgstr ""
+
+#: aleksis/core/forms.py:739
+msgid "You do not have permission to run {} on all selected objects."
+msgstr ""
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr ""
 
@@ -310,123 +318,76 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr ""
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr ""
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr ""
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr ""
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr ""
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr ""
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr ""
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr ""
-
-#: aleksis/core/menus.py:113
-msgid "Third-party accounts"
-msgstr ""
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr ""
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 msgid "Dashboard widgets"
 msgstr ""
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr ""
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr ""
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 msgid "Data checks"
 msgstr ""
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr ""
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 msgid "OAuth2 Applications"
 msgstr ""
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -434,594 +395,663 @@ msgstr ""
 msgid "Group types"
 msgstr "Groupe"
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 #, fuzzy
 #| msgid "Contact details"
 msgid "Invite person"
 msgstr "Détails de contact"
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr ""
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr ""
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr ""
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr ""
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr ""
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr ""
+
+#: aleksis/core/menus.py:301
+msgid "Third-party accounts"
+msgstr ""
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr ""
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr ""
+
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 #, fuzzy
 #| msgid "Contact details"
 msgid "Start date"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr "Personne"
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view contact details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view photo"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view avatar image"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view persons groups"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view personal details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
 msgstr "Prénom"
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr "Sexe"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr "Description"
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+#, fuzzy
+#| msgid "Description"
+msgid "Help text / description"
+msgstr "Description"
+
+#: aleksis/core/models.py:468
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view statistics about group."
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Nom de famille"
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+msgid "Send notification at"
+msgstr ""
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+msgid "Content"
+msgstr ""
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view system status"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can impersonate"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can invite persons"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 #, fuzzy
 #| msgid "Contact details"
 msgid "E-Mail address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 #, fuzzy
 #| msgid "Owners"
 msgid "Owner"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional attributes"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1148,88 +1178,100 @@ msgid "Allow users to change their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:279
-msgid "Enable signup"
+msgid "Allow users to reset their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:287
-msgid "Enable invitations"
+msgid "Enable signup"
 msgstr ""
 
 #: aleksis/core/preferences.py:295
-msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgid "Regular expression for allowed usernames"
 msgstr ""
 
 #: aleksis/core/preferences.py:303
+msgid "Enable invitations"
+msgstr ""
+
+#: aleksis/core/preferences.py:311
+msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgstr ""
+
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 #, fuzzy
 #| msgid "Contact details"
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Détails de contact"
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr ""
 
@@ -1237,7 +1279,7 @@ msgstr ""
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
@@ -1255,7 +1297,7 @@ msgstr ""
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr ""
@@ -1302,6 +1344,10 @@ msgid ""
 "          "
 msgstr ""
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1560,19 +1606,15 @@ msgstr ""
 msgid "There are no announcements."
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr ""
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr ""
 
@@ -1799,7 +1841,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
@@ -1993,83 +2035,83 @@ msgstr ""
 msgid "System checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 #, fuzzy
 #| msgid "Date"
 msgid "Date done"
@@ -2112,6 +2154,18 @@ msgid ""
 "            "
 msgstr ""
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+msgid "Identicon"
+msgstr ""
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr ""
@@ -2206,26 +2260,26 @@ msgid "Edit person"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 #, fuzzy
 #| msgid "Contact details"
 msgid "Impersonate"
 msgstr "Détails de contact"
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr "Détails de contact"
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr ""
 
@@ -2441,13 +2495,11 @@ msgstr "Détails de contact"
 msgid "Network error"
 msgstr ""
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+msgid "No internet connection."
 msgstr ""
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2697,7 +2749,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr ""
 
@@ -2802,15 +2854,15 @@ msgstr ""
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr ""
 
@@ -3047,11 +3099,11 @@ msgid ""
 "      "
 msgstr ""
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr ""
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr ""
 
@@ -3075,157 +3127,157 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 #, fuzzy
 #| msgid "This username is already in use."
 msgid "Person was already invited."
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
index 9f07be290..0f31d087d 100644
--- a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\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"
@@ -30,6 +30,6 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""
diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po
index 4b2afb73b..fd7a3aa48 100644
--- a/aleksis/core/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/la/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\n"
 "PO-Revision-Date: 2020-12-19 12:57+0000\n"
 "Last-Translator: Julian <leuckerj@gmail.com>\n"
 "Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis/la/>\n"
@@ -44,10 +44,10 @@ msgstr "Inscriptio electronica"
 msgid "Home and mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
 msgstr "Greges"
 
@@ -74,8 +74,8 @@ msgstr ""
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -101,11 +101,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr "Grex"
 
@@ -145,7 +145,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr "Anus scolae"
 
@@ -156,7 +156,7 @@ msgid "Common data"
 msgstr "Adminstratio datarum"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -168,18 +168,18 @@ msgstr "personae"
 msgid "Additional data"
 msgstr "addita nomines"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr "Photographia"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr "dies"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr "tempus"
 
@@ -215,11 +215,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr "Primus nomen"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr "Secondus nomen"
 
@@ -275,7 +275,15 @@ msgstr ""
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+msgid "The selected action does not exist."
+msgstr ""
+
+#: aleksis/core/forms.py:739
+msgid "You do not have permission to run {} on all selected objects."
+msgstr ""
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr ""
 
@@ -322,81 +330,30 @@ msgstr "Muta informationes scolae"
 msgid "Dashboard"
 msgstr "Forum"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr "Nuntii"
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr ""
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr "Simulandum aliquem finire"
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr "nomen retractare"
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr ""
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr ""
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr ""
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr ""
-
-#: aleksis/core/menus.py:113
-#, fuzzy
-#| msgid "Persons and accounts"
-msgid "Third-party accounts"
-msgstr "Personae et computi"
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-#, fuzzy
-#| msgid "Notifications"
-msgid "Authorized applications"
-msgstr "Nuntii"
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr "Administratio"
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Nuntii"
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr "ani scolae"
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 #, fuzzy
@@ -404,41 +361,41 @@ msgstr "ani scolae"
 msgid "Dashboard widgets"
 msgstr "Forum"
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr "Status systemae"
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 #, fuzzy
 #| msgid "Notification"
 msgid "Configuration"
 msgstr "Nuntius"
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 #, fuzzy
 #| msgid "System status"
 msgid "Data checks"
 msgstr "Status systemae"
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr ""
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 #, fuzzy
@@ -446,11 +403,11 @@ msgstr ""
 msgid "OAuth2 Applications"
 msgstr "Nuntii"
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr "Personae"
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -458,11 +415,11 @@ msgstr "Personae"
 msgid "Group types"
 msgstr "Greges"
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 #, fuzzy
@@ -470,616 +427,691 @@ msgstr ""
 msgid "Additional fields"
 msgstr "addita nomines"
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Invite person"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr ""
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr "Simulandum aliquem finire"
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr ""
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr ""
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr ""
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr ""
+
+#: aleksis/core/menus.py:301
+#, fuzzy
+#| msgid "Persons and accounts"
+msgid "Third-party accounts"
+msgstr "Personae et computi"
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+#, fuzzy
+#| msgid "Notifications"
+msgid "Authorized applications"
+msgstr "Nuntii"
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr "nomen retractare"
+
 #: aleksis/core/mixins.py:511
 #, fuzzy
 #| msgid "Edit school term"
 msgid "Linked school term"
 msgstr "Muta anum scolae"
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr "Dies et hora"
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 #, fuzzy
 #| msgid "E-mail address"
 msgid "IP address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr "Nomen"
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr "Persona"
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view contact details"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view photo"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view avatar image"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view persons groups"
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can view personal details"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr "femininum"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr "maskulinum"
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 msgid "Short name"
 msgstr "Breve nomen"
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr "Via"
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr "Numerus domini"
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr "Numerus directorius"
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr "Urbs"
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr "Numerus telephoni domi"
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr "Genus"
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr "Parentes"
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr "Descriptio"
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+#, fuzzy
+#| msgid "Site description"
+msgid "Help text / description"
+msgstr "Descriptio paginae"
+
+#: aleksis/core/models.py:468
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional field for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional fields for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view statistics about group."
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titulus"
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr "Mittens"
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+#, fuzzy
+#| msgid "Notification"
+msgid "Send notification at"
+msgstr "Nuntius"
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipient"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipients"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget Title"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget is broken"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Can edit default dashboard"
 msgstr "Forum"
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widgets"
 msgstr "Forum"
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 #, fuzzy
 #| msgid "Icon"
 msgid "Icon URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+msgid "Content"
+msgstr ""
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget order"
 msgstr "Forum"
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget orders"
 msgstr "Forum"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Grex"
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 #, fuzzy
 #| msgid "System status"
 msgid "Can view system status"
 msgstr "Status systemae"
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 #, fuzzy
 #| msgid "Data management"
 msgid "Can manage data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can impersonate"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can invite persons"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification sent"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 #, fuzzy
 #| msgid "E-mail address"
 msgid "E-Mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional attributes"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1214,88 +1246,100 @@ msgid "Allow users to change their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:279
-msgid "Enable signup"
+msgid "Allow users to reset their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:287
-msgid "Enable invitations"
+msgid "Enable signup"
 msgstr ""
 
 #: aleksis/core/preferences.py:295
-msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgid "Regular expression for allowed usernames"
 msgstr ""
 
 #: aleksis/core/preferences.py:303
+msgid "Enable invitations"
+msgstr ""
+
+#: aleksis/core/preferences.py:311
+msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgstr ""
+
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr "Britannicus"
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr "Germanus"
 
@@ -1303,7 +1347,7 @@ msgstr "Germanus"
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
@@ -1323,7 +1367,7 @@ msgstr "Nuntii"
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr ""
@@ -1370,6 +1414,10 @@ msgid ""
 "          "
 msgstr ""
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1646,19 +1694,15 @@ msgstr ""
 msgid "There are no announcements."
 msgstr "Scribe nuntium:"
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr ""
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr ""
 
@@ -1893,7 +1937,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
@@ -2099,87 +2143,87 @@ msgstr ""
 msgid "System checks"
 msgstr "Status systemae"
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 #, fuzzy
 #| msgid "System status"
 msgid "System health checks"
 msgstr "Status systemae"
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 #, fuzzy
 #| msgid "System status"
 msgid "Status"
 msgstr "Status systemae"
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 #, fuzzy
 #| msgid "Date"
 msgid "Date done"
@@ -2222,6 +2266,20 @@ msgid ""
 "            "
 msgstr ""
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+#, fuzzy
+#| msgid "Notifications"
+msgid "Identicon"
+msgstr "Nuntii"
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr ""
@@ -2316,28 +2374,28 @@ msgid "Edit person"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 #, fuzzy
 #| msgid "Impersonation"
 msgid "Impersonate"
 msgstr "Simulare aliquem"
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 #, fuzzy
 #| msgid "Impersonation"
 msgid "Invite user"
 msgstr "Simulare aliquem"
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr ""
 
@@ -2559,13 +2617,11 @@ msgstr "Nuntii"
 msgid "Network error"
 msgstr ""
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+msgid "No internet connection."
 msgstr ""
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2824,7 +2880,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr ""
 
@@ -2929,15 +2985,15 @@ msgstr ""
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr ""
 
@@ -3174,11 +3230,11 @@ msgid ""
 "      "
 msgstr ""
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr ""
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr ""
 
@@ -3202,159 +3258,159 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 #, fuzzy
 #| msgid "System status"
 msgid "Run data checks …"
 msgstr "Status systemae"
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 msgid "Person was already invited."
 msgstr ""
 
diff --git a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
index dfec73c5c..f3df4c3fc 100644
--- a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\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"
@@ -29,6 +29,6 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
index ab1f6b974..71dc8727c 100644
--- a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\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"
@@ -37,10 +37,10 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
 msgstr ""
 
@@ -65,8 +65,8 @@ msgstr ""
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -90,11 +90,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr ""
 
@@ -130,7 +130,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr ""
 
@@ -139,7 +139,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -149,18 +149,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr ""
 
@@ -196,11 +196,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr ""
 
@@ -248,7 +248,15 @@ msgstr ""
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+msgid "The selected action does not exist."
+msgstr ""
+
+#: aleksis/core/forms.py:739
+msgid "You do not have permission to run {} on all selected objects."
+msgstr ""
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr ""
 
@@ -291,678 +299,698 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr ""
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr ""
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr ""
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr ""
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr ""
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr ""
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr ""
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr ""
-
-#: aleksis/core/menus.py:113
-msgid "Third-party accounts"
-msgstr ""
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr ""
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 msgid "Dashboard widgets"
 msgstr ""
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr ""
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr ""
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 msgid "Data checks"
 msgstr ""
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr ""
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 msgid "OAuth2 Applications"
 msgstr ""
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr ""
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr ""
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr ""
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr ""
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr ""
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr ""
+
+#: aleksis/core/menus.py:301
+msgid "Third-party accounts"
+msgstr ""
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr ""
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr ""
+
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+msgid "Help text / description"
+msgstr ""
+
+#: aleksis/core/models.py:468
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+msgid "Send notification at"
+msgstr ""
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+msgid "Content"
+msgstr ""
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1083,86 +1111,98 @@ msgid "Allow users to change their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:279
-msgid "Enable signup"
+msgid "Allow users to reset their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:287
-msgid "Enable invitations"
+msgid "Enable signup"
 msgstr ""
 
 #: aleksis/core/preferences.py:295
-msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgid "Regular expression for allowed usernames"
 msgstr ""
 
 #: aleksis/core/preferences.py:303
+msgid "Enable invitations"
+msgstr ""
+
+#: aleksis/core/preferences.py:311
+msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgstr ""
+
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr ""
 
@@ -1170,7 +1210,7 @@ msgstr ""
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
@@ -1188,7 +1228,7 @@ msgstr ""
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr ""
@@ -1235,6 +1275,10 @@ msgid ""
 "          "
 msgstr ""
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1493,19 +1537,15 @@ msgstr ""
 msgid "There are no announcements."
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr ""
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr ""
 
@@ -1726,7 +1766,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
@@ -1916,83 +1956,83 @@ msgstr ""
 msgid "System checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 msgid "Date done"
 msgstr ""
 
@@ -2033,6 +2073,18 @@ msgid ""
 "            "
 msgstr ""
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+msgid "Identicon"
+msgstr ""
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr ""
@@ -2123,24 +2175,24 @@ msgid "Edit person"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 msgid "Impersonate"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr ""
 
@@ -2345,13 +2397,11 @@ msgstr ""
 msgid "Network error"
 msgstr ""
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+msgid "No internet connection."
 msgstr ""
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2595,7 +2645,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr ""
 
@@ -2699,15 +2749,15 @@ msgstr ""
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr ""
 
@@ -2944,11 +2994,11 @@ msgid ""
 "      "
 msgstr ""
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr ""
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr ""
 
@@ -2972,157 +3022,157 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 msgid "Person was already invited."
 msgstr ""
 
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
index dfec73c5c..f3df4c3fc 100644
--- a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\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"
@@ -29,6 +29,6 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
index 2973720cd..d5a2d5f06 100644
--- a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:19+0100\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"
@@ -37,10 +37,10 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
-#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
+#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:250
+#: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
 msgstr ""
 
@@ -65,8 +65,8 @@ msgstr ""
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
-#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:105
-#: aleksis/core/templates/core/base.html:106
+#: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
+#: aleksis/core/templates/core/base.html:140
 #: aleksis/core/templates/core/group/list.html:20
 #: aleksis/core/templates/core/person/list.html:24
 #: aleksis/core/templates/search/search.html:7
@@ -90,11 +90,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:688
+#: aleksis/core/filters.py:113 aleksis/core/models.py:713
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:461
+#: aleksis/core/filters.py:135 aleksis/core/models.py:486
 msgid "Group"
 msgstr ""
 
@@ -130,7 +130,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:130
+#: aleksis/core/forms.py:153 aleksis/core/models.py:134
 msgid "School term"
 msgstr ""
 
@@ -139,7 +139,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:254 aleksis/core/models.py:153
+#: aleksis/core/menus.py:174 aleksis/core/models.py:157
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -149,18 +149,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:206
-#: aleksis/core/models.py:514
+#: aleksis/core/forms.py:157 aleksis/core/models.py:210
+#: aleksis/core/models.py:539
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:73
+#: aleksis/core/models.py:77
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:85
 msgid "Time"
 msgstr ""
 
@@ -196,11 +196,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:181
+#: aleksis/core/forms.py:418 aleksis/core/models.py:185
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:182
+#: aleksis/core/forms.py:419 aleksis/core/models.py:186
 msgid "Last name"
 msgstr ""
 
@@ -248,7 +248,15 @@ msgstr ""
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:775
+#: aleksis/core/forms.py:728
+msgid "The selected action does not exist."
+msgstr ""
+
+#: aleksis/core/forms.py:739
+msgid "You do not have permission to run {} on all selected objects."
+msgstr ""
+
+#: aleksis/core/forms.py:795
 msgid "No valid selection."
 msgstr ""
 
@@ -291,678 +299,698 @@ msgstr ""
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:734
-#: aleksis/core/preferences.py:29
+#: aleksis/core/menus.py:41 aleksis/core/models.py:765
+#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81
 #: aleksis/core/templates/core/notifications.html:4
 #: aleksis/core/templates/core/notifications.html:5
 msgid "Notifications"
 msgstr ""
 
 #: aleksis/core/menus.py:53
-msgid "Account"
-msgstr ""
-
-#: aleksis/core/menus.py:60
-msgid "Stop impersonation"
-msgstr ""
-
-#: aleksis/core/menus.py:69 aleksis/core/templates/core/base.html:80
-msgid "Logout"
-msgstr ""
-
-#: aleksis/core/menus.py:75
-msgid "2FA"
-msgstr ""
-
-#: aleksis/core/menus.py:83
-#: aleksis/core/templates/account/password_change.html:5
-#: aleksis/core/templates/account/password_change.html:6
-#: aleksis/core/templates/account/password_change.html:19
-#: aleksis/core/templates/account/password_reset_from_key.html:5
-#: aleksis/core/templates/account/password_reset_from_key.html:42
-#: aleksis/core/templates/account/password_reset_from_key.html:46
-#: aleksis/core/templates/account/password_reset_from_key_done.html:5
-#: aleksis/core/templates/account/password_reset_from_key_done.html:6
-msgid "Change password"
-msgstr ""
-
-#: aleksis/core/menus.py:95
-msgid "Me"
-msgstr ""
-
-#: aleksis/core/menus.py:104
-#: aleksis/core/templates/dynamic_preferences/form.html:5
-msgid "Preferences"
-msgstr ""
-
-#: aleksis/core/menus.py:113
-msgid "Third-party accounts"
-msgstr ""
-
-#: aleksis/core/menus.py:122
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr ""
-
-#: aleksis/core/menus.py:133
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:141 aleksis/core/models.py:834
+#: aleksis/core/menus.py:61 aleksis/core/models.py:865
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:152 aleksis/core/models.py:131
+#: aleksis/core/menus.py:72 aleksis/core/models.py:135
 #: aleksis/core/templates/core/school_term/list.html:8
 #: aleksis/core/templates/core/school_term/list.html:9
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/menus.py:163
+#: aleksis/core/menus.py:83
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 msgid "Dashboard widgets"
 msgstr ""
 
-#: aleksis/core/menus.py:174
+#: aleksis/core/menus.py:94
 #: aleksis/core/templates/core/management/data_management.html:6
 #: aleksis/core/templates/core/management/data_management.html:7
 msgid "Data management"
 msgstr ""
 
-#: aleksis/core/menus.py:185
+#: aleksis/core/menus.py:105
 #: aleksis/core/templates/core/pages/system_status.html:5
 #: aleksis/core/templates/core/pages/system_status.html:7
 msgid "System status"
 msgstr ""
 
-#: aleksis/core/menus.py:196
+#: aleksis/core/menus.py:116
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:207 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 msgid "Data checks"
 msgstr ""
 
-#: aleksis/core/menus.py:213 aleksis/core/templates/core/perms/list.html:13
+#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
 #: aleksis/core/templates/core/perms/list.html:14
 msgid "Manage permissions"
 msgstr ""
 
-#: aleksis/core/menus.py:224
+#: aleksis/core/menus.py:144
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:232
+#: aleksis/core/menus.py:152
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 msgid "OAuth2 Applications"
 msgstr ""
 
-#: aleksis/core/menus.py:245
+#: aleksis/core/menus.py:165
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:276 aleksis/core/models.py:1055
+#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:287
+#: aleksis/core/menus.py:207
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:298 aleksis/core/models.py:510
+#: aleksis/core/menus.py:218 aleksis/core/models.py:535
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/menus.py:309
+#: aleksis/core/menus.py:229
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:322
+#: aleksis/core/menus.py:242
 #: aleksis/core/templates/core/group/child_groups.html:7
 #: aleksis/core/templates/core/group/child_groups.html:9
 msgid "Assign child groups to groups"
 msgstr ""
 
+#: aleksis/core/menus.py:254
+msgid "Stop impersonation"
+msgstr ""
+
+#: aleksis/core/menus.py:263
+msgid "Account"
+msgstr ""
+
+#: aleksis/core/menus.py:272
+#: aleksis/core/templates/dynamic_preferences/form.html:5
+msgid "Preferences"
+msgstr ""
+
+#: aleksis/core/menus.py:281
+msgid "2FA"
+msgstr ""
+
+#: aleksis/core/menus.py:289
+#: aleksis/core/templates/account/password_change.html:5
+#: aleksis/core/templates/account/password_change.html:6
+#: aleksis/core/templates/account/password_change.html:19
+#: aleksis/core/templates/account/password_reset_from_key.html:5
+#: aleksis/core/templates/account/password_reset_from_key.html:42
+#: aleksis/core/templates/account/password_reset_from_key.html:46
+#: aleksis/core/templates/account/password_reset_from_key_done.html:5
+#: aleksis/core/templates/account/password_reset_from_key_done.html:6
+msgid "Change password"
+msgstr ""
+
+#: aleksis/core/menus.py:301
+msgid "Third-party accounts"
+msgstr ""
+
+#: aleksis/core/menus.py:310
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
+#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
+msgid "Authorized applications"
+msgstr ""
+
+#: aleksis/core/menus.py:320
+msgid "Logout"
+msgstr ""
+
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:71
+#: aleksis/core/models.py:75
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:72
+#: aleksis/core/models.py:76
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:74
+#: aleksis/core/models.py:78
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:79
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:76 aleksis/core/models.py:199
+#: aleksis/core/models.py:80 aleksis/core/models.py:203
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:81
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:82
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:83
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:84
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:86
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:94 aleksis/core/models.py:1024
+#: aleksis/core/models.py:98 aleksis/core/models.py:1068
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:96
+#: aleksis/core/models.py:100
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:97
+#: aleksis/core/models.py:101
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:116
+#: aleksis/core/models.py:120
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:123
+#: aleksis/core/models.py:127
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:152 aleksis/core/models.py:973
+#: aleksis/core/models.py:156 aleksis/core/models.py:1017
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:155
+#: aleksis/core/models.py:159
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:156
+#: aleksis/core/models.py:160
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:157
+#: aleksis/core/models.py:161
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:158
+#: aleksis/core/models.py:162
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:163
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:164
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:174
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:178 aleksis/core/models.py:1227
+#: aleksis/core/models.py:182 aleksis/core/models.py:1271
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:184
+#: aleksis/core/models.py:188
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:188 aleksis/core/models.py:479
+#: aleksis/core/models.py:192 aleksis/core/models.py:504
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:191
+#: aleksis/core/models.py:195
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:192
+#: aleksis/core/models.py:196
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:193
+#: aleksis/core/models.py:197
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:194
+#: aleksis/core/models.py:198
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:196 aleksis/core/templates/core/person/full.html:172
+#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:197 aleksis/core/templates/core/person/full.html:182
+#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:201
+#: aleksis/core/models.py:205
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:202
+#: aleksis/core/models.py:206
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:207
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:210 aleksis/core/models.py:518
+#: aleksis/core/models.py:214 aleksis/core/models.py:543
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:215 aleksis/core/models.py:522
+#: aleksis/core/models.py:219 aleksis/core/models.py:547
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:218 aleksis/core/models.py:525
+#: aleksis/core/models.py:222 aleksis/core/models.py:550
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:223 aleksis/core/templates/core/person/full.html:239
+#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:230
+#: aleksis/core/models.py:234
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:233 aleksis/core/models.py:692
-#: aleksis/core/models.py:716 aleksis/core/models.py:801
-#: aleksis/core/models.py:1048
+#: aleksis/core/models.py:237 aleksis/core/models.py:717
+#: aleksis/core/models.py:741 aleksis/core/models.py:832
+#: aleksis/core/models.py:1092
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:434
+#: aleksis/core/models.py:457
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:436
+#: aleksis/core/models.py:459
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:443
+#: aleksis/core/models.py:461
+msgid "Required"
+msgstr ""
+
+#: aleksis/core/models.py:462
+msgid "Help text / description"
+msgstr ""
+
+#: aleksis/core/models.py:468
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:444
+#: aleksis/core/models.py:469
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:489
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:490
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:502
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:490 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:497 aleksis/core/templates/core/group/full.html:55
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:505
+#: aleksis/core/models.py:530
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:691 aleksis/core/models.py:715
-#: aleksis/core/models.py:800
+#: aleksis/core/models.py:716 aleksis/core/models.py:740
+#: aleksis/core/models.py:831
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:694
+#: aleksis/core/models.py:719
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:700
+#: aleksis/core/models.py:725
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:701
+#: aleksis/core/models.py:726
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:707
+#: aleksis/core/models.py:732
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:712
+#: aleksis/core/models.py:737
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:717 aleksis/core/models.py:1025
+#: aleksis/core/models.py:742 aleksis/core/models.py:1069
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:744
+msgid "Send notification at"
+msgstr ""
+
+#: aleksis/core/models.py:746
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:720
+#: aleksis/core/models.py:747
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:764
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:802
+#: aleksis/core/models.py:833
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:805
+#: aleksis/core/models.py:836
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:808
+#: aleksis/core/models.py:839
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:864
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:871
+#: aleksis/core/models.py:902
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:872
+#: aleksis/core/models.py:903
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:894
+#: aleksis/core/models.py:925
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:895
+#: aleksis/core/models.py:926
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:896
+#: aleksis/core/models.py:927
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:899
+#: aleksis/core/models.py:930
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:900
+#: aleksis/core/models.py:931
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:936
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:906
+#: aleksis/core/models.py:937
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:911
+#: aleksis/core/models.py:942
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:912
+#: aleksis/core/models.py:943
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:917
+#: aleksis/core/models.py:948
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:918
+#: aleksis/core/models.py:949
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:980
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:981
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:982
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:957
+#: aleksis/core/models.py:988
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:989
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:964
+#: aleksis/core/models.py:995
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:965
+#: aleksis/core/models.py:996
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:970
+#: aleksis/core/models.py:1002
+msgid "Content"
+msgstr ""
+
+#: aleksis/core/models.py:1008
+msgid "Static content widget"
+msgstr ""
+
+#: aleksis/core/models.py:1009
+msgid "Static content widgets"
+msgstr ""
+
+#: aleksis/core/models.py:1014
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:975
+#: aleksis/core/models.py:1019
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:976
+#: aleksis/core/models.py:1020
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1035
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1036
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1042
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1055
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1056
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1066
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1032
+#: aleksis/core/models.py:1076
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1033
+#: aleksis/core/models.py:1077
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1047
+#: aleksis/core/models.py:1091
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1054 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1112
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1069
+#: aleksis/core/models.py:1113
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1070
+#: aleksis/core/models.py:1114
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1071
+#: aleksis/core/models.py:1115
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1072
+#: aleksis/core/models.py:1116
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1073
+#: aleksis/core/models.py:1117
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1074
+#: aleksis/core/models.py:1118
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1075
+#: aleksis/core/models.py:1119
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1120
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1156
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1164
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1165
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1178
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1179
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1181
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1182
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1145
+#: aleksis/core/models.py:1189
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1221
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1225
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1227
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1229
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1192
+#: aleksis/core/models.py:1236
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1193
+#: aleksis/core/models.py:1237
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1198
+#: aleksis/core/models.py:1242
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1201
+#: aleksis/core/models.py:1245
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1213
+#: aleksis/core/models.py:1257
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1214
+#: aleksis/core/models.py:1258
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1230
+#: aleksis/core/models.py:1274
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1268
+#: aleksis/core/models.py:1312
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1278
+#: aleksis/core/models.py:1322
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
@@ -1083,86 +1111,98 @@ msgid "Allow users to change their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:279
-msgid "Enable signup"
+msgid "Allow users to reset their passwords"
 msgstr ""
 
 #: aleksis/core/preferences.py:287
-msgid "Enable invitations"
+msgid "Enable signup"
 msgstr ""
 
 #: aleksis/core/preferences.py:295
-msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgid "Regular expression for allowed usernames"
 msgstr ""
 
 #: aleksis/core/preferences.py:303
+msgid "Enable invitations"
+msgstr ""
+
+#: aleksis/core/preferences.py:311
+msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
+msgstr ""
+
+#: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
 msgstr ""
 
-#: aleksis/core/preferences.py:314
+#: aleksis/core/preferences.py:330
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:328
+#: aleksis/core/preferences.py:344
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:341
+#: aleksis/core/preferences.py:357
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:352
+#: aleksis/core/preferences.py:368
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:363
+#: aleksis/core/preferences.py:379
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:372
+#: aleksis/core/preferences.py:388
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:381
+#: aleksis/core/preferences.py:397
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:392
+#: aleksis/core/preferences.py:408
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:407
+#: aleksis/core/preferences.py:423
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:421
+#: aleksis/core/preferences.py:437
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:432
+#: aleksis/core/preferences.py:448
+msgid "Prefer personal photos over avatars"
+msgstr ""
+
+#: aleksis/core/preferences.py:458
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:433
+#: aleksis/core/preferences.py:459
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:443
+#: aleksis/core/preferences.py:469
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:453
+#: aleksis/core/preferences.py:479
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:463
+#: aleksis/core/preferences.py:489
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:529
+#: aleksis/core/settings.py:540
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:530
+#: aleksis/core/settings.py:541
 msgid "German"
 msgstr ""
 
@@ -1170,7 +1210,7 @@ msgstr ""
 #: aleksis/core/templates/core/announcement/list.html:36
 #: aleksis/core/templates/core/group/full.html:24
 #: aleksis/core/templates/core/person/full.html:26
-#: aleksis/core/templates/core/person/full.html:98
+#: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
@@ -1188,7 +1228,7 @@ msgstr ""
 #: aleksis/core/templates/core/group/full.html:31
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/core/person/full.html:33
-#: aleksis/core/templates/core/person/full.html:105
+#: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
 msgstr ""
@@ -1235,6 +1275,10 @@ msgid ""
 "          "
 msgstr ""
 
+#: aleksis/core/templates/500.html:21
+msgid "Retry"
+msgstr ""
+
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
@@ -1493,19 +1537,15 @@ msgstr ""
 msgid "There are no announcements."
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:78
-msgid "Logged in as"
-msgstr ""
-
-#: aleksis/core/templates/core/base.html:179
+#: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:187
+#: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
 msgstr ""
 
-#: aleksis/core/templates/core/base.html:195
+#: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
 msgstr ""
 
@@ -1726,7 +1766,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:38
 #: aleksis/core/templates/core/person/full.html:40
-#: aleksis/core/templates/core/person/full.html:112
+#: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
@@ -1916,83 +1956,83 @@ msgstr ""
 msgid "System checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:21
+#: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:23
+#: aleksis/core/templates/core/pages/system_status.html:24
 msgid ""
 "\n"
 "                Only admin and visitors from internal IPs can access thesite.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:34
+#: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:35
+#: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:45
+#: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:47
+#: aleksis/core/templates/core/pages/system_status.html:49
 msgid ""
 "\n"
 "                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:54
+#: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:56
+#: aleksis/core/templates/core/pages/system_status.html:58
 msgid ""
 "\n"
 "                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:69
+#: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:75
+#: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:76
-#: aleksis/core/templates/core/pages/system_status.html:115
+#: aleksis/core/templates/core/pages/system_status.html:78
+#: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:77
+#: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:96
+#: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:107
+#: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:112
+#: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:113
+#: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
 msgstr ""
 
-#: aleksis/core/templates/core/pages/system_status.html:114
+#: aleksis/core/templates/core/pages/system_status.html:118
 msgid "Date done"
 msgstr ""
 
@@ -2033,6 +2073,18 @@ msgid ""
 "            "
 msgstr ""
 
+#: aleksis/core/templates/core/partials/avatar_content.html:14
+#: aleksis/core/templates/core/partials/avatar_content.html:15
+#: aleksis/core/templates/core/person/full.html:213
+#: aleksis/core/templates/core/person/full.html:214
+msgid "Avatar"
+msgstr ""
+
+#: aleksis/core/templates/core/partials/avatar_content.html:19
+#: aleksis/core/templates/core/partials/avatar_content.html:20
+msgid "Identicon"
+msgstr ""
+
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
 msgstr ""
@@ -2123,24 +2175,24 @@ msgid "Edit person"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:47
-#: aleksis/core/templates/core/person/full.html:119
+#: aleksis/core/templates/core/person/full.html:107
 msgid "Impersonate"
 msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:54
-#: aleksis/core/templates/core/person/full.html:126
+#: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:133
+#: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:224
+#: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
 msgstr ""
 
-#: aleksis/core/templates/core/person/full.html:232
+#: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
 msgstr ""
 
@@ -2345,13 +2397,11 @@ msgstr ""
 msgid "Network error"
 msgstr ""
 
-#: aleksis/core/templates/offline.html:8
-msgid ""
-"No internet\n"
-"    connection."
+#: aleksis/core/templates/offline.html:10
+msgid "No internet connection."
 msgstr ""
 
-#: aleksis/core/templates/offline.html:12
+#: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
 "      There was an error accessing this page. You probably don't have an internet connection. Check to see if your WiFi\n"
@@ -2595,7 +2645,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
-#: aleksis/core/templates/two_factor/profile/profile.html:87
+#: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
 msgstr ""
 
@@ -2699,15 +2749,15 @@ msgstr ""
 msgid "Or, alternatively, use one of your backup phones:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:121
+#: aleksis/core/templates/two_factor/core/login.html:122
 msgid "As a last resort, you can use a backup token:"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:124
+#: aleksis/core/templates/two_factor/core/login.html:125
 msgid "Use Backup Token"
 msgstr ""
 
-#: aleksis/core/templates/two_factor/core/login.html:135
+#: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
 msgstr ""
 
@@ -2944,11 +2994,11 @@ msgid ""
 "      "
 msgstr ""
 
-#: aleksis/core/util/notifications.py:63
+#: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
 msgstr ""
 
-#: aleksis/core/util/notifications.py:64
+#: aleksis/core/util/notifications.py:65
 msgid "SMS"
 msgstr ""
 
@@ -2972,156 +3022,156 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
+#: aleksis/core/views.py:289
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:297
+#: aleksis/core/views.py:301
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:417
+#: aleksis/core/views.py:421
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:436 aleksis/core/views.py:446
+#: aleksis/core/views.py:440 aleksis/core/views.py:450
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:496
+#: aleksis/core/views.py:500
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:593
+#: aleksis/core/views.py:597
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:609
+#: aleksis/core/views.py:613
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:677
+#: aleksis/core/views.py:681
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:696
+#: aleksis/core/views.py:700
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:720
+#: aleksis/core/views.py:724
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:734
+#: aleksis/core/views.py:738
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:766
+#: aleksis/core/views.py:770
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:800
+#: aleksis/core/views.py:804
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:825
+#: aleksis/core/views.py:829
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:855
+#: aleksis/core/views.py:859
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:892
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:893
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:894
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:895
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:907
+#: aleksis/core/views.py:911
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:917
+#: aleksis/core/views.py:921
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:949
+#: aleksis/core/views.py:953
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:979
+#: aleksis/core/views.py:983
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:989
+#: aleksis/core/views.py:993
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1060
+#: aleksis/core/views.py:1064
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1062
+#: aleksis/core/views.py:1066
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1138
+#: aleksis/core/views.py:1142
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1229
+#: aleksis/core/views.py:1233
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1239
+#: aleksis/core/views.py:1243
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1249
+#: aleksis/core/views.py:1253
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1259
+#: aleksis/core/views.py:1263
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1269
+#: aleksis/core/views.py:1273
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1337
+#: aleksis/core/views.py:1341
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
+#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1388
+#: aleksis/core/views.py:1406
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1395
+#: aleksis/core/views.py:1413
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1466
+#: aleksis/core/views.py:1484
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1477
+#: aleksis/core/views.py:1495
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
index dfec73c5c..f3df4c3fc 100644
--- a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-02-08 23:16+0000\n"
+"POT-Creation-Date: 2022-03-23 11:20+0100\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"
@@ -29,6 +29,6 @@ msgstr ""
 msgid "OK"
 msgstr ""
 
-#: aleksis/core/static/js/main.js:191
+#: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
 msgstr ""
-- 
GitLab